«¿Cómo puedo saber la dataClass de una entidad? Lo necesito para escribir métodos genéricos«. «Necesito información sobre un campo de una dataClass: ¿cuál es su tipo? ¿Está indexado? ¿Es único?«. Estos son los tipos de preguntas que hemos escuchado en el foro. 4D v17 R5 proporciona las respuestas: introduciendo nuevos métodos miembros de ORDA para proporcionar información útil sobre su base de datos. Siga leyendo, porque apreciará los beneficios de reducir el tamaño de su código y hacerlo reutilizable y fácil de mantener.
HDI: Ejemplo de obtención de información de la estructura de la base de datos con ORDA
Ahora, puedes obtener información relacionada con la estructura, como el número de tabla o de campo. Esto puede ser útil al integrar ORDA paso a paso en su código clásico de 4D. Sin embargo, el propósito principal de estos métodos miembros es darte una manera de escribir código genérico que sea aplicable sin importar la estructura de la base de datos.
Obtener el dataClass de una entidad o de una selección de entidades
entity dataclass
¡Qué alegría tener una entidad inteligente que conozca su propia dataClass!
El método getDataClass() devuelve el objeto dataClass correspondiente a la entidad. Luego, puedes llamar a cualquier método miembro disponible en la dataClass.
En el siguiente ejemplo, llamamos al método new() método miembro. Éste crea una nueva entidad a partir de la proporcionada y copia los datos de la dirección. También se recibe un objeto que contiene el nombre de la propiedad y su valor para la entidad recién creada.
C_OBJECT($1;$entity;$entityContent;$newEntity;$status)
C_OBJECT ($2;$attribute)
$entity :=$1
$attribute :=$2
$newEntity :=$entity.getDataClass().new()
$entityContent :=$entity.toObject("dirección.*")
//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()
clase de datos de selección de entidades
El método miembro getDataClass() devuelve el objeto dataClass correspondiente a la selección de la entidad. El método siguiente recibe una selección de entidades y crea nuevas entidades con los mismos datos de dirección.
C_OBJECT($1;$inputSelection;$newEntitySelection)
C_COLLECTION ($esContent)
$inputSelection :=$1
alert (String($inputSelection.length) + " se van a duplicar entidades")
$esContent :=$inputSelection.toCollection("dirección")
$newEntitySelection :=$inputSelection.getDataClass().fromCollection($esContent)
alert (String($newEntitySelection.length) + " se han creado entidades")
obtener información sobre una clase de datos
El método getInfo() disponible en la dataClass, también devuelve información útil. En el ejemplo siguiente, obtenemos los ID que coinciden con la clave primaria de la Persons dataClass, luego recuperamos las entidades correspondientes.
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
atributo dataclass
Con 4D V17.0, usted aprendió que cada atributo dataClass es un objeto. Ahora se han mejorado con información conceptual y estructural.
He aquí un ejemplo rápido.
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}
Descargue el IDH anterior para obtener más información. Y no deje de visitar el centro de documentación.