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