Saltar para o conteúdo principal
Versão: 20 R9 BETA

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 } ) : qualquer
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
retorna True se pelo menos um atributo de entidade tiver sido 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
ReleaseMudanças
17Adicionado

.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
ReleaseMudanças
17Adicionado

.clone() : 4D.Entity

ParâmetroTipoDescrição
Resultados4D. 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
ReleaseMudanças
17Adicionado

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

ParâmetroTipoDescrição
entityToCompare4D. Entity->Entidade a ser comparada com a entidade original
attributesToCompareCollection->Nome dos atributos a serem comparados
ResultadosCollection<-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 propriedadeTipoDescrição
attributeNameTextNome do atributo
valueany - Depende do tipo de atributoValor do atributo na entidade
otherValueany - Depende do tipo de atributoValor 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
ReleaseMudanças
17Adicionado

.drop( {mode : Integer} ) : Object

ParâmetroTipoDescrição
modeInteger->dk force drop if stamp changed: força o drop mesmo se a estampa tenha mudado
ResultadosObject<-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:

PropriedadeTipoDescrição
successbooleanverdadeiro se a ação de queda for bem-sucedida, falso caso contrário.
Disponível apenas em caso de erro:
status(*)numberCódigo de erro, ver abaixo
statusText(*)textDescrição do erro, ver abaixo
Disponível apenas em caso de erro de bloqueio pessimista:
LockKindTexttext"Bloqueado pelo registro"
lockInfoobjectInformações sobre a origem do bloqueio
task_idnumberParâmetros
user_nametextNome de usuário de sessão na máquina
user4d_aliastextPseudônimo do usuário se definido por SET USER ALIAS, caso contrário nome de usuário no diretório 4D
host_nametextNome da máquina
task_nametextNome de processo
client_versiontext
Disponível apenas em caso de erro grave (erro grave pode ser tentar duplicar uma chave primária, disco cheio...):
errorsuma coleção de objetos
messagetextMensagem de erro
assinatura de componentestextassinatura interna do componente (ex.: "dmbg" significa componente da base de dados)
errCodenumberCódigo de erro

(*) Os seguintes valores podem ser retornados no status e nas propriedades statusText do objeto Resultado em caso de erro:

