infra:NET Expert
 
×
05.04.3   Automatische Register (PDV121, AUF435, FST531, FST565, EKA731, ...)
Erkennungsmerkmale
Der hier beschriebene Typ von Registerdialogen ist an folgenden Merkmalen zu identifizieren:
  • Im Screen-Verzeichnis befindet sich eine Standard-SDF-Datei zum CGW mit [GuiFramePatch]-Sektionen
  • Es existiert ein zusätzliches "...R.CGW" (z.B. AUF435R.CGW) im Screen-Verzeichnis.
Verwendete Technik
Bei dieser Technik bleiben die ursprünglichen (Nicht-Register-)Dialoge erhalten, sie werden nur rein optisch auf bereits vorhandene leere Register geklebt. Somit erklärt sich auch, warum beim Einsatz einer IMA-Datei oder Anpassungen per SDF-Datei die am Bildschirm zu sehenden Register nicht angesprochen werden müssen bzw. dürfen, sondern die ursprünglichen Einzeldialoge.
Die leeren Register, in die die ursprünglichen Einzeldialoge geklebt werden, befinden sich dabei in den zusätzlichen "...R.CGWs". Welcher Dialog nun bei der Anzeige wohin geklebt werden soll, wird über die SDF-Einträge in den [GuiFramePatch] -Sektionen der zum CGW gehörigen Standard-SDF-Datei (z.B. AUF435.SDF) definiert. Eine ausführliche Darstellung der Abläufe ist bei der Beschreibung der Sektion [GuiFramePatch] zu finden.
Es ist zu beachten, dass beim Einkleben der ehemaligen Einzeldialoge ggf. einzelne Controls der ursprünglichen Dialoge ausgeblendet werden, z.B. überflüssige Schaltflächen zum Registerwechsel. Dafür verantwortlich sind "HideControl"-Angaben in der [GuiFramePatch]-Sektion der leeren Register aus dem jeweiligen "...R.CGW".
Die Reitertexte werden bei dieser Technik NICHT aus den Titelzeilen der ursprünglichen Einzeldialoge gebildet, sondern aus den Titeln der leeren Register der jeweiligen "...R.CGW".
Hinweis:
Ohne Programmänderung können über diese Technik Programme mit mehreren Dialogen, z.B. Listen mit zwei Selektionsdialogen, in "Registerprogramme" umgewandelt werden (siehe z.B. Programm 565 Werkstattpapiere mit Übergabe an Werkstattbestand).
Register anpassen (ReplaceCGW)
Bei dieser Technik werden die Replace-Angaben so verwendet, als gäbe es keine Registerdialoge, d.h. ein Dialog, der auf ein Register geklebt wird, kann genauso ersetzt werden wie vor der Einführung der Registerlayouts (bitte Ausnahme für EKA731 weiter unten beachten).
Um zum Beispiel in der Auftragsbearbeitung (435) den zweiten Kopfdialog im Modus Ändern zu ersetzen (DialogID AUF435_21, Register "Zusatz"), zu ersetzen, lautet die Replace-Angabe wie folgt:
[REPLACECGW]
AUF435,AUF435_21=IND435,AUF435_21
Um allerdings den Reitertext (hier "Zusatz") eines Registers zu ändern, muss der leere Registerdialog aus dem zugehörigen "...R.CGW", auf den der jeweilige Einzeldialog geklebt wird, durch einen neuen leeren Registerdialog mit geändertem Titel ersetzt werden:
[REPLACECGW]
AUF435R,AUF435_MAIN_3=IND435R,AUF435_MAIN_3
Dabei enthält die neue IND435R.CGW den Dialog AUF435_MAIN_3 mit geändertem Dialogtitel. Grundsätzlich muss bei der Erzeugung des geänderten Dialogs, hier AUF435_MAIN_3, genauso vorgegangen werden, wie bei allen anderen individuell angepassten infra-Dialogen:
Der Standard-Dialog AUF435_MAIN_3 ist zu kopieren und dann anzupassen. Denn auch wenn der Dialog leer erscheint, sind darin z.B. SibDef-Angaben enthalten, die unbedingt erhalten bleiben müssen.
Ausnahme EKA731
Durch die Einführung der Registertechnik werden die ursprünglichen Kombi-Dialoge (Kopf+Positionsbereich) von EKA731 ersetzt, da die Positionszeilen jetzt getrennt vom Kopfbereich auf einem eigenen Register liegen (siehe REPLACECGW-Einträge für EKA731_RB1, ..._RV1, ..._RZ1).
Die ersetzten Dialoge (EKA731R_RB1, EKA731R_RV1, EKA731R_RZ1 in EKA731R.CGW) beinhalten also nur noch den Kopfbereich. Diese Dialoge (ohne Positionsbereich) aus EKA731R.CGW müssen als Basis für individuelle Anpassungen im Kopfbereich verwendet werden.
Beispiel für einen Replace-Eintrag:
[REPLACECGW]
EKA731,EKA731_RB1=IND731R,EKA731R_RB1
Änderungen im Positionsbereich von EKA731, z.B. neue/geänderte Spalten, werden weiter unten unter "Einträge in SDF-Dateien" beschrieben.
Einträge in SDF-Dateien
Wie beim Einsatz von Replace-Angaben ist auch für SDF-Dateien genauso zu verfahren, als gäbe es keine Register. D.h. beim Einsatz von SDF-Dateien zur Anpassung vorhandener Dialogelemente wird als DialogID immer die ID des Dialogs verwendet, in dem sich das zu ändernde Dialogelement im CGW befindet. Über die infra-Systemübersicht (F5-Taste) lässt sich übrigens auch hier die korrekte DialogID einfach herausfinden.
Folgender SDF-Eintrag in der Datei AUF435.SDF fügt eine neue Spalte "Rest" für die noch zu liefernde Restmenge in den Positionszeilen der Kundenaufträge in AUF435 ein:
[AUF435_R435_1#AUF435_R435_1_LB#MimScrLayout AUF435_30]
73=23,DDp(23,23),DDf(23,23),Rest
77=
88=
86=23,DDp(23,33),DDf(23,33),ME
90=47,DDp(47,23),DDf(47,23),Preis
103=23,DDp(23,32),DDf(23,32),Termin
Man beachte bei diesem Beispiel, dass die im SibDef-Eintrag des Controls AUF435_R435_1_LB enthaltenen Spaltenpositionen 77 und 88 mit einem leeren Eintrag gelöscht/überschrieben werden müssen, um Platz für die neue Spalte zu schaffen.
Ausnahme EKA731
Durch die zuvor beschriebene Trennung von Kopf- und Positionsbereich befinden sich die Register-Dialoge mit den Definitionen der Positionsbereiche jetzt ebenfalls im EKA731R.CGW:
EKA731_MAIN_B_1 = Positionsbereich Bestellung
EKA731_MAIN_V_1 = Positionsbereich Vertrag
EKA731_MAIN_Z_1 = Positionsbereich Rücklieferung
Um im Positionsbereich die Beschreibung der Spalten zu ändern, muss die SDF-Datei für EKA731R.CGW (R-CGW) erstellt werden.
Beispiel für eine individuelle SDF-Datei (EKA731R.SDF) zur Änderung des Spaltentitels "Teilenummer" in "Artikel":
[EKA731_MAIN_B#EKA731_RB1_LB#MimScrLayout EKA731_110]
28=107,DDp(107,8),DDf(107,8),Artikel
Tipps zur IMA-Programmierung mit Register
Bei der IMA-Programmierung gilt grundsätzlich die zuvor beschriebene Vorgehensweise für diesen Registertyp. Die IMA wird so erstellt, als wären keine Register vorhanden!
Um mit Hilfe einer IMA-Datei einen Registerwechsel in derartigen Programmen durchzuführen, müssen in der IMA die Bedienungsfolgen nachempfunden werden (i.d.R. Bedienung von Schaltflächen), die das Programm zum Anzeigen des Dialogs bewegen, der auf dem gewünschten Register eingeklebt wird. IMAs, die vor der Einführung der Registertechnik für die betroffenen Programme bereits funktioniert haben, funktionieren somit vom Prinzip her auch weiterhin.
Eine Schwierigkeit bei der Umsetzung der Bedienungsfolgen ist allerdings, dass einige der Schaltflächen, die zum Beenden oder Wechseln eines Dialoges notwendig sind, durch die oben beschriebene Technik „versteckt“ werden und somit aus einer IMA-Datei nicht mehr (direkt) bedient werden können.
Daher empfiehlt es sich grundsätzlich bei der Bedienung von Schaltflächen und Menüeinträgen die infra-Prozedur "CBgMimTriggerMimAction" einzusetzen, statt eine zu bedienende Schaltfläche zu ermitteln und per "activate_control(...)" zu betätigen.
Wie die Funktion von Schaltflächen und Menüeinträgen über die infra-Prozedur "CBgMimTriggerMimAction" simuliert werden kann, ist ausführlich im Kapitel 15.02 infra-Prozeduren (Callbacks) beschrieben.
Die folgende IMA-Datei öffnet im Auftragsbearbeitungsprogramm (435) den Auftrag "2004", wechselt auf das Register "Auftragsdaten", wartet dort 5 Sekunden und wechselt dann auf das Register "Zusatz":
GwCore dialog = NULL;
// Variable für Zeiger auf Dialog
GwCore feld = NULL;
// Variable für Zeiger auf Feld
dialog = infra_wait_frame("AUF435","AUF435_2",5,1);
// Auftragskopf-Dialog finden
if ( !dialog )
// wenn nicht gefunden,…
    return 0;
// IMA beenden
 
 
feld = infra_wait_child(dialog,"AUF435","AUF435_2_F1",5,1);
// Feld «Auftragsnummer»
if ( !feld )
// wenn nicht gefunden,…
    return 0;
// IMA beenden
 
 
infra_set_text(feld,"2004");
// Auftragsnummer "2004”
 
 
execute_callback(dialog,"CBgMimTriggerMimAction","F.109");
// Funktionscode für "alte"
 
// OK-Schaltfläche zum Wechsel auf
 
// Auftragsdatendialog an Progr. senden
wait(5);
// 5 Sekunden Pause
 
 
execute_callback(dialog,"CBgMimTriggerMimAction","F.51");
// Funktionscode für "alte" >-Schaltfläche
 
// zum Wechsel auf 2.Kopfdatendialog
 
// an Programm senden