Gestire le entità in una selezione di entità

Tradotto automaticamente da Deepl

PRIMO RECORD, ULTIMO RECORD, RECORD SUCCESSIVO, RECORD PRECEDENTE; vi ricorda qualcosa? Scommetto di sì. Li avete già usati per gestire le selezioni! ORDA fornisce metodi utili e familiari per navigare tra le entità in una selezione di entità e, ovviamente, alcuni vantaggi!

Per cominciare, è possibile gestire più selezioni di entità contemporaneamente e navigare tra di esse in modo indipendente, mentre normalmente è possibile gestire solo una singola ‘selezione corrente’ per tabella. È proprio quello che vedremo in questo post.

Abbiamo già visto che l’interrogazione del datastore restituisce una selezione di entità. ORDA fornisce i mezzi per accedere alle entità di una selezione di entità in modo molto semplice.

ORDA: Gestire le entità nelle selezioni di entità

CREARE E RIEMPIRE LE SELEZIONI DI ENTITÀ

Una selezione di entità vuota viene creata con il metodo newSelection() . È anche possibile aggiungere entità ad essa con il metodo add() metodo.

ESEMPIO

C_OBJECT($employee;$es)
C_TEXT ($name)

//Create a new empty entity selection
$es :=ds.Employee.newSelection()
Repeat
$name :=Request("Quale dipendente?")
If (ok=1)
//Get the first employee whose last name is $name
$employee :=ds.Employee.query("lastName=:1";$nome).first()
//Add the entity to the new entity selection $es
If ($employee#Null)
$es .add($employee)
End if
End if
Until (ok=0)
alert (String($es.length) + " i dipendenti sono stati aggiunti alla nuova selezione di entità")

ACCESSO ALLE ENTITÀ IN UNA SELEZIONE DI ENTITÀ

Si ricordi che è possibile iterare le entità in una selezione di entità con il metodo for each con il ciclo. Ecco un rapido esempio, ma si veda anche questo blogpost.

C_OBJECT($employeesParis;$employee;$status)

// Get employees working in Paris
$employeesParis :=ds.Employee.query("città='Parigi'")
//Iterate through each employee
For each ($employee;$employeesParis)
$employee.lastName:=Uppercase($employee.lastName)
$status:=$employee.save()
End for each

È anche possibile caricare un’entità con il suo indice in una selezione di entità (l’indice inizia da 0). Ecco un esempio:

C_OBJECT($gamers)
//Get all the gamers sorted by rank
$gamers :=ds.Gamer.all().orderBy("rank")
if ($gamers.length >=3)
ALERT ("I primi tre sono: " +Char(13) \
+$gamers[0].lastName+Char(13)+$gamers[1].lastName+Char(13)+$gamers[2].lastName)
End if

PRIMA E ULTIMA ENTITÀ

Il metodo first() e last() consentono di ottenere la prima o l’ultima entità di una selezione di entità. Questi metodi possono restituire Null se la selezione di entità è vuota.

Nell’esempio seguente, otteniamo la prima entità della selezione di entità $gamers:

C_OBJECT($gamers;$first)
// Get the gamers whose last name starts with "H"
$gamers :=ds.Gamer.query("lastName='H@'")
// Get the first entity of the $gamers entity selection
$first :=$gamers.first()
If ($first#Null)
ALERT ("Il primo giocatore è stato trovato")
Else
ALERT ("La selezione di entità $gamers è vuota")
End if

Entità precedenti e successive

Un’entità può appartenere a una selezione di entità. In questo caso, è possibile iterare le entità di una selezione di entità con i metodi previous() e next() .

In questo esempio, utilizziamo un modulo per visualizzare un elenco di giocatori. L’utente può navigare tra i dettagli di ciascun giocatore con i pulsanti Previous e Next.

Il pulsante Next ha il seguente metodo oggetto:

//Form.gamer is an entity, edited on the form. It belongs to an entity selection which is the entire list of gamers.
If ( . . ()# ) . := . . () FormgamernextNull
//Edit the next entity of the entity selection to which the Form.gamer entity belongs.
FormgamerFormgamernext
End if

informazioni su un’entità

E non è tutto! Per qualsiasi entità, è possibile ottenere la selezione dell’entità da cui proviene. Un’altra cosa da sapere è che esistono anche metodi per ottenere informazioni contestuali su un’entità, per esempio per verificare se appartiene a una determinata selezione di entità, per ottenere la sua posizione in una selezione di entità, ecc.

Qui abbiamo due selezioni di entità ($employeesParis e $employeesNY). Il metodo selectedEmployee seleziona un dipendente in una di esse. Possiamo quindi determinare a quale selezione di entità appartiene questo dipendente con il metodo contains() :

C_OBJECT$employee($employeesParis;$employeesNY;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
// Get employees working in New York
$employeesNY :=ds.Employee.query("city='New York'")
// The method selectedEmployee returns an employee in one of the two given entity selections
:=selectedEmployee($employeesParis;$employeesNY)

Case of
: ($employeesParis.contains($employee))
ALERT ("Il dipendente appartiene alla selezione di entità $employeesParis")
: ($employeesNY.contains($employee))
ALERT ("Il dipendente appartiene alla selezione di entità $employeesNY")
End case

Qui abbiamo una selezione di entità ($employeesParis). Il metodo selectedEmployee seleziona un dipendente da essa. Possiamo ottenere l’indice del dipendente nella selezione di entità con il metodo indexOf() metodo:

C_OBJECT($employeesParis;$employee)
// Get employees working in Paris
$employeesParis :=ds.Employee.query("city='Paris'")
// The method selectedEmployee returns an employee in the given entity selection
$employee :=selectedEmployee ($employeesParis)
ALERT ("L'indice del dipendente selezionato è " + String($employee.indexOf()))

Date un’occhiata all’esempio di database e saprete tutto su questo argomento!

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.