Class: LobStorage

@nginstack/engine/lib/database/LobStorage~ LobStorage


new LobStorage(classKey)

Classe que possibilita armazenar no banco de dados grandes documentos que não demandam a hierarquia e atributos de um sistema de arquivos, como a VFS.

Esta classe não cria registros no cache local, ao contrário da VFS, sendo mais apropriada para armazenar grandes volumes de dados.

Outra vantagem da LobStorage sobre a VirtualFS é que os dados são comprimidos antes serem gravados, reduzindo o espaço necessário para armazenagem no banco de dados.

Parameters:
Name Type Description
classKey number | DBKey

Chave da classe filha de "/Dados/Sistema/Large Objects" onde serão gravados os dados.

Members


classKey :number

Classe onde serão gravados os documentos salvos. Possui a finalidade de agrupar os documentos com a mesma finalidade na tabela iLob.

Type:
  • number

logChanges

Indica se as alterações realizadas por esta classe irão gerar registros de log transactional na tabela iLog.

Atenção: a desativação do log transacional não permite o desfazimento das alterações realizadas e prejudica a auditoria do sistema em inspeções de segurança. Modificações sem geração de log também não são aplicadas nas bases de dados destino dos processos de replicação de dados. Essas modificações também podem ser perdidas em cenários de migração de banco de dados onde uma base de dados escrava é sincronizada a partir do log transacional. Por esses motivos, esta propriedade deve ser utilizada apenas em situações específicas, onde os lobs gerados são temporários e serão descartados após um curto tempo de vida.

Methods


addLob(fileName, content [, options])

Adiciona um documento no banco de dados.

Para fins de compatibilidade, este método também aceita a seguinte assinatura:

addLob(fileName, content, mimeType?, key?);

Parameters:
Name Type Argument Description
fileName string

Nome do arquivo. A extensão do arquivo será utilizada para identificar o tipo do arquivo caso o parâmetro mimeType não seja informado.

content string

Conteúdo do documento que será gravado.

options Object <optional>

Opções de inserção do documento.

Properties
Name Type Argument Description
mimeType number | DBKey <optional>

Chave filha da classe "Mime Types" que determinará o tipo do documento armazenado. O tipo do arquivo será utilizado para determinar os algoritmos de compressão e codificação adequados.

key number <optional>

Possibilita informar a chave do lob a ser criado. Quando não for informado, será gerada uma nova chave.

extraAttributes Object <optional>

Objeto que contém a lista dos atributos e valores a serem configurados.

Returns:

Chave que identifica o documento armazenado.

Type
number
Example
const LobStorage = require('@nginstack/engine/lib/database/LobStorage');
const fileName = 'myDoc.xml';
const myLobClass = -1898144063; // Large Objects
const file = new File(fileName);
const lobStorage = new LobStorage(myLobClass)
const key = lobStorage.addLob(fileName, file.read());
ds.setField('iLob', key);

beginBatch()

Após a chamada desse método, todas as modificações solicitadas aos métodos addLob, updateLob e setLobExtraAttributes serão armazenadas em DataSet que será retornado pelo método endBatch.

Não é possível remover lobs dentro de uma operação batch.

See:

deleteLob(key)

Apaga um documento do banco de dados previamente armazenado pelo método addLob().

Parameters:
Name Type Description
key number

Chave do documento gerado pelo método addLob().

Returns:

Retornará true se o documento existir e tenha sido apagado.

Type
boolean
Example
const LobStorage = require('@nginstack/engine/lib/database/LobStorage');
const fileName = 'myDoc.xml';
const myLobClass = -1898144063; // Large Objects
const file = new File(fileName);
const lobStorage = new LobStorage(myLobClass);
const key = lobStorage.addLob(fileName, file.read());
ds.setField('iLob', key);
// ....
const lobStorage = new LobStorage(myLobClass);
lobStorage.deleteLob(ds.dbkey('iLob'));

endBatch()

Retorna um dataset com as modificações realizadas pelos métodos addLob, updateLob e setLobExtraAttributes durante a operação batch.

O método endBatch não efetiva as alterações na base de dados, sendo responsabilidade de quem chama este método a gravação dessas alterações.

