Entity
An entity is an instance of a Dataclass, like a record of the table matching the dataclass in its associated datastore. Contém os mesmos atributos que o dataclass assim como os valores de dados e propriedades e funções específicas.
Resumo
.attributeName : any stores the attribute value for the entity |
.clone() : 4D.Entity creates in memory a new entity referencing the same record as the original entity |
.diff( entityToCompare : 4D.Entity { ; attributesToCompare : Collection } ) : Collection compares the contents of two entities and returns their differences |
.drop( {mode : Integer} ) : Object deletes the data contained in the entity from the datastore |
.first(): 4D.Entity returns a reference to the entity in first position of the entity selection which the entity belongs to |
.fromObject( filler : Object ) fills an entity with the filler content |
.getDataClass() : 4D.DataClass returns the dataclass of the entity |
.getKey( { mode : Integer } ) : Text .getKey( { mode : Integer } ) : Integer returns the primary key value of the entity |
.getRemoteContextAttributes() : Text returns information about the optimization context used by the entity |
.getSelection(): 4D.EntitySelection returns the entity selection which the entity belongs to |
.getStamp() : Integer returns the current value of the stamp of the entity |
.indexOf( { entitySelection : 4D.EntitySelection } ) : Integer returns the position of the entity in an entity selection |
.isNew() : Boolean returns True if the entity to which it is applied has just been created and has not yet been saved in the datastore |
.last() : 4D.Entity returns a reference to the entity in last position of the entity selection which the entity belongs to |
.lock( { mode : Integer } ) : Object puts a pessimistic lock on the record referenced by the entity |
.next() : 4D.Entity returns a reference to the next entity in the entity selection which the entity belongs to |
.previous() : 4D.Entity returns a reference to the previous entity in the entity selection which the entity belongs to |
.reload() : Object reloads the content of the entity in memory |
.save( { mode : Integer } ) : Object saves the changes made to the entity |
.toObject() : Object .toObject( filterString : Text { ; options : Integer} ) : Object .toObject( filterCol : Collection { ; options : Integer } ) : Object returns an object which has been built from the entity |
.touched() : Boolean tests whether or not an entity attribute has been modified since the entity was loaded into memory or saved |
.touchedAttributes() : Collection returns the names of the attributes that have been modified since the entity was loaded into memory |
.unlock() : Object removes the pessimistic lock on the record matching the entity |
.attributeName
História
Release | Mudanças |
---|---|
17 | Adicionado |
.attributeName : any
Descrição
Any dataclass attribute is available as a property of an entity, which stores the attribute value for the entity.
Atributos de Dataclass também podem ser alcançados usando a sintaxe alternativa com [ ].
The attribute value type depends on the attribute kind (relation or storage):
- Se o tipo de attributeName for storage:
.attributeName
retorna um valor do mesmo tipo que attributeName. - Se o tipo attributeName está relatedEntity:
.attributeName
retorna a entidade relacionada. Valores da entidade relacionada estão diretamente disponíveis através de propriedades em cascata, por exemplo "myEntity.employer.employees[0].lastname". - Se o tipo attributeName for relatedEntities:
.attributeName
retorna uma nova seleção de entidades relacionadas. Se eliminam os duplicados (se devolve uma seleção de entidades desordenada).
Exemplo
var $myEntity : cs. EmployeeEntity
$myEntity:=ds. Employee.new() //Create a new entity
$myEntity.name:="Dupont" // assign 'Dupont' to the 'name' attribute
$myEntity.firstname:="John" //assign 'John' to the 'firstname' attribute
$myEntity.save() //save the entity
.clone()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.clone() : 4D.Entity
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | 4D. Entity | <- | Nova entidade referenciando o registro |
Descrição
The .clone()
function creates in memory a new entity referencing the same record as the original entity. .
Keep in mind that any modifications done to entities will be saved in the referenced record only when the
.save( )
function is executed.
Esta função só pode ser usada com entidades já salvas no banco de dados. Não pode ser chamado em uma entidade recém-criada (para a qual .isNew()
retorna True).
Exemplo
var $emp; $empCloned : cs.EmployeeEntity
$emp:=ds.Employee.get(672)
$empCloned:=$emp.clone()
$emp.lastName:="Smith" //Atualizações feitas em $emp não são feitas em $empCloned
.diff()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.diff( entityToCompare : 4D.Entity { ; attributesToCompare : Collection } ) : Collection
Parâmetro | Tipo | Descrição | |
---|---|---|---|
entityToCompare | 4D. Entity | -> | Entidade a ser comparada com a entidade original |
attributesToCompare | Collection | -> | Nome dos atributos a serem comparados |
Resultados | Collection | <- | Diferenças entre as entidades |
Descrição
The .diff()
function compares the contents of two entities and returns their differences.
No entityToCompare, passe a entidade a ser comparada à entidade original.
In attributesToCompare, you can designate specific attributes to compare. Se fornecida, a comparação é feita apenas nos atributos especificados. Se não for fornecida, todas as diferenças entre as entidades são devolvidas.
As diferenças são retornadas como uma coleção de objetos cujas propriedades são:
Nome da propriedade | Tipo | Descrição |
---|---|---|
attributeName | String | Nome do atributo |
value | any - Depende do tipo de atributo | Valor do atributo na entidade |
otherValue | any - Depende do tipo de atributo | Valor do atributo em entityToCompare |
Apenas atributos com valores diferentes estão incluídos na coleção. Se nenhuma diferença for encontrada, .diff()
retorna uma coleção vazia.
A função se aplica a propriedades cujo kind é storage ou relatedEntity. In case a related entity has been updated (meaning the foreign key), the name of the related entity and its primary key name are returned as attributeName properties (value and otherValue are empty for the related entity name).
Se uma das entidades comparadas for Null, um erro é gerado.
Exemplo 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) // All differences are returned
$diff2:=$clone.diff(employee;New collection"firstName";"lastName"))
// Only differences on firstName and lastName are returned
$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"
}
]
Exemplo 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())
vCompareResultado1 (todas as diferenças são devolvidas):
[
{
"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 (apenas diferenças em $attributesToInspect foram retornadas)
[
{
"attributeName": "firstName",
"value": "Karla update",
"otherValue": "Karla"
},
{
"attributeName": "lastName",
"value": "Marrero update",
"otherValue": "Marrero"
}
]
vCompareResult3 (apenas as diferenças em $e1 atributos tocados são retornadas)
[
{
"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ória
Release | Mudanças |
---|---|
17 | Adicionado |
.drop( {mode : Integer} ) : Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
mode | Integer | -> | dk force drop if stamp changed : força o drop mesmo se a estampa tenha mudado |
Resultados | Object | <- | Resultado da operação de exclusão |
Descrição
The .drop()
function deletes the data contained in the entity from the datastore, from the table related to its Dataclass. Note-se que a entidade permanece na memória.
In a multi-user or multi-process application, the .drop()
function is executed under an "optimistic lock" mechanism, wherein an internal locking stamp is automatically incremented each time the record is saved.
By default, if the mode parameter is omitted, the function will return an error (see below) if the same entity was modified (i.e. the stamp has changed) by another process or user in the meantime.
Otherwise, you can pass the dk force drop if stamp changed
option in the mode parameter: in this case, the entity is dropped even if the stamp has changed (and the primary key is still the same).
Resultado
O objeto retornado por .drop( )
contém as seguintes propriedades:
Propriedade | Tipo | Descrição | |
---|---|---|---|
success | boolean | verdadeiro se a ação de queda for bem-sucedida, falso caso contrário. | |
Disponível apenas em caso de erro: | |||
status(*) | number | Código de erro, ver abaixo | |
statusText(*) | text | Descrição do erro, ver abaixo | |
Disponível apenas em caso de erro de bloqueio pessimista: | |||
LockKindText | text | "Bloqueado pelo registro" | |
lockInfo | object | Informações sobre a origem do bloqueio | |
task_id | number | Parâmetros | |
user_name | text | Nome de usuário de sessão na máquina | |
user4d_alias | text | User alias if defined by SET USER ALIAS , otherwise user name in the 4D directory | |
host_name | text | Nome da máquina | |
task_name | text | Nome de processo | |
client_version | text | ||
Disponível apenas em caso de erro grave (erro grave pode ser tentar duplicar uma chave primária, disco cheio...): | |||
errors | uma coleção de objetos | ||
message | text | Mensagem de erro | |
assinatura de componentes | text | assinatura interna do componente (ex.: "dmbg" significa componente da base de dados) | |
errCode | number | Código de erro |
(*) The following values can be returned in the status and statusText properties of Result object in case of error:
Parâmetros | Valor | Comentário |
---|---|---|
dk status entity does not exist anymore | 5 | A entidade não existe mais nos dados. This error can occur in the following cases: |
dk status locked | 3 | A entidade está bloqueada por um bloqueio pessimista. StatusText associado: "Already locked" |
dk status serious error | 4 | A serious error is a low-level database error (e.g. duplicated key), a hardware error, etc. Associated statusText: "Other error" |
dk status stamp has changed | 2 | The internal stamp value of the entity does not match the one of the entity stored in the data (optimistic lock)..save( ) : error only if the dk auto merge option is not used.drop( ) : error only if the dk force drop if stamp changed option is not used.lock() : error only if the dk reload if stamp changed option is not used |
dk status wrong permission | 1 | Os privilégios actuais não permitem a queda da entidade. Associated statusText: "Permission Error" |
Exemplo 1
Exemplo sem a opção 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) //A entidade descartada permanece na memória
:($status.status=dk status stamp has changed)
ALERT($status.statusText)
End case