4D v16.3

Interaktion zwischen Komponenten und Host Datenbanken

Home

 
4D v16.3
Interaktion zwischen Komponenten und Host Datenbanken

Interaktion zwischen Komponenten und Host Datenbanken  


 

Ist eine Komponente in einer Host Datenbank installiert, erscheint ihr Name im Explorer der Host Datenbank auf der Seite Methoden im Bereich Komponent-Methoden. Zur Mitbenutzung freigegebene Projektmethoden sind als hierarchische Listen aufgeführt.
Bei interpretierter Komponente erscheint der Inhalt der Methode in der Vorschau.

Weitere Informationen dazu finden Sie im Abschnitt Projektmethoden gemeinsam nutzen.

Komponenten haben ihren eindeutigen Namensbereich, d.h. in einer Komponente definierte Objekte sind namentlich in anderen Komponenten oder in der Host Datenbank nicht bekannt. So werden Namenskonflikte vermieden. Sie werden partitioniert genannt. So sind z.B. Variablen partitioniert, d.h. die von einer Komponente erstellte und verwendete Variable <>Meinevar vom Typ Lange Ganzzahl kann gleichzeitig existieren mit einer Variablen <>Meinevar vom Typ Text, die von einer Host Datenbank oder einer anderen Komponente erstellt und eingesetzt wird. 

Andere Objekte teilen sich denselben Namensraum zwischen Host Datenbank und Komponenten. Solche Objekte müssen mit größerer Sorgfalt verwendet werden, sie ermöglichen jedoch der Host Datenbank und den Komponenten, miteinander zu kommunizieren. Diese Objekte werden mit „gemeinsam genutzt“ oder „nicht-partitioniert“ genannt.
Beispielsweise werden Mengen gemeinsam genutzt, d.h. erstellt eine Komponente die Menge MeineMenge, wird sie gelöscht, wenn die Host Datenbank folgende Anweisung ausführt:

 CLEAR SET(mySet)

Folgende Objekte werden von Komponenten und der Host-Datenbank nicht gemeinsam genutzt (partitioniert):

  • Stilvorlagen
  • Hilfe Tipps
  • Auswahllisten
  • Über den Menüeditor erstellte Menüs und Menüleisten
  • Projektmethoden ohne die Eigenschaft “Von Komponenten und Host Datenbank gemeinsam genutzt”
  • Semaphoren
  • Prozesse
  • Variablen (lokal, Prozess und Interprozess)
  • Systemvariablen (OK, Document, etc.)
  • Tabellenformulare
  • Projektformulare ohne die Eigenschaft "Als Unterformular veröffentlichen"
  • Ressourcen und Referenzen zum Öffnen von Ressource Dateien

Folgende Objekte werden von Komponenten und der Host-Datenbank gemeinsam genutzt (nicht-partitioniert):

  • Mengen
  • Temporäre Auswahlen
  • Hierarchische Listen, die eine Referenz verwenden (erstellt mit den 4D Funktionen New list, Load list, Copy list oder BLOB to list)
  • Menüs und Menüleisten mit Kennummer, die von der Funktion Create menu zurückgegeben wird
  • Projektmethoden mit der Eigenschaft “Von Komponenten und Host Datenbank gemeinsam genutzt”
  • Fensterreferenzen (WinRef)
  • Projektformulare mit der Eigenschaft “Als Unterformular für die Host-Anwendung veröffentlichen”
  • Referenzen auf die XML Struktur
  • Referenzen auf offene Dateien (ausgenommen Resource Dateien)
  • Zeiger

Hinweis: Die Host Datenbank ignoriert nicht-verwendbare Objekte aus der Matrix Datenbank. Weitere Informationen dazu finden Sie im Abschnitt Verwendbare und nicht-verwendbare Objekte.

Per Definition werden alle Projektmethoden in die Komponente integriert (die Datenbank ist die Komponente), d.h. die Komponente kann sie aufrufen und ausführen. 

Andererseits sind diese Projektmethoden standardmäßig nicht sichtbar und lassen sich in der Host Datenbank auch nicht aufrufen. In der Matrix Datenbank müssen Sie die Methoden, die Sie mit der Host Datenbank teilen wollen, explizit freigeben. Diese Projektmethoden sind dann im Explorer auf der Seite Methoden sichtbar und lassen sich im Code der Host Datenbank aufrufen. Sie lassen sich jedoch im Methodeneditor der Host Datenbank nicht verändern. Diese Methoden sind die Schnittstelle zum Aufrufen der Komponente. 

