DataStore
Um Datastore é o objeto de interface subministrado por ORDA para referenciar e acessar a uma base de dados. Objetos Datastore
são retornado pelos comandos abaixo:
- ds: um atalho para datastore principl
- Open datastore: para abrir qualquer datastore remota
Resumo
.cancelTransaction() cancela a transação |
.dataclassName : 4D. DataClass contém uma descrição do dataclass |
.encryptionStatus(): Object devolve um objecto que fornece o estado de encriptação para o ficheiro de dados actual |
.getInfo(): Object devolve um objecto que fornece informação sobre o datastore |
.getRequestLog() : Collection devolve os pedidos ORDA registados na memória do lado do cliente |
.makeSelectionsAlterable() estabelece todas as seleções de entidade como editável como padrão nas datastore de aplicação atuais. |
.provideDataKey( curPassPhrase : Text ) : Object .provideDataKey( curDataKey : Object ) : Object permite oferecer uma chave de criptografia de dados para o arquivo de dados atual da datastore e detecta se a chave corresponder com os dados criptografados. |
.setAdminProtection( status : Boolean ) permite desativar qualquer acesso de dados em web admin port, incluindo as sessões Data Explorer in WebAdmin |
.startRequestLog() .startRequestLog( file : 4D. File ) .startRequestLog( reqNum : Integer ) inicia o registo dos pedidos ORDA no lado do cliente |
.startTransaction() inicia uma transação no processo atual na base de dados que corresponde à base de dados à qual se aplica |
.stopRequestLog() para o registro de logs de petições ORDA no lado do cliente |
.validateTransaction() aceita a transação |
ds
Histórico
Release | Mudanças |
---|---|
18 | Suporte do parámetro localID |
17 | Adicionado |
ds { ( localID : Text ) } : cs. DataStore
Parâmetro | Tipo | Descrição | |
---|---|---|---|
localID | Text | -> | ID local del armazém de dados remoto a devolver |
Resultados | cs. DataStore | <- | Referencia ao armazém de dados |
|
Descrição
O comando ds
devolve uma referência ao datastore que corresponde à base de dados 4D actual ou à base de dados designada por localID.
Se omitir o parâmetro localID (ou se passa uma string vazia ""), o comando devolve uma referência ao armazém de dados que coincide com a base de dados local de 4D (ou a base de datos de 4D Server em caso de abrir uma base de dados remota em 4D Server). O armazém de dados se abre automaticamente e está disponível diretamente através de ds
.
Também pode obter uma referencia em um datastore remoto aberto passando seu id local no parâmetro localID. O armazém de dados deve ter sido aberto previamente com o comando Open datastore
pelo banco de dados atual (local ou componente). A identificação local se define quando se utilizar este comando.
O escopo do id local do banco de dados no qual o armazen de dados foi aberto.
Se não encontrar nenhum armazém de dados localID, o comando devolve Null.
Using ds
requires that the target database is compliant with ORDA, as specified in the ORDA prerequisites section. São aplicadas as seguintes regras:
- Uma datastore só referencia as tabelas com uma única chave primária. Tables without a primary key or with composite primary keys are not referenced.
- Os atributos de tipo BLOB não são gerenciados no datastore.
Exemplo 1
Usar a datastore principal do banco de dados 4D:
$result:=ds. Employee.query("firstName = :1";"S@")
Exemplo 2
var $connectTo; $firstFrench; $firstForeign : Object
var $frenchStudents; $foreignStudents : cs. DataStore
$connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044")
$frenchStudents:=Open datastore($connectTo;"french")
$connectTo.hostname:="192.168.18.11:8050"
$foreignStudents:=Open datastore($connectTo;"foreign")
//...
//...
$firstFrench:=getFirst("french";"Students")
$firstForeign:=getFirst("foreign";"Students")
//getFirst method
//getFirst(localID;dataclass) -> entity
#DECLARE( $localId : Text; $dataClassName : Text ) -> $entity : 4D. Entity
$0:=ds($localId)[$dataClassName].all().first()
Open datastore
Histórico
Release | Mudanças |
---|---|
18 | Adicionado |
Open datastore( connectionInfo : Object ; localID : Text ) : cs. DataStore
Parâmetro | Tipo | Descrição | |
---|---|---|---|
connectionInfo | Object | -> | Propriedades de conexão utilizadas para alcançar o armazém de datos remoto |
localID | Text | -> | Id para assignar ao armazém de dados aberto na aplicação local (obrigatorio) |
Resultados | cs. DataStore | <- | Objeto do armazém de dados |
|
Descrição
localID is a local alias for the session opened on remote datastore. If localID already exists on the application, it is used. Otherwise, a new localID session is created when the datastore object is used.
O banco de dados connectionInfo 4D deve estar disponível como armazém de dados remoto, ou seja:
- seu servidor web deve ser lançado com http ou https ativado,
- sua opção Expor como servidor REST deve estar marcada,
- se dispõe de ao menos uma licença cliente.
Se não se encontrar nenhum banco de dados coincidente, Open datastore
devolve Null.
localID é um alias local para a sessão aberta no armazém de dados remoto. Se localID já existir na aplicação, se utiliza. Em caso contrário, se cria uma nova sessão localID quando se utiliza o objeto datastore.
Quando abrir a sessão, as sentenças abaixo são equivalentes e devolvem uma referência sobre o mesmo objeto datastore:
$myds:=Open datastore(connectionInfo;"myLocalId")
$myds2:=ds("myLocalId")
//$myds e $myds2 são equivalentes
Passe em connectionInfo um objeto que desceva o armazém de dados remoto ao que quiser se conectar. Pode conter as propriedades abaixo (todas as propriedades são opcionais menos hostname):
Propriedade | Tipo | Descrição |
---|---|---|
hostname | Text | Nome ou endereço IP da database remota + ":" + número de porta (o numero de porta é obrigatório) |
user | Text | Nome de usuario |
senha | Text | senha de usuario |
idleTimeout | Integer | Tempo de espera da sessão de inatividade (em minutos) depois do qual a sessão é fechada automaticamente por 4D. Se omitido, o valor por defeito é 60 (1h). Se for omitido, o valor normal é 60 minutos (1hora) O valor não pode ser inferior a 60: se definir um valor inferior, o tempo de espera se eleva até 60). Para saber mais informação, consulte Fechamento de sessões. |
tls | Parâmetros | Utilize uma conexão segura(*). Se omitido, false por defeito. Se for omitido, o normal é falso Usar uma conexão segura é recomendado sempre que possível. |
type | Text | Deve ser "4D Server" |
(*) Se tls for true, se utiliza o protocolo HTTPS se:
- HTTPS for ativado no armazém de dados remoto
- o número de porto especificado coincide com o porto HTTPS configurado nos ajustes do banco de dados
- um certificado válido e uma chave privada de criptografia estão instalados no banco de dados. Senão é mostrado o erro "1610 - A remote request to host xxx has failed"
Exemplo 1
Conexão a uma datastore remota com usuário/ senha/ timetou/ tls
var $connectTo : Object
var $remoteDS : cs. DataStore
$connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044")
$remoteDS:=Open datastore($connectTo;"students")
ALERT("This remote datastore contains "+String($remoteDS. Students.all().length)+" students")
Exemplo 2
Conexão a uma datastore remota sem usuário ou senha:
var $connectTo : Object
var $remoteDS : cs. DataStore
$connectTo:=New object("type";"4D Server";"hostname";\"192.168.18.11:4443";\
"user";"marie";"password";$pwd;"idleTimeout";70;"tls";True)
$remoteDS:=Open datastore($connectTo;"students")
ALERT("This remote datastore contains "+String($remoteDS. Students.all().length)+" students")
Exemplo 3
Trabalhando com várias datastores remotas:
var $connectTo : Object
var $frenchStudents; $foreignStudents : cs. DataStore
$connectTo:=New object("hostname";"192.168.18.11:8044")
$frenchStudents:=Open datastore($connectTo;"french")
$connectTo.hostname:="192.168.18.11:8050"
$foreignStudents:=Open datastore($connectTo;"foreign")
ALERT("They are "+String($frenchStudents. Students.all().length)+" French students")
ALERT("They are "+String($foreignStudents. Students.all().length)+" foreign students")
Gestão de erros
Em caso de erro, o comando devolve Null. Se não for possível acessar o armazem de dados remotos (endereço incorreto, servidor web não inciiado, http e https não habilitados...), se produz o erro 1610 " Uma petição remota ao host XXX falhou". Pode interceptar este erro com um método instalado por ON ERR CALL
.
.dataclassName
Histórico
Release | Mudanças |
---|---|
17 | Adicionado |
.dataclassName : 4D. DataClass
Descrição
Um Datastore é o objeto de interface subministrado por ORDA para referenciar e acessar a uma base de dados. O objeto devolvido contém uma descrição do dataclass.
Exemplo
var $emp : cs. Employee
var $sel : cs. EmployeeSelection
$emp:=ds. Employee //$emp contains the Employee dataclass
$sel:=$emp.all() //gets an entity selection of all employees
//you could also write directly:
$sel:=ds. Employee.all()
.cancelTransaction()
Histórico
Release | Mudanças |
---|---|
18 | Adicionado |
.cancelTransaction()
| Parâmetro | Tipo | | Descrição | | --------- | ---- |::| ----------------------------------------------------- | | | | | Não exige nenhum parâmetro|
|
Descrição
A função .cancelTransaction()
cancela a transação aberto pela função .startTransaction()
ao nível correspondente no processo actual para o datastore especificado.
A função .cancelTransaction()
cancela qualquer mudança realizado nos dados durante a transação.
Pode aninhar várias transações (subtransações). Se a transação principal for cancelada, todas suas subtransações também são canceladas, mesmo se validadas individualmente usando a função .validateTransaction()
.
Exemplo
Ver exemplo da função .startTransaction()
.
.encryptionStatus()
Histórico
Release | Mudanças |
---|---|
17 R5 | Adicionado |
.encryptionStatus(): Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Object | <- | Informação sobre o cifrado do armazém de dados atual e de cada tabela |
|
Descrição
A função .encryptionStatus()
devolve um objecto que fornece o estado de encriptação para o ficheiro de dados actual (ou seja, o ficheiro de dados do datastore ds
). Também se proporciona o estado de cada tabela.
Utilizar o comando
Estado de encriptação de ficheiros de dados
para determinar o estado de encriptação de qualquer outro ficheiro de dados.
Valor retornado
O objeto retornado contém as propriedades abaixo:
Propriedade | Tipo | Descrição | ||
---|---|---|---|---|
isEncrypted | Parâmetros | True se o arquivo de dados estiver criptografado | ||
keyProvided | Parâmetros | True se proporcionar a chave de encriptação que coincide com o arquivo de dados encriptados(*). | ||
tabelas | Object | Objeto que contém tantas propriedades como tabelas encriptadas ou codificadas. | ||
tableName | Object | Tabla encriptada ou cifrada | ||
name | Text | Nombre da tabela | ||
num | Number | Número de tabela | ||
isEncryptable | Parâmetros | Verdadero se a tabela estiver declarada como encriptada no arquivo de estrutura | ||
isEncrypted | Parâmetros | True se os registros da tabela estiverem encriptados no arquivo de dados |
(*) a chave de criptografia pode ser fornecida:
- com o comando
.provideDataKey()
, - na raíz de um dispositivo conectado antes de abrir o datastore,
- com o comando
Discover data key
.
Exemplo
Se quiser saber o número de tabelas criptografadas no arquivo de dados atual:
var $status : Object
$status:=dataStore.encryptionStatus()
If($status.isEncrypted) //the database is encrypted
C_LONGINT($vcount)
C_TEXT($tabName)
For each($tabName;$status.tables)
If($status.tables[$tabName].isEncrypted)
$vcount:=$vcount+1
End if
End for each
ALERT(String($vcount)+" encrypted table(s) in this datastore.")
Else
ALERT("This database is not encrypted.")
End if
.getInfo()
Histórico
Release | Mudanças |
---|---|
17 | Adicionado |
.getInfo(): Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Object | <- | Propiedades de datastore |
|
Descrição
A função .getInfo( )
devolve um objecto que fornece informação sobre o datastore. Esta função é útil para configurar o código genérico.
Objeto devolvido
Propriedade | Tipo | Descrição | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
type | string | ||||||||||||||||
networked | boolean | ||||||||||||||||
localID | text | ID do armazém de dados na máquina. Corresponde à string localId dada com o comando Open datastore . String vazia ("") para o datastore principal. | |||||||||||||||
connection | object | Objeto descrevendo a conexão remota da datastore (não retornado para datastore principal) Propriedades disponiveis: Propriedades disponiveis: Propriedades disponiveis:
|
- Se a função
.getInfo()
for executada em um 4D Server ou 4D monoposto,networked
é False. - Se a função
.getInfo()
for executada em um 4D remoto,networked
é True
Exemplo 1
var $info : Object
$info:=ds.getInfo() //Executado em 4D Server ou 4D
//{"type":"4D","networked":false,"localID":""}
$info:=ds.getInfo() // Executado em 4D remoto
//{"type":"4D","networked":true,"localID":""}
Exemplo 2
Em um armazém de dados remoto:
var $status : Object
$status:=dataStore.encryptionStatus()
If($status.isEncrypted) //the database is encrypted
C_LONGINT($vcount)
C_TEXT($tabName)
For each($tabName;$status.tables)
If($status.tables[$tabName].isEncrypted)
$vcount:=$vcount+1
End if
End for each
ALERT(String($vcount)+" encrypted table(s) in this datastore.")
Else
ALERT("This database is not encrypted.")
End if
Else
ALERT("This database is not encrypted.")
End if
.getRequestLog()
Histórico
Release | Mudanças |
---|---|
17 R6 | Adicionado |
.getRequestLog() : Collection
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Collection | <- | Coleção de objetos onde cada objeto descreve uma petição |
|
Descrição
A função .getRequestLog()
devolve os pedidos ORDA registados na memória do lado do cliente. .
Esta função deve ser chamada em um 4D remoto, do contrário devolve uma coleção vazia. Foi criado para depuração em configurações de cliente/servidor.
Valor retornado
Coleção de objetos de petição empilhados. A petição mais recente tem indice 0.
Para uma descrição do formato do registro de petições de ORDA, consulte a seção Perguntas do cliente ORDA.
Exemplo
Ver o exemplo 2 de .startRequestLog()
.
.isAdminProtected()
Histórico
Release | Mudanças |
---|---|
18 R6 | Adicionado |
.isAdminProtected() : Boolean
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Resultados | Parâmetros | <- | True se o acesso ao Explorador de Dados estiver desativado, False se estiver ativado (por padrão) |
|
Descrição
A função .startRequestLog()
inicia o registo dos pedidos ORDA no lado do cliente.
Como padrão, o acesso ao Explorador de Dados se concede para as sessões webAdmin
, mas pode ser desativada para evitar qualquer acesso aos dados por parte dos administradores (ver a função .setAdminProtection()
).
Veja também
.makeSelectionsAlterable()
Histórico
Release | Mudanças |
---|---|
18 R5 | Adicionado |
.makeSelectionsAlterable()
| Parâmetro | Tipo | | Descrição | | --------- | ---- |::| ----------------------------------------------------- | | | | | Não exige nenhum parâmetro|
|
Descrição
A função .makeSelectionsAlterable()
estabelece todas as seleções de entidade como editável como padrão nas datastore de aplicação atuais. (incluindo remote datastores). Está pensado para ser utilizado uma vez, por exemplo no método base On Startup
.
quando nesta função não for chamada, as novas seleções de entidades podem ser compartilháveis, dependendo da natureza de seu "pai", ou de como foram criadas.
Esta função não modifica as seleções de entidades criadas por
.copy()
ouOB Copy
quando se utilizar a opção explícitack shared
.
Compatibilidade: esta função só deve ser utilizada em projetos convertidos desde versões de 4D anteriores a 4D v18 R5 e que contenham chamadas .add(). Nste contexto, o uso de
.makeSelectionsAlterable()
pode poupar tempo ao restaurar instantaneamente o comportamento anterior de 4D nos projetos existentes. Por outro lado, utilizar este método em projetos novos criados em 4D v18 R5 e superiores não é recomendável, já que impede compartir as seleções de entidades, o que oferece maior rendimento e escalabilidade.
.provideDataKey()
Histórico
Release | Mudanças |
---|---|
17 R5 | Adicionado |
.provideDataKey( curPassPhrase : Text ) : Object
.provideDataKey( curDataKey : Object ) : Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
curPassPhrase | Text | -> | Frase de cifrado atual |
curDataKey | Object | -> | Chave de criptografia de dados atual |
Resultados | Object | <- | Resultado da coincidência da chave de criptografia |
|
Descrição
A função .provideDataKey()
permite oferecer uma chave de criptografia de dados para o arquivo de dados atual da datastore e detecta se a chave corresponder com os dados criptografados.. Esta função pode ser utilizada ao abrir um banco de dados criptografado, ou ao executar qualquer operação de criptografia que precise da chave de criptografia, como por exemplo voltar a criptografar o arquivo de dados.
- A função
.provideDataKey()
deve ser chamada em um banco de dados criptografada. Se for chamado em uma database não criptografada, o erro 2003 (a chave de criptografia não corresponde aos dados) é retornada. Utilize o comandoEstado de cifrado do arquivo de dados
para determinar se o banco de dados estiver cifrada.- A função
.provideDataKey()
não pode ser chamada desde um 4D remoto ou uma datastore remoto encriptado.
Se utilizar o parâmetro curPassPhrase, passe a string utilizada para gerar a chave de cifrado de dados. Quando usar este parâmetro, uma chave de criptografia é gerada.
Se utilizar o parâmetro curDataKey, passe um objeto (com a propriedade encodedKey) que contenha a chave de cifrado dos dados. Esta chave pode ter sido gerada com o comando New data key
.
Se aportar uma chave de cifrado de dados válida, se adicionar a keyChain da memória e se ativa o modo de cifrado:
- todas as modificações de dados nas tabelas encriptadas são cifradas no disco (.4DD, .journal. 4Dindx)
- todos os dados carregados desde tabelas criptografadas são descifradas na memória
Resultados
O resultado da ordem se descreve no objeto devolvido:
Propriedade | Tipo | Descrição | |
---|---|---|---|
success | Parâmetros | True se a chave da criptografia proporcionada coincide com os dados encriptados, False em caso contrário | |
As seguintes propriedades são devolvidas só se success for FALSE | |||
status | Number | Código de erro (4 se a chave de encriptação fornecida for errada) | |
statusText | Text | Mensagem de erro | |
errors | Collection | Pilha de erros. O primeiro erro tem o índice mais alto | |
[ ].componentSignature | Text | Nome do componente interno | |
[ ].errCode | Number | Número de erro | |
[ ].message | Text | Mensagem de erro |
Se não for dada uma curPassphrase ou curDataKey, .provideDataKey()
devolve null (não é gerado nenhum erro).
Exemplo
var $keyStatus : Object
var $passphrase : Text
$passphrase:=Request("Enter the passphrase")
If(OK=1)
$keyStatus:=ds.provideDataKey($passphrase)
If($keyStatus.success)
ALERT("You have provided a valid encryption key")
Else
ALERT("You have provided an invalid encryption key, you will not be able to work with encrypted data")
End if
End if
.setAdminProtection()
Histórico
Release | Mudanças |
---|---|
18 R6 | Adicionado |
.setAdminProtection( status : Boolean )
Parâmetro | Tipo | Descrição | |
---|---|---|---|
status | Parâmetros | -> | True para desativar o acesso Data Explorer aos dados do porto webAdmin , False (por padrão) para outorgar o acesso |
|
Descrição
A função .setAdminProtection()
permite desativar qualquer acesso de dados em web admin port, incluindo as sessões Data Explorer in WebAdmin
.
Por padrão, quando não chamar a função, o acesso aos dados se concede sempre no porto de administração web para uma sessão com privilégio WebAdmin
utilizando o Explorador de Dados. Em algumas configurações, por exemplo, quando o servidor de aplicações estiver alojado em uma máquina de terceiros, é possivel que não quiser que o administrador possaa ver seus dados, mesmo que possa editar a configuração do servidor, incluindo a configuração da access key.
Neste caso, pode chamar a esta função para desabilitar o acesso aos dados do Explorador de Dados no porto de administração web da máquina, mesmo se a sessão de usuário tiver o privilégio WebAdmin
. Quando esta função for executada, o arquivo de dados é protegido imediatamente e o estado é armazenado no disco: o arquivo de dados é protegido mesmo se a aplicação for restaurada.
Exemplo
Se criar um método projeto protectDataFile para chamar antes dos lançamentos, por exemplo:
ds.setAdminProtection(True) //Desativa o acesso aos dados do Explorador de Dados
Veja também
.startRequestLog()
Histórico
Release | Mudanças |
---|---|
17 R6 | Adicionado |
.startRequestLog()
.startRequestLog( file : 4D. File )
.startRequestLog( reqNum : Integer )
Parâmetro | Tipo | Descrição | |
---|---|---|---|
file | 4D. File | -> | Objeto File |
reqNum | Integer | -> | Número de petiçõs a manter em memória |
|
Descrição
A função .startRequestLog()
inicia o registo dos pedidos ORDA no lado do cliente.
Esta função deve ser chamada em um 4D remoto, do contrário não faz nada. Foi criado para depuração em configurações de cliente/servidor.
O registro de petições ORDA pode ser enviado a um arquivo ou a memória, dependendo do tipo de parâmetro:
- Se passar um objeto file criado com o comando
File
, os dados de registro se escrevem neste arquivo como uma coleção de objetos (formato JSON). Cada objeto representa uma petição.
Se o arquivo não existir, será criado. No caso contrário, ou seja, se o arquivo já existir, os novos dados de registro serão adicionados a ele. Se chamar a.startRequestLog( )
com um arquivo enquanto se iniciou previamente um registro na memória, o registro em memória para e é esvaziado.
Deve adicionar manualmente um caractere \N ao final do arquivo para realizar uma validação JSON
-
Se passar um inteiro reqNum, se esvazia o registro em memória (se houver) e se inicializa um novo registro. Vai manter reqNum petições em memória até que se alcance o número, em cujo caso se esvaziam as entradas mais antigas (pilha FIFO).
Se chamar a.startRequestLog()
com um reqNum enquanto tiver iniciado previamente um registro em um arquivo, se para o registro do arquivo. -
Se não tiver passado nenhum parâmetro, o registro se inicia na memória. Se chamou previamente a
.startRequestLog()
com um reqNum (antes de um.stopRequestLog()
), os datos do registro são empilhados em memória até a próxima vez que se esvazie o registro ou se chame a.stopRequestLog()
.
Para uma descrição do formato do registro de petições de ORDA, consulte a seção Perguntas do cliente ORDA.
Exemplo 1
Se quiser registras as petições dos clientes ORDA em um arquivo e usar o número de sequencia do registro:
var $file : 4D. File
var $e : cs. PersonsEntity
$file:=File("/LOGS/ORDARequests.txt") //logs folder
SET DATABASE PARAMETER(Client Log Recording;1) //to trigger the global log sequence number
ds.startRequestLog($file)
$e:=ds. Persons.get(30001) //send a request
ds.stopRequestLog()
SET DATABASE PARAMETER(Client Log Recording;0)
Exemplo 2
Se quiser registrar as petições dos clientes ORDA na memória:
var $es : cs. PersonsSelection
var $log : Collection
ds.startRequestLog(3) //keep 3 requests in memory
$es:=ds. Persons.query("name=:1";"Marie")
$es:=ds. Persons.query("name IN :1";New collection("Marie"))
$es:=ds.Persons.query("name=:1";"So@")
$log:=ds.getRequestLog()
ALERT("The longest request lasted: "+String($log.max("duration"))+" ms")
.startTransaction()
Histórico
Release | Mudanças |
---|---|
18 | Adicionado |
.startTransaction()
| Parâmetro | Tipo | | Descrição | | --------- | ---- | | ----------------------------------------------------- | | | | | Não exige nenhum parâmetro|
|
Descrição
A função .startTransaction()
inicia uma transação no processo atual na base de dados que corresponde à base de dados à qual se aplica. Quaisquer alterações feitas às entidades do datastore no processo da transacção são armazenadas temporariamente até que a transacção seja validada ou cancelada.
Se chamar a este método no armazém de dados principal (ou seja, o armazém de dados devolvido pelo comando
ds
), a transação se aplica a todas as operações realizadas no armazém de dados principal e no banco de dados subjacente, incluindo portanto ORDA e as linguagens clássicas.
Pode aninhar várias transações (subtransações). Cada transação ou subtransação deve ser eventualmente cancelada ou validada. Note que se cancelar a transação principal, também se cancelam todas suas subtransações, mesmo se tiver validado individualmente mediante a função .validateTransaction()
.
Exemplo
var $connect; $status : Object
var $person : cs. PersonsEntity
var $ds : cs. DataStore
var $choice : Text
var $error : Boolean
Case of
:($choice="local")
$ds:=ds
:($choice="remote")
$connect:=New object("hostname";"111.222.3.4:8044")
$ds:=Open datastore($connect;"myRemoteDS")
End case
$ds.startTransaction()
$person:=$ds. Persons.query("lastname=:1";"Peters").first()
If($person#Null)
$person.lastname:="Smith"
$status:=$person.save()
End if
...
...
If($error)
$ds.cancelTransaction()
Else
$ds.validateTransaction()
End if
.stopRequestLog()
Histórico
Release | Mudanças |
---|---|
17 R6 | Adicionado |
.stopRequestLog()
| Parâmetro | Tipo | | Descrição | | --------- | ---- | | ----------------------------------------------------- | | | | | Não exige nenhum parâmetro|
|
Descrição
A função .stopRequestLog()
para o registro de logs de petições ORDA no lado do cliente (em arquivo ou em memória). É particularmente útil quando se registrar um arquivo, já que realmente fecha o documento aberto no disco.
Esta função deve ser chamada em um 4D remoto, do contrário não faz nada. Foi criado para depuração em configurações de cliente/servidor.
Exemplo
Ver exemplos .startRequestLog()
.
.validateTransaction()
Histórico
Release | Mudanças |
---|---|
18 | Adicionado |
.validateTransaction()
| Parâmetro | Tipo | | Descrição | | --------- | ---- | | ----------------------------------------------------- | | | | | Não exige nenhum parâmetro|
|
Descrição
A função .validateTransaction()
aceita a transação que foi iniciado com .startTransaction()
ao nível correspondente no datastore especificado.
A função salva as mudanças nos dados do datastore que se produziram durante a transação.
Pode aninhar várias transações (subtransações). Se a transação principal for cancelada, todas suas subtransações também são canceladas, mesmo se validadas individualmente usando esta função.
Exemplo
Ver exemplos .startTransaction()
.