4D v18 R4 a ORDA umožnily vytvářet funkce tříd vysoké úrovně nad datovým modelem. To vám umožní psát kód orientovaný na obchod, který skryje složitost, omezí chyby a urychlí proces vývoje.
S verzí 4D v18 R5 přinášíme ještě více funkcí, které vám pomohou optimalizovat a organizovat kód. Například můžete potřebovat spustit funkci lokálně na klientovi, abyste zvýšili výkon při práci v režimu klient/server. Nyní je to možné! Nebo pokud vystavujete svou databázi jako server REST, můžete chtít, aby některé funkce byly dostupné na straně serveru, ale skryté pro klienty REST. I to je možné!
HDI: Klíčová slova funkcí ve třídách datového modelu ORDA
K dispozici jsou dvě nová klíčová slova pro funkce ve třídách datového modelu ORDA:
pracující v C/S s klíčovým slovem LOCAL
Funkce se v C/S standardně provádějí na serveru, ale nyní si můžete zvolit, že se některé z nich budou provádět na klientovi. To může výrazně zlepšit výkon.
Příklad:
V tomto příkladu máme datovou třídu Students. Napíšeme funkci, která vrátí věk studentů.
Zde je naše funkce age() ve třídě entit cs.StudentsEntity.
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
A toto je seznamové pole zobrazující všechny studenty se sloupcem věk namapovaným výrazem This.age():
Díky klíčovému slovu local se funkce age() provede lokálně na klientovi s načteným datem narození a zároveň se zobrazí okno se seznamem. To je důležité pro soulad s optimalizací požadavků 4D v17 R5 ORDA.
Bez klíčového slova local by funkce age() vyvolala požadavek na server pro každý řádek!
exponované klíčové slovo
Jak jsme slíbili v 4D v18 R4, vylepšili jsme vystavování funkcí pro server REST. Nyní si ve verzi 4D v18 R5 můžete vybrat, které funkce se mají (nebo nemají) zveřejnit.
Pomocí klíčového slova exposed můžete nechat funkci publikovat jako API pro klienty REST.
V příkladu níže je funkce registerNewStudent() ve třídě datových tříd cs.Students volatelná z klienta REST, zatímco computeStudentId() nikoli.
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
//vypočítá nové student Id
Use (Storage.infos)
Storage.infos.studentId:=Storage.infos.studentId+1
$0:=Storage.infos.studentId
End use
Zde je volací kód na klientovi REST:
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()
Poznámka: Ve verzi 4D v18 R4 jsou všechny funkce vystaveny na serveru REST. Ve verzi 4D v18 R5 nejsou funkce ve výchozím nastavení vystaveny. Nezapomeňte označit funkce, které chcete vystavit.
Více informací o nových funkcích najdete v dokumentaci a ve výše uvedeném HDI!