4D v18 R4 und ORDA ermöglichen es Ihnen, High-Level-Klassenfunktionen oberhalb des Datenmodells zu erstellen. So können Sie geschäftsorientierten Code schreiben, um die Komplexität zu verbergen, Fehler zu reduzieren und den Entwicklungsprozess zu beschleunigen.
Mit 4D v18 R5 bieten wir Ihnen noch mehr Funktionen, die Sie bei der Optimierung und Organisation Ihres Codes unterstützen. So kann es beispielsweise erforderlich sein, eine Funktion lokal auf dem Client auszuführen, um die Leistung zu verbessern, wenn Sie im Client/Server-Modus arbeiten. Das ist jetzt möglich! Oder wenn Sie Ihre Datenbank als REST-Server bereitstellen, möchten Sie vielleicht, dass einige Funktionen auf der Server-Seite verfügbar sind, aber für Ihre REST-Clients verborgen bleiben. Auch das ist möglich!
HDI: Funktionsschlüsselwörter in ORDA-Datenmodellklassen
Zwei neue Schlüsselwörter für Funktionen in ORDA-Datenmodell-Klassen sind verfügbar:
Arbeiten in C/S mit dem Schlüsselwort LOCAL
Funktionen werden in C/S standardmäßig auf dem Server ausgeführt, aber Sie können jetzt wählen, ob einige von ihnen auf dem Client ausgeführt werden sollen. Dies kann die Leistung erheblich verbessern.
Beispiel
In diesem Beispiel haben wir eine Datenklasse Schüler. Schreiben wir eine Funktion, die die Altersangaben der Schüler zurückgibt.
Hier ist unsere age() Funktion in der cs.StudentsEntity Entitätsklasse.
Class extends Entity
// This is an estimate of the age
local Function () : ( . #!00-00-00!) := ( )- ( . ) age Variant
IfThisbirthDate
$0Year ofCurrent dateYear ofThisbirthDate
Else
:= $0Null
End if
Und dies ist ein Listenfeld, das alle Schüler anzeigt, deren Altersspalte mit dem Ausdruck This.age() verknüpft ist:
Dank des Schlüsselworts local wird die Funktion age() lokal auf dem Client ausgeführt, wobei das Geburtsdatum geladen wird, während die Listbox angezeigt wird. Dies ist wichtig, um mit der Optimierung der 4D v17 R5 ORDA-Anfragen übereinzustimmen.
Ohne das lokale Schlüsselwort würde die Funktion age() für jede Zeile eine Anfrage an den Server auslösen!
exponiertes Schlüsselwort
Wie mit 4D v18 R4 versprochen, haben wir die Exposure-Funktionen für den REST-Server verbessert. Mit 4D v18 R5 können Sie nun wählen, welche Funktionen veröffentlicht werden sollen (oder nicht).
Sie können das Schlüsselwort exposed verwenden, um eine Funktion als API für REST Clients zu veröffentlichen.
Im folgenden Beispiel ist die Funktion registerNewStudent() in der Datenklassenklasse cs.Students von einem REST-Client aufrufbar, computeStudentId() dagegen nicht.
Class extends DataClass
exposed Function registerNewStudent($student: Object) : Object
var $entity : cs.StudentsEntity
var $status : Object
$entity :=ds.Students.new()
$entity .fromObject($student)
$entity .studentId:=This.computeStudentId()
$status:=$entity.save()
If ($status.success)
$0 :=$entity
Else
$0 :=$status
End if
// This function not callable from a REST client
Function computeStudentId() : Integer
//berechnet eine neue Schüler-ID
Use (Storage.infos)
Storage.infos.studentId:=Storage.infos.studentId+1
$0:=Storage.infos.studentId
End use
Hier ist der aufrufende Code auf dem REST-Client:
var $connect;$ds;$student;$result: Object
var $studentId : Integer
$connect := New object("hostname"; "127.0.0.1:8044")
$ds :=Open datastore($connect; "demo")
$student :=New object("firstname"; "Mary"; "lastname"; "Smith")
// Execution is OK, no error is raised
$result:=$ds.Students.registerNewStudent($student)
//An error is raised
$
studentId:=$ds.Students.computeStudentId()
Hinweis: In 4D v18 R4 sind alle Funktionen auf dem REST Server verfügbar. In 4D v18 R5 sind die Funktionen standardmäßig NICHT freigegeben. Vergessen Sie nicht, die Funktionen zu markieren, die Sie freilegen möchten.
Schauen Sie sich die Dokumentation und den HDI oben an, um mehr über die neuen Funktionen zu erfahren!