Aus Sicherheitsgründen kann die Komponente dagegen standardmäßig keine Projektmethoden ausführen, die zur Host Datenbank gehören. In manchen Fällen müssen Sie jedoch zulassen, dass eine Komponente auf die Projektmethoden Ihrer Host Datenbank zugreifen kann.
Dazu müssen Sie die Projektmethode explizit der Host Datenbank zuweisen, die Sie für die Komponente zugänglich machen wollen. 

Diese Konfiguration wird im Dialogfenster Methodeneigenschaften über die Eigenschaft Gemeinsam von Komponenten und Host Datenbank benutzt festgelegt:

Sie können diese Eigenschaft auch auf mehrere Methoden gleichzeitig anwenden. Rufen Sie dazu im Kontextmenü des Explorers den Eintrag „Methodenauswahl-Eigenschaften“ auf (siehe Methodeneigenschaften als Gruppe bearbeiten).

Die Auswirkung dieser Option richtet sich nach der Verwendung der Datenbank: Wird sie als Komponente verwendet, ist die Methode in der Host Datenbank zugänglich und im Explorer sichtbar. Bei einer Host Datenbank ist die Methode für die Komponenten aufrufbar.

Sie können die Formulare der Matrix Datenbank gemeinsam nutzen und als Unterformulare in der Host Datenbank verwenden.

Auf der Seite der Komponenten (Matrix-Anwendung) lassen sich nur Projekt Unterformulare veröffentlichen. 

Damit ein Komponentenformular als Unterformular in einer Host-Anwendung ausgewählt wird, muss es explizit als "veröffentlichtes Formular" deklariert sein. Wählen Sie dazu im Fenster Formulareigenschaften die Option Als Unterformular für die Host-Anwendung veröffentlichen:

Hinweis: Sie erhalten dieses Dialogfenster über den Befehl Formulareigenschaften des Kontextmenüs des Formulars oder im Explorer über das Menü Optionen am unteren Rand (siehe Formulareigenschaften (Explorer)). 

Sie müssen die Interaktionen zwischen Unterformular und Elternformular der Host Datenbank mit den Operationen und Werkzeugen verwalten, wie im Abschnitt Unterformulare als Seite beschrieben.

Auf der Seite der Host Datenbank müssen Unterformulare aus Komponenten zwingend im Seitenmodus verwendet werden. Deaktivieren Sie dazu im Formulareditor, wenn das Unterformular im Elternformular ausgewählt ist, in der Eigenschaftenliste unter der Gruppe "Unterformular" die Option Ausgabeformular

Wählen Sie im DropDown-Menü "Quelle" die Option <Keine>. Jetzt erscheinen die von Komponenten veröffentlichten Formulare im DropDown-Menü Eingabeformular. Der Name der Komponente wird in Klammern an den Formularnamen angehängt. In dieser Liste können Sie einfach das Formular auswählen, das in der Liste Eingabeformular verwendet werden soll.

Im Formular wird dann sofort eine neue Instanz des gewählten Objekts erstellt.

Lokale, Prozess- und Interprozess Variablen werden nicht von Komponenten und Host Datenbanken gemeinsam genutzt, da sie nur im jeweiligen Namensraum existieren. Die einzige Möglichkeit, aus der Host Datenbank auf Variablen von Komponenten zuzugreifen und umgekehrt, sind Zeiger. 

Beispiel mit Array:

  • In der Host Datenbank:
     ARRAY INTEGER(MyArray;10)
     AMethod(->MyArray)
  • In der Komponente enthält die Projektmethode AMethod folgendes:
     APPEND TO ARRAY($1->;2)

Beispiele mit Variablen:

 C_TEXT(myvariable)
 component_method1(->myvariable)
 C_POINTER($p)
 $p:=component_method2(...)

