V předchozí verzi jste zjistili, jak byly požadavky ORDA REST automaticky optimalizovány pro zvýšení výkonu při práci se vzdáleným datovým úložištěm a konfigurací klient/server.
Dozvěděli jste se, že k využití automatické optimalizace požadavků ORDA REST můžete použít kontexty.
To byl významný krok, ale nyní nabízíme možnost mít úplnou kontrolu nad chováním vašich požadavků REST. Vzhledem k tomu, že výkon je strategickým zájmem, jistě se těšíte, až tuto novou funkci objevíte!
A to není vše; nyní jsou k dispozici nové nástroje, které vám pomohou pochopit a vyladit vaše problémy.
Čtěte dále a přečtěte si kompletní prezentaci.
HDI: Jak začít s kontrolou požadavků REST?
Pamatujete si, co je to kontext?
Než začnete, zde je krátké shrnutí:
- při práci s výběrem entit po fázi učení 4D automaticky spouští optimalizované požadavky (dotazuje se na stránky serveru entit pouze s příslušnými atributy).
- můžete použít kontext, aby tato optimalizace přetrvala a byla znovu použita při práci s jinými výběry entit (nebo entitami)
Slyšeli jste o vyrovnávací paměti orda?
Při vyžádání dat na serveru pomocí ORDA se tato data ukládají do mezipaměti ORDA na klientském počítači.
Mezipaměť ORDA je uspořádána podle datových tříd. Načtené entity jsou uloženy v mezipaměti ORDA jako objekty obsahující obsah požadovaných atributů.
Další podrobnosti o kontextech a mezipaměti ORDA naleznete na relaci Summit 2020.
Nový krok: převezměte úplnou kontrolu nad kontexty
Jak jste pochopili, atributy kontextu jsou definovány ve fázi učení 4D. Díky datovému skladu je velkým krokem vpřed to, že nyní můžete pomocí funkce .setRemoteContextInfo()rozhodnout, jaké atributy chcete do daného kontextu zahrnout.
Příklad
V tomto příkladu jsme do kontextu contextA vložili atributy firstname a lastname datové třídy Persons.
Tedy při volání all() funkce není první entita Persons pro fázi učení plně načtena. Požadavky odesílané na server jsou již plně optimalizovány.
var $ds : 4D.DataStoreImplementation
var $contextA : Object
var $persons : cs.PersonsSelection
var $p : cs.PersonsEntity
var $text : Text
$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")
$ds .setRemoteContextInfo("contextA"; "Persons"; New collection("firstname"; "lastname"))
$contextA :=New object("context"; "contextA")
$persons :=$ds.Persons.all($contextA)
$text :="
For each ($p; $persons)
$text :=$p.firstname+""+$p.lastname
End for each
o seznamových polích
Všimněte si, že pokud je výběr entity $persons použit v seznamu, můžete požadované atributy zadat v kontextu režimu stránky.
V níže uvedeném příkladu kontext pole seznamu obsahuje atributy firstname a lastname datové třídy Persons.
Při výběru entity se okamžitě načtou atributy aktuálního kontextu položky (firstname, lastname, children, gender).
Neexistuje žádná další fáze učení, která by vyžadovala úplné načtení první entity.
var $contextPersons
FormpersonsFormdsPersonsall$contextPersons: Object
var $listAttributes ; $pageAttributes: Collection
$contextPersons :=New object("kontext"; "osoby")
$listAttributes :=New collection("jméno"; "příjmení")
Form .ds.setRemoteContextInfo("osoby"; Form.ds.Persons; $listAttributes) //Form.ds is a remote datastore
$pageAttributes :=New collection("jméno"; "příjmení"; "děti"; "pohlaví")
Form .ds.setRemoteContextInfo("osoby"; Form.ds.Persons; $pageAttributes; //Form.persons is displayed in a list box
zpracování délky stránky pro výběry entit
Uvědomte si, že můžete nastavit délku stránky pro výběry entit požadované serverem. Dobrou zprávou je, že to platí i pro atributy entit souvisejících s druhem.
V níže uvedeném příkladu jsou entitami Address vyžádány na serveru stránky o 100 entitách s atributem city.
Pro každou entitu Adresa jsou související entity osoby (výběr entit) vyžádány stránkami 50 entit s atributy firstname a lastname.
var $ds : 4D.DataStoreImplementation
var $contextA : Object
var $addresses : cs.AddressSelection
var $a : cs.AddressEntity
var $p : cs.PersonsEntity
var $text : Text
$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")
$ds .setRemoteContextInfo("contextA"; $ds.Address; "city, persons:50, persons.lastname, persons.firstname"; "main"; 100)
$contextA :=New object("context"; "contextA")
$addresses :=$ds.Address.all($contextA)
$text :="
For each ($a; $addresses)
$text :=$text+"/"+$a.city
For each ($p; $a.persons )
$text :=$text+" - "+$p.firstname+$p.lastname
End for each
End for each
mezipaměť ORDA
K dispozici jsou další užitečné nástroje pro obsluhu časového limitu a maximální velikosti mezipaměti ORDA a prostředky pro kontrolu obsahu mezipaměti ORDA.
Další informace jsou k dispozici na webových stránkách s dokumentací.
Časový limit mezipaměti ORDA můžete například upravit tak, abyste přizpůsobili četnost požadavků. To je užitečné, pokud víte, zda se vaše data budou často měnit, nebo ne.
příklad
V níže uvedeném příkladu datová třída Cities obsahuje poštovní směrovací čísla a města, která se pravděpodobně nebudou měnit příliš často, proto je časový limit prodloužen.
var $ds : 4D.DataStoreImplementation
$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")
// The entities will expire after 3 hours
// There are 350 entities maximum in the cache of the Cities dataclass
$ds .Cities.setRemoteCacheSettings(New object("timeout"; 10800; "maxEntries"; 350))
Pro úsporu paměti můžete také aktualizovat maximální počet entit přítomných v mezipaměti pro každou datovou třídu.
kontrolovat a resetovat kontexty
Abyste se mohli ponořit do tohoto fascinujícího tématu, navštivte dokumentaci.
Důležité: Všimněte si, že pro úplné pochopení a ladění budete pravděpodobně muset požadavky kontrolovat.
Ještě jedna věc
S touto funkcí není příliš blízká, ale je cenná, funkce dataClass.getCount() je nyní k dispozici pro získání počtu entit v datové třídě.
Tím se vyhnete volání dataclass. all().length sestaví výběr entit na serveru a plně načte první entitu na klientovi.
var $count : Integer
$count :=ds.Persons.getCount()
Nyní si pohrajte s HDI a ukázkou Summit 2020.
Stáhněte si demo HDI a relace Summit 2020 a dozvíte se více!