Class: ModelDef

@nginstack/engine/lib/classdef/ModelDef~ ModelDef


new ModelDef()

Abstração da definição do modelo de dados a partir de uma classe. Pode ser entendido como um mapeamentos objeto-relacional, na camada MVC.

Extends

  • ClassDef

Members


cache :ClassDefCache

Objeto utilizado para guardar informações de cache associadas a uma definição de modelo de dados de uma classe. Quando uma definição é modificada, todas as informações no cache associadas a ela são descartadas. O sistema também poderá realizar descarte das informações a qualquer momento por outros critérios, como limite do tamanho do cache ou redução do consumo de memória da aplicação.
Importante: como o cache a princípio é mantido durante toda a vida do sistema, não utilize-o para guardar dados de informações úteis apenas para um processamento específico que não será reutilizado em outro momento da vida de uma sessão.

Type:
  • ClassDefCache

cachedData :boolean|CachedDataOptions

Determina a existência de replicação de dados da tabela em disco.

Type:
  • boolean | CachedDataOptions
Deprecated:
  • Utilize #cacheStrategy.

cachedFields :Array.<string>

Determina quais campos serão armazenados no cache local. Conceito desligado na versão 4.0 ou superior.

Type:
  • Array.<string>

cachedVfsContent :boolean

Determina como será armazenado o conteúdo dos arquivos da VFS (coluna iContent) desta classe. Caso seja true, o conteúdo dos arquivos será armazenado diretamente na tabela iVfs, fazendo parte do cache local. Caso seja false, o conteúdo será armazenado na tabela iVfsLob apenas na base de dados, sendo necessária uma consulta ao banco de dados na leitura do conteúdo do arquivo.

Importante: arquivos do tipos "application/x-config", "application/x-model", "application/x-view" e "application/x-class" sempre são armazenados diretamente na tabela iVfs, independentemente do valor desta propriedade.

Type:
  • boolean

cacheStrategy :TableCacheStrategy

Define a estratégia de cache da tabela associada a esta classe no cache local dos Engines.

Type:
  • TableCacheStrategy

classChangePolicy :number

Indica a forma como se valida a mudança de classe dos registros.

Type:
  • number

classDefManager :ClassDefManager

Gestor de definições de classe.

Type:
  • ClassDefManager

classFieldName :string

Indica qual é o nome do campo na tabela que irá relacionar a classe no registro.

Type:
  • string

dataDictionary :string

Ajuda sobre o que representa a tabela no nível da classe. Aqui devem ser abordados assuntos técnicos e relacionados a estrutura e relacionamentos entre as tabelas

Type:
  • string

<non-null> datasourceDefaultFilters :Array.<string>

Indica quais campos serão filtros da consulta de um datasource.

Type:
  • Array.<string>
Deprecated:
  • Yes

dbIndexSpace :string

Indica em qual tablespace serão criados os índices da tabela definida por esta classe ou uma de suas filhas.

Type:
  • string

<non-null> dbSums :Array

Utilize a API nova de tabela de soma.

Type:
  • Array
Deprecated:
  • Yes

dbTableSpace :string

Indica em qual TABLE_SPACE as tabelas serão criadas.

Type:
  • string

displayName :string

Nome de execução desta classe. Caso não seja informada, será o nome da classe que definiu este modelo.

Type:
  • string

displayOrder :number

Ordem de exibição da classe, quando exibida em menus ou em conjunto com classes irmãs. Se nenhum valor for fornecido, a ordem considerada é a ordem alfabética.

Type:
  • number

fieldClass :function

Determina qual é a classe que é utilizada para construção de campos no Mapeamento objeto-relacional. O método ModelDef#field retornará uma instância da classe apresentada nesta propriedade. Ou seja, se existir um campo criado para o nome de campo fornecido, uma instancia da classe em fieldClass é fornecido se não houver é criada uma e retornada.

Type:
  • function

fields :FieldList

Campos definidos na classe de dados e na hierarquia de classes mãe.

Type:
  • FieldList

findOrder :number

