Segnaposto per i percorsi degli attributi nelle query ORDA

Tradotto automaticamente da Deepl

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!

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.