Poiché ORDA consente di lavorare con diverse selezioni di entità contemporaneamente, siamo certi che ne trarrete vantaggio passando le selezioni di entità come parametro ai metodi del progetto o alle funzioni delle classi del modello ORDA Data.
Per lavorare in modo efficiente con la programmazione orientata agli oggetti utilizzando il minor numero possibile di righe di codice, è necessario disporre di funzioni robuste e ottimizzate. Ecco perché con 4D v19 R3 è disponibile una nuova funzione sull’oggetto entitySelection: la funzione selected() funzione.
Grazie a ciò, sarete in grado di ispezionare e confrontare due selezioni di entità. Vediamo i dettagli!
la nuova funzione selected()
Date due selezioni di entità entitàSel1 e entitàSel2, questa funzione restituisce gli indici delle entità di entitàSel2 all’interno di entitàSel1.
Capito? Ecco un esempio:
var $invoices; $selection: cs.InvoicesSelection
var $result : Object
$invoices :=ds.Invoices.all()
$selection :=ds.Invoices.query("payment = :1"; "Cash")
$result :=$invoices.selected($selection)
// $result = {ranges:[{start:1,end:1},{start:9,end:12},{start:18,end:18},{start:21,end:25}]}
La funzione selected() restituisce un oggetto con la proprietà ranges che è un insieme di oggetti.
Questi oggetti designano un intervallo di entità (inizio # fine) o una singola entità (inizio = fine).
Le entità di Invoices con pagamento = “Cash” tra tutte le fatture sono quelle con gli indici:
- 1
- da 9 a 12
- 18
- da 21 a 25
un caso d’uso concreto
Immaginiamo una biblioteca con libri di argomenti diversi (storia, arte, scienze, …). Ecco la tabella Libri:
In una pagina HTML, vogliamo evidenziare i libri su un determinato argomento.
A tale scopo, abbiamo un metodo di progetto highlight chiamato 4DACTION con un parametro soggetto.
highlight codice del metodo di progetto:
var $index : Integer
var $subject ; $text: Text
var $onSubject : cs.BooksSelection
var $indices; : $range Oggetto
: : ( ; 0) ( ; 0 ( ; ) := ( ; "soggetto") 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)
Ora eseguiamo 4DACTION/highlight?subject=History in un browser.
Ecco il risultato:
Ora scriviamo codice ottimizzato con le selezioni di entità!