Determina a ordem de pesquisa dentro do x-find nas classes. A ordenação é realizada para todas as classes que possuem x-find na hierarquia da mãe para os filhos.

Type:
  • number

groups :FieldGroupSet

Conjunto de grupos de campo.

Type:
  • FieldGroupSet

hasOwnJustToGroup :boolean

Propriedade que indica se o justToGroup foi definido explicitamente para a classe corrente.

Type:
  • boolean

help :string

Ajuda conceitual sobre uma determinada classe. É importante que o help não informe conceitos técnicos ou de interface. Essas informações devem estar descritas na propriedade dataDictionary.

Type:
  • string

<non-null> indexes :Array.<string>

Índices que devem ser criados no cache local na inicialização do sistema.

Type:
  • Array.<string>
Deprecated:
  • Propriedade não mais utilizado pelo Engine. Os valores declarados serão ignorados pelo sistema.

integerDatabaseType :string

Tipo de dado que deve ser utilizado na base de dados para os campos do tipo "integer".

O tipo "integer" é um opção legada que existia antes da criação dos tipos "int64" e "int32".

Type:
  • string

justToGroup :boolean

Determina se a classe utilizada é somente para agrupamento.

Type:
  • boolean

keyFieldName :string

Informa qual é o campo chave da tabela.

Type:
  • string

lookupDisplayFieldName :string

Informação de um determinado registro que será fornecida a partir de uma API implementada no servidor para ser exibida em casos de relação entre tabela(aka lookup).

Type:
  • string

managedDatabaseSchema :boolean

Indica se os processos de atualização devem modificar o esquema da tabela definido por esta classe. Deve ser true para as tabelas gerenciadas pelo sistema e false para as tabelas criadas e mantidas por sistemas de terceiros.

Importante: esta configuração deve ser realizada apenas no arquivo x-model ou x-class que definiu a tabela por meio da propriedade tableName.

Type:
  • boolean

memoDbType :string

Tipo de dado que representa o campo memo no banco. Esse tipo pode variar para os diversos bancos que o Engine suporta.

Type:
  • string

metaClass :number

Campo classe utilizado na tabela classe.

Type:
  • number

occurrenceLimit :number

Máxima quantidade de ocorrências a serem pesquisadas durante a pesquisa de um x-finder.

Type:
  • number

<non-null> onLookupAddResult :Event

Evento que filtra ocorrências válidas. Esse evento apresenta a característica de disparar os listeners definidos nas classes ancestrais.

Type:
  • Event
Deprecated:
  • Este evento não é emitido pelo Web Framework. Utilize o evento "lookupAddResult" do campo lookup.

ownFields :Array.<Field>

Array com os campos criados ou potencialmente modificados na definição do modelo da classe de dados indicada por #key. Diferente de #fields, não farão parte desta coleção os campos herdados da classe-mãe que não tenham sido acessados ou modificados nesta definição de classe.

Type:
  • Array.<Field>

realm :string

Determina o realm a qual esta classe/diretório da Virtual File System está associado. Requisições HTTP que executem scripts contidos neste diretório utilizarão ambientes JavaScripts do realm informado. Veja module:@nginstack/engine/lib/classdef/RealmConfig para mais detalhes sobre a configuração de realms.

Type:
  • string

session :Object

Sessão do usuário que invocou a criação da definição de modelo.

Type:
  • Object

sourceType :SourceType

Indica o tipo de fonte que foi utilizado para criar esta definição.

Type:
  • SourceType

tableName :string

Nome da tabela que o modelo objeto-relacional da classe irá mapear.

Type:
  • string

transactionLogMaxDays :number

Quantidade máxima de dias em que os logs serão mantidos na base. Para realizar a limpeza é necessário executar o processo localizado em: Admin > Auditoria > Limpar tabela de Log.

Type:
  • number

upgradeChangesTableStructure :boolean

Indica se os processos de atualização devem modificar o esquema da tabela definido por esta classe.

Type:
  • boolean
Deprecated:
  • Utilize #managedDatabaseSchema.

upgradeMustSyncRecords :boolean

