Protože ORDA umožňuje pracovat s několika výběry entit současně, určitě toho využijete a budete předávat výběry entit jako parametr metodám projektu nebo funkcím tříd datového modelu ORDA.
Chcete-li efektivně pracovat s objektově orientovaným programováním s využitím co nejmenšího počtu řádků kódu, potřebujete robustní a optimalizované funkce. Proto s verzí 4D v19 R3 dodáváme novou funkci dostupnou na objektu entitySelection: funkci selected() funkce.
Díky tomu budete moci kontrolovat a porovnávat dva výběry entit. Podívejme se na podrobnosti!
nová funkce selected()
Jsou-li dány dva výběry entit entitySel1 a entitySel2, vrátí tato funkce indexy entit entitySel2 uvnitř entitySel1.
Chápete? Zde je příklad:
var $invoices $selection : cs.InvoicesSelection
var $result : Object
$invoices :=ds.Invoices.all()
$selection :=ds.Invoices.query("platba = :1"; "Hotovost")
$result :=$invoices.selected($selection)
// $result = {ranges:[{start:1,end:1},{start:9,end:12},{start:18,end:18},{start:21,end:25}]}
Funkce selected() funkce vrací objekt s vlastností ranges, což je kolekce objektů.
Tyto objekty označují rozsah entit (start # end) nebo jednu entitu (start = end).
Entity Invoices, které mají mezi všemi fakturami platbu = „Cash“, jsou entity s indexy:
- 1
- 9 až 12
- 18
- 21 až 25
konkrétní případ použití
Představte si knihovnu s knihami o různých předmětech (historie, umění, věda, …). Zde je tabulka Knihy:
Na stránce HTML chceme zvýraznit knihy o daném předmětu.
K tomu máme metodu projektu highlight, která se nazývá jako 4DACTION s parametrem subject.
highlight kód metody projektu:
var $index : Integer
var $subject ; $text: Text
var $onSubject : cs.BooksSelection
var $indices; : $range Objekt
: : ( ; 0) ( ; 0 ( ; ) := ( ; "subjekt") var $titles Collection
var $i Integer
ARRAY TEXT$anames
ARRAY TEXT$avalues
WEB GET VARIABLES$anames $avalues
//Get the subject
$indexFind in array$anames
$subject := { } $avalues$index
//Search books about the given $subject
$onSubject:= .. ("subject = :1"; ) dsBooksquery $subject
//Get ranges of books about the subject
$indices := .. . ( ) := . . . ( ; . ) ( ; . ; . ) [ ]:="<b>"+ [ ]+"</b>" := . ("<br/>") dsBooksall()selected$onSubject
//Build a collection with all the titles
$titlesdsBooksall()title
// Loop on the $indices.ranges collection of objects
// $indices.ranges is [{start:0,end:0},{start:2,end:4},{start:7,end:9},{start:11,end:11}]
For each$range $indicesranges
For$i $rangestart $rangeend
$titles$i$titles$i
End for
End for each
// Build a text with carriage returns
$text$titlesjoin
WEB SEND TEXT (
$text)
Nyní spusťme 4DACTION/highlight?subject=History v prohlížeči.
Zde je výsledek:
Nyní napišme optimalizovaný kód s výběry entit!