[Gelöst] Parameterübergabe an Forms

14. März 2007 11:15

Hallo,

gibt es eine Möglichkeit mit Hilfe eines Buttons Parameter (z.B. die Werte von Variablen) von einem Formular an ein anderes Formular zu übergeben? Da globale Variablen ja anscheinend nur innerhalb eines Objektes (z.B. eines Formulars) gültig sind geht es hierüber ja nicht. Aber wie dann?

Vielen Dank in Voraus!

BlueInTheSky
Zuletzt geändert von BlueInTheSky am 14. März 2007 13:08, insgesamt 1-mal geändert.

14. März 2007 11:19

Du schreibst in dein Quellformular eine Funktion nach dem Schema "GetWert", die dir den Inhalt der gesuchten Variable ausgibt. Diese Funktion rufst du im Zielformular auf.

14. März 2007 11:43

Natalie, das wird nicht gehen, es sei denn, das Quellformular wurde vom Zielformular geöffnet.
In der Regel ist es aber andersrum, von einem Formular rufst du ein anderes auf und willst dem auch Parameter übergeben.
Lösung
im Zielformular die Funktion Setwert(wert1, wert2, etc) erzeugen
darin
Zielwert1:=Wert1;
Zielwert2:=wert2; etc.

im Quellformular die Zielform als Variable definieren.
Dann mit Zielform.setwert(parameter1, parameter2 etc) die werte übergeben und die Form mit Zielform.run öffnen.

14. März 2007 11:46

Vielen Dank für Ihre Antwort!

Habe nun im Quellformular in C/AL-Globals eine Funktion definiert mit Parametern, die die gleichen DataTypes haben wie die Variablen aus denen ich lesen möchte und in die ich lesen möchte und diese Parameter dann in die Variablen schreibt, also in folgender Form:
Funktion(Parameter1 : Text 30]; Parameter2 : 'Option1,Option2';
Parameter3 : Boolean)
Variable1 := Parameter1;
Variable2 := Parameter2;
Variable3 := Parameter3;

Leider übergibt er die Werte nicht. Sehen Sie im Code einen Fehler?

14. März 2007 11:48

Sofern die eine Form die Andere aufruft, kannst du das über eine entsprechende Funktion in der aufzurufenden Form lösen.
Ist das nicht der Fall, so behelfe ich mir immer mit einer SingleInstance-Codeunit.

14. März 2007 11:53

Dann habe ich die Anforderung nur missverstanden.

Aber es kann nicht schaden, ein Beispiel für das zu geben, was ich meinte:

Es gibt auch Forms, die führen Berechnungen durch ohne dass sie explizit (sichtbar!) geöffnet werden und geben das Ergebnis der Berechnung zurück, siehe z.B. F511.

Diese Form benutze ich bei einer Kundenerweiterung zur Berechnung der Werte und rufe sie so auf:

Code:
ChangeExchangeRate.SetParameter("Currency Code","Currency Factor","Posting Date");
ChangeExchangeRate.InitForm;
EXIT(ChangeExchangeRate.GetParameter);


GetParameter liefert mir in diesem Fall einen Kurs zurück. Alle Funktionen sind Standard.

14. März 2007 12:29

Vielen Dank für die zahlreichen konstruktiven Antworten. Habe es nun auch hinbekommen :-)
Vielen Dank!

14. März 2007 12:35

Ich versuch mal den Lösungsweg von Michael noch etwas detailierter zu beschreiben.

Wir haben zwei Forms. Form1 ruft Form2 auf und will dabei drei Variablen übergeben.

Erstelle dazu eine Funktion in Form2 mit der Bezeichnung SetValues mit den drei Parameter. Im C/AL-Code dieser neuen Funktion müsste dann das stehen:
Code:
SetValues(Parameter1 : Text[30];Parameter2 : 'Option1,Option2';Parameter3 : Boolean)
Variable1 := Parameter1;
Variable2 := Parameter2;
Variable3 := Parameter3;

Variable1, Variable2 und Variable3 sind globale Variablen in Form2.

In Form1 im OnPush-Trigger des Buttons steht dann folgendes:

Code:
Form2.SetValues(Variable1, Variable2, Variable3);
Form2.RUN;


Form2 ist dagegen eine lokale Variable vom Typ Form.

Gruß, Marc

14. März 2007 12:35

BlueInTheSky hat geschrieben:Vielen Dank für die zahlreichen konstruktiven Antworten. Habe es nun auch hinbekommen :-)
Vielen Dank!
Mist, da bin ich mit meiner Antwort ein paar Minuten zu spät. :-)

Gruß, Marc

14. März 2007 13:06

Trotzdem vielen Dank, Marc. Ein kleiner Trost:
Habe es genauso gemacht, wie Du beschrieben hast und es hat funktioniert :-)