Metodi membri di ORDA per ottenere le informazioni sulla struttura

Tradotto automaticamente da Deepl

“Come posso conoscere la dataClass di un’entità? Mi serve per scrivere metodi generici“.“Ho bisogno di informazioni su un campo di una dataClass: qual è il suo tipo? È indicizzato? È unico?“. Queste sono le domande che vi abbiamo sentito porre sul forum. 4D v17 R5 fornisce le risposte: introduce nuovi metodi membri di ORDA per fornire informazioni utili sul database. Continuate a leggere, perché apprezzerete i vantaggi di ridurre le dimensioni del vostro codice e di renderlo riutilizzabile e facile da mantenere!

HDI: esempio di ottenimento di informazioni sulla struttura del database con ORDA

Ora è possibile ottenere informazioni sulla struttura, come il numero di tabella o di campo. Questo può essere utile quando si integra ORDA passo dopo passo nel codice 4D classico. Tuttavia, lo scopo principale di questi metodi membri è quello di fornire un modo per scrivere codice generico, applicabile indipendentemente dalla struttura del database.

Ottenere la dataClass di un’entità o di una selezione di entità

classe di dati dell’entità

Che gioia avere un’entità intelligente che conosce la propria classe di dati!

Il metodo getDataClass() restituisce l’oggetto dataClass corrispondente all’entità. Quindi, si può chiamare qualsiasi metodo membro disponibile sulla dataClass.

Nell’esempio seguente, chiamiamo il metodo new() il metodo member. Il metodo crea una nuova entità da quella fornita e copia i dati dell’indirizzo. Viene ricevuto anche un oggetto contenente il nome della proprietà e il suo valore per la nuova entità creata.

C_OBJECT($1;$entity;$entityContent;$newEntity;$status)
C_OBJECT ($2;$attribute)

$entity :=$1
$attribute :=$2

$newEntity :=$entity.getDataClass().new()

$entityContent :=$entity.toObject("indirizzo.*")
//We copy address from the received entity
$newEntity.fromObject($entityContent)

//We fill the created entity with received property name and value
$newEntity [$attribute.name]:=$attribute.value
$status :=$newEntity.save()

classe di dati per la selezione delle entità

Il metodo getDataClass() restituisce l’oggetto dataClass corrispondente alla selezione dell’entità. Il metodo seguente riceve una selezione di entità e crea nuove entità con gli stessi dati di indirizzo.

C_OBJECT($1;$inputSelection;$newEntitySelection)
C_COLLECTION ($esContent)
$inputSelection :=$1
alert (String($inputSelection.length) + " le entità saranno duplicate")
$esContent :=$inputSelection.toCollection("indirizzo")
$newEntitySelection :=$inputSelection.getDataClass().fromCollection($esContent)
alert (String($newEntitySelection.length) + " le entità sono state create")

ottenere informazioni su una classe di dati

Il metodo getInfo() disponibile sulla dataClass, restituisce anche informazioni utili. Nell’esempio seguente, si ottengono gli ID che corrispondono alla chiave primaria della classe di dati Persons dataClass, quindi si recuperano le entità corrispondenti.

C_OBJECT($es;$settings)
$settings :=New object
$settings .parameters:=New object("receivedIds";getIds ())
// The getIds() method returns a collection of IDs
$settings .attributes:=New object("pk";ds.Persons.getInfo().primaryKey)
$es :=ds.Persons.query(":pk in :receivedIds";$settings)

attributo dataclass

Con 4D V17.0 si è appreso che ogni attributo dataClass è un oggetto. Ora sono stati arricchiti con informazioni concettuali e strutturali.

Ecco un rapido esempio.

C_TEXT($text)
$text :=JSON Stringify(ds.Cats.ID)
//$text =
//{"name":"ID","kind":"storage","type":"number","indexed":true,
//"keywordIndexed":false,
"autoFilled":true,"mandatory":true,"unique":true,
//"fieldNumber":1,"fieldType":9}

Scaricate l’HDI qui sopra per saperne di più! E assicuratevi di dare un’occhiata al doc center.

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.