Entity
Uma [entity] (ORDA/dsMapping.md#entity) é uma instância de uma [Dataclass] (ORDA/dsMapping.md#dataclass), como um registro da tabela que corresponde à dataclass em seu armazenamento de dados associado. Contém os mesmos atributos que o dataclass assim como os valores de dados e propriedades e funções específicas.
Resumo
.attributeName : any armazena o valor do atributo para a entidade |
.clone() : 4D.Entity cria na memória uma nova entidade referenciando o mesmo registro que a entidade original |
.diff( entityToCompare : 4D.Entity { ; attributesToCompare : Collection } ) : Collection compara o conteúdo de duas entidades e retorna suas diferenças |
.drop( {mode : Integer} ) : Object exclui os dados contidos na entidade do armazenamento de dados |
.first(): 4D.Entity retorna uma referência à entidade na primeira posição da seleção de entidades à qual a entidade pertence |
.fromObject( filler : Object ) preenche uma entidade com o conteúdo filler |
.getDataClass() : 4D.DataClass retorna a classe de dados da entidade |
.getKey( { mode : Integer } ) : Text .getKey( { mode : Integer } ) : Integer retorna o valor da chave primária da entidade |
.getRemoteContextAttributes() : Text retorna informações sobre o contexto de otimização usado pela entidade |
.getSelection(): 4D.EntitySelection retorna a seleção da entidade à qual a entidade pertence |
.getStamp() : Integer retorna o valor atual do carimbo da entidade |
.indexOf( { entitySelection : 4D.EntitySelection } ) : Integer retorna a posição da entidade em uma seleção de entidades |
.isNew() : Boolean retorna True se a entidade à qual ela é aplicada tiver acabado de ser criada e ainda não tiver sido salva no repositório de dados |
.last() : 4D.Entity retorna uma referência à entidade na última posição da seleção de entidades à qual a entidade pertence |
.lock( { mode : Integer } ) : Object coloca um bloqueio pessimista no registro referenciado pela entidade |
.next() : 4D.Entity retorna uma referência à próxima entidade na seleção de entidades à qual a entidade pertence |
.previous() : 4D.Entity retorna uma referência à entidade anterior na seleção de entidades à qual a entidade pertence |
.reload() : Object recarrega o conteúdo da entidade na memória |
.save( { mode : Integer } ) : Object salva as alterações feitas na entidade |
.toObject() : Object .toObject( filterString : Text { ; options : Integer} ) : Object .toObject( filterCol : Collection { ; options : Integer } ) : Object retorna um objeto que foi criado a partir da entidade |
.touched() : Boolean testa se um atributo de entidade foi ou não modificado desde que a entidade foi carregada na memória ou salva |
.touchedAttributes() : Collection |
.unlock() : Object remove o bloqueio pessimista do registro correspondente à entidade |
.attributeName
História
Release | Mudanças |
---|---|
17 | Adicionado |
.attributeName : any
Descrição
Qualquer atributo de classe de dados está disponível como uma propriedade de uma entidade, que armazena o valor do atributo para a entidade.
Atributos de Dataclass também podem ser alcançados usando a sintaxe alternativa com [ ].
O tipo de valor do atributo depende do atributo kind (relação ou armazenamento):
- 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
A função .clone()
cria na memória uma nova entidade referenciando o mesmo registro que a entidade original. .
Tenha em mente que quaisquer modificações feitas em entidades serão salvas no registro referenciado somente quando a função
.save( )
for executada.
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
A função .diff()
compara o conteúdo de duas entidades e retorna suas diferenças.
No entityToCompare, passe a entidade a ser comparada à entidade original.
Em attributesToCompare, você pode designar atributos específicos para comparar. 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. Caso uma entidade relacionada tenha sido atualizada (ou seja, a chave estrangeira), o nome da entidade relacionada e o nome de sua chave primária são retornados como propriedades attributeName (value e otherValue estão vazios para o nome da entidade relacionada).
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
A função .drop()
exclui os dados contidos na entidade do armazenamento de dados, da tabela relacionada à sua classe de dados. Note-se que a entidade permanece na memória.
Em um aplicativo multiusuário ou multiprocesso, a função .drop()
é executada sob um mecanismo ["optimistic lock"] (ORDA/entities.md#entity-locking), no qual um carimbo de bloqueio interno é automaticamente incrementado sempre que o registro é salvo.
Por padrão, se o parâmetro mode for omitido, a função retornará um erro (veja abaixo) se a mesma entidade foi modificada (i. O selo mudou) por outro processo ou usuário nesse meio tempo.
Caso contrário, você pode passar a opção dk force drop if stamp changed
no parâmetro mode: nesse caso, a entidade é descartada mesmo que o carimbo tenha sido alterado (e a chave primária ainda seja a mesma).
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 | Alias de usuário se definido por SET USER ALIAS , caso contrário, nome de usuário no diretório 4D | |
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 |
(*) Os valores a seguir podem ser retornados nas propriedades status e statusText do objeto Result em caso de erro:
Parâmetros | Valor | Comentário |
---|---|---|
dk status entity does not exist anymore | 5 | A entidade não existe mais nos dados. Esse erro pode ocorrer nos seguintes casos: |
dk status locked | 3 | A entidade está bloqueada por um bloqueio pessimista. StatusText associado: "Já bloqueado" |
dk status serious error | 4 | Um erro grave é um erro de baixo nível do banco de dados (por exemplo, chave duplicada), um erro de hardware etc. Associated statusText: "Other error" (Outro erro) |
dk status stamp has changed | 2 | O valor de selo interno da entidade não corresponde a uma da entidade armazenada nos dados (bloqueio otimista)..save( ) : erro apenas se a opção dk auto merge não for usada. rop( ) : erro somente se a opção dk force drop se o carimbo mudar não é usada. ock( ) : erro somente se a opção dk reload se o carimbo mudar não for usado |
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
Exemplo 2
Exemplo com 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(dk force drop if stamp changed)
Case of
:($status.success)
ALERT("You have dropped "+$employee.firstName+" "+$employee.lastName) //A entidade descartada permanece na memória
:($status.status=dk status entity does not exist anymore)
ALERT($status.statusText)
End case
.first()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.first(): 4D.Entity
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | 4D. Entity | <- | Referencia à primeira entidade da entity selection (Null se a seleção estiver vazia) |
Descrição
A função .first()
retorna uma referência à entidade na primeira posição da seleção de entidades à qual a entidade pertence.
Se a entidade não pertencer a nenhuma seleção de entidade existente (ou seja, .getSelection( ) retorna Null), a função retorna um valor Null.
Exemplo
var $employees : cs.EmployeeSelection
var $employee; $firstEmployee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName = :1"; "H@") //Esta seleção de entidades contém 3 entidades
$employee:=$employees[2]
$firstEmployee:=$employee.first() //$firstEmployee é a primeira entidade da seleção de entidades $employees
.fromObject()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.fromObject( filler : Object )
Parâmetro | Tipo | Descrição | |
---|---|---|---|
filler | Object | -> | Objeto para o qual vai preencher a entidade |
Descrição
A função .fromObject()
preenche uma entidade com o conteúdo filler.
Essa função modifica a entidade original.
O mapeamento entre o objecto e a entidade é feito sobre os nomes dos atributos:
- Se uma propriedade do objeto não existe nos dados (dataclass), ela é ignorada.
- Os tipos de dados devem ser equivalentes. Se houver uma incompatibilidade de tipo entre o objeto e o dataclass, 4D tenta converter os dados sempre que possível (consulte [
Convertendo tipos de dados
](Concepts/data-types. d#converting-data-types)), caso contrário, o atributo fica intocado. - A chave primária pode ser dada como é ou com uma propriedade "__KEY" (preenchida com o valor da chave primária). Se ela ainda não existir na classe de dados, a entidade será criada com o valor fornecido quando .save() for chamado. Se a chave primária não for dada, a entidade é criada e o valor da chave primária é atribuído de acordo com as regras da base de dados. O auto-incremento só é calculado se a chave primária for nula.
filler pode tratar de uma entidade relacionada sob as seguintes condições:
- filler contém a chave estrangeira em si, ou
- O filler contém um objeto de propriedade com o mesmo nome da entidade relacionada, contendo uma única propriedade chamada "__KEY".
- se a entidade relacionada não existir, ela é ignorada.
Exemplo
Com o seguinte objeto $o:
{
"firstName": "Mary",
"lastName": "Smith",
"salary": 36500,
"birthDate": "1958-10-27T00:00:00.000Z",
"woman": true,
"managerID": 411,// relatedEntity dada com PK
"employerID": 20 // relatedEntity dada com PK
}
O código a seguir criará uma entidade com gerente e entidades relacionadas ao empregador.
var $o : Object
var $entity : cs.EmpEntity
$entity:=ds.Emp.new()
$entity.fromObject($o)
$entity.save()
Você também poderia usar uma entidade relacionada dada como um objeto:
{
"firstName": "Marie",
"lastName": "Lechat",
"salary": 68400,
"birthDate": "1971-09-03T00:00:00.000Z",
"woman": false,
"employer": {// relatedEntity dada como um objeto
"__KEY": "21"
},
"manager": {// relatedEntity dada como um objeto
"__KEY": "411"
}
}
.getDataClass()
História
Release | Mudanças |
---|---|
17 R5 | Adicionado |
.getDataClass() : 4D.DataClass
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | 4D. DataClass | <- | Objeto DataClass ao qual a entidade pertence |
Descrição
A função .getDataClass()
retorna a classe de dados da entidade. Esta função é útil para configurar o código genérico.
Exemplo
O seguinte código genérico duplica qualquer entidade:
//método duplicate_entity
//duplicate_entity($entity)
#DECLARE($entity : 4D.Entity)
var $entityNew : 4D.Entity
var $status : Object
$entityNew:=$entity.getDataClass().new() //criar uma nova entidade na classe de dados pai
$entityNew.fromObject($entity.toObject()) //obter todos os atributos
$entityNew[$entity.getDataClass().getInfo().primaryKey]:=Null //redefinir a chave primária
$status:=$entityNew.save() //salvar a entidade duplicada
.getKey()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.getKey( { mode : Integer } ) : Text
.getKey( { mode : Integer } ) : Integer
Parâmetro | Tipo | Descrição | |
---|---|---|---|
mode | Integer | -> | dk key as string : a chave primária é retornada como uma string, independentemente do tipo de chave primária |
Resultados | Text | <- | Valor do texto chave primária da entidade |
Resultados | Integer | <- | Valor da chave primária numérica da entidade |
Descrição
A função .getKey()
retorna o valor da chave primária da entidade.
As chaves primárias podem ser números (Inteiro) ou strings. Você pode "forçar" o valor da chave primária retornada a ser uma cadeia de caracteres, independentemente do tipo real da chave primária, passando a opção dk key as string
no parâmetro mode.
Exemplo
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))
.getRemoteContextAttributes()
História
Release | Mudanças |
---|---|
19R5 | Adicionado |
.getRemoteContextAttributes() : Text
Parâmetro | Tipo | Descrição | |
---|---|---|---|
resultado | Text | <- | Atributos de contexto linkados à entidade, separados por uma vírgula |
Modo avançado: Essa função é destinada a desenvolvedores que precisam personalizar os recursos padrão do ORDA para configurações específicas. Na maioria dos casos, não necessitará de o utilizar.
Descrição
A função .getRemoteContextAttributes()
retorna informações sobre o contexto de otimização usado pela entidade .
Se não houver [contexto de otimização] (../ORDA/remoteDatastores.md#clientserver-optimization) para a entidade, a função retornará um texto vazio.
Exemplo
var $ds : 4D. DataStoreImplementation
var $address : cs. AddressEntity
var $p : cs. PersonsEntity
var $contextA : Object
var $info : Text
var $text : Text
$ds:=Open datastore(New object("hostname"; "www.myserver.com"); "myDS")
$contextA:=New object("context"; "contextA")
$address:=$ds. Address.get(1; $contextA)
$text:="" For each ($p; $address.persons)
$text:=$p.firstname+" "+$p.lastname End for each
$info:=$address.getRemoteContextAttributes()
//$info = "persons,persons.lastname,persons.firstname"
Veja também
EntitySelection.getRemoteContextAttributes()
.clearAllRemoteContexts()
.getRemoteContextInfo()
.getAllRemoteContexts()
.setRemoteContextInfo()
.getSelection()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.getSelection(): 4D.EntitySelection
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | 4D. EntitySelection | <- | Seleção de entidade a que pertence a entidade (null se não for encontrado) |
Descrição
A função .getSelection()
retorna a seleção da entidade à qual a entidade pertence.
Se a entidade não pertence à seleção de uma entidade, a função retorna Null.
Exemplo
var $emp : cs.EmployeeEntity
var $employees; $employees2 : cs.EmployeeSelection
$emp:=ds.Employee.get(672) // Esta entidade não pertence a nenhuma seleção de entidades
$employees:=$emp.getSelection() // $employees é nulo
$employees2:=ds.Employee.query("lastName=:1"; "Smith") /Esta seleção de entidades contém 6 entidades
$emp:=$employees2[0] // Esta entidade pertence a uma seleção de entidades
ALERT("A seleção de entidades contém "+String($emp.getSelection().length)+" entidades")
.getStamp()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.getStamp() : Integer
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Integer | <- | Estampa da entidade (0 se a entidade foi criada) |
Descrição
A função .getStamp()
retorna o valor atual do carimbo da entidade.
O selo interno é automaticamente incrementado por 4D cada vez que a entidade é gravada. Ele gerencia o acesso e as modificações de usuários simultâneos às mesmas entidades (consulte Entity locking).
Para uma nova entidade (nunca salva), a função retorna 0. Para saber se uma entidade acabou de ser criada, recomenda-se a utilização de .isNew().
Exemplo
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ória
Release | Mudanças |
---|---|
17 | Adicionado |
.indexOf( { entitySelection : 4D.EntitySelection } ) : Integer
Parâmetro | Tipo | Descrição | |
---|---|---|---|
entitySelection | 4D. EntitySelection | -> | A posição da entidade é dada de acordo com a selecção desta entidade |
Resultados | Integer | <- | Posição da entidade numa selecção de entidade |
Descrição
A função .indexOf()
retorna a posição da entidade em uma seleção de entidades.
Por padrão, se o parâmetro entitySelection for omitido, a função retornará a posição da entidade em sua própria seleção de entidades. Caso contrário, ele retorna a posição da entidade dentro da entitySelection.
O valor resultante é incluído entre 0 e o comprimento da selecção da entidade -1.
- Se a entidade não tiver uma selecção de entidade ou não pertencer a entitySelection, a função retorna -1.
- Se entitySelection for Null ou não pertencer ao mesmo dataclass que a entidade, é apresentado um erro.
Exemplo
var $employees : cs. EmployeeSelection
var $employee : cs. EmployeeEntity
$employees:=ds. Employee.query("lastName = :1";"H@") //This entity selection contains 3 entities
$employee:=$employees[1] //This entity belongs to an entity selection
ALERT("The index of the entity in its own entity selection is "+String($employee.indexOf())) //1
$employee:=ds. Employee.get(725) //This entity does not belong to an entity selection
ALERT("The index of the entity is "+String($employee.indexOf())) // -1
.isNew()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.isNew() : Boolean
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Parâmetros | <- | É verdade se a entidade acabou de ser criada e ainda não foi salva. Caso contrário, Falso. |
Descrição
A função .isNew()
retorna True se a entidade à qual ela é aplicada tiver acabado de ser criada e ainda não tiver sido salva no repositório de dados. Caso contrário, devolve False.
Exemplo
var $emp : cs. EmployeeEntity
$emp:=ds. Employee.new()
If($emp.isNew())
ALERT("This is a new entity")
End if
.last()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.last() : 4D.Entity
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | 4D. Entity | <- | Referência para a última entidade de uma seleção de entidade (Null se não for encontrado) |
Descrição
A função .last()
retorna uma referência à entidade na última posição da seleção de entidades à qual a entidade pertence.
Se a entidade não pertencer a nenhuma seleção de entidade existente (ou seja, .getSelection( ) retorna Null), a função retorna um valor nulo.
Exemplo
var $employees : cs. EmployeeSelection
var $employee; $lastEmployee : cs. EmployeeEntity
$employees:=ds. Employee.query("lastName = :1";"H@") //This entity selection contains 3 entities
$employee:=$employees[0]
$lastEmployee:=$employee.last() //$lastEmployee is the last entity of the $employees entity selection
.lock()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.lock( { mode : Integer } ) : Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
mode | Integer | -> | dk reload if stamp changed : Recarregar antes de bloquear se o selo for alterado |
Resultados | Object | <- | Resultado da operação de bloqueio |
Descrição
A função .lock()
coloca um bloqueio pessimista no registro referenciado pela entidade. O [bloqueio é definido] (ORDA/entities.md#entity-locking) para um registro e todas as referências da entidade no processo atual.
Outros processos verão este registro como bloqueado (a propriedade result.success
conterá Falso se eles tentarem bloquear a mesma entidade usando esta função). Só as funções executadas na sessão de "bloqueio" são permitidas para editar e guardar os atributos da entidade. A entidade pode ser carregada como apenas leitura por outras sessões, mas não serão capazes de introduzir e guardar valores.
Um registro bloqueado por .lock()
é desbloqueado:
- quando a função
unlock()
é chamada em uma entidade correspondente no mesmo processo - automaticamente, quando já não é referenciado por nenhuma entidade em memória. Por exemplo, se a fechadura for colocada apenas numa referência local de uma entidade, a entidade é desbloqueada quando a função termina. Enquanto houver referências à entidade em memória, o registo permanece bloqueado.
Uma entidade também pode ser travada por uma sessão REST, caso em que só pode ser destravada pela sessão.
Por padrão, se o parâmetro modo for omitido, a função retornará um erro (veja abaixo) se a mesma entidade tiver sido modificada (ou seja, o selo mudou) por outro processo ou usuário nesse meio tempo.
Caso contrário, você pode passar a opção dk reload if stamp changed
no parâmetro mode: nesse caso, nenhum erro é retornado e a entidade é recarregada quando o carimbo é alterado (se a entidade ainda existir e a chave primária ainda for a mesma).
Resultado
O objeto retornado por .lock( )
contém as seguintes propriedades:
Propriedade | Tipo | Descrição | |
---|---|---|---|
success | boolean | true se a ação de bloqueio for bem sucedida (ou se a entidade já estiver bloqueada no processo atual), falso caso contrário. | |
Disponível somente se a opção dk reload if stamp changed for usada: | |||
wasReloaded | boolean | verdadeiro se a entidade foi recarregada com sucesso, 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 | "Locked by record" se trancado por um processo 4D, "Locked by session" se trancado por uma sessão REST | |
lockInfo | object | Informações sobre a origem do bloqueio. Retorna propriedades dependendo da origem da trava (processo 4D ou sessão REST) | |
Disponível só para um processo trava 4D: | |||
task_id | number | Process ID | |
user_name | text | Nome de usuário de sessão na máquina | |
user4d_alias | text | Nome ou apelido do usuário 4D | |
user4d_id | number | Id do usuário no diretório do banco de dados 4D | |
host_name | text | Nome da máquina | |
task_name | text | Nome de processo | |
client_version | text | Versão do cliente | |
Disponível só para um processo trava REST: | |||
host | text | URL que trava a entidade (por exemplo "www.myserver.com") | |
IPAddr | text | Endereço IP da trava (por exemplo. "127.0.0.1") | |
userAgent | text | userAgent of the locker (e.g. Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36") | |
Disponível somente em caso de erro grave (chave primária já existe, 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 |
(*) Os seguintes valores podem ser retornados no status e nas propriedades statusText do objeto Resultado em caso de erro:
Parâmetros | Valor | Comentário |
---|---|---|
dk status entity does not exist anymore | 5 | A entidade não existe mais nos dados. Esse erro pode ocorrer nos seguintes casos.drop( ) , este erro pode ser retornado quando a opção "dk force drop if stamp changed" for usada. When using .lock( ) , this error can be returned when dk reload if stamp changed option is usedAssociated statusText: "Entity does not exist anymore" |
dk status locked | 3 | A entidade está bloqueada por um bloqueio pessimista.statusText associado: "Already locked" |
dk status serious error | 4 | Um erro grave é um erro de baixo nível do banco de dados (por exemplo, chave duplicada), um erro de hardware etc.Associated statusText: "Other error" (Outro erro) |
dk status stamp has changed | 2 | O valor de selo interno da entidade não corresponde a uma da entidade armazenada nos dados (bloqueio otimista)..save( ) : erro apenas se a opção dk auto merge não for usada. rop( ) : erro somente se a opção dk force drop se o carimbo mudar não é usadacom . ock( ) : erro somente se a opção dk reload se o carimbo mudar não for usadoAssociado statusText: "Stamp mudou" |
Exemplo 1
Exemplo com erro:
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
Exemplo 2
Exemplo com a opção 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ória
Release | Mudanças |
---|---|
17 | Adicionado |
.next() : 4D.Entity
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | 4D. Entity | <- | Referência a entidade anterior na seleção da entidade (Null se não for encontrado) |