Indica se os processos de atualização devem sincronizar os registros negativos da tabela configurada por esse x-class. Por padrão, apenas as tabelas que participam do cache local têm os seus registros sincronizados. Esse comportamento pode ser modificado por meio de uma configuração explícita desta propriedade.
Importante: Essa configuração deve ser realizada apenas em x-class que definem uma tabela por meio da propriedade tableName.

Type:
  • boolean
See:

versionFieldName :string

Nome do campo que guardará as versões do registro.

Type:
  • string

Methods


<static> declareArray(obj, name)

Declara um array dentro de um objeto, respeitando as definições declaradas na hierarquia de classes.

Parameters:
Name Type Description
obj ModelDef

Objeto aonde o array será declarado.

name string

Nome do array que foi declarado.


<static> declareCloneableObject(obj, propertyName, initialValue)

Declara um objeto que pode sofrer o processo de clonagem em um outro objeto.

Parameters:
Name Type Description
obj ModelDef

Objeto onde será criado a propriedade.

propertyName string

Nome da propriedade.

initialValue *

Valor inicial.


<static> declareEvent(obj, name)

Declara um getter para um evento em um determinado objeto, respeitando as definições de hierarquia.

Parameters:
Name Type Description
obj ModelDef

Objeto que terá um evento declarado.

name string

Nome do evento


<static> declareGetterOfObjectProperty(obj, propertyName, objectClassName)

Declara um Getter que manipula uma instância de uma determinada classe Javascript em um objeto, respeitando as definições declaradas na hierarquia de classes.

Parameters:
Name Type Description
obj ModelDef

Objeto aonde o getter será declarado

propertyName string

Nome da propriedade.

objectClassName string

Nome da classe que irá construir uma instância.


<static> declareObject(obj, name)

Declara um objeto em outro objeto respeitando as definições declaradas na hierarquia de classes.

Parameters:
Name Type Description
obj ModelDef

Objeto aonde será declarado o objeto.

name string

Nome do objeto.


canAddAdaptedListeners()

Determina se os eventos declarados utilizando a API antiga antiga de eventos (onNomeEvento) serão ignorados.

Por padrão, os listeners adicionados utilizando a API antiga de eventos serão ignorados caso sejam definidos em um arquivo do tipo x-class quando solicitado o modelo (getModelDef) de uma classe que não está configurada em modo estrito.

Returns:
Type
boolean

clone()

Cria uma cópia desta definição de modelo de dados.

Returns:
Type
ModelDef
Example
var modelDef = classDefManager.getModelDef(ClassKeys.LICENSES);
 var modelDefWithoutEvents = modelDef.clone();
 modelDefWithoutEvents.offAll();
 modelDefWithoutEvents.fields.map(function (fld) {
   fld.offAll();
 });

declareCloneableObject(propertyName, initialValue)

Declara um objeto que pode sofrer o processo de clonagem.

Parameters:
Name Type Description
propertyName string

Nome da propriedade.

initialValue *

Valor inicial.


declareEvent(name)

Declara um getter para um evento na definição de classe, respeitando as definições declaradas na hierarquia de classes.

Parameters:
Name Type Description
name string

Nome do evento.


declareGetterOfObjectProperty(propertyName, objectClassName)

Declara um Getter que manipula uma instância de uma determinada classe Javascript na instância da camada de modelo, respeitando as definições declaradas na hierarquia de classes.

Parameters:
Name Type Description
propertyName string

Nome da propriedade.

objectClassName string

Nome da classe que irá construir uma instância.


declareObject(name)

Declara um objeto na instância da camada de modelo, respeitando as definições declaradas na hierarquia de classes.

Parameters:
Name Type Description
name string

Nome do objeto.


field(name [, type] [, size])

