Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com

Página Inicial

 
4D v19.8
entity.save( )

entity.save( ) 


 

entity.save ( {modo} ) -> Resultado 
Parâmetro Tipo   Descrição
modo  Inteiro longo in dk auto merge: Ativa o modo de fusão automático
Resultado  Objeto in Resultado da operação de salvar

O método entity.save( ) salva as mudanças realizadas na entidade na tabela relacionada com sua dataClass. Deve chamar a este método depois de criar ou modificar uma entidade se quiser salvar as mudanças realizadas nela.

A operação de salvar é executada apenas se tiver sido  "tocado" ao menos um atributo de entidade (ver os métodos entity.touched( ) e entity.touchedAttributes( )). Do contrário, o método não faz nada (não se chama ao ativador).

Em uma aplicação multi-usuário o multiprocesso, o método entity.save( ) é executado sob um mecanismo de "bloqueio otimista", enquanto que um carimbo de bloqueio interno se incrementa automaticamente cada vez que se guarda o registro. Para saber mais, veja Trancar Entidades.

Como padrão, se o parâmetro modo for omitido, o método devolverá um erro (ver abaixo) sempre que a mesma entidade tenha sido modificada por outro processo ou usuário enquanto isso, sejam quais forem os atributos modificados.
Do contrario, pode passar a opção dk auto merge no parâmetro modo: quando o modo de fusão automatica estiver habilitado, uma modificação realizada por outro processo/usuário na mesma entidade mas em um atributo diferente não criará um  erro. Os dados resultantes salvados na entidade serão a combinação (a "fusão") de todas as modificações não concorrentes (se forem aplicadas modificações ao mesmo atributo, a operação de salvar falha e se devolve um erro, mesmo com o modo de fusão automatica).

Nota: o modo de fusão automatica não está disponível para os atributos de tipo imagem, objeto e texto quando forem armazenadas fora do registro. As mudanças concorrentes nestes atributos criarão um erro dk status stamp has changed

Resultado

O objeto devolvido por entity.save( ) contém as propriedades abaixo:

PropriedadeTipoDescrição
successbooleanotrue se a ação de salvar for um sucesso, do contrário, false
Disponível apenas se for utilizada a opção dk auto merge:
autoMergedbooleanotrue se for realizado uma fusão automatica, em caso contrario, false.
Disponível só em caso de erro:
status(*)númeroCódigo de erro, ver abaixo
statusText(*)textoDescrição do erro, ver abaixo
Disponível apenas no caso de erro de bloqueio pessimista:
lockKindTexttexto"Bloqueado por registro"
lockInfoobjetoInformação sobre a origem do bloqueio
task_idnúmeroID do processo
user4d_aliastextoAlias de usuario definido com SET USER ALIAS, ou então o nome de usuario no diretório do banco de dados. 4D
user_nametextoNome de usuário de sessão na máquina
user4d_idtextoNome de usuário  4D (só disponível em bancos binários 4D)
host_nametextoNome da máquina
task_nametextoNome do processo
client_versiontexto
Disponível apenas  no caso de erro grave (erro grave ao tentar duplicar uma chave primária, disco cheio ...):
errorscoleção de objetos
messagetextoMensagem de erro
componentSignaturetextoassinatura do componente interno (por exemplo, "dmbg" representa o componente do banco de dados)
errCodenúmeroCódigo de erro


(*) Os valores abaixo podem ser devolvidos nas propriedades status e statusText o objeto Resultado em caso de erro:

Constante Valor Comentário
dk status automerge failed 6 (Só se a opção  dk auto merge for usada) A opção automática de fusão falha quando salvar a entidade
Texto de estado associado: "Falha de fusão automática - Auto merge failed"
dk status entity does not exist anymore 5 A entidade não existe mais nos dados. Esse erro pode ocorrer nos casos abaixo:
  • a entidade foi suprimida (a stamp - carimbo - foi mudada e o espaço de memória agora está livre)
  • a entidade foi suprimida e substituída por outra com outra chave primária (a stamp - carimbo - foi mudada e a nova entidade agora usa o espaço de memória). Quando usar entity.drop( ), este erro pode ser retornado quando a opção dk force drop if stamp changed for usada. Quando usar entity.lock( ), este erro pode ser retornado quando a opção dk reload if stamp changed for usada

Texto de estado associado: "Entity does not exist anymore" - (a entidade não existe mais)

dk status locked 3 A entidade é bloqueada por um bloqueio pessimista
Texto de estado associado
: "Already locked" - já bloqueado
dk status serious error 4 Um erro sério é um erro de baixo nível de banco de dados (por exemplo, chave duplicada), um erro de hardware, etc
Texto associado de estado: "Other error" - outro erro
dk status stamp has changed 2

O valor do stamp (carimbo marcador) da entidade não corresponde ao da entidade armazenada nos dados (bloqueio otimista).

  • com entity.save( ): erro apenas se a opção dk auto merge não for usada
  • com entity.drop( ): erro apenas se a opção dk force drop if stamp changed não for usada
  • com entity.lock( ): erro apenas se a opção dk reload if stamp changed não for usada
Texto de estado associado: "Stamp has changed" - carimbo marcador foi modificado

Criar uma nova entidade:

 C_OBJECT($status;$employee)
 $employee:=ds.Employee.new()
 $employee.firstName:="Mary"
 $employee.lastName:="Smith"
 $status:=$employee.save()
 If($status.success)
    ALERT("Employee created")
 End if

Atualizar uma entidade sem a opção dk auto merge:

 C_OBJECT($status;$employees;$employee)
 $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

Atualizar uma entidade com a opção dk auto merge:

 C_OBJECT($status;$employees;$employee)
 
 $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



Ver também 

entity.drop( )
entity.getStamp( )
entity.isNew( )

 
PROPRIEDADES 

Produto: 4D
Tema: ORDA - Entidade

 
CONTEÚDO DA PÁGINA 
 
HISTÓRIA 

Criado por: 4D v17

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v19)
Manual de linguagem 4D ( 4D v19.1)
Manual de linguagem 4D ( 4D v19.4)
Manual de linguagem 4D ( 4D v19.5)
Manual de linguagem 4D ( 4D v19.6)
Manual de linguagem 4D ( 4D v19.7)
Manual de linguagem 4D ( 4D v19.8)