Méthodes membres de l’ORDA pour obtenir les informations sur la structure

Traduit automatiquement de Deepl

« Comment puis-je connaître la dataClass d’une entité ? J’en ai besoin pour écrire des méthodes génériques« .« J’ai besoin d’informations sur un champ dans une dataClass : quel est son type ? Est-il indexé ? Est-il unique ?« . Ce sont les types de questions que nous vous avons entendu poser sur le forum. 4D v17 R5 apporte les réponses : en introduisant de nouvelles méthodes membres de l’ORDA pour fournir des informations utiles sur votre base de données. Continuez à lire, car vous apprécierez les avantages de réduire la taille de votre code et de le rendre réutilisable et facile à maintenir !

HDI : Exemple d’obtention d’informations sur la structure d’une base de données avec ORDA

Maintenant, vous pouvez obtenir des informations liées à la structure, comme le numéro de la table ou du champ. Cela peut être utile lorsque vous intégrez ORDA pas à pas dans votre code 4D classique. Cependant, le but principal de ces méthodes membres est de vous donner un moyen d’écrire du code générique qui est applicable peu importe la structure de la base de données.

Obtenir la dataClass d’une entité ou d’une sélection d’entités

entity dataclass

Quelle joie d’avoir une entité intelligente qui connaît sa propre dataClass !

La méthode membre getDataClass() renvoie l’objet dataClass correspondant à l’entité. Ensuite, vous pouvez appeler n’importe quelle méthode membre disponible sur la dataClass.

Dans l’exemple ci-dessous, nous appelons la méthode new() membre. Elle crée une nouvelle entité à partir de celle fournie et copie les données d’adresse. Un objet contenant le nom de la propriété et sa valeur pour l’entité nouvellement créée est également reçu.

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

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

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

$entityContent :=$entity.toObject("adresse.*")
//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 de données de sélection d’entité

La méthode membre getDataClass() member renvoie l’objet dataClass correspondant à la sélection d’entité. La méthode ci-dessous reçoit une sélection d’entités et crée de nouvelles entités avec les mêmes données d’adresse.

C_OBJECT($1;$inputSelection;$newEntitySelection)
C_COLLECTION ($esContent)
$inputSelection :=$1
alert (String($inputSelection.length) + " les entités vont être dupliquées ")
$esContent :=$inputSelection.toCollection(" adresse ")
$newEntitySelection :=$inputSelection.getDataClass().fromCollection($esContent)
alert (String($newEntitySelection.length) + " les entités ont été créées ")

obtenir des informations sur une classe de données

La méthode membre getInfo() disponible sur la dataClass, renvoie également des informations utiles. Dans l’exemple ci-dessous, nous obtenons les ID correspondant à la clé primaire de la dataClass Persons dataClass, puis nous récupérons les entités correspondantes.

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)

attribut dataclass

Avec 4D V17.0, vous avez appris que chaque attribut dataClass est un objet. Ils ont maintenant été enrichis d’informations conceptuelles et structurelles.

Voici un exemple rapide.

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}

Téléchargez l’IDH ci-dessus pour en savoir plus ! Et n’oubliez pas de consulter le centre de documentation.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.