Entity
Uma entity é uma instância de uma Dataclass, como um registro da tabela que corresponde à dataclass em seu datastore 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 dataclass 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 entity selection |
.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 retorna os nomes dos atributos que foram modificados desde que a entidade foi carregada na memória |
.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.
Esta função permite que você atualize as entidades separadamente. No entanto, por razões de desempenho, a nova entidade compartilha a mesma referência de atributos de objeto que a entidade clonada.
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 | Text | 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())
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": "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"
}
]
vCompareResultado1 (todas as diferenças são devolvidas):
[
{
"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 uma aplicação multiusuário ou multiprocesso, a função .drop()
é executada sob um mecanismo "optimistic lock", onde 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 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 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 | Pseudônimo do 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 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. Este erro pode ocorrer nos seguintes casos: |
dk status locked | 3 | A entidade está trancada por um bloqueio pessimista. Texto de status: "Já bloqueado" |
dk status serious error | 4 | Um erro grave é um erro de banco de dados de baixo nível (por exemplo, chave duplicada), um erro de hardware, etc. Associated statusText: "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 usada |
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
), 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 dataclass 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 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 os acessos simultâneos e as modificações de usuários às mesmas entidades (consulte bloqueio de uma entidade).
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 entity selection.
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 | <- | É True se a entidade acabou de ser criada e ainda não foi salva. Caso contrário, False. |
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 Null.
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 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 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 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 bloqueou 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. Quando usando . ock() , este erro pode ser retornado quando a opção dk reload se o carimbo mudar é usadaAssociado statusText: "Entidade não existe mais" |
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 é usada. ock() : erro somente se a opção dk reload se o carimbo mudar não for usadaAssociado 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) |
Descrição
A função .next()
retorna uma referência à próxima entidade na 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.
Se não houver entidade seguinte válida na selecção da entidade (ou seja, se estiver na última entidade da selecção), a função devolve Null. Se a entidade seguinte tiver sido abandonada, a função devolve a entidade válida seguinte (e eventualmente Nula).
Exemplo
var $employees : cs.EmployeeSelection
var $employee; $nextEmployee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName = :1"; "H@") //Esta seleção de entidades contém 3 entidades
$employee:=$employees[0]
$nextEmployee:=$employee.next() //$nextEmployee é a segunda entidade da seleção de entidades $employees
.previous()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.previous() : 4D.Entity
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | 4D. Entity | <- | Referência para a próxima entidade de uma seleção de entidade (Null se não for encontrado) |
Descrição
A função .previous()
retorna uma referência à entidade anterior na 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.
Se não houver nenhuma entidade anterior válida na seleção da entidade (ou seja, você está na primeira entidade da seleção), a função retorna Null. Se a entidade anterior foi abandonada, a função retorna a entidade válida anterior (e eventualmente Null).
Exemplo
var $employees : cs. EmployeeSelection
var $employee; $previousEmployee : cs. EmployeeEntity
$employees:=ds. Employee.query("lastName = :1";"H@") //This entity selection contains 3 entities
$employee:=$employees[1]
$previousEmployee:=$employee.previous() //$previousEmployee is the first entity of the $employees entity selection
.reload()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.reload() : Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Object | <- | Objeto de estado |
Descrição
A função .reload()
recarrega o conteúdo da entidade na memória, de acordo com as informações armazenadas na tabela relacionada à classe de dados no datacastore. A recarga só é feita se a entidade ainda existir com a mesma chave primária.
Resultado
O objeto retornado por .reload( )
contém as seguintes propriedades:
Propriedade | Tipo | Descrição |
---|---|---|
success | boolean | True se a ação de recarga 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 |
(*) 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. Este erro pode ocorrer nos seguintes casos:. ock() , este erro pode ser retornado quando a opção dk reload se o carimbo mudar é usadaAssociado statusText: "Entidade não existe mais" |
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" |
Exemplo
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ória
Release | Mudanças |
---|---|
17 | Adicionado |
.save( { mode : Integer } ) : Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
mode | Integer | -> | dk auto merge : ativa o modo de mesclagem automática |
Resultados | Object | <- | Resultado da operação de salvamento |
Descrição
A função .save()
salva as alterações feitas na entidade na tabela relacionada à sua classe de dados. na tabela relacionada para a dataClass Deve salvar este método depois de criar ou modificar uma entidade se quiser salvar as mudanças feitas nela.
A operação de salvamento é executada somente se pelo menos um atributo de entidade tiver sido "tocado" (consulte as funções .touched()
e .touchedAttributes()
). Senão a função não faz nada (o trigger não é ativado)
Em uma aplicação multi-usuário ou multi-processo, a função .save()
é executada sob um mecanismo de "bloqueio otimista", onde um selo de bloqueio interno é automaticamente incrementado cada vez que o registro é salvo.
Por padrão, se o parâmetro mode for omitido, o método retornará um erro (veja abaixo) sempre que a mesma entidade tiver sido modificada por outro processo ou usuário enquanto isso não importa ao(s) atributo(s) modificado(s).
Caso contrário, você pode passar a opção dk auto merge
no parâmetro mode: quando o modo de mesclagem automática estiver ativado, uma modificação feita simultaneamente por outro processo/usuário na mesma entidade, mas em um atributo diferente, não resultará em um erro. Os dados resultantes salvos na entidade serão a combinação ("merge"/fusão) de todas as modificações não simultâneas (se modificações forem aplicadas ao mesmo atributo, a operação de salvar falha e um erro é retornado, mesmo com o modo auto fusão)
O modo automático merge não está disponível para atributos de tipo Imagem, Objeto e Texto quando armazenado fora do registro. Alterações simultâneas nesses atributos resultarão em um erro do tipo
dk status stamp has changed
.
Resultado
O objeto retornado por .save()
contém as seguintes propriedades:
Propriedade | Tipo | Descrição | |
---|---|---|---|
success | boolean | True se a ação salvar tiver sucesso, senão False | |
Disponível apenas se a opção dk auto merge for usada: | |||
autoMerged | boolean | True se fizer uma auto merge, senão False | |
Disponível apenas em caso de erro: | |||
status | number | Código de erro, veja abaixo | |
statusText | text | Descrição do erro, veja 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 | Pseudônimo do 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 estar tentando duplicar uma chave primária, disco cheio...): | |||
errors | uma coleção de objetos | ||
message | text | Mensagem de erro | |
componentSignature | text | Assinatura interna do componente (ex.: "dmbg" significa componente da base de dados) | |
errCode | number | Código de erro |
status e statusText
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 automerge failed | 6 | (Somente se a opção dk auto merge for usada) A opção de mesclagem automática falhou ao salvar a entidade.Associated statusText: "Falha na mesclagem automática" |
dk status entity does not exist anymore | 5 | A entidade não existe mais nos dados. Esse erro pode ocorrer nos seguintes casos:. ock() , este erro pode ser retornado quando a opção dk reload se o carimbo mudar é usadaAssociado statusText: "Entidade não existe mais" |
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 do carimbo interno da entidade não corresponde ao da entidade armazenada nos dados (bloqueio otimista)..save( ) : erro somente se a opção dk auto merge não for utilizadawith.drop( ) : erro somente se a opção dk force drop if stamp changed não for utilizadawith.lock() : erro somente se a opção dk reload if stamp changed não for utilizadaAssociated statusText: "O carimbo foi alterado" |
dk status wrong permission | 1 | Os privilégios actuais não permitem a salvaguarda da entidade. Associated statusText: "Permission Error" |
Exemplo 1
Criar uma nova entidade:
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
Exemplo 2
Atualizar uma entidade sem a opção 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
Exemplo 3
Atualização de uma entidade com a opção 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ória
Release | Mudanças |
---|---|
17 | Adicionado |
.toObject() : Object
.toObject( filterString : Text { ; options : Integer} ) : Object
.toObject( filterCol : Collection { ; options : Integer } ) : Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
filterString | Text | -> | Atributos a extrair (string separada por vírgulas) |
filterCol | Collection | -> | Coleção de atributos a extrair |
options | Integer | -> | dk with primary key : adiciona a propriedade __KEY;dk with stamp : adiciona a propriedade _STAMP |
Resultados | Object | <- | Objeto criado a partir da entidade |
Descrição
A função .toObject()
retorna um objeto que foi criado a partir da entidade. Os nomes das propriedades no objecto correspondem aos nomes dos atributos da entidade.
Se nenhum filtro for especificado, ou se o parâmetro filterString contiver uma string vazia ou "*", o objeto retornado conterá:
- todos os atributos de entidade de armazenagem
- atributos de kind
relatedEntity
: você obtém uma propriedade com o mesmo nome da entidade relacionada (nome do link de muitos para um). Atributo é extraido com um formulário simples. - atributos de
relatedEntities
kind: o atributo não é retornado.
No primeiro par|âmetro, passa os atributos entidade a extrair. Pode passar:
- *filterString: uma string com rotas de propriedades separadas por vírgulas: "propertyPath1, propertyPath2, ...", ou
- filterCol: uma coleção de cadeias de caracteres: ["propertyPath1", "propertyPath2";...]
Se um filtro for especificado para os atributos onde kind é relatedEntity:
- propertyPath = "relatedEntity" -> é extraído de forma simples: um objeto com a propriedade __KEY (chave primária).
- propertyPath = "relatedEntity.*" -> todas as propriedades são extraídas
- propertyPath = "relatedEntity.propertyName1; relatedEntity.propertyName2; ..." -> só se extraem essas propriedades
Se um filtro for especificado para atributos cujo kind é relatedEntities:
- propertyPath = "relatedEntities.*" -> all the properties are extracted
- propertyPath = "relatedEntities.propertyName1; relatedEntities.propertyName2; ..." -> só se extraem essas propriedades
No parâmetro opções , pode passar os seletores dk com chave primária e/ou dk with stamp para adicionar as chaves primárias da entidade e/ou carimbos nos objectos extraídos.
Se utilizar outro atributo que não a chave primária como o atributo Um numa relação, o valor deste atributo será escrito na propriedade "__KEY". Lembre-se de que é recomendável usar a chave primária como um atributo em suas relações, especialmente quando você usar as funções .toObject()
e .fromObject()
.
Exemplo 1
A estrutura abaixo será usada nos exemplos desta seção:
Sem parâmetros de filtro:
employeeObject:=employeeSelected.toObject()
Retorna:
{
"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 extraída com forma simples
"__KEY": 20
},
"manager": {
"__KEY": 412
}
}
Exemplo 2
Extrair a chave primária e a estampa:
employeeObject:=employeeSelected.toObject("";dk with primary key+dk with stamp)
Retorna:
{
"__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
}
}
Exemplo 3
Expande todas as propriedades 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
}
}
]
}
Exemplo
Extração de algumas propriedades de relatedEntities
:
employeeObject:=employeeSelected.toObject("firstName, directReports.lastName")
Retorna:
{
"firstName": "Greg",
"directReports": [
{
"lastName": "Boothe"
},
{
"lastName": "Caudill"
},
{
"lastName": "Gomes"
}
]
}
Exemplo 2
Extraindo uma relatedEntity
de forma simple:
$coll:=New collection("firstName";"employer")
employeeObject:=employeeSelected.toObject($coll)
Retorna:
{
"firstName": "Greg",
"employer": {
"__KEY": 20
}
}
Exemplo 6
Expande todas as propriedades de relatedEntity
:
employeeObject:=employeeSelected.toObject("employer.*")
Retorna:
{
"employer": {
"ID": 20,
"name": "India Astral Secretary",
"creationDate": "1984-08-25T00:00:00.000Z",
"revenues": 12000000,
"extra": null
}
}
Exemplo 3
Extração de algumas propriedades de relatedEntity
:
$col:=New collection
$col.push("employer.name")
$col.push("employer.revenues")
employeeObject:=employeeSelected.toObject($col)
Retorna:
{
"employer": {
"name": "India Astral Secretary",
"revenues": 12000000
}
}
.touched()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.touched() : Boolean
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Parâmetros | <- | True se tiver modificado ao menos um atributo da entidade e ainda não for salvo, se não, False |
Descrição
A função .touched()
testa se um atributo de entidade foi ou não modificado desde que a entidade foi carregada na memória ou salva.
Se um atributo for modificado ou calculado, a função retorna True, senão retorna False. Pode usar essa função para determinar se precisar salvar a entidade.
Essa função retorna False para uma nova entidade que acabou de ser criada (com .new( )
). No entanto, observe que se você usar uma função que calcule um atributo da entidade, a função .touched()
então retornará Verdade. Por exemplo, se você chamar .getKey()
para calcular a chave primária, .touched()
retornará True.
Exemplo
Neste exemplo, vemos se é necessário salvar a entidade:
var $emp : cs. EmployeeEntity
$emp:=ds. Employee.get(672)
$emp.firstName:=$emp.firstName //Even if updated with the same value, the attribute is marked as touched
If($emp.touched()) //if at least one of the attributes has been changed
$emp.save()
End if // otherwise, no need to save the entity
.touchedAttributes()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.touchedAttributes() : Collection
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Collection | <- | Nomes de atributos touched ou coleção vazia |
Descrição
A função .touchedAttributes()
retorna os nomes dos atributos que foram modificados desde que a entidade foi carregada na memória.
Isso se aplica para atributos kind storage
ou relatedEntity
.
No caso de uma entidade relacionada que foi tocada (touched) *ou seja, a chave primária) o nome da entidade relacionada e sua chave primária são retornados.
Se nenhum atributo de entidade for tocado, o método retorna uma coleção vazia.
Exemplo 1
var $touchedAttributes : Collection
var $emp : cs. EmployeeEntity
$touchedAttributes:=New collection
$emp:=ds. Employee.get(725)
$emp.firstName:=$emp.firstName //Even if updated with the same value, the attribute is marked as touched
$emp.lastName:="Martin"
$touchedAttributes:=$emp.touchedAttributes()
//$touchedAttributes: ["firstName","lastName"]
Exemplo 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"]
Nesse modo:
- firstName and lastName tem um tipo
storage
- employer tem um tipo 'relatedEntity'
- employerID é a chave estrangeira da entidade relacionada employer
.unlock()
História
Release | Mudanças |
---|---|
17 | Adicionado |
.unlock() : Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Object | <- | Objeto de estado |
Descrição
A função .unlock()
remove o bloqueio pessimista do registro correspondente à entidade no armazenamento de dados e na tabela relacionada à sua dataclass.
Para mais informações, consulte a seção Bloqueio de entidades.
Um registro é destrancado automaticamente quando não for mais referenciado por nenhuma entidade no processo de trancamento (por exemplo, se uma tranca for posta apenas na referência local da entidade, a entidade e o registro é destrancado quando o processo terminar).
Quando um registro for trancado, deve ser destrancado do processo de trancamento e na referência de entidade que colocou a tranca. Por exemplo:
$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
Resultado
O objeto retornado por .unlock()
contém a seguinte propriedade:
Propriedade | Tipo | Descrição |
---|---|---|
success | Parâmetros | True se a ação de destrancar for bem-sucedida, False caso contrário. Se o desbloqueio for feito em uma entidade abandonada, em um registro não bloqueado ou em um registro bloqueado por outro processo ou entidade, o sucesso é False. |
Exemplo
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