Hladký přechod na výběry sdílených entit

Automaticky přeloženo z Deepl

V tomtopříspěvku na blogu jste zjistili, jakou sílu může nabídnout výběr sdílených entit. Společnost 4D se zaměřuje na sdílení dat, protože z dlouhodobého hlediska vede k vyššímu výkonu.

Jsme si však vědomi toho, že tato strategie nemusí být vaší aktuální strategií. Sledovali jsme diskuse na fóru a pochopili vaše připomínky a pocity.

Abychom tento krok zmírnili a poskytli vám větší flexibilitu a nástroje, provedli jsme některá vylepšení týkající se povahy (sdílených nebo nesdílených) výběrů entit.

Než budete pokračovat, důrazně doporučujeme přečíst si tento a tento příspěvek na blogu, abyste níže popsaným vylepšením porozuměli.

HDI: Vylepšení výběrů entit

4D v18 R5 nabízí více možností, jak zacházet s nesdílenými (měnitelnými) výběry entit. Pomáhá vám pracovat způsobem, na který jste zvyklí.

Na druhou stranu, pokud chcete pracovat se sdílenými výběry entit, pomohli jsme vám připravit se na tuto novou éru ve 4D v18 R5. Ve verzi 4D v18 jsme zavedli flexibilní způsob, který můžete transparentně použít pro přípravu svého kódu.

Stručně řečeno: připravte se v 4D v18, pracujte v 4D v18 R5 a připravte se na vyšší výkon!

o měnitelných výběrech entit

přidání entity do výběru entit

Častým případem použití je zobrazení výběru entit v seznamu (produkty, faktury atd.) a umožnění uživateli přidávat nové.

Pracujme na datové třídě Produkty.

Po načtení formuláře se vytvoří Form.products, což je datový zdroj pole seznamu:

Case of
: (Form event code=On Load)
Form .products:=ds.Products.all()
End case

Když uživatel přidá nový výrobek:

Form.products.add(Form.product)

Pokud tento kód spustíte tak, jak je ve verzi 4D v18 R5, zobrazí se chyba při spuštění příkazu add() funkce, protože ds.Products.all() vrací sdílený výběr entit (nelze jej měnit).

Jsme si vědomi této nepříjemnosti. Proto najdete v aplikaci 4D v18 copy() k dispozici funkce, která připraví váš kód na verzi 4D v18 R5.

Pokud je na adrese copy() je spuštěna ve 4D v18: pouze zkopíruje váš výběr entit

If copy() je spuštěna ve 4Dv18 R5, ve výchozím nastavení zkopíruje váš neměnný výběr entit jako měnitelný, takže nebudete mít žádný problém s akcí přidání!

Připravte si tedy kód takto:

Case of
: (Form event code=On Load)
Form .products:=ds.Products.all()
.copy()
End case

zachovat povahu výběrů entit

Výběry entit vytvořené z původního výběru entit si zachovávají stejnou povahu.

Příklady

Seřadit pole se seznamem

Pracujme opět na příkladu zobrazených výrobků. Tento zobrazený výběr entit byl nastaven jako měnitelný, protože uživatel potřebuje přidat nové výrobky.

Jakákoli třídicí akce na sloupcích pole seznamu zachovává měnitelnou povahu výběru entit, takže je stále možné přidávat výrobky.

Spusťte dotaz

Spustíte-li dotaz na výběr entit, povaha výběru entit se pro výsledek zachová.

V našem příkladu, pokud uživatel spustí vyhledávání na zobrazené produkty:

Form.products:=Form.products.query("name = :1"; Form.search).

Výsledek dotazu lze měnit, takže lze stále přidávat nové produkty, protože Form.products lze měnit.

To jsou pouze dva příklady. Ověřte si v dokumentaci všechny případy, kdy je zachována povaha původního výběru.

obecný kód

Může být užitečné zkontrolovat povahu výběru entit v generickém kódu, aby bylo možné jej použít vhodným způsobem. Představte si metodu přijímající výběr entit, který může být buď sdílený, nebo nesdílený.

V níže uvedeném příkladu přijímáme výběr entit Products. Před jeho předáním do PRACOVNÍHO programu musíme zkontrolovat, zda je sdílitelný. Pokud není, změníme jej na sdílený výběr entit.

K tomu používáme nový OB Is shared() funkci.

var $products; $1: cs.ProductsSelection
$products :=$1

If (Not(OB Is shared($products)))
$products :=$products.copy(ck shared)
End if
//Generate the catalog of products
CALL WORKER ("worker"; "buildCatalog"; $products; Current form window).

Poznámka: K dispozici je také nová funkce isAlterable() na výběry entit, která zjišťuje, zda je lze změnit.

Pro další příklady si stáhněte výše uvedené HDI!

Pokračujte v práci jako dříve

Pokud chcete pokračovat v chování předchozích verzí 4D (bez konceptu sdílených výběrů entit), můžete použít funkci makeSelectionsAlterable() funkci třídy dostupnou na objektu datového skladu.

Tím se pro vás změny, které přineslo 4D v18 R5, stanou zcela transparentními.

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.