Obtém ou cria um campo na classe de dados. Este método retornará o campo existente com o nome informado ou criará um caso não exista. Nesse último caso, é obrigatório informar o tipo do campo. Tipos suportados:
"string" - Tipo utilizado para campos que conterão texto;
"password" - Tipo utilizado para campos que conterão senhas;
"masterdetail" - Tipo utilizado para criar uma relação de 1 para N entre duas classes. Para utilizar esse tipo de campo é obrigatório o preenchimento das seguintes propriedades:

  • classKey: indica a classe de dados que contém os registros detalhes da relação. A classe de dados que definiu o campo do tipo "masterDetail" é a classe considerada mestre da relação;
  • masterFieldNames: indica os campos da classe de dados mestre que devem ser utilizados para filtrar os registros da classe de dados detalhe.
  • detailFieldNames: indica os campos da classe de dados detalhe que serão filtrados com os valores dos campos masterFieldNames da classe mestre.
    Pseudo-código para obtenção dos registros detalhes:

   var tabelaDetalhe = classes.getCachedDataSet(field.classKey);
   var camposMestre = getFieldValues(field.masterFieldNames);
   tabelaDetalhe.indexFieldNames = field.detailFieldNames;
   detail.setRange(camposMestre, camposMestre);



"int64" - Tipo utilizado para campos que conterão números inteiros de 64 bits. Campos que armazenem chaves ou versões do sistema devem utilizar este tipo.
"int32" - Tipo utilizado para campos que conterão números inteiros de 32 bits. Deve ser utilizado para valores contidos na faixa de [-Math.pow(2, 31) ~ Math.pow(2, 31) - 1] e que não sejam chaves e versões do sistema. Para esses últimos, deve ser utilizado o tipo "int64".
"integer" - Tipo legado que existia antes da criação dos tipos "int64" e "int32". O tipo "integer" será mapeado para um desses dois tipos de acordo com o valor retornado pela propriedade #integerDatabaseType.
"number" - Tipo utilizado para campos que conterão números decimais. Por padrão terão duas casas decimais.
"latitude" - Tipo utilizado para campos que conterão números decimais para representar latitudes. Por padrão terão até cinco casas decimais e a parte inteira conterá até três casas.
"longitude" - Tipo utilizado para campos que conterão números decimais para representar longitudes. Por padrão terão até cinco casas decimais e a parte inteira conterá até três casas.
"angle" - Tipo utilizado para campos que conterão números decimais para representar ângulos. Por padrão terão duas casas decimais e a parte inteira conterá até três casas.
"memo" - Tipo utilizado para campos que conterão textos longos (mais de 4000 caracteres). "date" - Tipo utilizado para campos que conterão datas.
"combo" - Tipo utilizado para campos que conterão listas de opções ou combinação de outros tipos.
"time" - Tipo utilizado para campos que conterão horas. Utilizado para trabalhar com tempo.
"boolean" - Tipo utilizado para campos que conterão valores lógicos ou booleanos.
"file" - Tipo utilizado para campos que conterão arquivos.

Parameters:
Name Type Argument Description
name string

Nome do campo a ser obtido ou criado.

type string <optional>

Tipo do campo. Opcional quando for solicitado um campo existente.

size number <optional>

Tamanho do campo em caracteres. Obrigatório apenas para os tipos "string" e "password".

Returns:
Type
Field

fileAttributes(vfsKey)

Informa os atributos de um determinado arquivo na tabela iVfs. Os atributos servem para informar se um arquivo será exibido, informar nome, ordem de exibição e permissão de controle. A tabela iVfs representa o sistema de arquivos virtuais, ou seja, são arquivos que estão sendo armazenados diretamente no banco e são replicados para o cache local

Parameters:
Name Type Description
vfsKey number

Chave do arquivo.

Returns:

Atributos do arquivo.

Type
Object

findField(name)

Pesquisa por um campo definido dentro da classe, caso encontre, retorna o campo encontrado.

Parameters:
Name Type Description
name string

Nome do campo.

Returns:
Type
Field

getClassDef(classKey)

Prefira usar module:@nginstack/engine/lib/classdef/ClassDefManager.getViewDef.

Parameters:
Name Type Description
classKey
Deprecated:
  • Yes
Returns:
Type
ViewDef

getClassDefWithEvent(eventName [, skipCurrentClass])

