“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.