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!