Obtém a primeira definição da camada de visão na hierarquia com base no nome de um evento registrado por declareEvent. A instância resultante é encontrada a partir da instância da camada de visão ou de modelo da classe corrente. Caso não encontre, nenhuma instância é retornada.

Parameters:
Name Type Argument Description
eventName string

Nome do evento.

skipCurrentClass boolean <optional>

Escapar a classe corrente, se essa opção for true a busca pela instância irá iniciar a partir da classe pai. Em caso de não haver classe pai, a busca será iniciada pela classe Raiz.

Deprecated:
  • Este método suporta apenas os eventos customizados declarados pelo método #declareEvent, não podendo ser utilizado para os eventos padrão do sistema. Seu uso não é mais recomendado, devendo o seu uso ser substituído por uma lógica customizada equivalente. Ele será eliminado no futuro.
Returns:
  • Definição da camada de visão obtida a partir de uma propriedade.

    Type
    ViewDef
  • Type
    *

getClassDefWithObjectProperty(propertyName [, skipCurrentClass])

Obtém a primeira definição da camada de visão na hierarquia com base no nome de uma propriedade da API de definição. A instância resultante é encontrada a partir da instância da camada de visão ou de modelo da classe corrente. Caso não encontre, nenhuma instância é retornada.

Parameters:
Name Type Argument Description
propertyName string

Nome da propriedade

skipCurrentClass boolean <optional>

Escapar a classe corrente, se essa opção for true a busca pela instância irá iniciar a partir da classe pai. Em caso de não haver classe pai, a busca será iniciada pela classe Raiz.

Returns:

Definição da camada de visão obtida a partir de uma propriedade.

Type
ViewDef

getExtraFilterExpression()

Obtém uma expressão com os filtros extras para esta classe de dados. Os filtros extras são configurados por meio da propriedade Field#permissionFilterFieldName dos campos e possibilitam que o administrador configure permissões dos usuários levando em consideração outros campos além da classe do registro. Esse recurso é útil quando a classe do registro não é suficiente para segmentar corretamente as permissões dos usuários e outros campos, como o Estabelecimento associado ao registro, podem ser utilizados para determinar as permissões.

See:
Returns:

Caso a classe tenha filtros extras configurados, será retornada uma expressão de filtro que consiste dos campos de permissões concatenados por ";". Caso o nome do campo seja diferente do campo de permissão, será utilizada a expressão "[field.name] in [field.permissionFilterFieldName]". A expressão retornada deve ser utilizada nas APIs de DataSet que filtram as permissões do usuário, como Classes#getCachedDataSet e DataSet#setView. Caso não haja filtros extras configurados, será retornada uma string vazia.

Type
string
Example
var modelDef = classDefManager.getModelDef(ClassKeys.LICENSES);
 var filteredDataSet = classes.getCachedDataSet(ClassKeys.LICENSES, session.userKey,
   modelDef.getExtraFilterExpression());

getExtraFilterFields()

Obtém os campos desta classe que foram configurados como filtro extra de permissão por meio da propriedade Field#permissionFilterFieldName.

See:
Returns:

Array com os campos que possuem a propriedade Field#permissionFilterFieldName informada.

Type
Array.<Field>
Example
var modelDef = classDefManager.getModelDef(ClassKeys.LICENSES);
 var extraFilterFields = modelDef.getExtraFilterFields().
 if (extraFilterFields.length === 0) {
   this.alert('Classe de licenças não possui campos de filtro de permissão extra.');
 }

getFieldsAsStringList()

Pega todos os campos definidos na classe e hierarquia de classes mãe. Irá obter um StringList a partir do fieldList da classe.

Deprecated:
  • Mantido apenas por compatibilidade para quem ainda precisa utilizar um StringList como repositório de fields
Returns:

Objeto StringList com todos os campos definidos para a classe e com os definidos nas classes mãe

Type
StringList

getFieldsByProperty(propertyName)

Retorna uma lista de campos cuja propriedades tenham os valores informados.

Parameters:
Name Type Argument Description
propertyName * <repeatable>

Há múltiplas formas de definição dos parâmetros, veja o exemplo abaixo.

Returns:

Lista de campos.

