ORDA – Constructor a dotýkaná událost – Podrobné chování v síti

Automaticky přeloženo z Deepl

V tomto předchozím příspěvku na blogu jste zjistili, že subjekty ORDA mohou mít nyní constructor, což umožňuje, aby se instanciace entit řídila kompletním objektově orientovaným přístupem.

A to není vše – v dalším příspěvku na blogu byla představena první datová událost ORDA v celé řadě: událosttouched .

Chcete přesně vědět, KDY a KDE se constructor a událosttouched jsou spouštěny při přesunech akcí tam a zpět mezi klientskou aplikací a serverem? Tento blogpost je určen právě vám.

Čtěte dál, abyste se dozvěděli všechny podrobnosti a prohlédli si živou ukázku!

Pokud jste ještě neprozkoumali constructors a událosttouched , nečekejte – přečtěte si výše zmíněné blogposty. Vysvětlují, jak by měla implementace probíhat.

HDI_ORDA_Events_Detaily

před zahájením

Tyto dvě funkce jsou součástí komplexní, výkonné a optimalizované abstrakční vrstvy ORDA. Pro osvěžení paměti si můžete přečíst tento blogpost a tento blogpost .

Pomocí tříd datového modelu ORDA se s daty pracuje prostřednictvím entit, což jsou instance tříd Entity definované ve vaší struktuře.

ORDA lze použít ve více typech aplikací:

Kde?

Níže uvedená tabulka shrnuje, KDE constructor a touched jsou prováděny události:

Kde se provádí C/S (1) Stránka Qodly (2)
REST API (3)
Vzdálené datové úložiště (4)
Konstruktor Klient Server
Dotčená událost

Pokud je lokální klíčové slovo: klient
jinak: server

Server

(1): Projekt je nasazen na instanci serveru 4D a vzdálení klienti 4D k němu přistupují prostřednictvím síťového připojení. Datové operace mohou probíhat buď na klientovi, nebo na serveru.

(2): Projekt je nasazen na instanci 4D serveru a weboví klienti s ním komunikují prostřednictvím webového prohlížeče. Aplikace Qodly konzumuje rozhraní REST API projektu.

(3): Jakákoli externí aplikace může konzumovat rozhraní REST API vaší aplikace 4D pomocí standardních požadavků REST.

(4): Aplikace 4D se může připojit k jednomu nebo více vzdáleným datovým skladům, což umožňuje přístup k více zdrojům dat. V tomto případě se ke zpracování operací se vzdálenými daty používá ORDA.

Kdy?

Zbytek tohoto blogpostu se zaměřuje na to, KDY se constructor a událosttouched jsou prováděny.

Z důvodů optimalizace a výkonu se constructor nemusí být nutně provedena ihned při instanci nové entity. Totéž platí pro událosttouched . Nemusí být nutně provedena okamžitě, když je aktualizován atribut.

Ponořme se do specifik pro jednotlivé typy aplikací.

samostatná aplikace

V samostatné aplikaci je projekt uložen na místním disku. K přístupu k datům není potřeba žádné síťové připojení, takže všechny operace s daty se provádějí lokálně a okamžitě.

Vše je přímočaré: . constructor a událosttouched se spustí okamžitě, když je instancována nová entita nebo když se změní hodnota atributu.

rest api

Tento případ je jednoduchý: protože všechny akce s entitami se provádějí prostřednictvím požadavků REST na server, je jak constructor i událosttouched jsou na serveru spuštěny, jakmile je požadavek spuštěn.

klient server aplikace

konstruktor

Pokud je na klientovi instancována nová entita, pak se constructor spustí na klientovi.

To znamená, že počáteční hodnoty přiřazené atributům jsou pro klienta okamžitě viditelné. Později, když je volána funkce zahrnující tuto entitu(např. funkce, která přijímá entitu jako parametr), server obdrží entitu s jejími atributy inicializovanými na klientovi (1).

Funkce může být jednou z funkcí rozhraní ORDA API nebo funkcí datového modelu ORDA.

