Saltar al contenido principal
Versión: 19

Entity

Una entidad es una instancia de una Dataclass, como un registro de la tabla que coincide con la dataclass en su datastore asociado. Contiene los mismos atributos que la clase de datos, así como los valores de los datos y las propiedades y funciones específicas.

Resumen

.attributeName : any    almacena el valor del atributo para la entidad
.clone() : 4D.Entity    crea en memoria una nueva entidad que hace referencia al mismo registro que la entidad original
.diff( entityToCompare : 4D.Entity { ; attributesToCompare : Collection } ) : Collection    compara el contenido de dos entidades y devuelve sus diferencias
.drop( {mode : Integer} ) : Object    elimina los datos contenidos en la entidad del almacén de datos
.first(): 4D.Entity    devuelve una referencia a la entidad en primera posición de la selección de entidades a la que pertenece la entidad
.fromObject( filler : Object )    llena una entidad con el contenido de filler
.getDataClass() : 4D.DataClass    devuelve True si la entidad a la que se aplica acaba de ser creada y aún no se ha guardado en el almacén de datos
.getKey( { mode : Integer } ) : Text
.getKey( { mode : Integer } ) : Integer
    devuelve el valor de la llave primaria de la entidad
.getSelection(): 4D.EntitySelection    devuelve la selección de entidades a la que pertenece la entidad
.getStamp() : Integer     devuelve el valor actual del sello de la entidad
.indexOf( { entitySelection : 4D.EntitySelection } ) : Integer    devuelve la posición de la entidad en una selección de entidades
.isNew() : Boolean     devuelve True si la entidad a la que se aplica acaba de ser creada y aún no se ha guardado en el almacén de datos
.last() : 4D.Entity    devuelve una referencia a la entidad en la última posición de la selección de entidades a la que pertenece la entidad
.lock( { mode : Integer } ) : Object    pone un bloqueo pesimista en el registro referenciado por la entidad
.next() : 4D.Entity    devuelve una referencia a la siguiente entidad en la selección de entidades a la que pertenece la entidad
.previous() : 4D.Entity     devuelve una referencia a la entidad anterior en la selección de entidades a la que pertenece la entidad
.reload() : Object    recarga el contenido de la entidad en la memoria
.save( { mode : Integer } ) : Object    guarda los cambios realizados en la entidad
.toObject() : Object
.toObject( filterString : Text { ; options : Integer} ) : Object
.toObject( filterCol : Collection { ; options : Integer } ) : Object
    devuelve un objeto que ha sido creado a partir de la entidad
.touched() : Boolean    comprueba si un atributo de la entidad ha sido modificado o no desde que se cargó la entidad en la memoria o se guardó
.touchedAttributes() : Collection    devuelve los nombres de los atributos que han sido modificados desde que la entidad fue cargada en memoria
.unlock() : Object    elimina el bloqueo pesimista del registro que coincide con la entidad

.attributeName

Histórico
LanzamientoModificaciones
17Añadidos

.attributeName : any

Descripción

Todo atributo de la clase de datos está disponible como propiedad de una entidad, que almacena el valor del atributo para la entidad.

Los atributos dataclass también se pueden alcanzar utilizando la sintaxis alternativa con [ ].

El tipo de valor del atributo depende del tipo kind de atributo (relación o almacenamiento):

  • If attributeName kind is storage: .attributeName returns a value of the same type as attributeName.
  • If attributeName kind is relatedEntity: .attributeName returns the related entity. Los valores de la entidad relacionada están disponibles directamente a través de las propiedades en cascada, por ejemplo "myEntity.employer.employees[0].lastname".
  • If attributeName kind is relatedEntities: .attributeName returns a new entity selection of related entities. Se eliminan los duplicados (se devuelve una entity selection desordenada).

Ejemplo

 var $myEntity : cs.EmployeeEntity
$myEntity:=ds.Employee.new() //Crear una nueva entidad
$myEntity.name:="Dupont" // asignar 'Dupont' al atributo 'name'
$myEntity.firstname:="John" //asignar 'John' al atributo 'firstname'
$myEntity.save() //guardar la entidad

.clone()

Histórico
LanzamientoModificaciones
17Añadidos

.clone() : 4D.Entity

ParámetrosTipoDescripción
Result4D.Entity<-Nueva entidad que hace referencia al registro

| | | |

Descripción

La función .clone() crea en memoria una nueva entidad que hace referencia al mismo registro que la entidad original.

This function allows you to update entities separately. Note however that, for performance reasons, the new entity shares the same reference of object attributes as the cloned entity.

Tenga en cuenta que toda modificación realizada a las entidades se guardará en el registro referenciado solo cuando se ejecute la función .save().

Esta función sólo puede utilizarse con entidades ya guardadas en la base de datos. No se puede llamar a una entidad recién creada (para la que .isNew() devuelve True).

Ejemplo

 var $emp; $empCloned : cs.EmployeeEntity
$emp:=ds.Employee.get(672)
$empCloned:=$emp.clone()

$emp.lastName:="Smith" //Las actualizaciones realizadas en $emp no se realizan en $empCloned

.diff()

Histórico
LanzamientoModificaciones
17Añadidos

.diff( entityToCompare : 4D.Entity { ; attributesToCompare : Collection } ) : Collection

ParámetrosTipoDescripción
entityToCompare4D.Entity->Entidad a comparar con la entidad original
attributesToCompareCollection->Nombre de los atributos a comparar
ResultCollection<-Diferencias entre las entidades

|

Descripción

La función .diff() compara el contenido de dos entidades y devuelve sus diferencias.

En entityToCompare, pase la entidad a comparar con la entidad original.

En attributesToCompare, puede designar atributos específicos para comparar. Si se suministra, la comparación se realiza sólo en los atributos especificados. Si no se suministra, se devuelven todas las diferencias entre las entidades.

Las diferencias se devuelven como una colección de objetos cuyas propiedades son:

Nombre de propiedadTipoDescripción
attributeNameTextNombre del atributo
valuecualquiera - Depende del tipo de atributoValor del atributo en la entidad
otherValuecualquiera - Depende del tipo de atributoValor del atributo en entityToCompare

Sólo se incluyen en la colección los atributos con valores diferentes. Si no se encuentran diferencias, .diff() devuelve una colección vacía.

