O método entity.fromObject( ) preenche a entidade com o conteúdo objeto.
Nota: Este método modifica a entidade original
O mapeamento entre objeto e entidade é feito nos nomes de atributos:
- Se uma propriedade de objeto não existir na classe de dados, é ignorada.
- Tipos de dados devem ser equivalentes. Se não houver uma correspondência de tipo entre objeto e classe de dados, 4D tenta converter os dados sempre que possível (ver RELATE MANY), senão o atributo é deixado como está
- A chave primária pode ser dada como está ou com uma propriedade "__KEY" (preenchida com um valor de chave primária). Se já não existir na classe de dados, a entidade é criada com o valor dado quando entity.save( ) for chamado. Se a chave primária não for dada, a entidade é criada e o valor de chave primária é atribuído com respeito às regras de banco de dados. O autoincremento é computado somente se a chave primária for null
objeto pode gerenciar uma entidade relacionada nas condições abaixo:
- objeto contém a chave estrangeira ou
- objeto contém uma propriedade de objeto com o mesmo nome que uma entidade relacionada contendo uma única propriedade chamada "__KEY".
- se a entidade relacionada não existir, ela é ignorada.
Com o objeto $o abaixo:
{
"firstName": "Mary",
"lastName": "Smith",
"salary": 36500,
"birthDate": "1958-10-27T00:00:00.000Z",
"woman": true,
"managerID": 411,// relatedEntity dada com PK
"employerID": 20 // relatedEntity dada com PK
}
O código abaixo cria uma entidade com a entidade relacionada manager e employer .
C_OBJECT($o)
$entity:=ds.Emp.new()
$entity.fromObject($o)
$entity.save()
Pode também ser usado uma entidade relacionada dada como um objeto:
{
"firstName": "Marie",
"lastName": "Lechat",
"salary": 68400,
"birthDate": "1971-09-03T00:00:00.000Z",
"woman": false,
"employer": {// relatedEntity dada como um objeto
"__KEY": "21"
},
"manager": {// relatedEntity given as an object
"__KEY": "411"
}
}