Le funzionalità di ORDA continuano ad arrivare con 4D v17 R5! In un precedente post del blog, abbiamo mostrato come creare query generiche con segnaposto per i valori. Questo post si concentra su come utilizzare i segnaposto per i percorsi degli attributi (nomi di campi nelle tabelle).
HDI: Esempio di segnaposto per percorsi di attributi nelle query ORDA
Sono disponibili due tipi di segnaposto:
Segnaposto indicizzati
Vediamo un esempio di utilizzo di segnaposto indicizzati per i percorsi degli attributi. Vogliamo trovare i clienti il cui nome inizia con “Bravo” e che hanno “Nuovo cliente” nel campo dei commenti:
C_OBJECT($clients)
$clients :=ds.Clients.query(":1 = 'Bravo@' e :2 = 'Nuovo cliente'"; "nome"; "commento")
I segnaposto sono inseriti come :paramIndex( ad esempio, :1, :2, … con un incremento di 1) nella stringa di query. I valori corrispondenti sono forniti dalla sequenza di parametri valore.
segnaposto denominati
Si possono usare anche i segnaposto con nome. Essi utilizzano lo stesso concetto dei segnaposto denominati per i valori. I parametri sono inseriti come :paramName e i loro valori sono forniti nella stringa di query:
C_OBJECT($clients;$settings)
$settings :=New object
$settings .attributes:=New object("pathOfName"; "name"; "pathOfComment"; "comment")
$clients :=ds.Clients.query(":pathOfName = 'Bravo@' e :pathOfComment = 'Nuovo cliente'";$settings)
Perché usare i segnaposto?
Vediamo il campo licencesInfo oggetto. Indica il numero di licenze in stile licenceName:number.
{"licencesInfo":
{"4DDevPro":10, //This client has 10 4DDevPro licences
"4DServerV17_2":18,
"4DWebappserverV17_2":23}
}
Per trovare il numero di licenze “4DDevPro”, è possibile scrivere questa query:
C_OBJECT($clients)
$clients :=ds.Clients.query("licencesInfo.4DDevPro >=0")
Ma ora guardiamo questo licencesInfo campo oggetto. Si può notare che l’uso dei segnaposto per i percorsi degli attributi può essere particolarmente utile quando si interroga un oggetto i cui nomi di proprietà non sono conformi alla notazione a punti:
{"licencesInfo":
{"4D Dev. Pro":10, //This client has 10 4D Dev. Pro licences
"4D Server V17.2":18,
"4D Web app/server V17.2":23}
}
In questo caso particolare, fornire i parametri come un insieme di stringhe risolve il problema, perché saranno interpretati dalla query come un percorso di attributi.
C_OBJECT($clients)
$clients :=ds.Clients.query(":1 >=0";New collection("licensesInfo"; "4D Dev. Pro"))
Questo non è l’unico vantaggio dell’uso dei segnaposto. C’è anche un aspetto di sicurezza maggiore, poiché l’uso dei segnaposto impedisce l’inserimento di codice dannoso. Inoltre, non è più necessario preoccuparsi di problemi di formattazione o di caratteri. L’elenco continua…
Gli esempi precedenti riguardano l’interrogazione di una classe di dati, ma se si controlla la documentazione, si vedrà che è applicabile anche alle collezioni. Scoprirete anche altri esempi che dimostrano perché l’uso dei segnaposto è una buona scelta!