Form aus anderem Form öffnen und Daten übergeben

19. August 2009 15:29

Hallo Leute!

Ich hab ein Form, auf dem 3 Tabellen miteinander verknüft sind. Wird im obersten Grid eine Auswahl getroffen verändert sich das Grid darunter auf die entsprechenden Datensätze. Soweit ist es ja kein Problem. Nun möchte ich aber von diesem Forum aus ein weiteres Form öffnen, welches auch diese 3 Tabellen genauso verknüpft hat miteinander. Wenn ich nun das neue Form öffne sollte hier aber alle drei Grids auf dem selben Datensatz stehen wie im ursprungs Form.

Wie mach ich das am besten??

Danke!

Re: Form aus anderem Form öffnen und Daten übergeben

20. August 2009 14:07

Wenn du auf der "Basis" Form einen Menüpunkt hinzufügst (MenuButton) dann kannst du dort eine Datasource mitübergeben.
In dem aufgerufenen Fenster steht dann der aktuelle Record der Datasource vom Basisfenster in den Args ( basisdatensatz = element.args().record() )
Mit diesem kannst du dir dan deine Queries im neuen Fenster zuammenbasteln oder ein FindRecord oder sonstwas (Achtung: Find Record ist sehr sehr langsam)

Es sollte aber auch automatisch gehen sofern du eine Relation der Basistabelle auf sich selbst machst. Dann brauchst du nur im MenüButton die Basisdatasource mitgeben und AX baut sich die Queries selbst zusammen.

lg
Christian

Re: Form aus anderem Form öffnen und Daten übergeben

20. August 2009 19:51

Hi,

ich würde es fast so machen, wie es breites Christian vorgeschlagen hat. Allerdings nur fast :-)

Ich würde als erstes auf der "Basisform" 3 Methoden schreiben, die nichts anderes machen als den jeweils aktuellen Datensatz einer DataSource zurück gibt.
Z.B. parmDataSource1Record, parmDataSource2Record, parmDataSource3Record
Code:
Common parmDataSource1Record()
{
    ;   
    return DataSource1;
}


Die zweite Form würde ich auch (wie Christian bereits sagte), über ein MenuItem/MenuItemButton aufrufen (Hiermit ist gewährleistet, dass du den Caller in den Args übergeben bekommst).

Weiterhin würde ich bei der zweiten Form die init Methode überschreiben, sodass du Zugriff auf die "aufrufende" Form erhälst und die 3 Methoden ansprechen kannst, um dir die selektierten
Datensätze zu ermitteln.
Code:
callingForm = element.args().caller();
record1 = callingForm.parmDataSource1Record();
record2 = callingForm.parmDataSource2Record();
record3 = callingForm.parmDataSource3Record();


Somit hätten wir schon mal alles was zum "Filtern" auf der neuen Form benötigt wird.

Um nun die "richtigen" bzw. auf der Basis-Form selektierten Datensätze auch in der neuen Form zu selektieren kann man z.B. mit findRecord den jeweiligen Datensatz "wählen".
Code:
DataSource1.findRecord(record1);
DataSource2.findRecord(record2);
DataSource3.findRecord(record3);


Dies kannst du z.B. in der run Methode machen.