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" } } ]