La función se aplica a las propiedades cuyo kind es storage o relatedEntity. En caso de que se haya actualizado una entidad relacionada (es decir, la llave foránea), el nombre de la entidad relacionada y su nombre de llave primaria se devuelven como propiedades attributeName (value y otherValue están vacíos para el nombre de la entidad relacionada).

Si una de las entidades comparadas es Null, se produce un error.

Ejemplo 1

 var $diff1; $diff2 : Collection
employee:=ds.Employee.query("ID=1001").first()
$clone:=employee.clone()
employee.firstName:="MARIE"
employee.lastName:="SOPHIE"
employee.salary:=500
$diff1:=$clone.diff(employee) // Se devuelven todas las diferencias
$diff2:=$clone.diff(employee;New collection"firstName"; "lastName"))
// Sólo se devuelven las diferencias en firstName y lastName

$diff1:

[
{
"attributeName": "firstName",
"value": "Natasha",
"otherValue": "MARIE"
},
{
"attributeName": "lastName",
"value": "Locke",
"otherValue": "SOPHIE"
},
{
"attributeName": "salary",
"value": 66600,
"otherValue": 500
}
]
$diff2:

[
{
"attributeName": "firstName",
"value": "Natasha",
"otherValue": "MARIE"
},
{
"attributeName": "lastName",
"value": "Locke",
"otherValue": "SOPHIE"
}
]

Ejemplo 2

 var vCompareResult1; vCompareResult2; vCompareResult3; $attributesToInspect : Collection
vCompareResult1:=New collection
vCompareResult2:=New collection
vCompareResult3:=New collection
$attributesToInspect:=New collection

$e1:=ds.Employee.get(636)
$e2:=ds.Employee.get(636)

$e1.firstName:=$e1.firstName+" update"
$e1.lastName:=$e1.lastName+" update"

$c:=ds.Company.get(117)
$e1.employer:=$c
$e2.salary:=100

$attributesToInspect.push("firstName")
$attributesToInspect.push("lastName")

vCompareResult1:=$e1.diff($e2)
vCompareResult2:=$e1.diff($e2;$attributesToInspect)
vCompareResult3:=$e1.diff($e2;$e1.touchedAttributes())

vCompareResult3 (sólo se devuelven las diferencias en atributos tocados $e1)

[
{
"attributeName": "firstName",
"value": "Karla update",
"otherValue": "Karla"
},
{
"attributeName": "lastName",
"value": "Marrero update",
"otherValue": "Marrero"
},
{
"attributeName": "salary",
"value": 33500,
"otherValue": 100
},
{
"attributeName": "employerID",
"value": 117,
"otherValue": 118
},
{
"attributeName": "employer",
"value": "[object Entity]",// Entity 117 from Company
"otherValue": "[object Entity]"// Entity 118 from Company
}
]

vCompareResult2 (sólo se devuelven las diferencias en $attributesToInspect)

[
{
"attributeName": "firstName",
"value": "Karla update",
"otherValue": "Karla"
},
{
"attributeName": "lastName",
"value": "Marrero update",
"otherValue": "Marrero"
}
]

vCompareResult1 (se devuelven todas las diferencias):

[
{
"attributeName": "firstName",
"value": "Karla update",
"otherValue": "Karla"
},
{
"attributeName": "lastName",
"value": "Marrero update",
"otherValue": "Marrero"
},
{
"attributeName": "employerID",
"value": 117,
"otherValue": 118
},
{
"attributeName": "employer",
"value": "[object Entity]",// Entity 117 from Company
"otherValue": "[object Entity]"// Entity 118 from Company

}
]

.drop()

Histórico
LanzamientoModificaciones
17Añadidos

.drop( {mode : Integer} ) : Object

ParámetrosTipoDescripción
modeInteger->dk force drop if stamp changed: activa el soltar incluso si el sello ha cambiado
ResultObject<-Resultado de la operación soltar

|

Descripción

La función .drop() elimina los datos contenidos en la entidad del almacén de datos, de la tabla relacionada con su Dataclass. Tenga en cuenta que la entidad permanece en la memoria.

En una aplicación multiusuario o multiproceso, la función .drop() se ejecuta bajo un mecanismo de "bloqueo optimista", en el que un sello de bloqueo interno se incrementa automáticamente cada vez que se guarda el registro.

Por defecto, si se omite el parámetro mode, la función devolverá un error (ver más abajo) si la misma entidad fue modificada (es decir, el sello ha cambiado) por otro proceso o usuario en el ínterin.

De lo contrario, puede pasar la opción dk force drop if stamp changed en el parámetro mode: en este caso, la entidad se abandona aunque el sello haya cambiado (y la llave primaria siga siendo la misma).

Result

El objeto devuelto por .drop( ) contiene las siguientes propiedades:

PropiedadTipoDescripción
successbooleantrue si la acción de soltar tiene éxito, false en caso contrario.
Disponible sólo en caso de error:
status(*)numberCódigo de error, ver abajo
statusText(*)textDescripción del error, ver abajo
Disponible sólo en caso de error de bloqueo pesimista:
LockKindTexttext"Locked by record"
lockInfoobjectInformación sobre el origen del bloqueo
task_idnumberId del proceso
user_nametextNombre de usuario de la sesión en la máquina
user4d_aliastextAlias de usuario si está definido por SET USER ALIAS, si no, nombre de usuario en el directorio 4D
host_nametextNombre de la máquina
task_nametextNombre del proceso
client_versiontext
Disponible sólo en caso de error grave (un error grave puede ser intentar duplicar una llave primaria, disco lleno...):
errorscollection of objects
messagetextMensaje de error
component signaturetextfirma del componente interno (por ejemplo, "dmbg" significa el componente de la base)
errCodenumberCódigo de error

(*) Los siguientes valores pueden ser devueltos en las propiedadese status y statusText del objeto Result en caso de error:

