Aggiungere valori alle query ORDA generiche

Tradotto automaticamente da Deepl

Ormai avrete sicuramente notato che le query ORDA non sono solo leggere e leggibili, ma permettono anche di navigare facilmente attraverso l’intero modello di dati utilizzando concetti orientati agli oggetti! In questo post vi abbiamo mostrato come scrivere query potenti e facili da mantenere. Uno dei metodi consigliati era quello di fornire la query e i valori separatamente tramite segnaposto. 4D v17 R5 fa un ulteriore passo avanti, consentendo di scrivere query ORDA generiche: salutate i segnaposto denominati per i valori!

HDI: Esempio di segnaposto denominati per i valori nelle query ORDA

Questi nuovi segnaposto sono forniti come parametri di oggetto nelle impostazioni della query. Poiché un oggetto è una mappa chiave/valore, è molto facile utilizzarli nelle query.

Un esempio vale più di mille parole

Ecco una query per ottenere un cliente di nome Charlie con il cliente Loyal come commento. Vi ricorda qualcosa? Se no, date un’occhiata a questo post per rinfrescarvi la memoria.

C_OBJECT($clients)
$clients :=ds.Clients.query("name = :1 and comment = :2"; "Charlie@"; "Loyal client")

La query può anche essere scritta come:

C_OBJECT($settings;$clients)
$settings :=New object
$settings .parameters:=New object("givenName"; "Charlie@"; "givenComment"; "Loyal client")
$clients :=ds.Clients.query("name = :givenName and comment = :givenComment";$settings)

Basta usare il segnaposto con il suo nome preceduto da “:” .

Il codice è facilmente leggibile e manutenibile, ma un vantaggio ancora maggiore è quello di poter scrivere query generiche i cui parametri possono provenire da fonti diverse (l’interfaccia dell’utente o una richiesta).

Che ne dite di uno schema come questo?

È possibile fornire agli utenti un’interfaccia di interrogazione in cui possono scegliere i criteri di ricerca e i valori da applicare.

Il codice qui sotto è per un’interfaccia che consente a un venditore di sfogliare un elenco dei suoi clienti. Restituisce contenuti filtrati in base all’ID del venditore.

C_OBJECT $queryString$settingsparameters($formData;$settings;$clients)
C_TEXT ($queryString)

$formData :=New object
DIALOG ("QueryEditor";$formData)
CLOSE WINDOW

if (OK=1)
//The logged sales person can only browse their clients
:="salesPersonUserId = :givenUserId"
//The $formData object comes from the user's interface with search criteria filled

//It contains the sales person's user id and some additional search criterias (name and city)

$settings :=New object

$settings .parameters:=$formData

If ( xml-ph-0034@deepl.ingivenName $clients#Null)
$queryString :=$queryString+" e nome = :givenName"
End if

If ($settings.parameters.givenCity#Null)
$queryString :=$queryString+" e city.name = :givenCity"
End if

:=ds.Clients.query($queryString;$settings)
end if

Gli esempi precedenti riguardano l’interrogazione di una dataClass, ma se si controlla la documentazione, si vedrà che è applicabile anche alle collezioni!

Come si vede, costruire query in modo dinamico è un gioco da ragazzi. Scaricate ed eseguite l’HDI per saperne di più!

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.