ORDA – Vylepšete své API pomocí rozsahu funkcí

Automaticky přeloženo z Deepl

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ů.

blank

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():

blank

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!

Avatar
• Product Owner • Marie-Sophie Landrieu-Yvert se připojila k programovému týmu 4D jako Product Owner v roce 2017. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Marie-Sophie vystudovala inženýrskou školu ESIGELEC a svou kariéru zahájila jako inženýrka v IBM v roce 1995. Podílela se na různých projektech (projekty údržby nebo výstavby) a pracovala jako vývojářka Cobol. Poté pracovala jako UML designer a Java developer. V poslední době byly jejími hlavními rolí analyzovat a psát funkčních požadavky a koordinovat obchodní a vývojové týmy.