infra:NET Expert
 
×
7 Programmidee
Megasapplikation entstehen durch das Hinterlegen von Steueranweisungen in den Dialogen eines CGW’s. Das Tor zur Welt ist der APPLFRAME genannte Dialog, dessen sibdef-Einträge im CreateCallback, die beteiligten Daten (Tabellen) sowie Ausprägungen für den Zugriff definieren. Der applicationframe ist ein vor dem Anwender verstecktes Fenster, das auch als grafischer parent dient, mit der angenehmen Folge, dass das Grundbild Folgebilder verdecken darf.
Jeder lauffähige APPLFRAME hat mindestens zwei Sektionen in seinen SibDefs: MegGeneral und MegRoot. MegGeneral beschreibt die allgemeinen Eigenschaften, wie z.B. zugelassene Applikationsmodi (Erfassen, Ändern, Anzeigen ...), Berechtigung zum Löschen, die Reihenfolge eventueller Folgebilder oder eine applikationsbezogene Sonderbehandlung. MegRoot beschreibt das roottable (Leitdatei dieser Megasapplikation), dazu gehören Angaben wie z.B. der Dateiindex des roottables, der Pfad über den auf die Sätze zugegriffen wird usw. Die Angaben, die in den Sektionen der beteffenden sibdefs möglich sind, sind in der Anwender.hlp ausführlich beschrieben.
Ebenfalls möglich ist die Angabe von sogenannten lookuptables. Dies sind Dateien, die weitere Informationen zu einem Feld, bzw. einer Kombination von Feldern, bieten[1]. Der Witz bei der Sache ist, dass ein lookuptable roottable eines anderen lookuptable sein kann. Zugriff, Update, Insert und Delete, sowie eine Menge weiterer datensatzbezogener Funktionen sind deshalb rekursiv implementiert.
Jede megasspezifische Sektion eines sibdefs hat auch eine zugehörige Datenstruktur. Die Angaben in der Sektion MegGeneral speichert Megas in einer Variablen vom Typ MEGGENERAL, root- und lookupbezogene Angaben landen in Variablen des Typs MEGTABLE, Texte in solchen vom Typ MEGTEXT usw.
Solche Variablen sind in Megas Freispeicherobjekte, werden also mit malloc oder new angelegt. Der applicationframe wird mit Hilfe der Funktion GuiSetFrameData() als Pfarrer mit einer im Freispeicher angelegten Struktur MEGAPPL verheiratet. Anders als im wahren Leben lassen sich die beiden niemals scheiden und gehen erst beim Beenden der Applikation Hand in Hand ins Nirwana.
MEGAPPL ist die Basis einer Megasapplikation und praktisch jeder Callback ermittelt als erstes den applicationhandle seines GwCore Objektes, fragt danach den ersten frame zu diesem handle und anschließend den Zeiger auf dessen private Daten ab. Letztere zeigt dann auf eine Struktur vom Typ MEGAPPL und damit hat man den Zugriff auf alle Daten, die Megas benötigt. Für die in Megas implementierten Callbacks stellt die Struktur MEGAPPL die Basis dar, für die Funktionsaufrufe ist im Allgemeinen der Zeiger auf die MEGGENERAL Struktur die Basis.