4D v16

4D Tabellen und Methoden aufrufen

Home

 
4D v16
4D Tabellen und Methoden aufrufen

4D Tabellen und Methoden aufrufen    


 

Der Zugriff auf 4D Tabellen, auf die in der Wakanda Applikation Bezug genommen wird, richtet sich danach, wie der externe Catalog integriert ist. Dies wird in Wakanda während der Verbindung zur remote Anwendung definiert (siehe Integration in aktives model oder eigenes model):

  • Anbindung an aktives model (Standardoption): In diesem Fall werden remote Tabellen exakt wie lokale Klassen über das ds Objekt verwendet
  • Über eigenes model: In diesem Fall sind remote Tabellen Eigenschaften des Objekts "dediziertes" model.

Bei Anbindung an das aktive model lassen sich 4D Tabellen, auf die in der Wakanda Applikation Bezug genommen wird, im server-seitigen JavaScript Code direkt als Eigenschaften des ds Objekts verwenden, genauso wie lokale Datastore Klassen.

Hinweis:
Das Objekt ds enthält die aktuelle Datastore der Wakanda Applikation.

Beispiel für eine Suche in den Datensätzen der Tabelle [Angestellte]:

var emp = ds.Angestellte.query("Alter > :1",30);
        // die Datensätze in der Tabelle Angestellte finden
        // in denen in der Variablen <em>emp</em> Alter größer als 30 ist

Auf Client Seite können Sie auch die automatischen Abläufe von Datasources nutzen, die auf Datastore Klassen basieren und mit Widgets verknüpft sind. Weisen Sie z.B. die Datasource ’angestellte’ einem Widget vom Typ ’Grid’ zu, lässt sich die Liste der Angestellten automatisch anzeigen:


Ist die Tabelle einer Datasource zugewiesen, können Sie auch darüber auf die Daten zugreifen. Sie sortieren z.B. eine Collection Datensätze der Datasource ’angestellte’.

sources.angestellte.orderBy("Alter");
        //sortiert die Collection Angestellte nach Alter

Weitere Informationen dazu finden Sie in der Wakanda Dokumentation.

Die referenzierten 4D Tabellen werden im Server-seitigen JavaScript Code als Eigenschaften des Catalog verwendet, in den sie beim Erstellen des Links gelegt wurden. Catalog hat den Namen, der im Verbindungsparameter Remote datastore name (Wakanda Studio Verbindungsdialog) oder in localName (JavaScript Methode) definiert wurde.

Haben Sie z.B. einen Link mit Namen "my4Dstore" erstellt und wollen eine Suche in den Datensätzen der Tabelle [Angestellte] durchführen, schreiben Sie folgenden Code:

var emp2 = my4Dstore.Angestellte.query("Alter > :1", 30);
    // suche in den Datensätzen der Tabelle Angestellte
    // im Link mit Namen "my4Dstore"

Hinweis zur Implementation: Auf Client Seite ist mit der aktuellen Version von 4D Mobile für ein eigenes model derzeit kein Zugriff auf remote Klassen möglich.

4D Methoden, auf die in der Wakanda Applikation verwiesen wird, lassen sich direkt im JavaScript Code als Eigenschaften der Objekte Datastore Klasse, Entity Collection oder Entity verwenden, jeweils nach dem Bereich, der auf 4D Seite definiert wurde (siehe Tabelle und Bereich der Projektmethoden). Hier die Entsprechungen zwischen 4D und Wakanda:

4D BereichWakanda Objekt
TabelleDatastore Klasse
Aktuelle AuswahlEntity Collection
Aktueller DatensatzEntity

Hinweis: Über Datasources lassen sich 4D Methoden auch auf der Client Seite aufrufen (siehe unten); in diesem Fall sind alle Methoden verfügbar und die Datasource wendet sie je nach Kontext automatisch auf die aktuelle Collection bzw. Entity an.