Type
Array.<Field>
Example
//Propriedade e valor:
 //Nessa forma serão obtidos os campos que possuem as propriedades fornecidos
 //com os respectivos valores.
 getFieldsByProperty('prop', valor, 'prop2', valor2);

 //Array de propriedades e de valores:
 //Nessa forma serão fornecidos dois arrays, o primeiro array é o de propriedades
 //que se relaciona com o segundo array, que é o de valores, pelo índice.
 getFieldsByProperty(['prop', 'prop2'], [valor, valor2]);

 //Através de um callback
 //Nesta forma são obtidos os campos de acordo com a regra definida no callback.
 getFieldsByProperty(function (field) {
   return field.required === true;
 });

getKeySchema()

Estrutura de dados de uma chave do banco DBKey. Essa estrutura será utilizada nos casos em que houver a necessidade de validar dados ou tratar dados na camada de apresentação.

Returns:

JSON que representa a estrutura de dados de uma DBKey, ou seja, é a representação de uma relação entre registros do banco de dados.

Type
string

getLookupDisplay(sender, value [, event])

Obtém o valor de exibição a partir de um evento onLookupDisplay anexado a um objeto disparador.

Parameters:
Name Type Argument Description
sender Object

Objeto disparador.

value *

Valor que deve ser exposto para o evento.

event Event <optional>

Evento opcional que deve ser informado em substituição ao padrão onLookupDisplay.

Returns:

Valor de exibição.

Type
string

getNormalizedDef(classKey)

Obtém uma instância da definição da classe de acordo com a herança que foi projetada para a hierarquia. Ou seja se o protótipo da definição da primeira classe for de modelo todas as outras instâncias de classe que forem montadas a partir da execução serão instâncias de modelo também. Caso o protótipo na hierarquia seja construído a partir da definição de visão (uwi.classdef.ViewDef) sempre será obtida uma instância de visão durante o uso deste método.

Parameters:
Name Type Description
classKey number

Chave da classe.

Returns:

Definição obtida.

Type
ModelDef

hasEvent(eventName)

Determina se um evento foi declarado na definição da classe.

Parameters:
Name Type Description
eventName string

Nome do evento.

Returns:

True se o evento houver sido declarado na definição de classe.

Type
boolean

hasObjectProperty(propertyName)

Determina se a definição de classe possui uma propriedade.

Parameters:
Name Type Description
propertyName string

Nome da propriedade

Returns:

True se houver definição da propriedade na classe.

Type
boolean

hasObjectPropertyDeclaredInThisClass(propertyName)

Determina se uma definição de classe declarou uma determinada propriedade.

Parameters:
Name Type Description
propertyName string

Nome da propriedade.

Returns:

True se a propriedade houver sido declarada na definição da classe.

Type
boolean

hasOwnFields()

Indica se há campos declarados nesta classe. Caso não haja, os campos dessa classe serão os mesmos da classe mãe.

Returns:
Type
boolean

hasOwnFileAttributes()

Indica se os atributos do arquivo foram informados nesta classe.

See:
Returns:

True se os atributos foram informados, false caso contrário.

Type
boolean

hideFiles(files)

Oculta os arquivos informados no menu principal.
Importante: Arquivos ocultos com o atributo permissionControlEnabled falso não serão visíveis nos processos de permissão.

Parameters:
Name Type Description
files Array.<number>

Chaves dos arquivos que serão ocultos.

See:
  • ModelDef#fileAttributes

init( [opt_parentDef])

Método utilizado pelo gerenciador de classes para sinalizar que a definição deve ser inicializada. Ele é executado logo após a criação da definição.

Parameters:
Name Type Argument Description
opt_parentDef ClassDef <optional>

Definição pai da definição que está sendo criada.


resetJustToGroup()

Define justToGroup e hasOwnJustToGroup como false, implementando assim a definição padrão.


setFieldsProperties()

Este método cria ou seta as propriedades informadas com os valores informados em cada campo da definido nos parâmetros. Para utilizar esse método existem diversas formas de o invocar, veja os exemplo abaixo.

