4D v164D Tabellen und Methoden aufrufen |
||||||||||
|
4D v16
4D Tabellen und Methoden aufrufen
|
4D Bereich | Wakanda Objekt |
Tabelle | Datastore Klasse |
Aktuelle Auswahl | Entity Collection |
Aktueller Datensatz | Entity |
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:
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
sources.employee.raiseSalary(param, {onSuccess: function(event) { ... //auszuführender Code, wenn die Methode beendet ist} }))
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.
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])
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:
Beachten Sie, dass der 4D Kontext nach Ausführen einer Methode über 4D Mobile zurückgesetzt wird:
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()')".
Produkt: 4D
Thema: 4D Tabellen und Methoden aufrufen
4D Mobile ( 4D v16)