Führen Sie z.B. eine Suche über die Methode query aus (siehe voriger Abschnitt), gibt Wakanda eine Entity Collection zurück. In dieser Collection können Sie jede 4D Projektmethode ausführen, für die als Bereich "aktuelle Auswahl" definiert wurde.

Es gibt drei Wege, um 4D Methoden über JavaScript Code aufzurufen:

  • Über JavaScript Code, der über SSJS Datastore API. auf dem Server (SSJS) ausgeführt wird. Hier werden 4D Methoden als Eigenschaften der Objekte Datastore Klasse, Entity Collection oder Entity objects aufgerufen, wie oben beschrieben.
    Beispiele:

    var vTot = ds.Emp.raiseSalary(param))
        //raiseSalary ist eine Eigenschaft der datastore Klasse
        //der Catalog wird mit an das aktive model angebunden
    var vTot2 = my4DStore.Company.first().capital(param)) 
        //capital ist Eigenschaft der entity, da first() eine entity zurückgibt
        //das eigene model my4DStore wird verwendet

  • Über JavaScript Code, der über das Wakanda Ajax Framework (WAF) auf dem Client ausgeführt wird, wie z.B. ein Browser. Hier gibt es zwei Möglichkeiten:
    Hinweis zur Implementierung: In der aktuellen Version von Wakanda Enterprise ist Client Zugriff auf 4D Datenbankmethoden nur möglich, wenn die remote Anwendung angemeldet und an das aktive model angebunden ist.

    • WAF Datasource API: Dieses high-level API bietet viele automatische Funktionen zum Verwalten von Daten. Damit werden 4D Methoden als Eigenschaften von Datasources, die Datastore Klassen zugeordnet sind, aufgerufen und je nach Kontext automatisch auf die Datastore Klasse, die aktuelle Entity Collection oder die aktuelle Entity angewandt. Sie können Rückgabewerte der Methoden oder Fehler über asynchrone Syntax verwalten (das ist für Code, der auf dem Client ausgeführt wird, erforderlich). Beispiel:
      sources.employee.raiseSalary(param,
          {onSuccess: function(event)
          { ... //auszuführender Code, wenn die Methode beendet ist}
      }))

      Eine Callback Funktion ist hier nicht zwingend erforderlich, da Datasource Objekte automatische Funktionen haben, die z.B. dafür sorgen, dass die Daten in der aktuellen Collection nach einer Suche upgedatet werden.
    • WAF Dataprovider API:Über dieses low-level Client API können Sie direkt mit Objekten arbeiten. 4D Methoden werden, wie bei SSJS Datastore API, als Eigenschaften der Objekte Datastore Klasse, Entity Collection oder Entity objects aufgerufen. Sie müssen jedoch Rückgabewerte der Methode oder Fehler über asynchrone Syntax verwalten (das ist für Code erforderlich, der auf dem Client ausgeführt wird). Beispiel:
      ds.Employee.raiseSalary(param, // Syntax ähnlich wie bei einem SSJS Aufruf
          {onSuccess: function(event)    // da es client-seitiger Code ist, müssen Sie
          // die Callback Methode des asynchronen Aufrufs selbst verwalten
          { ... //auszuführender Code, wenn die Methode beendet ist}
      }))

    Welchen Ort (Server oder Client) und welches API Sie wählen, richtet sich nach den Anforderungen der Applikation. Weitere Informationen dazu finden Sie in der Wakanda Dokumentation.

Sie können, wie bei Standardmethoden, während dem Aufruf Parameter übergeben, die dann der Reihe nach in den Parametern $1, $2, etc. empfangen werden. In ähnlicher Weise gibt die Methode ein Ergebnis in der $0 Variable zurück.

