Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com

Inicio

 
4D v19.8
dataClass.fromCollection( )

dataClass.fromCollection( ) 


 

dataClass.fromCollection ( colObjeto {; parametros} ) -> Resultado 
Parámetro Tipo   Descripción
colObjeto  Collection in Colección de objetos a mapear con entidades
parametros  Objeto in Opción de creación: contexto
Resultado  EntitySelection in Entity selection llenada desde la colección

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").

En el parámetro opcional parametros, puede pasar un objeto que contiene opciones adicionales. La siguiente propiedad es soportada:

PropiedadTipoDescripción
contextTextoEtiqueta para el contexto de optimización aplicado a la selección de entidades. Este contexto será utilizado por el código que maneja la selección de entidades para que pueda beneficiarse de la optimización. Esta funcionalidad está diseñada para el procesamiento cliente/servidor ORDA; para más información, consulte la sección Optimización Cliente/servidor.

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 

Creado por: 4D v17
Modificado: 4D v17 R5

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v19)
Manual de lenguaje 4D ( 4D v19.1)
Manual de lenguaje 4D ( 4D v19.4)
Manual de lenguaje 4D ( 4D v19.5)
Manual de lenguaje 4D ( 4D v19.6)
Manual de lenguaje 4D ( 4D v19.7)
Manual de lenguaje 4D ( 4D v19.8)