El método entity.fromObject( ) llena la entidad con el contenido objeto.
Nota: este método modifica la entidad original.
El mapeo entre el objeto y la entidad se realiza en los nombres de los atributos:
- Si una propiedad del objeto no existe en la dataclass, se ignora.
- Los tipos de datos deben ser equivalentes. Si hay una discrepancia de tipo entre el objeto y la dataclass, 4D intenta convertir los datos siempre que sea posible (ver RELATE MANY), de lo contrario, el atributo quedará intacto.
- La llave primaria puede darse tal cual o con una propiedad "__KEY" ( llena con el valor de la llave primaria). Si no existe ya en la clase de datos, la entidad se crea con el valor dado cuando se llama a entity.save( ). Si no se da la llave primaria, la entidad se crea y el valor de la llave primaria se asigna con respecto a las reglas de la base de datos. El autoincremento sólo se calcula si la llave primaria es nula.
objeto puede contener una related entity bajo las siguientes condiciones:
- objeto objeto contiene la llave foránea en sí, o
- objeto contiene una propiedad de tipo objeto con el mismo nombre que la entidad relativa, que contiene una sola propiedad llamada "__KEY".
- si la entidad relativa no existe, se ignora.
Con el objeto $o siguiente:
{
"firstName": "Mary",
"lastName": "Smith",
"salary": 36500,
"birthDate": "1958-10-27T00:00:00.000Z",
"woman": true,
"managerID": 411,// relatedEntity ofrecida con la llave primaria
"employerID": 20 // relatedEntity ofrecida con la llave primaria
}
El siguiente código creará una entidad con las entidades relativas manager y employer.
C_OBJET($o)
$entity:=ds.Emp.new()
$entity.fromObject($o)
$entity.save()
Puede igualmente utilizar una entidad relativa ofrecida en forma de objeto:
{
"firstName": "Marie",
"lastName": "Lechat",
"salary": 68400,
"birthDate": "1971-09-03T00:00:00.000Z",
"woman": false,
"employer": {// relatedEntity ofrecida en forma de objeto
"__KEY": "21"
},
"manager": {// relatedEntity fofrecida en forma de objeto
"__KEY": "411"
}
}