15.04 Beispiele für infra-Prozeduren und Makros in Dialogelementen
Beispiel 1:
Anwahl von Programm 113 und gleichzeitiger Start von 111
Eintrag in Sektion [GuiDialog] des Dialogs PDV113_1:
CBCreate=CBsExecModProc,111 oder
CBShow=CBsExecModProc,111
Dadurch wird beim Start von "113 Teilestamm vollständig nach Teil" auch das Programm 111 Teilestamm bearbeiten" gestartet. Mit Beendigung von 113 wird auch 111 beendet.
Beispiel 2:
Start der Ausgabe im Programm 123 und Ausgabe der Konstruktionszeichnung über Viewer
Eintrag in Sektion [GuiCBControl] der Schaltfläche [ Ok ] im Dialog PDV123_1:
CBActivate=CBgLaunchProcess,"AVIEW.EXE G:\INFRA\GRAFIK\PICTURE\WIN32\AVIEW.EXE TRIM(LBUF(255,11,DDl(6,3)))"
Dadurch wird beim Bestätigen von [ Ok ] in "123 Baukastenstückliste nach Struktur" das Programm AVIEW aufgerufen. Als Parameter wird die eingegebene Teilenummer aus dem Selektionsdialog übergeben. Analog könnte zum Beispiel auch die Zeichnungsnummer als Dateiname übergeben werden.
Außer dem Activate-Ereignis können auch folgende weitere Ereignisse benutzt werden: CBFocusIn, CBEnter, CBCreate (besser CBShow), SBShow und CBHelp (aber nur bei F1-Taste).
Beispiel 3:
Anwahl von Programm 411 und Start von Batch-File, Winword, Mailversand, Homepage
Da in Stammdatenverwaltungsprogrammen viele Ereignisse schon durch den Standard belegt sind, zum Beispiel CBCreate und CBShow für den Dialog, kann man hier über andere Controls zum gewünschten Ergebnis kommen.
Im Beispiel werden die Hauptcontainer (Bereiche) der ersten 4 Dialoge in 411 benutzt (mit <RECHTER MAUS - FUNKTIONEN> auf eine nicht durch andere Controls belegte Stelle erreichbar). Denkbar wäre auch die Nutzung des Create-Ereignisses bei anderen Controls, zum Beispiel im ersten Dialog bei beliebigen Eingabefeldern.
Beim Container im 1. Dialog unter CBCreate als weiteres SibDef-Element eintragen:
[GuiControl]
CBCreate=CBgLaunchProcess,"demo.bat"
Container 2. Dialog
[GuiCBControl]
CBCreate=CBgLaunchProcess,"C:\PROGRAMME\MICROSOFT OFFICE\OFFICE\WINWORD.EXE"
Container 3. Dialog
[GuiCBControl]
CBCreate=CBgShowURL,www.infragmbh.de
Container 4. Dialog
[GuiCBControl]
CBCreate=CBgDo,SendMail[info@infragmbh.de,,"Herzlichen Glückwunsch!","AllesGute!")
Beispiel 4:
Start einer infra-Ablaufsteuerdatei (IMA-Datei) bei Betätigung der Schaltfläche [ Ok ]
Eintrag in Sektion [GuiCBControl] der Schaltfläche [ Ok ]:
CBActivate=CBpProcessMakroFile,G:\INFRA\GRAFIK\IMA\PDV128.IMA
Beispiel 5:
Start eines Programms bei Betätigung der Schaltfläche [ Ok ], falls das CBActivate-Ereignis schon belegt ist, am Beispiel Online-Replikation
Im Dialog DBM_AP der Datei SIBT31.CGW ist für die Schaltfläche [ DB-Export ] das Activate-Ereignis in Sektion [GuiCBControl] bereits mit CBActivate=CBdbmExpDB belegt. Durch die Änderung in:
CBActivate=interpreter,"{execute_callback(this,"CBdbmExpDB",""); execute_callback(this,"CBLaunchProcess","notepad.exe");}"
wird jedes Mal der Editor "Notepad" aufgerufen, sobald man den Export startet. Die verwendete Interpreter-Erweiterung "execute_callback" ist in Kapitel 16.01 Makrogesteuerte Abläufe beschrieben.
Beispiel 6:
Reagieren auf eine Eingabe in einem Stammdatenprogramm
Eintrag in Sektion [GuiCBControl] des Feldes "Nettogewicht" in Dialog PDV111_3 (SDF-Datei):
[PDV111_1#PDV111_3_24#GuiCBControl]
CBBufferChanged=CBpProcessMakroFile,INI(PATH,IMA)\gewicht.ima
Dadurch wird bei einer Eingabe im Feld "Nettogewicht" im Register "Fertigung" des Programms 111 Teilestamm bearbeiten" eine eigene IMA-Datei Namens GEWICHT.IMA gestartet.
Die IMA-Datei könnte zum Beispiel folgenden Inhalt haben:
// Variablen definieren
GwCore dialog = NULL;
GwCore obj = NULL;
float fGewicht = 0.0;
string strGewichtBrutto;
// Netto-Gewicht in Variable 'fGewicht' schreiben
fGewicht = atof(do_infra_macro(this,"LBUF(6,DDp(6,24),DDl(6,24))"));
// 220g addieren
fGewicht = fGewicht + 0.22;
// Ergebnis formatieren
strGewichtBrutto = do_infra_macro(this,"ScreenFormat(AsString("+fGewicht+"),DDf(6,92))");
// Dialog suchen
dialog = infra_wait_frame("PDV111","PDV111_1",10,1);
if ( !dialog )
return 1;
// Feld Brutto-Gewicht suchen
obj = infra_find_child(dialog,"PDV111","PDV111_3_92");
// Wert schreiben
infra_set_text(obj,strGewichtBrutto);
// Wichtig: MEGAS informieren!
execute_callback(this,"CBpMegField","");
Hier wird einfach zum Inhalt des Feldes "Nettogewicht" etwas addiert und anschließend in das Feld "Bruttogewicht" geschrieben. Es ist dabei zu beachten, dass am Ende der IMA-Aktionen die ursprünglich für das CBBufferChanged-Ereignis hinterlegte Standardaktion "CBpMegField" ausgelöst wird (Hintergrund siehe Kapitel 16.01 Makrogesteuerte Abläufe, Absatz "Besonderheiten bei Verwendung von Ereignissen für IMA-Abläufe").
Hinweise, Einschränkungen
-
Die Ereignisse CBFocusOut und CBDestroy dürfen nicht benutzt werden.
-
Das Starten von "alten" Programmen wie zum Beispiel PDV113 aus Stammdatenverwaltungsprogrammen führt dazu, dass mit dem Stammdatenprogramm erst weitergearbeitet werden kann, wenn das aufgerufene Programm beendet wurde.
-
Die Benutzung von SDF-Dateien für den ereignisabhängigen Aufruf von infra-Prozeduren ist nur eingeschränkt möglich.
-
Das EActivate-Ereignis für alle Standard-Schaltflächen kann derzeit nicht erweitert werden, da diese Schaltflächen erst zur Laufzeit aus einer Vorlage (aus SYSTEMPL.CGW) generiert werden.
-
Das Ereignis CBShow innerhalb der Stammdatenverwaltungsprogramme tritt bei jedem Registerwechsel auf.
-
Falls man möchte, dass erst das Show-Ereignis abgearbeitet wird, also zum Beispiel ein Dialog komplett sichtbar wird, bevor die Zusatzaktion ausgeführt werden soll, kann man den Eintrag CBShow=interpreter,"{execute_callback(this,"...");}" wie im Beispiel 5 benutzen.Dies führt nämlich dazu, dass die Zusatzaktion nicht direkt ausgeführt wird, sondern erst nach dem Show-Ereignis abgearbeitet wird.