4D v17.4

dataClass.fromCollection( )

Inicio

 
4D v17.4
dataClass.fromCollection( )

dataClass.fromCollection( )  


 

El método dataClass.fromCollection( ) modifica o crea entidades en la dataclass utilizando la colección de objetos colObjeto, y devuelve la selección de entidades correspondiente.

En el parámetro colObjeto, pase una colección de objetos para crear  o modificar las entidades de la dataclass. Los nombres de las propiedades deben corresponder a los de la dataclass. Si un nombre de propiedad no existe en la dataclass, se ignora. Si un valor de atributo no está definido en la colección para una entidad creada, el atributo toma el valor null.

La correspondencia entre los objetos de la colección y las entidades se hace a nivel de los nombres de atributos y de su tipo de datos. Si una propiedad de objeto tiene el mismo nombre que un atributo de entidad pero sus tipos no son compatibles, el atributo de la entidad no recibe valor.

Modo creación o modificación
Para cada objeto de colObjeto:

  • Si el objeto contiene una propiedad booleana "__NEW" definida en false (o no contiene una propiedad "__NEW"), la entidad se modifica o crea con los valores correspondientes de las propiedades del objeto. No se realiza ninguna verificación con respecto a la llave primaria:
    • Si la llave primaria se da en el objeto y existe, la entidad se modifica.
      En este caso, la llave primaria puede darse tal cual o vía la propiedad "__KEY" (que contiene el valor de la propiedad primaria).
    • Si la llave primaria se da (tal cual) y no existe, se crea la entidad
    • Si la llave primaria no se da, la entidad se crea y la llave primaria se asigna según las reglas vigentes de la base de datos.
              
  • Si el objeto contiene una propiedad booleana "__NEW" definida en true, la entidad se crea con los valores correspondientes de las propiedades del objeto. Se realiza una verificación con respecto a la llave primaria:
    • Si la llave primaria se da (tal cual) y existe, se genera un error
    • Si la llave primaria se da (tal cual) y no existe, se crea la entidad
    • Si la llave primaria no se da en el objeto, la entidad se crea y la llave primaria es asignada según las reglas vigentes de la base de datos.
      Cuando la propiedad "__NEW" de establece en true, la llave primaria se debe dar como está (no con la propiedad __KEY).

        Nota: la propiedad "__KEY" que contiene un valor se tiene en cuenta solo cuando la propiedad "__NEW" se define en false (o se omite) y existe una entidad correspondiente. En todos los demás casos, el valor de la propiedad "__KEY" se ignora, el valor de la llave primaria se debe pasar "tal cual".

Entidades relativas
Los objetos de colObjeto pueden contener uno o más objetos anidados que presentan una o más entidades relativas, que pueden ser útiles para crear o actualizar relaciones entre entidades.
Los objetos anidados que presentan entidades relacionadas deben contener el atributo ___KEY (llenado con la llave primaria de la entidad relativa) o la llave primaria de la entidad relativa. El uso del atributo __KEY  permite la independencia del nombre de la llave primaria.

Nota: el contenido de las entidades relacionadas no se puede crear/actualizar a través de este mecanismo.

Stamp
Si una propiedad __STAMP es dada, se realiza una verificación con el stamp (marcador interno) de la entidad en el datastore y se puede devolver un error ("El stamp no coincide con el actual para el registro# XX de la tabla XXXX").

Queremos actualizar una entity existent. La propiedd __NEW no es dada, la llave primaria employee es dada y existe:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.ID:=668 //Llave primaria existente en la tabla Employee
 $emp.firstName:="Arthur"
 $emp.lastName:="Martin"
 $emp.employer:=New object("ID";121) //Llave primaria existente en dataClass relativa Company
  // Para este empleado, podemos cambiar Company utilizando otro PK existente en la dataClass relativa Company
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

Queremos actualizar una entidad existente. La propiedad __NEW no se da, la llave primaria del empleado está con el atributo __KEY y existe:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.__KEY:=1720 //PK existente en tabla Employee
 $emp.firstName:="John"
 $emp.lastName:="Boorman"
 $emp.employer:=New object("ID";121) //PK existente en la dataClass Company relacionada
  // Para este empleado, podemos cambiar Company utilizando otro PK existente en la dataClass Company relacionada
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

Queremos crear una nueva entidad a partir de una colección:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.firstName:="Victor"
 $emp.lastName:="Hugo"
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

Queremos crear una entidad. La propiedad __NEW es True, la llave primaria del empleado no se da:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.firstName:="Mary"
 $emp.lastName:="Smith"
 $emp.employer:=New object("__KEY";121) //Llave primaria existente en la dataClass relativa Company
 $emp.__NEW:=True
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

Queremos crear una entidad. La propiedad __NEW se omite, la llave primaria employee es dada y no existe:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.ID:=10000 //Llave primaria inexistente
 $emp.firstName:="Françoise"
 $emp.lastName:="Sagan"
 $empsCollection.push($emp)
 $employees:=ds.Employee.fromCollection($empsCollection)

En este ejemplo, la primera entidad será creada y guardada pero la segunda fallará ya que ambas utilizan la misma llave primaria:

 C_COLLECTION($empsCollection)
 C_OBJECT($emp;$emp2;$employees)
 
 $empsCollection:=New collection
 $emp:=New object
 $emp.ID:=10001 // Llave primaria inexistente
 $emp.firstName:="Simone"
 $emp.lastName:="Martin"
 $emp.__NEW:=True
 $empsCollection.push($emp)
 
 $emp2:=New object
 $emp2.ID:=10001 // Misma llave primaria, ya existente
 $emp2.firstName:="Marc"
 $emp2.lastName:="Smith"
 $emp2.__NEW:=True
 $empsCollection.push($emp2)
 $employees:=ds.Employee.fromCollection($empsCollection)
  //first entity is created
  //Error llave duplicada para la segunda entidad



Ver también 

entitySelection.toCollection( )

 
PROPIEDADES 

Producto: 4D
Tema: ORDA - DataClass

 
CONTENIDO DE LA PÁGINA 
 
HISTORIA 

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v17)
Manual de lenguaje 4D ( 4D v17.1)
Manual de lenguaje 4D ( 4D v17.2)
Manual de lenguaje 4D ( 4D v17.3)
Manual de lenguaje 4D ( 4D v17.4)