Example
// Array de campos com callback para setar as propriedades:
 fl.setFieldsProperties([field1, field2], function (field) {
   field.prop = valor;
   field.prop2 = valor2;
 });

 // Array com os nomes dos campos com callback para setar as propriedades:
 fl.setFieldsProperties(['campo1','campos2'], function (field) {
   field.prop = valor; field.prop2 = valor2
 });

 // String com o nomes dos campos separados por virgula ou ponto e virgula como primeiro
 // parâmetro.
 // Array com nomes das propriedades a serem definidas como segundo parâmetro.
 // Array com os valores a serem definidos nas propriedades de mesmo índice como terceiro
 // parâmetro.
 fl.setFieldsProperties('campo1,campos2', ['prop', 'prop2'], [valor, valor2]);

 // Ainda na forma anterior pode ser utilizado o caractere '*' para obter todos os campos.
 fl.setFieldsProperties('*', ['prop', 'prop2'], [valor, valor2]);

 // Lista de strings separados por vírgula ou ponto e virgula com os nomes dos campos a
 // serem alterados como primeiro parâmetro.
 // Os parâmetros seguintes são os nomes das propriedades com os valores que devem ser
 // atribuídos.
 fl.setFieldsProperties('campo1,campos2', 'prop', valor, 'prop2', valor2);

toJSONSchema()

Cria uma representação JSON desta definição do modelo.

Returns:
Type
string

toString()

Retorna uma string que informa qual a chave do x-class ao qual a instância foi criada.

Returns:
Type
String

Events


afterCancel

Evento emitido após o cancelamento de uma inserção ou edição de um registro associado a classe de dados. Seu uso é recomendado para registrar que um usuário intencionalmente cancelou uma inserção ou edição. Importante: no momento da emissão deste evento o DataSet já concluiu o cancelamento da edição ou inserção, portanto a propriedade data não terá os dados do registro cancelado.

Type: DataEvent

afterDelete

Evento que será emitido após a exclusão de um registro associado a classe de dados. Seu uso é recomendado para realizar o registro de informações não essenciais, como logs de alterações.
Importante: este evento normalmente é emitido após a persistência das alterações no banco de dados. Visto que o sistema pode ser abruptamente interrompido, não há garantias de que ele será executado sempre que a classe de dados for alterada. Por esse motivo, não é recomendado o seu uso em regras de negócios.

Type: DataEvent

afterEdit

Evento emitido depois de uma edição de um registro associado a classe de dados ter sido iniciada. Seu uso é recomendado para atualizar informações que indiquem o momento ou o usuário que está realizando a modificação.

Type: DataEvent
Example
// O exemplo abaixo pega o último horário em que o registro entrou em edição e grava
 // este valor em um campo somente leitura para o usuário
 on('afterEdit', function (evt) {
   evt.data.modificado = new Date();
   evt.data.modificador = session.userKey;
 });

afterInsert

Evento emitido após a inserção de um registro associado a classe de dados. Seu uso é recomendado para sugerir os valores dos campos do novo registro, simplificando o preenchimento dos dados para o usuário.

Type: DataEvent

afterPersist

Evento emitido após o post e antes do afterPost, ou ainda, no caso de remoção de um registro ele deverá ser executado depois do delete e antes do afterDelete com o objetivo de fornecer a versão de alteração realizada pela persistência dos dados.

Type: AfterPersistEvent
Example
var logger = Logger.getLogger('MyClass');
 this.on('afterPersist', function (evt) {
   logger.info('Registro ' + evt.key + ' da classe ' + evt.classKey +
       ' foi gravado com sucesso. Alteração: ' + evt.action +
       '. Versão: ' + evt.version);
 });

afterPost

Evento emitido depois da execução do método post do DataSet associado a classe de dados. Seu uso é recomendado para realizar o registro de informações não essenciais, como logs de alterações.
Importante: este evento normalmente é emitido após a persistência das alterações no banco de dados. Visto que o sistema pode ser abruptamente interrompido, não há garantias de que ele será executado sempre que a classe de dados for alterada. Por esse motivo, não é recomendado o seu uso em regras de negócios.

