ORDA: Confronto approfondito tra due selezioni di entità

Tradotto automaticamente da Deepl

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:

blank

Ora scriviamo codice ottimizzato con le selezioni di entità!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert è entrata a far parte del team 4D Product come Product Owner nel 2017. In qualità di Product Owner, è incaricata di scrivere le storie degli utenti e di tradurle in specifiche funzionali. Il suo ruolo è anche quello di assicurarsi che l'implementazione della funzionalità fornita soddisfi le esigenze del cliente.Marie-Sophie si è laureata presso la scuola di ingegneria ESIGELEC e ha iniziato la sua carriera come ingegnere presso IBM nel 1995. Ha partecipato a vari progetti (di manutenzione o di costruzione) e ha lavorato come sviluppatrice Cobol. In seguito ha lavorato come progettista UML e sviluppatore Java. Ultimamente i suoi ruoli principali erano l'analisi e la scrittura dei requisiti funzionali, il coordinamento dei team di business e di sviluppo.