Ricordate i tempi in cui dovevate usare cicli annidati e dichiarazioni condizionali per recuperare gli attributi di un oggetto? Così si finiva per ottenere un pezzo di codice lungo e complicato? Bene, quei giorni sono finiti! Grazie alla notazione degli oggetti, combinata con le collezioni e i loro metodi, potrete scrivere codice più velocemente e in modo più leggibile!
Trovare il valore di un attributo specifico non è mai stato così facile. Diamo un’occhiata a uno scenario reale e scopriamo come!
Scenario reale
Immaginiamo di voler filtrare i processi in esecuzione in base al loro tipo.
Come forse già sapete, il comando Get process activity consente di recuperare un elenco di processi in esecuzione e di utenti connessi. Come mostrato di seguito, una parte delle informazioni restituite è il tipo di processo:
{ { "processi":[ { "name": "Main", "sessionID":"", "numero":0, "ID":0, "visible":false, "systemID":"140736073646912", "type":-39, //Processo 4D principale "state":0, "cpuUsage":0.033, "cpuTime":922.62008, "preemptive":true }, { "name": "Application process", "sessionID":"", "number":1, "ID":13, "visibile":true, "systemID":"123145536053248", "tipo":-1, //processo principale "state":2, "cpuUsage":0.002, "cpuTime":187.902836, "preemptive":false }, {} ] }
Proviamo a trovare il processo principale. Se lo facessimo alla vecchia maniera, useremmo un ciclo For con un’istruzione condizionale, il che ci lascerebbe con un pezzo di codice piuttosto lungo:
C_OBJECT($obj)
C_LONGINT ($i)
ARRAY OBJECT (processesCol;0 )
$obj:=Get process activity
OB GET ARRAY($obj;"processes";processesCol)
ARRAY OBJECT ($result;0 )
For ($i;1;Size of array(processesCol))
If (OB Get(processesCol{$i}; "type")= Main process)
APPEND TO ARRAY($result;processesCol{$i})
End if
End for
Il vecchio metodo funziona a meraviglia, ma dobbiamo ammettere che è un po’ lungo da scrivere solo per trovare un singolo elemento. Buone notizie! Grazie al metodo query è possibile estrarre facilmente il valore desiderato… in una sola riga di codice!
C_COLLECTION($result)
.
$risultato:=Get process activityprocesses.query
("type = :1";Main process)
E il gioco è fatto! Il codice è pulito, facile da capire e più leggibile. Viva la semplicità!
Abbiamo appena scalfito la superficie di ciò che si può fare. Naturalmente, il metodo query supporta operazioni più complesse! Oltre a interrogare un insieme, è possibile ordinarlo, ridurlo, espanderlo o filtrarlo. Sono disponibili più di 40 metodi per un uso ottimale delle collezioni!