Hierzu ein Beispiel: Angestellte mit einem Gehalt unter 1500 sollen 5% mehr bekommen.

  • Auf 4D Seite ist die Methode IncreaseSalary über 4D Mobile veröffentlicht und für "Aktuelle Auswahl" gültig. Ihr Code lautet wie folgt:
     C_REAL($1)
     READ WRITE([Employees])
     FIRST RECORD([Employees])
     While(Not(End selection([Employees])))
        [Employees]salary:=[Employees]salary*$1
        SAVE RECORD([Employees])
        NEXT RECORD([Employees])
     End while
     UNLOAD RECORD([Employees])
  • Auf Wakanda Seite führen Sie auf dem Server folgenden Code aus:
    var emp = ds.Employees.query("salary < :1",1500); 
            // emp enthält die Collection Employees mit einem Gehalt unter 1500
        emp.IncreaseSalary(1.05);
            //enthält die Collection Employees mit einem Gehalt unter 1500
            //Sie könnten auch schreiben: 
            //"ds.Employees.query("salary < :1",1500).IncreaseSalary(1.05);

Mit dem Befehl MOBILE Return selection können Sie eine 4D Auswahl auch direkt als eine Wakanda Collection zurückgeben. Hierzu ein Beispiel:

  //Projektmethode FindCountries
  //FindCountries( string ) -> object
 
 C_TEXT($1)
 C_OBJECT($0)
 QUERY([Countries];[Countries]ShortName=$1+"@")
 $0:=MOBILE Return selection([Countries])

Beim Aufrufen einer 4D Methode über den Wakanda Link geschieht folgendes:

  • Bei Anwendung auf eine Auswahl (entity collection) wird das die aktuelle Auswahl. 4D wird auf den ersten Datensatz dieser Auswahl gesetzt, ohne ihn zu laden oder die Links zu aktivieren. Ist die Auswahl leer, gibt die Funktion Selected record number 0 anstatt 1 zurück.
  • Bei Anwendung auf einen Datensatz (entity), wird dies der aktuelle Datensatz. Die aktuelle Auswahl wird auf diesen einen Datensatz reduziert und die Funktion Selected record number gibt 1 zurück.
    Hinweis: Zur Optimierung und um unnötiges Sperren zu vermeiden, wird der Datensatz im Nur-Lesen Modus geladen. Ist die Tabelle dagegen im Lese-/Schreibmodus, können Sie über den Befehl LOAD RECORD erzwingen, dass der Datensatz bei Bedarf im Lese-/Schreibmodus geladen wird.     
  • Bei Anwendung auf eine Tabelle (datastore Klasse) sind weder die aktuelle Auswahl noch der aktuelle Datensatz betroffen.

Beachten Sie, dass der 4D Kontext nach Ausführen einer Methode über 4D Mobile zurückgesetzt wird:

  • Auswahlen werden auf 0 reduziert
  • Datensätze werden vom Stapel genommen und entladen
  • lokale Auswahlen und Mengen für den Prozess werden aufgehoben
  • Alle während der Ausführung der Methode geöffneten Transaktionen werden annulliert
  • Die Konfiguration automatischer Verknüpfungen nach Feldern, Suchzielen oder Suchen auf dem Server werden zurückgesetzt
  • Druckaufträge werden annulliert
  • Fenster werden geschlossen
  • alle SQL, PHP oder HTTP Verbindungen werden geschlossen

Achten Sie darauf, dass der Bereich der 4D Methode zum Typ des aufgerufenen Wakanda Objekts passt. Sonst gibt Wakanda den Fehler "TypeError: 'undefined' is not a function" zurück.

Nehmen wir beispielsweise die 4D Methode "getcursel" mit folgendem Code:

 $0:=Records in selection([Table_1])

Auf Wakanda Seite gibt es die Methode run:

var tt = ds.Table_1.query("Field_2 = 'a*'").getcursel();

Die Methode query( ) gibt eine Collection zurück. Ist für die Methode getcursel als Bereich (Gültig) "aktueller Datensatz" gewählt, gibt Wakanda folgenden Fehler zurück:
TypeError: 'undefined' is not a function (evaluating 'ds.Table_1.query("Field_2 = 'a*'").getcursel()')".

 
 

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: 4D Tabellen und Methoden aufrufen

 
GESCHICHTE 

 
ARTIKELVERWENDUNG

4D Mobile ( 4D v16)