[gelöst] Page mit Rückgabewert?

21. Dezember 2016 10:03

Hallo,

ich möchte eine Funktion schreiben, die automatisch neue Lieferscheinzeilen auf Basis ausgewählter Strukturplanzeilen anlegt. Jetzt stehe ich vor folgendem Problem:
1) Wenn ich aus dem Lieferschein heraus die Funktion starte und eine Auswahl-Page für die Strukturplanzeilen öffne, weiß ich nicht, wie ich diese Selektion zurückbekomme um damit weiterzuarbeiten.
2) Wenn ich in der Auswahlpage einen "OK"-Button einfüge und von dort eine Funktion zum Anlegen der Lieferscheinzeilen aufrufe, fehlt mir die Info um welchen Lieferscheinkopf es sich handelt.

So ähnliche Probleme gibt es doch bestimmt auch wo anders. Kann mir jemand helfen?
Zuletzt geändert von UGo am 9. März 2017 14:24, insgesamt 1-mal geändert.

Re: Page mit Rückgabewert?

21. Dezember 2016 10:23

Viele Wege führen nach Rom:

Entweder:
Du legst auf der Page eine Funktion an um den Kopf mit zu übergeben und hast die benötigten Daten auf der Page
Code:
MeinePage.meineFunktion(KopfRec);
MeinePage.Run;


oder:
Du nutz die SET/GET Record funktionen der Page und holst dir den Record nach dem Schliessen der Page.
Code:
IF MeinePage.RUNMODAL = Action::Ok THEN BEGIN
  MeinePage.GETRECORD(PageRec);
  //mach was
END


Ich bevorzuge letzteres, dann kann "MeinePage" auch für andere Ausgangspunkte benutzt werden.
Aber egal für was du dich entscheidest... Tu dir den gefallen und schreib den Code nicht in die Page.

Gruß
Ted

Edit: Seh gerade geht um Nav2009 - Ob das da so funktioniert kann ich dir nicht versprechen :D

Re: Page mit Rückgabewert?

21. Dezember 2016 11:18

Wissen, wie es der Standard macht: auf Form 43 /Page 47 gibt es eine Funktion namens "Lieferzeilen abrufen". Dies öffnet eine Liste, in der du beliebige Datensätze markieren kannst. Die Auswahl wird dann zur Erstellung von Rechnungszeilen verwendet. Da einfach abucken. (Den Umweg über die zunächst aufgerufene Codeunit 64 musst du nicht gehen, aber in dieser Codeunit findest du den relevanten Code.)

Re: Page mit Rückgabewert?

21. Dezember 2016 11:55

Vielen Dank für Eure beiden Antworten.

Die von Ted beschriebene Variante mit SetRecord und GetRecord funktioniert zwar prinzipiell auch in Nav 2009, ich bekomme mit GetRecord aber nur einen Datensatz raus. Markiert der Anwender in der Page mehrere Datensätze, bekomme ich das nicht mit.

Nun versuche ich mich an der zweiten Variante, die offenbar auch im Standard so verwendet wird. Danke Natalie - genau so ein Beispiel hatte ich gesucht aber leider nicht alleine gefunden :-D

Re: Page mit Rückgabewert?

21. Dezember 2016 12:11

http://navisionary.net/dynamics-nav/how-to-select-more-than-1-record-on-lookup-form.php

vielleicht hilft dir das?

edit:
Hat mich nun auch interessiert, kannst folgendes mal Testen
Code:
CustomerList.LOOKUPMODE := TRUE;
IF CustomerList.RUNMODAL = Action::LookupOk THEN BEGIN
  CustomerList.SetSelection(Customer);
  MESSAGE(FORMAT(Customer.count));
END;

Count gibt mir die Anzahl der markierten Datensaetze zurueck

Re: Page mit Rückgabewert?

9. März 2017 14:23

Habe mir die CU 64 angeschaut und dort abgekupfert. Es funktioniert prima!