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 la clase de datos de la entidad |
.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
Lanzamiento | Modificaciones |
---|---|
17 | Añ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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.clone() : 4D.Entity
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.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. Esta función permite actualizar las entidades por separado.
Tenga en cuenta que toda modificación realizada a las entidades se guardará en el registro referenciado sólo 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.diff( entityToCompare : 4D.Entity { ; attributesToCompare : Collection } ) : Collection
Parámetros | Tipo | Descripción | |
---|---|---|---|
entityToCompare | 4D.Entity | -> | Entidad a comparar con la entidad original |
attributesToCompare | Collection | -> | Nombre de los atributos a comparar |
Result | Collection | <- | 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 propiedad | Tipo | Descripción |
---|---|---|
attributeName | String | Nombre del atributo |
value | cualquiera - Depende del tipo de atributo | Valor del atributo en la entidad |
otherValue | cualquiera - Depende del tipo de atributo | Valor 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())
vCompareResult1 (se devuelven todas las diferencias):
[
{
"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"
}
]
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": "employerID",
"value": 117,
"otherValue": 118
},
{
"attributeName": "employer",
"value": "[object Entity]",// Entity 117 from Company
"otherValue": "[object Entity]"// Entity 118 from Company
}
]
.drop()
Histórico
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.drop( {mode : Integer} ) : Object
Parámetros | Tipo | Descripción | |
---|---|---|---|
mode | Integer | -> | dk force drop if stamp changed : activa el soltar incluso si el sello ha cambiado |
Result | Object | <- | 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:
Propiedad | Tipo | Descripción | |
---|---|---|---|
success | boolean | true si la acción de soltar tiene éxito, false en caso contrario. | |
Disponible sólo en caso de error: | |||
status(*) | number | Código de error, ver abajo | |
statusText(*) | text | Descripción del error, ver abajo | |
Disponible sólo en caso de error de bloqueo pesimista: | |||
LockKindText | text | "Locked by record" | |
lockInfo | object | Información sobre el origen del bloqueo | |
task_id | number | Id del proceso | |
user_name | text | Nombre de usuario de la sesión en la máquina | |
user4d_alias | text | Alias de usuario si está definido por SET USER ALIAS , si no, nombre de usuario en el directorio 4D | |
host_name | text | Nombre de la máquina | |
task_name | text | Nombre del proceso | |
client_version | text | ||
Disponible sólo en caso de error grave (un error grave puede ser intentar duplicar una llave primaria, disco lleno...): | |||
errors | collection of objects | ||
message | text | Mensaje de error | |
component signature | text | firma del componente interno (por ejemplo, "dmbg" significa el componente de la base) | |
errCode | number | Código de error |
(*) Los siguientes valores pueden ser devueltos en las propiedadese status y statusText del objeto Result en caso de error:
Constante | Valor | Comentario |
---|---|---|
dk status entity does not exist anymore | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos: |
dk status locked | 3 | La entidad está bloqueada por un bloqueo pesimista. statusText asociado: "Ya está bloqueado" |
dk status serious error | 4 | Un 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 changed | 2 | El valor del sello interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista)..save( ) : error sólo si no se utiliza la opción dk auto merge .drop( ) : error sólo si no se utiliza la opción dk force drop if stamp changed .lock( ) : error sólo si no se utiliza la opción dk reload if stamp changed |
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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.first(): 4D.Entity
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.fromObject( filler : Object )
Parámetros | Tipo | Descripción | |
---|---|---|---|
filler | Object | -> | 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
Lanzamiento | Modificaciones |
---|---|
17 R5 | Añadidos |
.getDataClass() : 4D.DataClass
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.DataClass | <- | Objeto DataClass al que pertenece la entidad |
|
Descripción
La función .getDataClass()
devuelve la clase de datos de la entidad. Esta función es útil al escribir código genérico.
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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.getKey( { mode : Integer } ) : Text
.getKey( { mode : Integer } ) : Integer
Parámetros | Tipo | Descripción | |
---|---|---|---|
mode | Integer | -> | dk key as string : la llave primaria se devuelve como una cadena, sin importar el tipo de llave primaria |
Result | Text | <- | Valor de la llave primaria de texto de la entidad |
Result | Integer | <- | 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.getSelection(): 4D.EntitySelection
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.getStamp() : Integer
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | Integer | <- | 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.indexOf( { entitySelection : 4D.EntitySelection } ) : Integer
Parámetros | Tipo | Descripción | |
---|---|---|---|
entitySelection | 4D.EntitySelection | -> | La posición de la entidad se da en función de esta selección de entidades |
Result | Integer | <- | 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.isNew() : Boolean
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | Boolean | <- | 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.last() : 4D.Entity
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.lock( { mode : Integer } ) : Object
Parámetros | Tipo | Descripción | |
---|---|---|---|
mode | Integer | -> | dk reload if stamp changed : recargar antes de bloquear si el sello ha cambiado |
Result | Object | <- | 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:
Propiedad | Tipo | Descripción | |
---|---|---|---|
success | boolean | true 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 : | |||
wasReloaded | boolean | true si la entidad fue recargada con éxito, false en caso contrario. | |
Disponible sólo en caso de error: | |||
status(*) | number | Código de error, ver abajo | |
statusText(*) | text | Descripción del error, ver abajo | |
Disponible sólo en caso de error de bloqueo pesimista: | |||
lockKindText | text | "Locked by record" | |
lockInfo | object | Información sobre el origen del bloqueo | |
task_id | number | ID del Proceso | |
user_name | text | Nombre de usuario de la sesión en la máquina | |
user4d_alias | text | Nombre o alias del usuario 4D | |
user4d_id | number | ID del usuario en el directorio de la base de datos 4D | |
host_name | text | Nombre de la máquina | |
task_name | text | Nombre del proceso | |
client_version | text | ||
Disponible sólo en caso de error grave (la llave primaria ya existe, el disco está lleno...): | |||
errors | collection of objects | ||
message | text | Mensaje de error | |
component signature | text | firma del componente interno (por ejemplo, "dmbg" significa el componente de la base) | |
errCode | number | Código de error |
(*) Los siguientes valores pueden ser devueltos en las propiedades status y statusText del objeto Result en caso de error:
Constante | Valor | Comentario |
---|---|---|
dk status entity does not exist anymore | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:.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 locked | 3 | La entidad está bloqueada por un bloqueo pesimista.statusText asociado: "Ya está bloqueado" |
dk status serious error | 4 | Un 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 changed | 2 | El valor del sello interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista)..save( ) : error sólo si no se utiliza la opción dk auto merge .drop( ) : error sólo si no se utiliza la opción dk force drop if stamp changed .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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.next() : 4D.Entity
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.previous() : 4D.Entity
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | 4D.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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.reload() : Object
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | Object | <- | 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:
Propiedad | Tipo | Descripción |
---|---|---|
success | boolean | True si la acción de recarga tiene éxito, False en caso contrario.Disponible sólo en caso de error: |
status(*) | number | Código de error, ver abajo |
statusText(*) | text | Descripción del error, ver abajo |
(*) Los siguientes valores pueden ser devueltos en las propiedadese status y statusText del objeto Result en caso de error:
Constante | Valor | Comentario |
---|---|---|
dk status entity does not exist anymore | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:.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 error | 4 | Un 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.save( { mode : Integer } ) : Object
Parámetros | Tipo | Descripción | |
---|---|---|---|
mode | Integer | -> | dk auto merge : activa el modo de fusión automática |
Result | Object | <- | 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:
Propiedad | Tipo | Descripción | |
---|---|---|---|
success | boolean | True si la acción guardar tiene éxito, false en caso contrario. | |
Disponible sólo si se utiliza la opción dk auto merge : | |||
autoMerged | boolean | True si se ha realizado una fusión automática, False en caso contrario. | |
Disponible sólo en caso de error: | |||
status | number | Código de error, ver abajo | |
statusText | text | Descripción del error, ver más abajo | |
Disponible sólo en caso de bloqueo pesimista: | |||
lockKindText | text | "Locked by record" | |
lockInfo | object | Información sobre el origen del bloqueo | |
task_id | number | Id del proceso | |
user_name | text | Nombre de usuario de la sesión en la máquina | |
user4d_alias | text | Alias de usuario si está definido por SET USER ALIAS , si no, nombre de usuario en el directorio 4D | |
host_name | text | Nombre de la máquina | |
task_name | text | Nombre del proceso | |
client_version | text | ||
Disponible sólo en caso de error grave (error grave - puede ser intentar duplicar una llave primaria, disco lleno...): | |||
errors | collection of objects | ||
message | text | Mensaje de error | |
componentSignature | text | Firma del componente interno (por ejemplo, "dmbg" significa el componente de la base) | |
errCode | number | Có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:
Constante | Valor | Comentario |
---|---|---|
dk status automerge failed | 6 | (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 anymore | 5 | La entidad ya no existe en los datos. Este error puede ocurrir en los siguientes casos:.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 locked | 3 | La entidad está bloqueada por un bloqueo pesimista.statusText asociado: "Ya está bloqueado" |
dk status serious error | 4 | Un 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 changed | 2 | El valor del sello interno de la entidad no coincide con el de la entidad almacenada en los datos (bloqueo optimista)..save( ) : error sólo si no se utiliza la opción dk auto merge .drop( ) : error sólo si no se utiliza la opción dk force drop if stamp changed .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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.toObject() : Object
.toObject( filterString : Text { ; options : Integer} ) : Object
.toObject( filterCol : Collection { ; options : Integer } ) : Object
Parámetros | Tipo | Descripción | |
---|---|---|---|
filterString | Text | -> | Atributo(s) a extraer (cadena separada por comas) |
filterCol | Collection | -> | Colección de atributos a extraer |
options | Integer | -> | dk with primary key : añade la propiedad _KEY;dk with stamp : añade la propiedad _STAMP |
Result | Object | <- | 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.touched() : Boolean
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | Boolean | <- | 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.touchedAttributes() : Collection
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | Collection | <- | 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
Lanzamiento | Modificaciones |
---|---|
17 | Añadidos |
.unlock() : Object
Parámetros | Tipo | Descripción | |
---|---|---|---|
Result | Object | <- | 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:
Propiedad | Tipo | Descripción |
---|---|---|
success | Boolean | True 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