See:
Returns:

DataSet com os registros inseridos e atualizados.

Type
DataSet

getLob(key)

Lê um documento do banco de dados previamente armazenado pelo método addLob(). Irá gerar um erro caso a chave informada não exista no banco de dados.

Parameters:
Name Type Description
key number

Chave do documento gerado pelo método addLob().

Returns:

Instância da classe module:@nginstack/engine/lib/database/LargeObject contendo o nome, conteúdo e mimeType do lob.

Type
LargeObject
Example
const LobStorage = require('@nginstack/engine/lib/database/LobStorage');
const lobStorage = new LobStorage(-1898144063) // Large Objects
const lob = lobStorage.getLob(lobKey);
const file = new File(lob.name);
file.write(lob.content);
file.close();

getLobExtraAttributes(key)

Obtém os atributos extras de um documento do banco de dados.

Parameters:
Name Type Description
key number

Chave do documento gerado pelo método addLob().

Returns:

objeto com o atributos extras armazenados como propriedades.

Type
Object
Example
const LobStorage = require('@nginstack/engine/lib/database/LobStorage');
const myLobClass = -1898144063; // Large Objects
const lobStorage = new LobStorage(myLobClass);
const attr = lobStorage.getLobExtraAttributes(123456);
attr.origem; // SONY DSC 40

setLobExtraAttributes(key, extraAttributes)

Preenche os atributos extras em um documento do banco de dados.

Parameters:
Name Type Description
key number

Chave do documento gerado pelo método addLob().

extraAttributes Object

Objeto que contém a lista dos atributos e valores a serem configurados.

Example
const LobStorage = require('@nginstack/engine/lib/database/LobStorage');
const myLobClass = -1898144063; // Large Objects
const lobStorage = new LobStorage(myLobClass);
lobStorage.setLobExtraAttributes(123456, {origem: "SONY DSC 40", autor: "User Name"});

tryGetLob(key)

Tenta ler um documento do banco de dados previamente armazenado pelo método addLob() e retorna null caso ele não exista.

Parameters:
Name Type Description
key number

Chave do documento gerado pelo método addLob().

Returns:

Instância da classe module:@nginstack/engine/lib/database/LargeObject contendo o nome, conteúdo e mimeType do lob ou null caso não exista um lob com a chave informada.

Type
LargeObject
Example
const LobStorage = require('@nginstack/engine/lib/database/LobStorage');
const lobStorage = new LobStorage(-1898144063); // Large Objects
const lob = lobStorage.tryGetLob(lobKey);
if (lob) {
  const file = new File(lob.name);
  file.write(lob.content);
} else {
  throw new Error('O arquivo foi excluído por um outro usuário.');
}

updateLob(key, content [, options])

Atualiza um documento existente no banco de dados.

Para fins de compatibilidade, este método também aceita a seguinte assinatura:

  • updateLob(key, content, fileName?, mimeType?);
Parameters:
Name Type Argument Description
key number

Chave do lob. Esta chave é gerada pelo método addLob().

content string

Conteúdo do documento que será gravado.

options Object <optional>

Opções de atualização do documento.

Properties
Name Type Argument Description
fileName string <optional>

Nome do arquivo. Caso não seja informado, será mantido o nome atual. A extensão do arquivo será utilizada para identificar o tipo do arquivo caso o parâmetro mimeType não seja informado.

mimeType number | DBKey <optional>

Chave filha da classe "Mime Types" que determinará o tipo do documento armazenado. O tipo do arquivo será utilizado para determinar os algoritmos de compressão e codificação adequados.

extraAttributes Object <optional>

Objeto que contém a lista dos atributos e valores a serem configurados.

Example
const LobStorage = require('@nginstack/engine/lib/database/LobStorage');
const fileName = 'myDoc.xml';
const myLobClass = -1898144063; // Large Objects
const file = new File(fileName);
const lobStorage = new LobStorage(myLobClass);
const key = lobStorage.addLob(fileName, file.read());
ds.setField('iLob', key);
// ....
const file = new File(fileName);
const lobStorage = new LobStorage(myLobClass);
lobStorage.updateLob(ds.ilob, file.read());