(1) Nezapomeňte, že funkce ORDA jsou vždy prováděny na serveru.

dotýkaná událost

Ve výchozím nastavení se událost touched spouští na serveru, ale klíčové slovo local umožňuje spustit ji místo toho na klientovi.

Bez klíčového slova local:

V tomto příkladu je funkce apply() fiktivní funkcí, která slouží pouze k tomu, aby aktualizace provedené na entitě na klientovi byly viditelné na serveru.

blank

S klíčovým slovem local:

blank

qodly app

Obě stránky constructor i událosttouched se provedou na serveru – jakmile se server dozví o nově instancované entitě nebo o změně atributu.

Při vykreslování běží stránka Qodly ve webovém prohlížeči, ale kdykoli nějaká akce vyžaduje logiku na straně serveru, jsou požadavky odeslány prostřednictvím rozhraní REST API na server 4D.

Konstruktor

Pokud instancujete novou entitu pomocí standardní akce Create:

blank

dojde k tomu lokálně na front end. Konstruktor se tedy neprovádí okamžitě. Spustí se, jakmile server zjistí novou instancovanou entitu.

V tomto příkladu je funkce apply() fiktivní funkcí, která slouží pouze k tomu, aby aktualizace provedené na entitě na klientovi byly viditelné na serveru.

blank

Poznámka:

Pokud front end instancuje novou entitu pomocí standardní akce Create a nastaví hodnotu atributu použitého v konstruktoru, nebude tato hodnota přepsána konstruktérem při spuštění na serveru.

blank

Na druhou stranu, pokud je entita instancována prostřednictvím funkce na straně serveru, konstruktor se na serveru spustí okamžitě. Vrácený zdroj Qodly (entita) bude obsahovat atributy inicializované konstruktorem.

blank

Dotčená událost

Událosttouched se na serveru spustí, jakmile server zjistí změnu hodnoty atributu.

V tomto příkladu je funkce apply() fiktivní funkcí, která slouží pouze k tomu, aby aktualizace provedené na entitě na klientovi byly viditelné na serveru.

blank

použití vzdáleného úložiště dat

Funguje to podobně jako aplikace Qodly, protože použití vzdáleného datového úložiště spouštípožadavky interně pomocí rozhraní REST API. Pokud je vmístní aplikaci 4D instancována nová entita. constructor spustí, jakmile se o ní server dozví.

Totéž platí pro událosttouched – pokud je vmístní aplikaci 4D aktualizována entita, spustí se, jakmile server zjistí změnu v atributech entity.

příklad č. 1

Ve třídě ProductsEntity je implementována stránka constructor.

Class extends Entity

Class constructor()
	
	This.creationDate:=Current date()
	This.comment:="Automatic comment"

Provede se tento kód:

var $connect:={hostname: "127.0.0.1"}
var $remote : 4D.DataStoreImplementation
var $product : 4D.Entity
var $status : Object


$remote:=Open datastore($connect; "demo")

// The constructor has not been executed yet
// The creationDate and comment attributes are empty
$product:=$remote.Products.new()

// Here the constructor is run because the save() is done on the server
// The server detects it is a newly instantiated entity
// The creationDate and comment attributes are filled
$status:=$product.save()

příklad #2

Ve třídě ProductsEntity je implementována událosttouched a funkce apply():

Class extends Entity

Function event touched comment($event : Object)
	This.comment:=Uppercase(This.comment)

exposed Function apply() : cs.ProductsEntity
	return This

Tento kód se provede:

var $connect:={hostname: "127.0.0.1"}
var $remote : 4D.DataStoreImplementation
var $product : 4D.Entity

$remote:=Open datastore($connect; "demo")

$product:=$remote.Products.all().first()

// The comment attribute is not uppercased 
$product.comment:="New comment"

// Because the apply() function is called on the server
// the touched event is triggered
// and the comment attribute is now uppercased
$product:=$product.apply()

Hrajte si s přiloženým HDI a vyzkoušejte si tyto příklady naživo!

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.