ORDA: Důkladně porovnejte dvě vybrané entity

Automaticky přeloženo z Deepl

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:

blank

Nyní napišme optimalizovaný kód s výběry entit!

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.