Type: DataEvent
Example
on('afterPost', function (evt) {
   if (evt.data.recordCount > 5) {
     logger.debug('Registrado mais de 5 registros');
   }
 })

beforeCancel

Evento emitido antes de cancelar a inserção ou edição de um registro associado a classe de dados. Seu uso é recomendado para registrar que um usuário intencionalmente cancelou uma inserção ou edição, ou para realizar algum tipo de confirmação, no caso deste evento estar sendo emitido em um contexto de interface.

Type: DataEvent

beforeDelete

Evento emitido antes da exclusão de um registro associado a classe de dados. Seu uso é recomendado para verificar regras de negócio que impeçam a remoção de um registro em uma classe de dados.

Type: DataEvent
Example
on('beforeDelete', function (evt) {
   if (session.userKey !== Users.ADMINISTRATOR) {
     throw new Error('Apenas o usuário "administrator" pode excluir este registro.');
   }
 });

beforeEdit

Evento emitido antes da edição de um registro associado a classe de dados. Seu uso é recomendado para verificar regras de negócio que impeçam a edição de um registro da classe de dados.
Importante: no momento da emissão deste evento o DataSet ainda não encontra-se em estado de edição, portanto o registro corrente não deve ser modificado.

Type: DataEvent

beforeInsert

Evento emitido antes da inserção de um registro associado a classe de dados. Seu uso é recomendado para verificar regras de negócio que impeçam a inserção de um novo registro em uma classe de dados.
Importante: no momento da emissão deste evento o DataSet ainda não possui dados do registro a ser inserido, portanto o registro corrente não deve ser modificado.

Type: DataEvent

beforePersist

Evento emitido após o beforePost e antes do post, ou ainda, durante a remoção de um registro esse evento será executado depois do beforeDelete e antes do delete com intuito de fornecer os valores originais e modificados.
Caso haja uma regra configurada nesse evento o post da grade será responsável por persistir todas as informações que estejam na propriedade "transaction", que é uma instância do tipo Transaction. O intuito é armazenar datasets que devem ser persistidos junto com a alteração do registro.

Type: BeforePersistEvent
Example
this.on('beforePersist', function (evt) {
  var evento = evt.transaction.getOrSet('erp.beforePersistEvent', function () {
    var evento = new DataSet();
    dbCache.copyStructure('EVENTO', evento);
    evento.create();
    return evento;
  });
  if (evt.action === ApplyUpdatesAction.UPDATE && evt.beforeValues.uf !== evt.afterValues.uf) {
    evento.append();
    // cria um registro na tabela evento com base evt.beforeValues e evt.afterValues
    evento.post();
  }
});

beforePost

Evento emitido antes da execução do método post do DataSet associado a classe de dados. Seu uso é recomendado para realizar validações se os dados do registro não ferem regras de negócio.

Type: DataEvent
Example
// O exemplo abaixo verifica se os valores nos campos "password" e "confirmPassword"
 // são iguais, ou seja, se o usuário digitou uma senha e a confirmou corretamente,
 // em caso negativo exibe um erro, impedindo que o registro seja inserido.<br>
 // O evento recebe os seguintes parâmetros:<br>
 on('beforePost', function (evt) {
   if (evt.data.password !== evt.data.confirmPassword) {
     throw new Error('A nova senha e a confirmação são diferentes. Digite novamente a senha.');
   }
 });

lookupDisplay

Evento emitido quando o sistema precisa obter o valor de exibição de uma chave desta classe de dados. Os listeners registrados deverão preencher a propriedade LookupDisplayEvent#displayValue do evento emitido para informar o valor de exibição da chave indicada por LookupDisplayEvent#key.

Type: LookupDisplayEvent
Example
this.on('lookupDisplay', function (evt) {
   evt.displayValue = evt.key.nome;
 });

validate

Evento emitido antes da execução do método post do DataSet associado a classe de dados. Seu uso é recomendado para realizar validações se os dados do registro não ferem regras de negócio.

Type: DataEvent
Deprecated:
  • Utilize o evento beforePost.