ConstanteValorComentario
dk status entity does not exist anymore5La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido abandonada (el sello ha cambiado y el espacio de memoria está ahora libre)
  • la entidad ha sido eliminada y sustituida por otra con otra llave primaria (el sello ha cambiado y una nueva entidad utiliza ahora el espacio de memoria). Cuando se utiliza entity.drop( ), este error puede ser devuelto cuando se utiliza la opción dk force drop if stamp changed. Cuando se utiliza entity.lock( ), este error puede ser devuelto cuando se utiliza la opción dk reload if stamp changed
  • statusText asociado: "La entidad ya no existe"
    dk status locked3La entidad está bloqueada por un bloqueo pesimista.
    statusText asociado: "Ya está bloqueado"
    dk status serious error4Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
    statusText asociado: "Otro error"
    dk status stamp has changed2El valor del sello interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • con .save( ): error sólo si no se utiliza la opción dk auto merge
  • con .drop( ): error sólo si no se utiliza la opción dk force drop if stamp changed
  • con .lock( ): error sólo si no se utiliza la opción dk reload if stamp changed
  • **statusText asociado **: "El sello ha cambiado"
  • Ejemplo 1

    Ejemplo sin la opción dk force drop if stamp changed:

     var $employees : cs.EmployeeSelection
    var $employee : cs.EmployeeEntity
    var $status : Object
    $employees:=ds.Employee.query("lastName=:1";"Smith")
    $employee:=$employees.first()
    $status:=$employee.drop()
    Case of
    :($status.success)
    ALERT("You have dropped "+$employee.firstName+" "+$employee.lastName) //La entidad soltada permanece en la memoria
    :($status.status=dk status stamp has changed)
    ALERT($status.statusText)
    End case

    Ejemplo 2

    Ejemplo con la opción dk force drop if stamp changed:

     var $employees : cs.EmployeeSelection
    var $employee : cs.EmployeeEntity
    var $status : Object
    $employees:=ds.Employee.query("lastName=:1";"Smith")
    $employee:=$employees.first()
    $status:=$employee.drop(dk force drop if stamp changed)
    Case of
    :($status.success)
    ALERT("You have dropped "+$employee.firstName+" "+$employee.lastName) //La entidad soltada permanece en la memoria
    :($status.status=dk status entity does not exist anymore)
    ALERT($status.statusText)
    End case

    .first()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .first(): 4D.Entity

    ParámetrosTipoDescripción
    Result4D.Entity<-Referencia a la primera entidad de una selección de entidades (Null si no se encuentra)

    |

    Descripción

    La función .first() devuelve una referencia a la entidad en primera posición de la selección de entidades a la que pertenece la entidad.

    Si la entidad no pertenece a ninguna selección de entidades existente (es decir, .getSelection( ) devuelve Null), la función devuelve un valor Null.

    Ejemplo

     var $employees : cs.EmployeeSelection
    var $employee; $firstEmployee : cs.EmployeeEntity
    $employees:=ds.Employee.query("lastName = :1";"H@") //Esta selección de entidades contiene 3 entidades
    $employee:=$employees[2]
    $firstEmployee:=$employee.first() //$firstEmployee es la primera entidad de la selección de entidades $employees

    .fromObject()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .fromObject( filler : Object )

    ParámetrosTipoDescripción
    fillerObject->Objeto a partir del cual se llena la entidad

    |

    Descripción

    La función .fromObject() llena una entidad con el contenido de filler.

    Esta función modifica la entidad original.

    El mapeo entre el objeto y la entidad se realiza sobre 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 diferencia de tipo entre el objeto y la dataclass, 4D intenta convertir los datos siempre que sea posible (ver Convertir tipos de datos), de lo contrario el atributo se deja sin tocar.
    • La llave primaria puede darse tal cual o con una propiedad "__KEY" (llenada con el valor de la llave primaria). Si no existe ya en la dataclass, la entidad se crea con el valor dado cuando se llama a .save(). Si no se da la llave primaria, se crea la entidad y se asigna el valor de la llave primaria con respecto a las reglas de la base de datos. El autoincremento sólo se calcula si la llave primaria es nula.

    filler puede manejar una entidad relacionada bajo las siguientes condiciones:

    • filler contiene la propia llave foránea, o
    • filler contiene un objeto de propiedad con el mismo nombre que la entidad relacionada, que contiene una única propiedad denominada "__KEY".
    • si la entidad relacionada no existe, se ignora.

    Ejemplo

    Con el siguiente objeto $o:

    {
    "firstName": "Mary",
    "lastName": "Smith",
    "salary": 36500,
    "birthDate": "1958-10-27T00:00:00.000Z",
    "woman": true,
    "managerID": 411,// relatedEntity dada con PK
    "employerID": 20 // relatedEntity dada con PK
    }

    El siguiente código creará una entidad con entidades relacionadas con el gerente y el empleador.

     var $o : Object
    var $entity : cs.EmpEntity
    $entity:=ds.Emp.new()
    $entity.fromObject($o)
    $entity.save()

    También puede utilizar una entidad relacionada dada como objeto:


    {
    "firstName": "Marie",
    "lastName": "Lechat",
    "salary": 68400,
    "birthDate": "1971-09-03T00:00:00.000Z",
    "woman": false,
    "employer": {// relatedEntity dada como un objeto
    "__KEY": "21"
    },
    "manager": {// relatedEntity dada como un objeto
    "__KEY": "411"
    }
    }

    .getDataClass()

    Histórico
    LanzamientoModificaciones
    17 R5Añadidos

    .getDataClass() : 4D.DataClass

    ParámetrosTipoDescripción
    Result4D.DataClass<-Objeto DataClass al que pertenece la entidad

    |

    Descripción

    La función .isNew() devuelve True si la entidad a la que se aplica acaba de ser creada y aún no se ha guardado en el almacén de datos. .

    Ejemplo

    El siguiente código genérico duplica cualquier entidad:

      //método duplicate_entity 
    //duplicate_entity($entity)

    #DECLARE($entity : 4D.Entity)
    var $entityNew : 4D.Entity
    var $status : Object

    $entityNew:=$entity.getDataClass().new() //crea una nueva entidad en la dataclass padre
    $entityNew.fromObject($entity.toObject()) //obtiene todos los atributos
    $entityNew[$entity.getDataClass().getInfo().primaryKey]:=Null //restablece la llave primaria
    $status:=$entityNew.save() //guarda la entidad duplicada

    .getKey()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .getKey( { mode : Integer } ) : Text
    .getKey( { mode : Integer } ) : Integer

    ParámetrosTipoDescripción
    modeInteger->dk key as string: la llave primaria se devuelve como una cadena, sin importar el tipo de llave primaria
    ResultText<-Valor de la llave primaria de texto de la entidad
    ResultInteger<-Valor de la llave primaria numérica de la entidad

    Descripción

    La función .getKey() devuelve el valor de la llave primaria de la entidad.

    Las llaves primarias pueden ser números (enteros) o cadenas. Puede "forzar" que el valor de la llave primaria devuelto sea una cadena, sin importar el tipo de llave primaria real, pasando la opción dk key as string en el parámetro mode.

    Ejemplo

     var $employees : cs.EmployeeSelection
    var $employee : cs.EmployeeEntity
    $employees:=ds.Employee.query("lastName=:1";"Smith")
    $employee:=$employees[0]
    ALERT("The primary key is "+$employee.getKey(dk key as string))

    .getSelection()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .getSelection(): 4D.EntitySelection

    ParámetrosTipoDescripción
    Result4D.EntitySelection<-Entity selection a la que pertenece la entidad (nula si no se encuentra)

    |

    Descripción

    La función .getSelection() devuelve la selección de entidades a la que pertenece la entidad.

    Si la entidad no pertenece a una selección de entidades, la función devuelve Null.

    Ejemplo

     var $emp : cs.EmployeeEntity
    var $employees; $employees2 : cs.EmployeeSelection
    $emp:=ds.Employee.get(672) // Esta entidad no pertenece a ninguna selección de entidades
    $employees:=$emp.getSelection() // $employees es Null

    $employees2:=ds.Employee.query("lastName=:1";"Smith") //Esta selección de entidades contiene 6 entidades
    $emp:=$employees2[0] // Esta entidad pertenece a una selección de entidades

    ALERT("La entity selection contiene "+String($emp.getSelection().length)+" entidades")

    .getStamp()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .getStamp() : Integer

    ParámetrosTipoDescripción
    ResultInteger<-Sello de la entidad (0 si la entidad acaba de ser creada)

    |

    Descripción

    La función .getStamp() devuelve el valor actual del sello de la entidad.

    El sello interno se incrementa automáticamente en 4D cada vez que se guarda la entidad. Gestiona los accesos y modificaciones concurrentes de los usuarios a las mismas entidades (ver Bloqueo de entidades).

    Para una entidad nueva (nunca guardada), la función devuelve 0. Para saber si una entidad acaba de ser creada, se recomienda utilizar .isNew().

    Ejemplo

     var $entity : cs.EmployeeEntity
    var $stamp : Integer

    $entity:=ds.Employee.new()
    $entity.lastname:="Smith"
    $entity.save()
    $stamp:=$entity.getStamp() //$stamp=1

    $entity.lastname:="Wesson"
    $entity.save()
    $stamp:=$entity.getStamp() //$stamp=2

    .indexOf()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .indexOf( { entitySelection : 4D.EntitySelection } ) : Integer

    ParámetrosTipoDescripción
    entitySelection4D.EntitySelection->La posición de la entidad se da en función de esta selección de entidades
    ResultInteger<-Posición de la entidad en una selección de entidades

    |

    Descripción

    La función .extract() devuelve la posición de la entidad en una selección de entidades.

    Por defecto, si se omite el parámetro entitySelection, la función devuelve la posición de la entidad dentro de su propia selección de entidades. En caso contrario, devuelve la posición de la entidad dentro de la entitySelection especificada.

    El valor resultante se incluye entre 0 y la longitud de la selección de entidades -1.

    • Si la entidad no tiene una selección de entidad o no pertenece a entidadSelección, la función devuelve -1.
    • Si entitySelection es Null o no pertenece a la misma clase de datos que la entidad, se produce un error.

    Ejemplo

     var $employees : cs.EmployeeSelection
    var $employee : cs.EmployeeEntity
    $employees:=ds.Employee.query("lastName = :1";"H@") //Esta entity selection contiene 3 entidades
    $employee:=$employees[1] //Esta entidad pertenece a una entity selection
    ALERT("El índice de la entidad en su propia selección de entidades es "+String($employee.indexOf())) //1

    $employee:=ds.Employee.get(725) //Esta entidad no pertenece a una selección de entidades
    ALERT("El índice de la entidad es "+String($employee.indexOf())) // -1

    .isNew()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .isNew() : Boolean

    ParámetrosTipoDescripción
    ResultBoolean<-True si la entidad acaba de ser creada y aún no se ha guardado. En caso contrario, False.

    |

    Descripción

    La función .isNew() devuelve True si la entidad a la que se aplica acaba de ser creada y aún no se ha guardado en el almacén de datos. .

    Ejemplo

     var $emp : cs.EmployeeEntity

    $emp:=ds.Employee.new()

    If($emp.isNew())
    ALERT("This is a new entity")
    End if

    .last()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .last() : 4D.Entity

    ParámetrosTipoDescripción
    Result4D.Entity<-Referencia a la última entidad de una selección de entidades (Null si no se encuentra)

    |

    Descripción

    La función .last() devuelve una referencia a la entidad en la última posición de la selección de entidades a la que pertenece la entidad.

    Si la entidad no pertenece a ninguna selección de entidades existente (es decir, .getSelection( ) devuelve Null), la función devuelve un valor Null.

    Ejemplo

     var $employees : cs.EmployeeSelection
    var $employee; $lastEmployee : cs.EmployeeEntity
    $employees:=ds.Employee.query("lastName = :1";"H@") //Esta selección de entidades contiene 3 entidades
    $employee:=$employees[0]
    $lastEmployee:=$employee.last() //$lastEmployee es la última entidad de la selección de entidades $employees

    .lock()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .lock( { mode : Integer } ) : Object

    ParámetrosTipoDescripción
    modeInteger->dk reload if stamp changed: recargar antes de bloquear si el sello ha cambiado
    ResultObject<-Resultado de la operación de bloqueo

    |

    Descripción

    La función.lock() pone un bloqueo pesimista en el registro referenciado por la entidad. El bloqueo se establece para un registro y todas las referencias de la entidad en el proceso actual.

    Otros procesos verán este registro como bloqueado (la propiedad result.success contendrá False si intentan bloquear la misma entidad usando esta función). Sólo las funciones ejecutadas en la sesión de "bloqueo" pueden editar y guardar los atributos de la entidad. La entidad puede ser cargada como de sólo lectura por otras sesiones, pero no podrán introducir y guardar valores.

    Un registro bloqueado se desbloquea:

    • cuando la función unlock() se llama en una entidad correspondiente en el mismo proceso
    • automáticamente, cuando ya no es referenciado por ninguna entidad en la memoria. Por ejemplo, si el bloqueo se pone sólo en una referencia local de una entidad, la entidad se desbloquea cuando la función termina. Mientras haya referencias a la entidad en la memoria, el registro permanece bloqueado.

    Por defecto, si se omite el parámetro mode, la función devolverá un error (ver más abajo) si la misma entidad fue modificada (es decir, el sello ha cambiado) por otro proceso o usuario en el ínterin.

    De lo contrario, puede pasar la opción dk reload if stamp changed en el parámetro mode: en este caso, no se devuelve error y la entidad se recarga cuando el sello cambia (si la entidad aún existe y la llave primaria sigue siendo la misma).

    Result

    El objeto devuelto por .lock( ) contiene las siguientes propiedades:

    PropiedadTipoDescripción
    successbooleantrue si la acción de bloqueo tiene éxito (o si la entidad ya está bloqueada en el proceso actual), false en caso contrario.
    Disponible sólo si se utiliza la opción dk reload if stamp changed:
    wasReloadedbooleantrue si la entidad fue recargada con éxito, false en caso contrario.
    Disponible sólo en caso de error:
    status(*)numberCódigo de error, ver abajo
    statusText(*)textDescripción del error, ver abajo
    Disponible sólo en caso de error de bloqueo pesimista:
    lockKindTexttext"Locked by record"
    lockInfoobjectInformación sobre el origen del bloqueo
    task_idnumberID del Proceso
    user_nametextNombre de usuario de la sesión en la máquina
    user4d_aliastextNombre o alias del usuario 4D
    user4d_idnumberID del usuario en el directorio de la base de datos 4D
    host_nametextNombre de la máquina
    task_nametextNombre del proceso
    client_versiontext
    Disponible sólo en caso de error grave (la llave primaria ya existe, el disco está lleno...):
    errorscollection of objects
    messagetextMensaje de error
    component signaturetextfirma del componente interno (por ejemplo, "dmbg" significa el componente de la base)
    errCodenumberCódigo de error

    (*) Los siguientes valores pueden ser devueltos en las propiedadese status y statusText del objeto Result en caso de error:

    ConstanteValorComentario
    dk status entity does not exist anymore5La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido abandonada (el sello ha cambiado y el espacio de memoria está ahora libre)
  • la entidad ha sido eliminada y sustituida por otra con otra llave primaria (el sello ha cambiado y una nueva entidad utiliza ahora el espacio de memoria). Cuando se utiliza .drop( ), este error puede devolverse cuando se utiliza la opción dk force drop if stamp changed. Cuando se utiliza .lock( ), este error puede ser devuelto cuando se utiliza la opción dk reload if stamp changed

  • statusText asociado: "La entidad ya no existe"
    dk status locked3La entidad está bloqueada por un bloqueo pesimista.statusText asociado: "Ya está bloqueado"
    dk status serious error4Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc. statusText asociado: "Otro error"
    dk status stamp has changed2El valor del sello interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • con .save( ): error sólo si no se utiliza la opción dk auto merge
  • con .drop( ): error sólo si no se utiliza la opción dk force drop if stamp changed
  • con .lock( ): error sólo si no se utiliza la opción dk reload if stamp changed

  • statusText asociado: "El sello ha cambiado"

    Ejemplo 1

    Ejemplo con error:

     var $employee : cs.EmployeeEntity
    var $status : Object
    $employee:=ds.Employee.get(716)
    $status:=$employee.lock()
    Case of
    :($status.success)
    ALERT("You have locked "+$employee.firstName+" "+$employee.lastName)
    :($status.status=dk status stamp has changed)
    ALERT($status.statusText)
    End case

    Ejemplo 2

    Ejemplo con la opción dk reload if stamp changed:

     var $employee : cs.EmployeeEntity
    var $status : Object
    $employee:=ds.Employee.get(717)
    $status:=$employee.lock(dk reload if stamp changed)
    Case of
    :($status.success)
    ALERT("You have locked "+$employee.firstName+" "+$employee.lastName)
    :($status.status=dk status entity does not exist anymore)
    ALERT($status.statusText)
    End case

    .next()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .next() : 4D.Entity

    ParámetrosTipoDescripción
    Result4D.Entity<-Referencia a la siguiente entidad en la selección de entidades (Null si no se encuentra)

    |

    Descripción

    La función .next() devuelve una referencia a la siguiente entidad en la selección de entidades a la que pertenece la entidad.

    Si la entidad no pertenece a ninguna selección de entidades existente (es decir, .getSelection() devuelve Null), la función devuelve un valor Null.

    Si no hay una entidad siguiente válida en la selección de entidades (es decir, se encuentra en la última entidad de la selección), la función devuelve Null. Si la siguiente entidad ha sido descartada, la función devuelve la siguiente entidad válida (y eventualmente Null).

    Ejemplo

     var $employees : cs.EmployeeSelection
    var $employee; $nextEmployee : cs.EmployeeEntity
    $employees:=ds.Employee.query("lastName = :1";"H@") //Esta selección de entidades contiene 3 entidades
    $employee:=$employees[0]
    $nextEmployee:=$employee.next() //$nextEmployee es la segunda entidad de la selección de entidades $employees

    .previous()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .previous() : 4D.Entity

    ParámetrosTipoDescripción
    Result4D.Entity<-Referencia a la entidad anterior en la selección de entidades (Null si no se encuentra)

    |

    Descripción

    La función .previous() devuelve una referencia a la entidad anterior en la selección de entidades a la que pertenece la entidad.

    Si la entidad no pertenece a ninguna selección de entidades existente (es decir, .getSelection() devuelve Null), la función devuelve un valor Null.

    Si no hay una entidad anterior válida en la selección de entidades (es decir, se encuentra en la primera entidad de la selección), la función devuelve Null. Si la entidad anterior ha sido soltada, la función devuelve la entidad válida anterior (y eventualmente Null).

    Ejemplo

     var $employees : cs.EmployeeSelection
    var $employee; $previousEmployee : cs.EmployeeEntity
    $employees:=ds.Employee.query("lastName = :1";"H@") //Esta selección de entidades contiene 3 entidades
    $employee:=$employees[1]
    $previousEmployee:=$employee.previous() //$previousEmployee es la primera entidad de la selección de entidades $employees

    .reload()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .reload() : Object

    ParámetrosTipoDescripción
    ResultObject<-Objeto estado

    |

    Descripción

    La función .reload() recarga el contenido de la entidad en la memoria, de acuerdo a la información almacenada en la tabla relacionada con la clase de datos en el almacén de datos. La recarga se realiza sólo si la entidad sigue existiendo con la misma llave primaria.

    Result

    El objeto devuelto por .reload( ) contiene las siguientes propiedades:

    PropiedadTipoDescripción
    successbooleanTrue si la acción de recarga tiene éxito, False en caso contrario.Disponible sólo en caso de error:
    status(*)numberCódigo de error, ver abajo
    statusText(*)textDescripción del error, ver abajo

    (*) Los siguientes valores pueden ser devueltos en las propiedades status y statusText del objeto Result en caso de error:

    ConstanteValorComentario
    dk status entity does not exist anymore5La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido abandonada (el sello ha cambiado y el espacio de memoria está ahora libre)
  • la entidad ha sido eliminada y sustituida por otra con otra llave primaria (el sello ha cambiado y una nueva entidad utiliza ahora el espacio de memoria). the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). Cuando se utiliza .lock( ), este error puede ser devuelto cuando se utiliza la opción dk reload if stamp changed

  • statusText asociado: "La entidad ya no existe"
    dk status serious error4Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc.
    statusText asociado: "Otro error"

    Ejemplo

     var $employee : cs.EmployeeEntity
    var $employees : cs.EmployeeSelection
    var $result : Object

    $employees:=ds.Employee.query("lastName=:1";"Hollis")
    $employee:=$employees[0]
    $employee.firstName:="Mary"
    $result:=$employee.reload()
    Case of
    :($result.success)
    ALERT("Reload has been done")
    :($result.status=dk status entity does not exist anymore)
    ALERT("The entity has been dropped")
    End case

    .save()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .save( { mode : Integer } ) : Object

    ParámetrosTipoDescripción
    modeInteger->dk auto merge: activa el modo de fusión automática
    ResultObject<-Resultado de la operación guardar

    |

    Descripción

    La función .save() guarda los cambios realizados en la entidad en la tabla relacionada con su dataClass. Debe llamar a este método después de crear o modificar una entidad si quiere guardar los cambios realizados en ella.

    La operación de guardar se ejecuta sólo si se ha "tocado" al menos un atributo de la entidad (ver las funciones .touched() y .touchedAttributes()). En caso contrario, la función no hace nada (no se llama al activador).

    En una aplicación multiusuario o multiproceso, la función .save() se ejecuta bajo un mecanismo de "bloqueo optimista", en el que un sello de bloqueo interno se incrementa automáticamente cada vez que se guarda el registro.

    Por defecto, si se omite el parámetro mode, el método devolverá un error (ver más abajo) siempre que la misma entidad haya sido modificada por otro proceso o usuario mientras tanto, sin importar el atributo o atributos modificados.

    En caso contrario, se puede pasar la opción dk auto merge en el parámetro mode: cuando el modo de fusión automática está activado, una modificación realizada simultáneamente por otro proceso/usuario en la misma entidad pero en un atributo diferente no dará lugar a un error. Los datos resultantes guardados en la entidad serán la combinación (la "fusión") de todas las modificaciones no concurrentes (si se aplicaron modificaciones al mismo atributo, el guardado falla y se devuelve un error, incluso con el modo de fusión automática).

    El modo de fusión automática no está disponible para los atributos de tipo Imagen, Objeto y Texto cuando se almacenan fuera del registro. Los cambios concurrentes en estos atributos darán lugar a un error dk status stamp has changed.

    Result

    El objeto devuelto por .save() contiene las siguientes propiedades:

    PropiedadTipoDescripción
    successbooleanTrue si la acción guardar tiene éxito, false en caso contrario.
    Disponible sólo si se utiliza la opción dk auto merge:
    autoMergedbooleanTrue si se ha realizado una fusión automática, False en caso contrario.
    Disponible sólo en caso de error:
    statusnumberCódigo de error, ver abajo
    statusTexttextDescripción del error, ver más abajo
    Disponible sólo en caso de bloqueo pesimista:
    lockKindTexttext"Locked by record"
    lockInfoobjectInformación sobre el origen del bloqueo
    task_idnumberId del proceso
    user_nametextNombre de usuario de la sesión en la máquina
    user4d_aliastextAlias de usuario si está definido por SET USER ALIAS, si no, nombre de usuario en el directorio 4D
    host_nametextNombre de la máquina
    task_nametextNombre del proceso
    client_versiontext
    Disponible sólo en caso de error grave (error grave - puede ser intentar duplicar una llave primaria, disco lleno...):
    errorscollection of objects
    messagetextMensaje de error
    componentSignaturetextFirma del componente interno (por ejemplo, "dmbg" significa el componente de la base)
    errCodenumberCódigo de error
    status y statusText

    Los siguientes valores pueden ser devueltos en las propiedades status y statusText del objeto Result en caso de error:

    ConstanteValorComentario
    dk status automerge failed6(Sólo si se utiliza la opción dk auto merge) La opción de fusión automática falló al guardar la entidad.StatusText asociado: "Fusión automática fallida"
    dk status entity does not exist anymore5La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:
  • la entidad ha sido abandonada (el sello ha cambiado y el espacio de memoria está ahora libre)
  • la entidad ha sido eliminada y sustituida por otra con otra llave primaria (el sello ha cambiado y una nueva entidad utiliza ahora el espacio de memoria). the entity has been dropped and replaced by another one with another primary key (the stamp has changed and a new entity now uses the memory space). Cuando se utiliza .lock( ), este error puede ser devuelto cuando se utiliza la opción dk reload if stamp changed

  • statusText asociado: "La entidad ya no existe"
    dk status locked3La entidad está bloqueada por un bloqueo pesimista.statusText asociado: "Ya está bloqueado"
    dk status serious error4Un error grave es un error de base de datos de bajo nivel (por ejemplo, una llave duplicada), un error de hardware, etc. statusText asociado: "Otro error"
    dk status stamp has changed2El valor del sello interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista).
  • con .save( ): error sólo si no se utiliza la opción dk auto merge
  • con .drop( ): error sólo si no se utiliza la opción dk force drop if stamp changed
  • con .lock( ): error sólo si no se utiliza la opción dk reload if stamp changed

  • statusText asociado: "El sello ha cambiado"

    Ejemplo 1

    Crear una nueva entidad:

     var $status : Object
    var $employee : cs.EmployeeEntity
    $employee:=ds.Employee.new()
    $employee.firstName:="Mary"
    $employee.lastName:="Smith"
    $status:=$employee.save()
    If($status.success)
    ALERT("Employee created")
    End if

    Ejemplo 2

    Actualización de una entidad sin la opción dk auto merge:

     var $status : Object
    var $employee : cs.EmployeeEntity
    var $employees : cs.EmployeeSelection
    $employees:=ds.Employee.query("lastName=:1";"Smith")
    $employee:=$employees.first()
    $employee.lastName:="Mac Arthur"
    $status:=$employee.save()
    Case of
    :($status.success)
    ALERT("Employee updated")
    :($status.status=dk status stamp has changed)
    ALERT($status.statusText)
    End case

    Ejemplo 3

    Actualización de una entidad con la opción dk auto merge:

     var $status : Object

    var $employee : cs.EmployeeEntity
    var $employees : cs.EmployeeSelection

    $employees:=ds.Employee.query("lastName=:1";"Smith")
    $employee:=$employees.first()
    $employee.lastName:="Mac Arthur"
    $status:=$employee.save(dk auto merge)
    Case of
    :($status.success)
    ALERT("Employee updated")
    :($status.status=dk status automerge failed)
    ALERT($status.statusText)
    End case

    .toObject()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .toObject() : Object
    .toObject( filterString : Text { ; options : Integer} ) : Object
    .toObject( filterCol : Collection { ; options : Integer } ) : Object

    ParámetrosTipoDescripción
    filterStringText->Atributo(s) a extraer (cadena separada por comas)
    filterColCollection->Colección de atributos a extraer
    optionsInteger->dk with primary key: añade la propiedad _KEY;
    dk with stamp: añade la propiedad _STAMP
    ResultObject<-Objeto creado a partir de la entidad

    |

    Descripción

    La función .toObject() devuelve un objeto que ha sido creado a partir de la entidad. Los nombres de las propiedades en el objeto coinciden con los nombres de los atributos de la entidad.

    Si no se especifica ningún filtro, o si el parámetro filterString contiene una cadena vacía o "*", el objeto devuelto contendrá:

    • todos los atributos de la entidad de almacenamiento
    • atributos de la relatedEntity kind: se obtiene una propiedad con el mismo nombre que la entidad relacionada (nombre del enlace muchos-a-uno). El atributo se extrae con la forma simple.
    • atributos donde kind es relatedEntities: no se devuelve el atributo.

    En el primer parámetro, se pasa el atributo o atributos de la entidad a extraer. Puede pasar:

    • filterString: una cadena con rutas de propiedades separadas por comas: "propertyPath1, propertyPath2, ...", o
    • filterCol: una colección de cadenas: ["propertyPath1","propertyPath2";...]

    Si se especifica un filtro para los atributos de la relatedEntity kind:

    • propertyPath = "relatedEntity" -> se extrae de forma sencilla: un objeto con la propiedad __KEY (llave primaria).
    • propertyPath = "relatedEntity.*" -> se extraen todas las propiedades
    • propertyPath = "relatedEntity.propertyName1; relatedEntity.propertyName2; ..." -> sólo se extraen esas propiedades

    Si se especifica un filtro para los atributos de las relatedEntities kind:

    • propertyPath = "relatedEntities.*" -> se extraen todas las propiedades
    • propertyPath = "relatedEntities.propertyName1; relatedEntities.propertyName2; ..." -> sólo se extraen esas propiedades

    En el parámetro options se puede pasar el selector ddk with primary key y/odk with stamp para añadir las llaves primarias de la entidad y/o los sellos en los objetos extraídos.

    Ejemplo 1

    En todos los ejemplos de esta sección se utilizará la siguiente estructura:

    Sin parámetro de filtro:

    employeeObject:=employeeSelected.toObject()

    Ejemplo con el tipo relatedEntity con una forma simple:

    {
    "ID": 413,
    "firstName": "Greg",
    "lastName": "Wahl",
    "salary": 0,
    "birthDate": "1963-02-01T00:00:00.000Z",
    "woman": false,
    "managerID": 412,
    "employerID": 20,
    "photo": "[object Picture]",
    "extra": null,
    "employer": { // relatedEntity extracted with simple form
    "__KEY": 20
    },
    "manager": {
    "__KEY": 412
    }
    }

    Ejemplo 2

    Extraer la llave primaria y el sello:

    employeeObject:=employeeSelected.toObject("";dk with primary key+dk with stamp)

    Ejemplo con el tipo relatedEntity con una forma simple:

    {
    "__KEY": 413,
    "__STAMP": 1,
    "ID": 413,
    "firstName": "Greg",
    "lastName": "Wahl",
    "salary": 0,
    "birthDate": "1963-02-01T00:00:00.000Z",
    "woman": false,
    "managerID": 412,
    "employerID": 20,
    "photo": "[object Picture]",
    "extra": null,
    "employer": {
    "__KEY": 20
    },
    "manager": {
    "__KEY": 412
    }
    }

    Ejemplo 3

    Desplegando todas las propiedades de relatedEntities:

    employeeObject:=employeeSelected.toObject("directReports.*")
    {
    "directReports": [
    {
    "ID": 418,
    "firstName": "Lorena",
    "lastName": "Boothe",
    "salary": 44800,
    "birthDate": "1970-10-02T00:00:00.000Z",
    "woman": true,
    "managerID": 413,
    "employerID": 20,
    "photo": "[object Picture]",
    "extra": null,
    "employer": {
    "__KEY": 20
    },
    "manager": {
    "__KEY": 413
    }
    },
    {
    "ID": 419,
    "firstName": "Drew",
    "lastName": "Caudill",
    "salary": 41000,
    "birthDate": "2030-01-12T00:00:00.000Z",
    "woman": false,
    "managerID": 413,
    "employerID": 20,
    "photo": "[object Picture]",
    "extra": null,
    "employer": {
    "__KEY": 20
    },
    "manager": {
    "__KEY": 413
    }
    },
    {
    "ID": 420,
    "firstName": "Nathan",
    "lastName": "Gomes",
    "salary": 46300,
    "birthDate": "2010-05-29T00:00:00.000Z",
    "woman": false,
    "managerID": 413,
    "employerID": 20,
    "photo": "[object Picture]",
    "extra": null,
    "employer": {
    "__KEY": 20
    },
    "manager": {
    "__KEY": 413
    }
    }
    ]
    }

    Ejemplo 4

    Extracción de algunas propiedades de relatedEntities:

     employeeObject:=employeeSelected.toObject("firstName, directReports.lastName")

    Ejemplo con el tipo relatedEntity con una forma simple:

    {
    "firstName": "Greg",
    "directReports": [
    {
    "lastName": "Boothe"
    },
    {
    "lastName": "Caudill"
    },
    {
    "lastName": "Gomes"
    }
    ]
    }

    Ejemplo 5

    Obtenga una relatedEntity en un formulario simple:

     $coll:=New collection("firstName";"employer")
    employeeObject:=employeeSelected.toObject($coll)

    Ejemplo con el tipo relatedEntity con una forma simple:

    {
    "firstName": "Greg",
    "employer": {
    "__KEY": 20
    }
    }

    Ejemplo 6

    Extracción de todas las propiedades de una Entidad relacionada:

     employeeObject:=employeeSelected.toObject("employer.*")

    Ejemplo con el tipo relatedEntity con una forma simple:

    {
    "employer": {
    "ID": 20,
    "name": "India Astral Secretary",
    "creationDate": "1984-08-25T00:00:00.000Z",
    "revenues": 12000000,
    "extra": null
    }
    }

    Ejemplo 7

    Extracción de algunas propiedades de una Entidad relacionada:

     $col:=New collection
    $col.push("employer.name")
    $col.push("employer.revenues")
    employeeObject:=employeeSelected.toObject($col)

    Ejemplo con el tipo relatedEntity con una forma simple:

    {
    "employer": {
    "name": "India Astral Secretary",
    "revenues": 12000000
    }
    }

    .touched( )

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .touched() : Boolean

    ParámetrosTipoDescripción
    ResultBoolean<-True si se ha modificado al menos un atributo de la entidad y aún no se ha guardado, si no, False

    |

    Descripción

    La función .touched() comprueba si un atributo de la entidad ha sido modificado o no desde que se cargó la entidad en la memoria o se guardó.

    Si un atributo ha sido modificado o calculado, la función devuelve True, en caso contrario devuelve False. Puede utilizar esta función para determinar si necesita guardar la entidad.

    Esta función devuelve False para una nueva entidad que acaba de ser creada (con .new( )). Tenga en cuenta, sin embargo, que si utiliza una función que calcula un atributo de la entidad, la función .touched() devolverá entonces True. Por ejemplo, si se llama a .getKey() para calcular la llave primaria, .touched() devuelve True.

    Ejemplo

    En este ejemplo, comprobamos si es necesario guardar la entidad:

     var $emp : cs.EmployeeEntity
    $emp:=ds.Employee.get(672)
    $emp.firstName:=$emp.firstName //Aunque se actualice con el mismo valor, el atributo se marca como tocado

    If($emp.touched()) //si se ha modificado al menos uno de los atributos
    $emp.save()
    End if // de lo contrario, no es necesario guardar la entidad

    .touchedAttributes( )

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .touchedAttributes() : Collection

    ParámetrosTipoDescripción
    ResultCollection<-Nombres de atributos tocados, o colección vacía

    |

    Descripción

    La función .touchedAttributes() devuelve los nombres de los atributos que han sido modificados desde que la entidad fue cargada en memoria.

    Esto se aplica a los atributos kind storage o relatedEntity.

    En el caso de que se haya tocado una entidad relacionada (es decir, la llave externa), se devuelve el nombre de la entidad relacionada y el nombre de su llave primaria.

    Si no se ha tocado ningún atributo de entidad, el método devuelve una colección vacía.

    Ejemplo 1

     var $touchedAttributes : Collection
    var $emp : cs.EmployeeEntity

    $touchedAttributes:=New collection
    $emp:=ds.Employee.get(725)
    $emp.firstName:=$emp.firstName //Aunque se actualice con el mismo valor, el atributo se marca como tocado
    $emp.lastName:="Martin"
    $touchedAttributes:=$emp.touchedAttributes()
    //$touchedAttributes: ["firstName","lastName"]

    Ejemplo 2

     var $touchedAttributes : Collection
    var $emp : cs.EmployeeEntity
    var $company : cs.CompanyEntity

    $touchedAttributes:=New collection

    $emp:=ds.Employee.get(672)
    $emp.firstName:=$emp.firstName
    $emp.lastName:="Martin"

    $company:=ds.Company.get(121)
    $emp.employer:=$company

    $touchedAttributes:=$emp.touchedAttributes()

    //collection $touchedAttributes: ["firstName","lastName","employer","employerID"]

    En este caso:

    • firstName y lastName tienen un tipo storage
    • employer tiene un tipo relatedEntity
    • employerID es la llave extranjera de la entidad relacionada con el empleador

    .unlock()

    Histórico
    LanzamientoModificaciones
    17Añadidos

    .unlock() : Object

    ParámetrosTipoDescripción
    ResultObject<-Objeto estado

    |

    Descripción

    La función .unlock() elimina el bloqueo pesimista del registro que coincide con la entidad en el almacén de datos y la tabla relacionados con su clase de datos.

    Para más información, consulte la sección Entity locking.

    Un registro se desbloquea automáticamente cuando ya no es referenciado por ninguna entidad en el proceso de bloqueo (por ejemplo: si el bloqueo se pone sólo en una referencia local de una entidad, la entidad y, por tanto, el registro se desbloquea cuando el proceso termina).

    Cuando un registro se bloquea, debe desbloquearse desde el proceso de bloqueo y en la referencia de la entidad que puso el bloqueo. Por ejemplo:

     $e1:=ds.Emp.all()[0]
    $e2:=ds.Emp.all()[0]
    $res:=$e1.lock() //$res.success=true
    $res:=$e2.unlock() //$res.success=false
    $res:=$e1.unlock() //$res.success=true

    Result

    El objeto devuelto por <.unlock()< contiene la siguiente propiedad:

    PropiedadTipoDescripción
    successBooleanTrue si la acción de desbloquear tiene éxito, False en caso contrario. Si el desbloqueo se realiza en una entidad abandonada, en un registro no bloqueado o en un registro bloqueado por otro proceso o entidad, el éxito es False.

    Ejemplo

     var $employee : cs.EmployeeEntity
    var $status : Object

    $employee:=ds.Employee.get(725)
    $status:=$employee.lock()
    ... //processing
    $status:=$employee.unlock()
    If($status.success)
    ALERT("The entity is now unlocked")
    End if