ORDA – Začněte s dotekovou akcí

Automaticky přeloženo z Deepl

ORDA je hlavní dlouhodobou funkcí, která otevírá svět nových možností ve 4D .

ORDA neustále vylepšujeme, abychom poskytli výkonný kód. Pak se vaše aplikace stanou snadno vyvíjenými a udržovatelnými. A hlavně jsou optimalizované s velkým výkonem pro vaše koncové uživatele.

Proto jsme rádi, že můžeme ve 4D 20 R10 představit novou funkci týkající se událostí na datech v paměti.

Při typické uživatelské cestě se data, která uživatel potřebuje, načítají v paměti. Poté se podrobí změnám podle akcí uživatele a nakonec se uloží, když uživatel klikne na tlačítko Uložit.

Jak je to s automatickým spouštěním obchodní logiky při změně některých dat v paměti? Nyní je možné data formátovat nebo připravit co nejdříve před akcí uložení, aby byla data ve stavu připraveném k uložení.

To se děje díky události ORDA touched na datech a přínos je značný.

Chcete se dozvědět více? Čtěte dál!

HDI_ORDA_Events_touched

ORDA již pokrývá tolik aspektů podrobně popsaných v tomto blogpostu. Abstraktní vrstva ORDA se stává mocnější než kdy dříve! Nyní je schopna reagovat na jakoukoli změnu dat v paměti.

Nezapomeňte, že u ORDA se s daty pracuje prostřednictvím entit načtených do paměti akcí čtení (například dotazem ).

4D 20 R10 zavádí koncept událostí. Dotyková událost je první z nadcházející řady, a protože nemá v klasickém kódu 4D ekvivalent, stojí za to ji používat.

Událost touched umožňuje implementovat centralizovaný kód pro spouštění obchodní logiky při změně hodnot atributů v entitě načtené v paměti.

spouštění obchodní logiky při změně atributu entity

Během cesty uživatele můžete nyní reagovat na změny dat v paměti a spustit nějakou vhodnou obchodní logiku a případně zobrazit výsledek koncovému uživateli.

Při práci s entitou se můžete zaměřit na daný atribut a při změně jeho hodnoty spustit nějaký kód.

Zde je několik případů použití, kde bude přínos velký:

  • psaní velkých nebo malých písmen v datech
  • propagovat některé aktualizace do jiných atributů v modelu

příklad č. 1

V níže uvedeném příkladu je aktualizována entita Lidé. Údaj title je zkrácen na prvních šest znaků, údaje lastname + city jsou psány velkými písmeny.

Dříve jste pro spuštění takového případu použití museli zpracovávat události typu Při ztrátě fokusu na každém z objektů formuláře a spouštět příslušný kód na tolika místech kódu.

Nyní lze pro některé atributy implementovat události touched díky funkci tzv. touched a klíčovým slovům event. Kód je centralizován v příslušné třídě Entity a spouští se, jakmile se změní hodnota atributu na libovolném místě vaší aplikace.

V tomto příkladu je touched byla pro některé atributy implementována událost ve třídě PeopleEntity:

Class extends Entity

Function event touched title($event : Object)
	This.title:=Substring(This.title; 1; 6)
	
Function event touched lastname($event : Object)
	This.lastname:=Uppercase(This.lastname)
	
Function event touched city($event : Object)
	This.city:=Uppercase(This.city)

příklad č. 2

V tomto dalším příkladu je použita událost touched, aby se zabránilo zpracování vypočítaného atributu, které by mohlo vést ke špatnému výkonu. Vzhledem k datové třídě Booking v aplikaci pro pronájem automobilů je potřeba atribut, který zjistí, zda jsou data odjezdu a příjezdu stejná.

Jeho implementace by měla být následující:

exposed function get sameDay(): Boolean
return (This.departureDate = This. arrivalDate)

Dotazování na tento atribut však nemůže využívat indexy, takže není příliš optimalizované.

Proto lze v datové třídě vytvořit atribut sameDay a pro atributy departureDate a arrivalDate implementovat událost touched, jak je uvedeno níže. Tak, aby byl tento atribut sameDay vždy aktuální.

Function event touched departureDate($event : Object)
	This.sameDay:=(This.departureDate=This.arrivalDate)

Function event touched arrivalDate($event : Object)
	This.sameDay:=(This.departureDate=This.arrivalDate)

spouštění obchodní logiky při změně některého atributu.

Potřebujete reagovat na jakoukoli změnu dat v paměti během cesty uživatele? Ať už je účel jakýkoli: ladění nebo aktualizace dat za běhu, nyní je to možné.

Dotčenou událost můžete spustit na úrovni entity. Při změně hodnoty jakéhokoli atributu entity se spustí událost, která poskytne užitečné informace.

jak to implementovat

Ve třídě Entity přidejte příkaz touched event funkci přijímající událost jako parametr Object.

Zde je například třída PeopleEntity.

Class extends Entity

Function event touched($event : Object)

Případ použití #1

Ve své aplikaci jste zjistili, že byla aktualizována entita People, ale nevíte kde. Implementujte událost touched a umístěte do ní bod přerušení, abyste zkontrolovali řetězec volání.

Zde je jednoduchý updatePeople metoda projektu:

$people:=ds.People.all().first()

updateCivilInfo($people)

updateAddress($people)

A okno ladění zobrazující řetězec volání s metodou spouštějící událost touched (updateCivilInfo).

Všimněte si, že objekt Událost obsahuje název atributu.

blank

Případ použití č. 2

Hodnotu atributu můžete psát velkými písmeny, pokud je jeho typem Text, ať už se jedná o jakýkoli atribut.

Za tímto účelem implementujte tento kód:

Class extends Entity

Function event touched($event : Object)
	
	If (Value type(This[$event.attributeName])=Is text)
		This[$event.attributeName]:=Uppercase(This[$event.attributeName])
	End if

A zkontrolujte, zda to funguje:

blank

Jak jistě chápete, událost touched bude pravděpodobně spouštěna velmi často. Proto musí být implementovaný kód rychle proveditelný a lehký, aby byl zachován dobrý výkon. Poslední výše uvedený příklad je relevantní, pokud datová třída obsahuje pouze několik atributů.

Pokud se potřebujete dozvědět více o tom, jak se tato událost chová v C/S nebo při použití 4D Qodly pro nebo při práci se vzdáleným datovým úložištěm, přečtěte si tento blogpost.

Podívejte se do dokumentace a pohrajte si s HDI, abyste se dozvěděli více.

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.