ORDA: trabajar con objetos y colecciones

Traducido automáticamente de Deepl

En esta última adición a la serieORDA, veremos cómo los nuevos conceptos ORDA pueden interactuar con los objetos y colecciones existentes. De hecho, es posible convertir entidades y selecciones de entidades en objetos y colecciones, así como construir entidades y selecciones de entidades a partir de objetos y colecciones. Al hacer esto, puedes integrar fácilmente el código ORDA dentro de tu código existente. Puede aprovechar todas las ventajas de ORDA sin necesidad de reescribir su código.

Hoy en día se utiliza SELECTION TO ARRAY y ARRAY TO SELECTION para trabajar de forma desconectada del servidor, pero hay que gestionar tantos arrays como campos. Y para un registro actual, no hay manera de extraerlo de ninguna forma. Con ORDA, puedes exportar fácilmente las entidades y las selecciones de entidades de la base de datos para trabajar con ellas por separado. Y eso no es todo, puede importar a la base de datos objetos y colecciones previamente creados. ¡Todo con un método único y fácil de usar!

Esto es muy útil para trabajar eficientemente en modo cliente-servidor, para comunicarse con otras aplicaciones, o para importar datos usando procesos por lotes.

ORDA: trabajar con objetos y colecciones

EXPORTACIÓN DE SELECCIONES DE ENTIDADES Y ENTIDADES A OBJETOS Y COLECCIONES

Los siguientes ejemplos se basan en esta estructura. ¡Vamos a ensuciarnos las manos!

EXPORTACIÓN A OBJETOS

Una entidad puede ser extraída como un objeto utilizando el método toObject(). Aquí, extraemos la entidad $pupil como un objeto. Podemos elegir qué propiedades extraer.

Luego, podemos aplicar el comando JSON Stringify para convertir el valor de este objeto en una cadena JSON y enviarlo a través de la red, por ejemplo C_OBJECT($pupil;$pupilObject)
C_TEXT ($pupilString)
//Get the first pupil whose last name is "Dunaway"
$pupil :=ds.Pupil.query("lastName=:1"; "Dunaway").first()
If ($pupil#Null)
// Turn the entity to an object
$pupilObject :=$pupil.toObject("firstName, lastName, email")
$pupilString :=JSON Stringify($pupilObject
) // Stringify the object
End if

El objeto $pupilObject será:

{
 "firstName": "Cecil",
 "lastName": "Dunaway",
 "email": "Cecil.Dunaway@echo"
}

EXPORTAR A COLECCIONES

Una selección de entidades puede exportarse a una colección mediante el método toCollection(). Aquí, exportamos la selección de entidades $pupils (que contiene 2 entidades) como una colección. Decidimos extraer sólo las propiedades del estudiante lastName and firstName junto con todas las propiedades de la entidad relacionada con school .

A continuación, podemos aplicar el comando JSON Stringify para convertir los valores de esta colección en una cadena JSON y enviarla por la red, por ejemplo

C_OBJECT//Turn the entity selection to a collection of objects($pupils)
C_COLLECTION ($pupilsCollection)
C_TEXT ($pupilsString)
// Get the pupils whose first name starts with "L"
$pupils :=ds.Pupil.query("firstName=:1"; "L@")

$pupilsCollection :=$pupils.toCollection("lastName,firstName,school.*")
$pupilsString :=JSON Stringify($pupilsCollection)

La colección $pupilsCollection será:

[
  {
   "firstName": "Lauren",
   "lastName": "Bouchard",
   "escuela": {
   "ID": 45,
   "name": "Escuelas de arte",
   "state": "New Jersey" }
  },
  {
   "firstName": "Laurie",
   "lastName": "Valenti",
   "escuela": {
   "ID": 46,
   "nombre": "Escuela de Matemáticas",
   "estado": "New Jersey"}
  }
]

Más opciones para toObject() y toCollection() están disponibles, ¡consulta la documentación para más detalles!

IMPORTACIÓN DE SELECCIONES DE ENTIDADES Y ENTIDADES DESDE OBJETOS Y COLECCIONES

importar desde Objetos

Se puede construir una entidad a partir de un objeto con el método fromObject() método. Aquí, creamos una nueva entidad $pupil a partir de un objeto dado:

C_OBJECT($pupil;$pupilObject)
$pupilObject :=New object("firstName"; "Mary"; "lastName"; "Smith"; "email"; "Mary.Smith@whisky")
//Create a new empty entity
$pupil:=ds.Pupil.new()
//Fill entity
$pupil.fromObject(
$pupilObject)

importar de colecciones

Una selección de entidades se puede construir a partir de una colección con el método fromCollection(). Aquí, construimos una selección de entidades $pupils a partir de una colección dada.

Tenga en cuenta que este mecanismo puede utilizarse para crear nuevas entidades o actualizar las existentes. Simplemente depende de la presencia de la clave primaria en los objetos.

C_OBJECT($pupils)
C_TEXT($txtPupils)
C_COLLECTION ($pupilsCollection)
$txtPupils :=Document to text(Get 4D folder(Current resources folder)+"pupils_data.json")
//Get a collection of objects
$pupilsCollection:=JSON Parse($txtPupils)
$pupils :=ds.Pupil.fromCollection($pupilsCollection)

y aquí está el método $pupilsCollection collection:

[
 { // La clave primaria de la entidad no se da. Se creará una nueva entidad
 "firstName": "Mark",
 "lastName": "Mac Arthur",
 "email": "Mark.MacArthur@yankee",
 "escuela": {
 "__KEY": "45"
 }
},
 { // Se da la clave primaria de la entidad. Esta entidad se actualizará (si existe)
 "__KEY": 3436, 
 "firstName": "Victor",
 "lastName": "Valenti",
 "email": "Victor.Valenti@NEWSCHOOL",
 "escuela": {
 "__KEY": "45"
 }
}
 ]

Avatar
• Propietario de producto - Marie-Sophie Landrieu-Yvert ingresó al equipo de 4D Product como Propietario de producto en 2017. Como tal, está a cargo de escribir las historias de los usuarios y luego traducirlas en especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Marie-Sophie se graduó en la Escuela de Ingeniería de ESIGELEC y comenzó su carrera como ingeniera en IBM en 1995. Participó en varios proyectos (de mantenimiento y creación) y trabajó como desarrolladora de Cobol. Luego trabajó como diseñadora de UML y desarrolladora de Java. Sus principales funciones fueron analizar y redactar requisitos funcionales, coordinar los equipos de negocio y de desarrollo.