ParâmetrosValorComentário
dk status entity does not exist anymore5A entidade não existe mais nos dados. Este erro pode ocorrer nos seguintes casos:
  • a entidade foi descartada (o selo mudou e o espaço de memória agora é livre)
  • a entidade foi descartada e substituída por outra chave primária (o selo mudou e uma nova entidade agora usa o espaço de memória). Ao utilizar entity.drop( ), este erro pode ser devolvido quando usar a opção dk force drop if stamp changed. Ao usar entity.lock(), este erro pode ser retornado quando recarregar dk se a opção mudar de selo for usada
  • Associated statusText: "Entidade não existe mais"
    dk status locked3A entidade está trancada por um bloqueio pessimista.
    Texto de status: "Já bloqueado"
    dk status serious error4Um 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 changed2O valor de selo interno da entidade não corresponde a uma da entidade armazenada nos dados (bloqueio otimista).
  • com .save( ): erro apenas se a opção dk auto merge não for usada
  • com . rop( ): erro somente se a opção dk force drop se o carimbo mudar não é usada
  • com . ock(): erro somente se a opção dk reload se o carimbo mudar não for usada
  • Associado statusText: "Stamp mudou"
  • dk status wrong permission1Os 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
    ReleaseMudanças
    17Adicionado

    .first(): 4D.Entity

    ParâmetroTipoDescrição
    Resultados4D. 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
    ReleaseMudanças
    17Adicionado

    .fromObject( filler : Object )

    ParâmetroTipoDescrição
    fillerObject->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
    ReleaseMudanças
    17 R5Adicionado

    .getDataClass() : 4D.DataClass

    ParâmetroTipoDescrição
    Resultados4D. 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
    ReleaseMudanças
    17Adicionado

    .getKey( { mode : Integer } ) : qualquer

    ParâmetroTipoDescrição
    modeInteger->dk key as string: a chave primária é retornada como uma string, independentemente do tipo de chave primária
    Resultadosany<-Valor da chave primária da entidade (Inteiro ou Texto)

    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
    ReleaseMudanças
    19R5Adicionado

    .getRemoteContextAttributes() : Text

    ParâmetroTipoDescrição
    resultadoText<-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
    ReleaseMudanças
    17Adicionado

    .getSelection(): 4D.EntitySelection

    ParâmetroTipoDescrição
    Resultados4D. 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
    ReleaseMudanças
    17Adicionado

    .getStamp() : Integer

    ParâmetroTipoDescrição
    ResultadosInteger<-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
    ReleaseMudanças
    17Adicionado

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

    ParâmetroTipoDescrição
    entitySelection4D. EntitySelection->A posição da entidade é dada de acordo com a selecção desta entidade
    ResultadosInteger<-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
    ReleaseMudanças
    17Adicionado

    .isNew() : Boolean

    ParâmetroTipoDescrição
    ResultadosParâ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
    ReleaseMudanças
    17Adicionado

    .last() : 4D.Entity

    ParâmetroTipoDescrição
    Resultados4D. 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
    ReleaseMudanças
    17Adicionado

    .lock( { mode : Integer } ) : Object

    ParâmetroTipoDescrição
    modeInteger->dk reload if stamp changed: Recarregar antes de bloquear se o selo for alterado
    ResultadosObject<-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.
    Notas
    • unlock() deve ser chamado tantas vezes quanto lock() foi chamado no mesmo processo para que a entidade seja realmente desbloqueada.
    • 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:

    PropriedadeTipoDescrição
    successbooleantrue 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:
    wasReloadedbooleanverdadeiro se a entidade foi recarregada com sucesso, falso caso contrário.
    Disponível apenas em caso de erro:
    status(*)numberCódigo de erro, ver abaixo
    statusText(*)textDescrição do erro, ver abaixo
    Disponível apenas em caso de erro de bloqueio pessimista:
    lockKindTexttext"Locked by record" se trancado por um processo 4D, "Locked by session" se trancado por uma sessão REST
    lockInfoobjectInformaçõ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_idnumberProcess ID
    user_nametextNome de usuário de sessão na máquina
    user4d_aliastextNome ou apelido do usuário 4D
    user4d_idnumberId do usuário no diretório do banco de dados 4D
    host_nametextNome da máquina
    task_nametextNome de processo
    client_versiontextVersão do cliente
    Disponível só para um processo trava REST:
    hosttextURL que bloqueou a entidade (por exemplo, "www.myserver.com`")
    IPAddrtextEndereço IP da trava (por exemplo. "127.0.0.1")
    userAgenttextuserAgent 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...):
    errorsuma coleção de objetos
    messagetextMensagem de erro
    assinatura de componentestextassinatura interna do componente (ex.: "dmbg" significa componente da base de dados)
    errCodenumberCódigo de erro

    (*) Os seguintes valores podem ser retornados no status e nas propriedades statusText do objeto Resultado em caso de erro:

    ParâmetrosValorComentário
    dk status entity does not exist anymore5A entidade não existe mais nos dados. Esse erro pode ocorrer nos seguintes casos
  • :a entidade foi descartada (o carimbo foi alterado e o espaço de memória agora está livre)
  • a entidade foi descartada e substituída por outra com outra chave primária (o carimbo foi alterado e uma nova entidade agora usa o espaço de memória). Ao usar .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 é usada

  • Associado statusText: "Entidade não existe mais"
    dk status locked3A entidade está bloqueada por um bloqueio pessimista.statusText associado: "Already locked"
    dk status serious error4Um 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 changed2O valor de selo interno da entidade não corresponde a uma da entidade armazenada nos dados (bloqueio otimista).
  • com .save( ): erro apenas se a opção dk auto merge não for usada
  • com . rop( ): erro somente se a opção dk force drop se o carimbo mudar não é usada
  • com . ock(): erro somente se a opção dk reload se o carimbo mudar não for usada

  • Associado 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
    ReleaseMudanças
    17Adicionado

    .next() : 4D.Entity

    ParâmetroTipoDescrição
    Resultados4D. 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
    ReleaseMudanças
    17Adicionado

    .previous() : 4D.Entity

    ParâmetroTipoDescrição
    Resultados4D. 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
    ReleaseMudanças
    17Adicionado

    .reload() : Object

    ParâmetroTipoDescrição
    ResultadosObject<-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:

    PropriedadeTipoDescrição
    successbooleanTrue se a ação de recarga for bem-sucedida, Falso caso contrário.Disponível apenas em caso de erro:
    status(*)numberCódigo de erro, ver abaixo
    statusText(*)textDescriçã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âmetrosValorComentário
    dk status entity does not exist anymore5A entidade não existe mais nos dados. Este erro pode ocorrer nos seguintes casos:
  • a entidade foi descartada (o selo mudou e o espaço de memória agora é livre)
  • a entidade foi descartada e substituída por outra chave primária (o selo mudou e uma nova entidade agora usa o espaço de memória). Ao usar .drop( ), esse 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 é usada

  • Associado statusText: "Entidade não existe mais"
    dk status serious error4Um 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
    ReleaseMudanças
    17Adicionado

    .save( { mode : Integer } ) : Object

    ParâmetroTipoDescrição
    modeInteger->dk auto merge: ativa o modo de mesclagem automática
    ResultadosObject<-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:

    PropriedadeTipoDescrição
    successbooleanTrue se a ação salvar tiver sucesso, senão False
    Disponível apenas se a opção dk auto merge for usada:
    autoMergedbooleanTrue se fizer uma auto merge, senão False
    Disponível apenas em caso de erro:
    statusnumberCódigo de erro, veja abaixo
    statusTexttextDescrição do erro, veja abaixo
    Disponível apenas em caso de erro de bloqueio pessimista:
    lockKindTexttext"Bloqueado pelo registro"
    lockInfoobjectInformações sobre a origem do bloqueio
    task_idnumberParâmetros
    user_nametextNome de usuário de sessão na máquina
    user4d_aliastextPseudônimo do usuário se definido por SET USER ALIAS, caso contrário nome de usuário no diretório 4D
    host_nametextNome da máquina
    task_nametextNome de processo
    client_versiontext
    Disponível apenas em caso de erro grave (erro grave - pode estar tentando duplicar uma chave primária, disco cheio...):
    errorsuma coleção de objetos
    messagetextMensagem de erro
    componentSignaturetextAssinatura interna do componente (ex.: "dmbg" significa componente da base de dados)
    errCodenumberCó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âmetrosValorComentário
    dk status automerge failed6(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 anymore5A entidade não existe mais nos dados. Esse erro pode ocorrer nos seguintes casos:
  • a entidade foi descartada (o carimbo foi alterado e o espaço de memória agora está livre)
  • a entidade foi descartada e substituída por outra com outra chave primária (o carimbo foi alterado e uma nova entidade agora usa o espaço de memória). Ao usar .drop( ), esse erro pode ser retornado quando a opção dk force drop if stamp changed for usada. Quando estiver usando . ock(), este erro pode ser retornado quando a opção dk reload se o carimbo mudar é usada

  • Associado statusText: "Entidade não existe mais"
    dk status locked3A entidade está bloqueada por um bloqueio pessimista.statusText associado: "Already locked"
    dk status serious error4Um 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 changed2O valor do carimbo interno da entidade não corresponde ao da entidade armazenada nos dados (bloqueio otimista).
  • with .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 utilizada

  • Associated statusText: "O carimbo foi alterado"
    dk status wrong permission1Os 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
    ReleaseMudanças
    17Adicionado

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

    ParâmetroTipoDescrição
    filterStringText->Atributos a extrair (string separada por vírgulas)
    filterColCollection->Coleção de atributos a extrair
    optionsInteger->dk with primary key: adiciona a propriedade __KEY;
    dk with stamp: adiciona a propriedade _STAMP
    ResultadosObject<-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.

    Aviso

    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
    ReleaseMudanças
    17Adicionado

    .touched() : Boolean

    ParâmetroTipoDescrição
    ResultadosParâ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() retorna True se pelo menos um atributo de entidade tiver sido modificado desde que a entidade foi carregada na memória ou salva. Pode usar essa função para determinar se precisar salvar a entidade.

    Isso se aplica somente a atributos de kind "storage" ou "relatedEntity".

    Para uma nova entidade que foi criada (com .new()), a função retorna False. No entanto, neste contexto, se você acessar um atributo cuja propriedade autoFilled é True, a função .touched() retornará True. Por exemplo, depois que você executa $id:=ds.Employee.ID para uma nova entidade (supondo que o atributo ID tenha a propriedade "Autoincrement"), .touched() retorna True.

    Exemplo

    Neste exemplo, vemos se é necessário salvar a entidade:

     var $emp : cs.EmployeeEntity
    $emp:=ds.Employee.get(672)
    $emp.firstName:=$emp.firstName //Mesmo que seja atualizado com o mesmo valor, o atributo é marcado como tocado

    If($emp.touched()) //se pelo menos um dos atributos tiver sido alterado
    $emp.save()
    End if // caso contrário, não é necessário salvar a entidade

    .touchedAttributes()

    História
    ReleaseMudanças
    17Adicionado

    .touchedAttributes() : Collection

    ParâmetroTipoDescrição
    ResultadosCollection<-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 somente a atributos de 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
    ReleaseMudanças
    17Adicionado

    .unlock() : Object

    ParâmetroTipoDescrição
    ResultadosObject<-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
    nota

    unlock() deve ser chamado tantas vezes quanto lock() foi chamado no mesmo processo para que a entidade seja realmente desbloqueada.

    Resultado

    O objeto retornado por .unlock() contém a seguinte propriedade:

    PropriedadeTipoDescrição
    successParâmetrosTrue 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