ORDA – Verbessern Sie Ihre API mit Funktionsumfang

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.

blank

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:

blank

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!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert ist seit 2017 als Product Owner im 4D Produktteam tätig. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Marie-Sophie ist Absolventin der ESIGELEC Ingenieurschule und begann ihre Karriere als Ingenieurin bei IBM im Jahr 1995. Sie nahm an verschiedenen Projekten teil (Wartungs- oder Build-Projekte) und arbeitete als Cobol-Entwicklerin. Dann arbeitete sie als UML-Designerin und Java-Entwicklerin. In letzter Zeit bestand ihre Hauptaufgabe darin, funktionale Anforderungen zu analysieren und zu schreiben sowie Geschäfts- und Entwicklungsteams zu koordinieren.