Über Zeiger können Komponenten und Host Datenbank miteinander kommunizieren. Dabei müssen Sie folgendes berücksichtigen:

  • Die 4D Funktion Get pointer gibt keinen Zeiger auf eine Variable der Host Datenbank zurück, wenn sie von einer Komponenten aus aufgerufen wird und umgekehrt.
  • Die Architektur für Komponenten lässt zu, dass dieselbe interpretierte Datenbank sowohl interpretierte als auch kompilierte Komponenten enthalten kann. In einer kompilierten Datenbank können dagegen nur kompilierte Komponenten verwendet werden.Für diesen Fall gilt folgende Regelung für Zeiger: Der Interpreter kann einen im kompilierten Modus erstellten Zeiger auflösen. Er kann jedoch im kompilierten Modus keinen Zeiger auflösen, der im interpretierten Modus erstellt wurde. Zeiger auf lokale Variablen können nicht verwendet werden.
    Dieses Prinzip wollen wir an folgendem Beispiel erläutern: Wir gehen von den beiden Komponenten C (kompiliert) und I (interpretiert) aus, die in derselben Host Datenbank installiert sind.
    • Definiert Komponente C die Variable myCvar,  kann Komponente I über den Zeiger ->myCvar auf diese Variable zugreifen.
    • Definiert Komponente I die Variable myIvar variable, kann Komponente C über den Zeiger ->myIvar nicht auf diese Variable zugreifen. Diese Syntax verursacht einen Ausführungsfehler.
  • Wir raten davon ab, Zeiger bei Komponenten über den 4D Befehl RESOLVE POINTER miteinander zu vergleichen, da durch die Partitionierung von Variablen gleichnamige Variablen nebeneinander existieren können, die jedoch in einer Komponente ganz anderen Inhalt haben können als in der Host Datenbank bzw. einer anderen Komponenten. Auch der Variablentyp kann in beiden Kontexten unterschiedlich sein.
    Zeigen z.B. myptr1 und myptr2 jeweils auf eine Variable, kann der folgende Vergleich ein inkorrektes Ergebnis zurückgeben:
     RESOLVE POINTER(myptr1;vVarName1;vtablenum1;vfieldnum1)
     RESOLVE POINTER(myptr2;vVarName2;vtablenum2;vfieldnum2)
     If(vVarName1=vVarName2)
      //Dieser Test gibt Wahr zurück, auch wenn die Variablen unterschiedlich sind.

    In diesem Fall müssen Sie die Zeiger miteinander vergleichen:
     If(myptr1=myptr2) // Dieser Test gibt Falsch zurück

Auch wenn Komponenten keine Tabellen verwenden können, lassen sich trotzdem folgende 4D Routinen aufrufen:

DEFAULT TABLE
NO DEFAULT TABLE
Current default table

Diese Befehle sind in der Regel hilfreich, wenn eine Komponente Tabellen in der Host Datenbank verwenden muss. In diesem Fall sorgen Zeiger dafür, dass die Host Datenbank und Komponenten miteinander kommunizieren können:

 C_LONGINT($1//Nummer der Tabelle in Host Datenbank
 $tablepointer:=Table($1)
 DEFAULT TABLE($tablepointer->)
 CREATE RECORD //Verwende die Standardtabelle der Host Datenbank
 $fieldpointer:=Field($1;1)
 $fieldpointer->:="Wert"
 SAVE RECORD

Eine Komponente kann jede Routine der 4D Programmiersprache verwenden, außer sie gehören zur Liste der nicht erlaubten Befehle. Weitere Informationen dazu finden Sie im Abschnitt Nicht verwendbare Befehle

Von einer Komponente aufgerufene Befehle laufen im Kontext dieser Komponente, außer für den 4D Befehl EXECUTE METHOD. Dieser verwendet den Kontext der durch den Befehl angegebenen Methode. Eine Komponente kann auch die Lesebefehle des Kapitels “Benutzer und Gruppen” verwenden. Die Befehle lesen jedoch die Benutzer und Gruppen der Host Datenbank, da eine Komponente keine eigenen Benutzer und Gruppen hat. 

Die 4D Routinen SET DATABASE PARAMETER und Get database parameter bilden hier eine Ausnahme. Sie gelten global für die Datenbank. Ruft eine Komponente diese Befehle auf, werden sie auf die Host Datenbank angewendet. 

Darüberhinaus wurden spezifische Maßnahmen für die 4D Funktionen Structure file und Get 4D folder definiert, wenn sie im Rahmen von Komponenten verwendet werden (siehe Handbuch 4D Programmiersprache).

Der 4D Befehl COMPONENT LIST ruft die Liste der Komponenten auf, die von der Host Datenbank geladen wurden.

Arbeiten Sie mit nicht-kompilierten Komponenten, erscheint ihr Code im Debugger der Host Datenbank. 

Der Debugger berücksichtigt den Ausführungsbereich partitionierter Objekte. Zeigen Sie z.B. im Fenster Individuelle Überprüfung den Wert der Variablen var1 an und führen dann den zur Komponente gehörenden Code aus, die ebenfalls eine Variable var1 enthält, wird der angezeigte Wert nicht aktualisiert. Sie müssen im Fenster Individuelle Überprüfung eine andere Instanz der Variablen anzeigen, um ihren Wert im aktuellen Kontext zu erhalten.

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: 4D Komponenten entwickeln und installieren

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Designmodus ( 4D v16)
4D Designmodus ( 4D v16.1)
4D Designmodus ( 4D v16.3)