Namespaces

Classes

ApplyUpdatesAction
ArrayBuffer
Barcode
Base64
BigDecimal
Classes
Connection
CriticalSection
Crypto
CryptoPKey
Database
DatabaseProxy
DataSet
DataSetStates
DataTable
DBCache
DetailedError
DSACryptoPKey
Email
EmailMessage
EmailMessageHeader
EmailMessagePart
Encoder
Engine
Enginelet
File
FileSynchronizer
GetFieldOptions
GoogleVisualization
GzipFile
IdoDB
IdoDBManager
JavaImporter
JavaRequest
JSScanner
JSSpecialWord
JSTokenType
JSTokenWord
LicenseManager
Logger
MD5
MemoryAnalyzer
MemoryStream
DataSourceColumnDef
DataSourceColumns
DataSourceColumn
DataSourceDef
DataSourceExecutor
DataSourceFieldDef
DataSourceField
DataSourceFilterDef
DataSourceFilters
DataSourceFilter
DataSourceQueryColumnDef
DataSourceQueryDef
DataSourceQueryFilterDef
DataSourceQuery
DataSourceResult
DataSource
UpdateOptions
UpdateScript
Barcode
QRCode
AfterPersistEvent
BeforePersistEvent
ClassDefCache
ClassDefManager
ClassDef
ConfigDef
DataEvent
FieldChangeEvent
FieldEvent
FieldGroupSet
FieldGroup
FieldList
FieldNameList
FieldOptionsEvent
Field
LookupAddResultEvent
LookupDisplayEvent
ModelDef
PermissionFieldScope
PermissionField
PersistEvent
SessionConfiguration
StrictModeEvaluator
EngineCluster
JSScanner
JSSpecialWord
JSTokenWord
GzipFile
ZipFile
Zlib
ZstdCompressor
ZstdDecompressor
Zstd
Connection
CryptoPKey
Crypto
DSACryptoPKey
ECCryptoPKey
HMAC
MD5
RSACryptoPKey
SHA1
SHA256
SHA512
Classes
Database
DBBackup
DBCache
DBTrackerPool
DBTracker
KeyPrefetcher
KeyReplacer
KeysUtilities
LargeObject
LobRecordIterator
LobStorage
LogDatumIterator
QueryUtilities
TransactionLog
ApplyUpdatesAction
ClientDataSet
DataSetManagerError
DataSetManager
DataSetStates
DataSetTransformer
DataSet
DataSetFieldDefs
DeltaInspector
GetFieldOptions
RecordIterator
Transaction
DBKey
Attr
CDATASection
CharacterData
Comment
DocumentFragment
DocumentType
Document
DOMImplementation
DOMString
Element
EntityReference
Entity
NamedNodeMap
NodeList
Node
Notation
ProcessingInstruction
Text
EmailMessageHeader
EmailMessagePart
EmailMessage
Email
Pop3
Base32
Base64
Base85
Encoder
Hex
Engine
DetailedErrorBase
DetailedError
FatalError
AdapterDescriptor
Adapter
Emitter
EventTypeError
Event
LegacyEvent
LegacyMethod
Listener
SurrogateListener
FileInfo
FileStorage
FileSynchronizer
ArgsError
IDToken
HtmlSanitizer
Accepts
HttpError
BadRequest
Forbidden
NotAcceptable
NotFound
ServiceUnavailable
Unauthorized
RealmConfig
RequestBody
Request
Response
ServerId
NumberFormat
ResourceString
IdoDBManager
IdoDB
File
MemoryStream
SearchRecord
SerialPort
Enginelet
JavaImporter
JavaRequest
JWS
LicenseManager
Logger
BigDecimal
ApplicationSessionInfo
EngineInfo
SystemMonitor
MultipartFormDataOptions
MultipartFormDataPart
MultipartFormDataReader
MultipartFormData
MultipartFormFile
NetworkUtilities
Socket
WebSocket
XMLHttpRequest
OAuth2Client
OpenIdClient
OpenIdProvider
OSApplication
HOTP
TOTP
PhoneNumber
HtmlToPdf
Spool
ProductManager
Profiler
ProgressMonitor
Progress
TaskProgressStatusArray
TaskProgressStatus
Regex
Repository
Broker
ControllerEvent
Controller
RouteDef
RouteResult
RouteSetDef
RouteSet
RoutesValidator
Route
ScriptRunner
Job
RemoteScheduler
Scheduler
Task
DatabaseSchemaObserver
DatabaseSchema
DataModelSchema
AdministratorPasswordResetRequest
AuthToken
FieldPermissions
PasswordResetService
PasswordRulesUtilities
PermissionAssignment
PermissionMaintenance
PermissionManager
PermissionSchema
SecurityPolicy
Security
Sequence
SessionManager
Session
GeneralSettings
StringList
CriticalSection
SyncEvent
MockRequest
MockResponse
UnionFileSystem
URLSearchParams
VirtualFileSystem
XMLStreamReader
IClauseFrom
IClauseJoin
IClauseSelect
IClauseWhere
IColumn
IJoinManager
IQuery
TestCaseEvent
TestResult
TestRunner
TestSuiteRunner
TestSuite
EntityError
EntityKeySet
EntityKey
EntityOptions
EntitySetOptions
EntitySet
Entity
LinkSet
Link
Audio
ButtonTimer
Button
ECharts
Chart
CellThumbnail
FieldCalculateEvent
GetTreeIconEvent
GlobalActionSet
GlobalAction
GridEvent
GridFieldEvent
GridLocateEvent
LookupMultipleInsertEvent
OpenKeyEvent
TreeNodeEvent
ViewDefField
ViewDef
FormDialogField
FormDialog
SimpleDialog
UploadDialog
CompositeVisualizationDef
CompositeVisualizationSlot
CompositeVisualization
DataVisualizationDef
DataVisualization
EChartsVisualizationDef
EChartsVisualization
HighchartsVisualizationDef
HighchartsVisualization
ReportVisualizationColumnDef
ReportVisualizationColumns
ReportVisualizationColumn
ReportVisualizationDef
ReportVisualization
VisualizationDef
VisualizationFilterDef
VisualizationFilters
VisualizationFilter
VisualizationFooterDef
VisualizationHeaderDef
VisualizationSchedulerJob
Visualization
Environment
DataExporterFieldDef
DataExporter
DataSetExporter
AvgFieldAggregator
CountFieldAggregator
FieldAggregator
MaxFieldAggregator
MinFieldAggregator
SumFieldAggregator
DownloadOptions
FileLoader
LoadedFile
UploadedFile
UploadOptions
BeforeSelectRecordEvent
DetailGrid
GridExporter
GridExportEvent
GridField
Grid
TableViewBuffer
TreeExpandEvent
FakeResponse
ControlChannel
Label
Controller
MessageBuffer
Interaction
LayoutManager
ProcessCreateEvent
ProcessEvent
ProcessInteractionEvent
ProcessManager
Process
Promise
PubSub
Seeker
Accumulator
ColumnGroup
Column
Footer
Header
SimpleLayoutExporter
SimpleLayout
DeltaInspector
RecordIterator
DataSetUtils
ScriptRunner
Job
AuthToken
Regex
ResourceString
configureWithLocalSettings
UnionFileSystem
ZipFile
OpenSSL
OSApplication
Pop3
Profiler
Progress
ProgressMonitor
Repository
Request
Response
RSACryptoPKey
Scheduler
ScriptTag
SearchRecord
Security
SerialPort
Server
Session
SessionManager
SHA1
sleep
Socket
StreamedDatabaseBackup
StringUtils
SyncEvent
SystemMonitor
Task
TaskProgressStatus
TaskProgressStatusArray
TextDecoder
TextEncoder
Counter
ErrorStop
PendingTaskManager
PendingTaskScripts
VirtualFileSystem
XMLHttpRequest
Zlib

Namespaces

browser
hash
js
net
scheduler
security
text
text
ufs
util
config
pendingTask
security
task

Events


afterChange

Evento que será emitido após um campo ter sido alterado, permitindo que o desenvolvedor modifique outros campos com base no valor informado.

Type: FieldChangeEvent
Example
field('uf').on('afterChange', function (evt) {
   if (evt.newValue) {
     evt.data.localidade = null;
   }
 });

afterLookupAddResult

Evento emitido após o filtro dos resultados de uma pesquisa de um campo lookup. Esse evento será emitido uma vez, independente da quantidade de registros filtrados pelo evento lookupAddResult. Seu uso é recomendado quando há necessidade de limpar eventuais recursos que foram alocados em listeners do evento beforeLookupAddResult.

Type: FieldEvent
Example
field.on('afterLookupAddResult', function (evt) {
   evt.field.saldo_.empty();
 });

beforeChange

Evento que será emitido antes de um campo ser alterado, permitindo que o desenvolvedor impeça a alteração do campo, lançando um erro, ou altere o valor a ser informado no campo, modificando a propriedade FieldChangeEvent#newValue.

Type: FieldChangeEvent
Example
field.on('beforeChange', function (evt) {
   if (evt.newValue > 10)
     throw new Error('Valor não pode ser maior que 10');
 });

beforeLookupAddResult

Evento emitido antes do filtro dos resultados de uma pesquisa de um campo lookup. Esse evento será emitido uma vez, independente da quantidade de registros filtrados pelo evento lookupAddResult. É recomendado o seu uso para alocar recursos que serão utilizados pelos listeners do evento lookupAddResult, evitando alocar esses recursos a cada avaliação do filtro.

Type: FieldEvent
Example
field.on('beforeLookupAddResult', function (evt) {
   var process = evt.field.parent.process;
   // Saldo é um DataSet que será utilizado no evento lookupAddResult
   evt.field.saldo_ = saldo.consulta();
   evt.field.saldo_.indexFieldNames = 'LOTE';
 });

getOptions

Evento emitido para obter as opções de valores aceitos no preenchimento deste campo.

Ao configurar o evento getOptions de um campo, ele passa a ser comportar como um campo do tipo "combo", independentemente do tipo de dado informado na construção do campo.

Este evento deve ser configurado apenas se as opções não forem informadas diretamente por meio da propriedade #options do campo.

Type: FieldOptionsEvent
Example
field.on('getOptions', function (evt) {
   evt.options = [['Opção A', 1], ['Opção B', 2]];
 });

lookupAddResult

Evento emitido durante a pesquisa de um campo lookup, permitindo que o desenvolvedor filtre as opções possíveis de serem informadas neste campo. Deve ser retornado um booleano para indicar se o registro indicado por LookupAddResultEvent#key pode ser utilizado como valor deste campo.

Type: FieldEvent
Example
field.on('lookupAddResult', function (evt) {
   return !evt.data.uf || evt.key.uf === evt.data.uf;
 })

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 = DBKey.str(evt.key, 'NOME');
 });

validate

Evento emitido antes de efetivar uma modificação com o objetivo de validar o preenchimento do campo.

Diferentemente dos eventos beforeChange e afterChange, esse evento não deve fazer uso de componentes de interface, pois ele tem o objetivo exclusivo de realizar validações de modelo de dados e pode ser chamado em contextos sem interação com o usuário, como APIs HTTP.

Type: FieldEvent
Example
grid.field('field_name').on('validate', function (evt) {
   if (evt.data.field_name < 0) {
     throw new Error('O valor deve ser positivo.');
   }
 });

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('package.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 = DBKey.from(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.

afterEvent

Evento emitido após a execução do método associado à ação de uma rota HTTP, mesmo que tenha ocorrido um erro durante a sua execução.

O seu uso é recomendado para fins de geração de logs ou para padronizar os resultados em um formato específico esperado pelo cliente da API HTTP.

Type: ControllerEvent
See:
Example
this.on('afterAction', function (evt) {
   const original = evt.result;
   evt.result = RouteResult()
     .withStatus(Status.OK)
     .withContent({
       success: !evt.error
       data: JSON.stringify(original.content)
     });
 });

beforeAction

Evento emitido antes da execução do método associado à ação de uma rota HTTP.

O seu uso é recomendado para tratamentos ou validações que devem ocorrer para todas as rotas de uma API, ou para implementar um mecanismo de autorização customizado alternativo ao modelo de autorização padrão do sistema.

Type: ControllerEvent
See:
Example
this.on('beforeAction', function (evt) {
   if (session.userKey == -1) {
     customAuthorization(evt.request.headers['x-user-token']);
   }
 });

error

Evento emitido se ocorrer um erro durante a execução do método associado à ação de uma rota HTTP.

O seu uso é recomendado para geração de logs ou para a geração de erros em um formato diferente do padrão do roteador HTTP, o qual expõe as propriedades do erro como propriedades de um objeto literal.

Observação: este evento irá capturar erros gerados nos eventos beforeAction e afterAction, portanto ele será executado após esses eventos.

Type: ControllerEvent
See:
Example
this.on('error', function (evt) {
   evt.result = RouteResult()
     .withStatus(Status.OK)
     .withContent({
       error: evt.error.message
     });
 });

addTableColumns

Evento emitido após as colunas terem sido adicionadas em uma tabela.

Type: module:@nginstack/engine/lib/schema/DatabaseSchemaObserver~AddTableColumnsEvent
Example
const DatabaseSchema = require('@nginstack/engine/lib/schema/DatabaseSchema');
const DatabaseSchemaObserver = require('@nginstack/engine/lib/schema/DatabaseSchemaObserver');

const observer = new DatabaseSchemaObserver();
observer.on('addTableColumns', function (evt) {
  const columnNames = evt.columns.map(function (def) { return def.name; });
  log.info('Columns added to table ' + evt.tableName + ': ' + columnNames.join(', ));
});
DatabaseSchema.registerObserver(observer);

alterTableColumns

Evento emitido após as colunas terem sido alteradas em uma tabela.

Type: module:@nginstack/engine/lib/schema/DatabaseSchemaObserver~AlterTableColumnsEvent
Example
const DatabaseSchema = require('@nginstack/engine/lib/schema/DatabaseSchema');
const DatabaseSchemaObserver = require('@nginstack/engine/lib/schema/DatabaseSchemaObserver');

const observer = new DatabaseSchemaObserver();
observer.on('alterTableColumns', function (evt) {
  const columnNames = evt.columns.map(function (def) { return def.name; });
  log.info('Columns altered on table ' + evt.tableName + ': ' + columnNames.join(', ));
});
DatabaseSchema.registerObserver(observer);

dropTableColumns

Evento emitido após as colunas terem sido removidas de uma tabela.

Type: module:@nginstack/engine/lib/schema/DatabaseSchemaObserver~DropTableColumnsEvent
Example
const DatabaseSchema = require('@nginstack/engine/lib/schema/DatabaseSchema');
const DatabaseSchemaObserver = require('@nginstack/engine/lib/schema/DatabaseSchemaObserver');

const observer = new DatabaseSchemaObserver();
observer.on('dropTableColumns', function (evt) {
  log.info('Columns removed from table ' + evt.tableName + ': ' + evt.columns.join(', ));
});
DatabaseSchema.registerObserver(observer);

show

Evento que será emitido antes da exibição desta ação global. Neste evento a ação global pode ter seus parâmetros complementados e suas propriedades alteradas dinamicamente de acordo com a chave do registro que está acionando essa ação global.

A propriedade target do evento é a instância da ação global.

Type: GlobalActionEvent
See:
  • module:@nginstack/web-framework/lib/classdef/GlobalActionEvent~GlobalActionEvent
Example
globalAction.on('show', function (evt) {
   const key = DBKey.from(evt.key);
   if (key.num('classe') == CHAVE_CLASSE_CLIENTES) {
     evt.target.caption = 'Abrir cadastro do cliente';
   } else {
     evt.target.caption = 'Abrir cadastro do fornecedor';
   }
   evt.target.addParameter({ nome: key.str('nome') });
 });

blur

Evento emitido quando o campo perde o foco. O uso deste evento não é recomendado, pois ele prejudica a usabilidade da grade ao torná-la mais lenta. Com o uso deste evento passa a ser necessária uma interação com o servidor durante a navegação de campos.

Type: GridFieldEvent
Example
field.on('blur', function (evt) {
   evt.field.parent.process.alert('O campo perdeu o foco.');
 });

calculate

Evento que será emitido para obter o valor do campo calculado.

Type: FieldCalculateEvent | GridFieldEvent
Example
// O exemplo abaixo retorna o registro do DataSet em que o cursor está
 // posicionado e atribui esse valor ao campo.
 field.on('calculate', function (evt) {
   evt.value = evt.data.recNo;
 });

defineGrid

Evento emitido em campos do tipo "masterDetail" ou "grid" com o objetivo de permitir a configuração da grade detalhe.

Type: GridFieldEvent
Example
// O exemplo abaixo cria uma grade detalhe e seta o título como "Grade personalizada".
 grid.field('campo_detail_grid').on('defineGrid', function (evt) {
   var grid = evt.field.grid;
   grid.title = 'Grade detalhe';
 });

focus

Evento emitido quando o campo recebe o foco. O uso deste evento não é recomendado, pois ele prejudica a usabilidade da grade ao torná-la mais lenta. Com o uso deste evento passa a ser necessária uma interação com o servidor durante a navegação de campos.

Type: GridFieldEvent
Example
// O exemplo abaixo exibe o help do campo no label "helpMessages" existente no
 // processo.
 field.on('focus', function (evt) {
   var label = evt.field.parent.process.helpMessages;
   label.text = evt.field.help;
 });

getTreeIconEvent

Evento emitido na apresentação de uma grade em árvore para obter o ícone de um nó.
Emitido apenas quando o field é do tipo "tree". O sender do evento é o nó corrente da árvore. Deve retornar o identificador de um dos ícones da biblioteca de ícones do Web Framework.

Type: GetTreeIconEvent | GridFieldEvent
Example
field.on('getTreeIcon', function (evt) {
   if (!evt.node.level) {
     evt.icon = 'robot';
   }
 });

lookupMultipleInsert

Evento emitido quando ocorrer uma inserção múltipla de registros a partir da grade Lookup.
A inserção múltipla de registros fica habilitada na grade Lookup por meio do botão 'Inserir como Novos' quando a propriedade 'allowMultipleInsert' do campo é definida como true.
O comportamento padrão é inserir automaticamente múltiplos registros de acordo com a seleção que ocorreu na grade Lookup, no entanto esse comportamento pode ser alterado por este tipo de evento.

Type: LookupMultipleInsertEvent | GridFieldEvent
Example
// O exemplo abaixo, mostra a possibilidade de estender esse comportamento
 // herdando ou não o procedimento padrão.
 var field = grid.field('CAMPO', 'int64');
 field.classKey = -1898187808; // Tipos de Arquivo
 field.allowMultipleInsert = true;
 field.replaceListeners('lookupMultipleInsert', function (evt, emitReplaced) {
   emitReplaced(evt); // herda o comportamento padrão (opcional)
   var grid = evt.field.parent;
   for (var i = 0; i < evt.lookupGrid.selectedRecords.length; ++i) {
     evt.lookupGrid.ds.bookmark = evt.lookupGrid.selectedRecords[i];
     grid.ds.append();
     grid.ds.campo = evt.lookupGrid.ds.ikey;
     grid.ds.obs = 'Registro inserido manualmente';
     grid.ds.post();
   }
 });

openKey

Evento emitido quando o usuário deseja abrir detalhes sobre um registro de um campo lookup ou deseja uma interface mais rica para auxiliar o seu preenchimento.

Type: OpenKeyEvent | GridFieldEvent
Example
field.on('openKey', function (evt) {
   var parameters = [
     'baseClass', evt.classKey,
     'keysToOpen', evt.value,
     'fromOpenKey', true,
     'lookupType', evt.lookupType
   ];
   if (evt.target instanceof Field) {
     parameters.push(
       'targetProcessId', evt.process.id,
       'targetTabId', evt.process.currentTabId,
       'targetGridName', evt.target.parent.name,
       'targetFieldName', evt.target.name
     );
   }
   evt.process.setNextInteraction('main', parameters, -1898145512, true); // Explorer.ip;
 });

afterDuplicate

Evento que será emitido após um registro ser duplicado. Seu uso é recomendado para realizar sugestões de valores para o registro novo, recém duplicado.

Type: module:@nginstack/web-framework/lib/classdef/GridEvent~GridEvent
Example
this.on('afterDuplicate', function (evt) {
   evt.grid.process.alert('Registro duplicado.');
 });

afterScroll

Evento emitido após a navegação de um registro para um outro em uma grade associada a um DataSet. Também será emitido assim que a grade for escrita, momento em que ela se posicionar no registro corrente do DataSet.

Type: module:@nginstack/web-framework/lib/classdef/GridEvent~GridEvent

beforeDuplicate

Evento que será emitido antes de um registro seja duplicado. Seu uso é recomendado para verificar regras de negócio que indiquem se o registro pode ou não ser duplicado.

Type: module:@nginstack/web-framework/lib/classdef/GridEvent~GridEvent
Example
this.on('beforeDuplicate', function (evt) {
   evt.grid.process.alert('Duplicando registro em ' + evt.grid.name + '.');
 });

beforeScroll

Evento que será emitido antes da navegação de um registro para um outro em uma grade associada a um DataSet. Também será emitido assim que a grade for escrita, momento em que ela se posicionar no registro corrente do DataSet.

Type: module:@nginstack/web-framework/lib/classdef/GridEvent~GridEvent
Example
// No exemplo abaixo é dado um alerta informando o número do registro em que
 // se estava posicionado, caso a grade não esteja vazia.<br>
 this.on('beforeScroll', function (evt) {
   if (evt.data.recNo > 0) {
     evt.process.alert('Você estava no registro: ' + evt.data.recNo);
   });
 })

changeView

Evento que será emitido quando for alterado o modo de visão da grade.
A grade poderá ter seu modo de visão alterado a partir da propriedade viewMode que irá disparar este evento, ao chamar esse evento a propriedade viewMode estará com seu valor anterior á mudança de visão.
A grade também pode ter seu modo de visão alterado quando for chamado o grid.write() que possui um parâmetro que determina em que modo será escrita a grade.

Type: module:@nginstack/web-framework/lib/classdef/GridEvent~GridEvent
Example
// No exemplo abaixo quando o modo de visão da grade é alterado são alterados
 // também os botões visíveis pois algumas delas não fazem sentido em um ou outro
 // modo de visão. Como a modificação deve ser do modo formulário para tabela e
 // vice-versa, é utilizado uma expressão condicional para analisar o valor do viewMode.<br>
 this.on('changeView', function (evt) {
   if (evt.grid.viewMode === Grid.TABLEVIEW ){
     evt.grid.visibleButtons = ['Redefinir Grade'];
   } else {
     evt.grid.visibleButtons = ['Editar', 'Recarregar grades'];
   }
 });

defineClassesGrid

Evento que permite a customização da grade de classes no processo ClassesExplorer do Admin.

Type: module:@nginstack/web-framework/lib/classdef/GridEvent~GridEvent

definePermissionsGrid

Evento que permite a customização da grade de permissões.

Type: module:@nginstack/web-framework/lib/classdef/GridEvent~GridEvent

locate

Evento que será emitido quando a grade for localizar um conteúdo.
O comportamento padrão de localização da grade poderá ser substituído fazendo uso do método ngin.event.Listener#replaceListeners.

Type: module:@nginstack/web-framework/lib/classdef/GridLocateEvent~GridLocateEvent
Example
// O exemplo abaixo personaliza a busca para permitir que sejam buscados apenas
 // números e executa o evento padrão através do "inherited".<br>
 // O evento deverá retornar um valor booleano, sendo true para indicar que localizou
 // o registro. O dataSet da grid deve ser posicionado no registro localizado.
 this.replaceListeners('locate', function (evt, replacedEmit) {
   if (typeof evt.value !== 'number') {
     replacedEmit(evt)
     if (replacedEmit.locatedField) {
       grid.process.setNextInteraction('interactionName')
     }
   } else {
     throw new Error('Não é possível localizar valores diferentes de números!')
   }
 });

openKey

Evento emitido quando o usuário deseja abrir detalhes sobre um registro de um campo lookup ou deseja uma interface mais rica para auxiliar o seu preenchimento. nas classes ancestrais.

Type: module:@nginstack/web-framework/lib/classdef/OpenKeyEvent~OpenKeyEvent

showLog

A grade possui o botão de "Log" que ao ser acionado exibe o histórico de alterações do registro corrente. Este evento será emitido quando esse botão for acionado.
O processo padrão de histórico de alterações da grade poderá ser substituído fazendo uso do método ngin.event.Listener#replaceListeners.

Type: module:@nginstack/web-framework/lib/classdef/GridEvent~GridEvent
Example
this.replaceListeners('showLog', function (evt) {
   evt.grid.process.setNextInteraction('run', ['chave', evt.data.ikey], -1898143458);
   evt.preventDefault();
 });

createDataSet

Evento que será emitido no momento em que a grade detalhe for necessitar do Dataset. Quando adicionado um listener a este evento, ele será o responsável por preparar o DataSet associado à grade detalhe.

Type: GridEvent
Example
// O exemplo abaixo cria um DataSet e retorna para a grid.
 detail.on('createDataSet', function (evt) {
   var result = new DataSet();
   result.createField('iKey', 'int64');
   result.createField('iContent', 'string', 255);
   result.create()
   evt.data = result;
 });

masterCancel

Evento que será emitido toda vez que ocorrer um cancel na master, útil quando algum campo na master tem influência nos campos da grade detalhe e é necessário desfazer uma alteração ao cancelar.
Importante: se você tentar usar o post da grade detalhe ou coloca-lá em edição nesse método, você nunca conseguirá tirar a grade de edição.

Type: GridEvent

masterDelete

Evento que será emitido toda vez que ocorrer a exclusão de um registro na grade mestre. Seu uso é recomendado para excluir registros da grade detalhe que não façam sentido existir após a exclusão do registro mestre.
Importante: por padrão a grade detalhe registra um listener que implementa o comportamento definido pela propriedade #masterDeleteAction. Substitua os listeners definidos para este evento caso esse não seja o comportamento desejado.

Type: GridEvent
Example
detail.replaceListeners('masterDelete', function (evt) {
   while (!evt.data.eof) {
     evt.date.del();
   }
 });

masterInsert

Evento que será emitido quando ocorrer uma inserção na grade mestre.

Type: GridEvent
Example
// O exemplo abaixo insere um registro padrão no dataSet da detalhe, quando for inserido
 // um registro na mestre
 detail.on('masterInsert', function (evt) {
   var ds = evt.data.newSharedDataSet();
   ds.append([evt.masterGrid.ds.chave, '123456']);
   ds.post();
 });

masterPost

Evento que será emitido toda vez que ocorrer um post na grade mestre. Seu uso é recomendado para realizar alguma ação na grade detalhe após o post da Master, mas que ocorra antes do post da grade detalhe.

Este é um evento específico do fluxo de atualização da grade mestre detalhe e deve ser utilizado apenas nos casos em que a montagem dos dados da grade detalhe não são convencionais. Para regras de negócio, prefira utilizar o evento beforePost da grade detalhe.

Importante: neste evento não se deve alterar o estado de edição do dataset da grade detalhe, caso contrário os dados poderão ser gravados sem as validações contidas no evento beforePost ou a grade poderá ficar em constante estado de edição.

Type: GridEvent

masterScroll

Evento que será emitido quando ocorrer uma alteração do registro corrente na grade mestre. Seu uso é recomendado para definir um filtro no DataSet da grade detalhe.
Importante: a grade adiciona por padrão um evento que filtra os dados com base nas propriedades module:@nginstack/web-framework/lib/grid/GridField#masterFieldNames e module:@nginstack/web-framework/lib/grid/GridField#detailFieldNames. Executar os eventos já existentes aplicará este filtro. Caso não seja desejado, substitua os eventos definidos utilizando o método #replaceListeners.

Type: GridEvent
Example
detail.replaceListeners('masterScroll', function (evt) {
  var masterData = evt.masterGrid.ds;
  evt.data.setRange([masterData.chave, masterData.tipo], [masterData.chave, masterData.tipo]);
})

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: GridEvent
See:

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: GridEvent
See:

afterDuplicate

Evento que será emitido após um registro ser duplicado. Seu uso é recomendado para realizar sugestões de valores para o registro novo, recém duplicado.

Type: GridEvent
See:
Example
grid.on('afterDuplicate', function (evt) {
   evt.grid.process.alert('Registro duplicado.');
 });

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: GridEvent
See:
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;
 });

afterExpand

Evento emitido depois de um registro ser expandido pelo usuário.

Type: TreeExpandEvent

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: GridEvent
See:

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: GridEvent
See:
Example
on('afterPost', function (evt) {
   if (evt.data.recordCount > 5) {
     logger.debug('Registrado mais de 5 registros');
   }
 })

afterPrepare

Evento emitido após a preparação da grade. A preparação da grade ocorre quando ela é escrita pela primeira vez na interface pelo método Grid#write.

Type: GridEvent
Deprecated:
  • Prefira utilizar o evento "defineFields".
See:

afterScroll

Evento emitido após a navegação de um registro para um outro em uma grade associada a um DataSet. Também será emitido assim que a grade for escrita, momento em que ela se posicionar no registro corrente do DataSet.

Type: GridEvent
See:

afterSelectRecord

Evento que será emitido após um ou mais registros serem marcados ou desmarcados na grade.

Type: GridEvent
See:

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: GridEvent
See:

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: GridEvent
See:
Example
on('beforeDelete', function (evt) {
   if (session.userKey !== ngin.keys.Users.ADMINISTRATOR) {
     throw new Error('Apenas o usuário "administrator" pode excluir este registro.');
   }
 });

beforeDuplicate

Evento que será emitido antes de um registro seja duplicado. Seu uso é recomendado para verificar regras de negócio que indiquem se o registro pode ou não ser duplicado.

Type: GridEvent
See:
Example
grid.on('beforeDuplicate', function (evt) {
   evt.grid.process.alert('Duplicando registro em ' + evt.grid.name + '.');
 });

beforeEdit

Evento emitido antes da edição de um registro da grade 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: GridEvent
See:

beforeExpand

Evento emitido após um registro ser expandido em uma grade em árvore. O conceito de expansão e contração de registros existe apenas quando há campos do tipo "tree" em uma grade.

Type: TreeExpandEvent

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: GridEvent
See:

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: GridEvent
See:
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.');
   }
 });

beforePrepare

Evento emitido antes da preparação da grade. A preparação da grade ocorre quando ela é escrita pela primeira vez na interface pelo método Grid#write.

Type: GridEvent
Deprecated:
  • Prefira utilizar o evento "defineFields".
See:

beforeScroll

Evento que será emitido antes da navegação de um registro para um outro em uma grade associada a um DataSet. Também será emitido assim que a grade for escrita, momento em que ela se posicionar no registro corrente do DataSet.

Type: GridEvent
See:
Example
// No exemplo abaixo é dado um alerta informando o número do registro em que
 // se estava posicionado, caso a grade não esteja vazia.<br>
 grid.on('beforeScroll', function (evt) {
   if (evt.data.recNo > 0) {
     evt.process.alert('Você estava no registro: ' + evt.data.recNo);
   });
 })

beforeSelectRecord

Evento emitido quando um registro é marcado ou desmarcado, ou quando o usuário pressiona o botão inverter seleção. Este evento é emitido antes da seleção ocorrer, permitindo que o desenvolvedor possa alterar a seleção do usuário.

Type: BeforeSelectRecordEvent
Example
grid.on('beforeSelectRecord', function (evt) {
   var selected = createSet(evt.grid.selectedRecords);
   var alreadySelected = evt.bookmarks.some(function (bmk) {
     return bmk in selected;
   });
   if (alreadySelected) {
     evt.process.alert('Não é permitido selecionar o registro mais de uma vez.');
     evt.bookmarks = [];
   }
 });

changeView

Evento que será emitido quando for alterado o modo de visão da grade.
A grade poderá ter seu modo de visão alterado a partir da propriedade viewMode que irá disparar este evento, ao chamar esse evento a propriedade viewMode estará com seu valor anterior á mudança de visão.
A grade também pode ter seu modo de visão alterado quando for chamado o grid.write() que possui um parâmetro que determina em que modo será escrita a grade.

Type: GridEvent
See:
Example
// No exemplo abaixo quando o modo de visão da grade é alterado são alterados
 // também os botões visíveis pois algumas delas não fazem sentido em um ou outro
 // modo de visão. Como a modificação deve ser do modo formulário para tabela e
 // vice-versa, é utilizado uma expressão condicional para analisar o valor do viewMode.<br>
 grid.on('changeView', function (evt) {
   if (evt.grid.viewMode === Grid.TABLEVIEW ){
     evt.grid.visibleButtons = ['Redefinir Grade'];
   } else {
     evt.grid.visibleButtons = ['Editar', 'Recarregar grades'];
   }
 });

defineFields

Evento que deve ser utilizado para configurar os campos de uma grade. Todas as definições de campo devem ser declaradas através deste evento.
Configurações de campos realizadas fora deste evento serão perdidas caso sejam alteradas as propriedades Grid#classKey ou Grid#ds, ou caso seja executado o método Grid#refresh.

Type: GridEvent
See:
Example
grid.on('defineFields', function (evt) {
   var fld = evt.grid.field('matricula', 'int32');
   fld.size = 6;
   fld.readOnly = true;
   fld.label = 'Número de matrícula';
   fld.help = 'Número da matrícula do aluno.';

   fld = evt.grid.field('disciplina', 'string', 256);
   fld.size = 6;
   fld.readOnly = true;
   fld.label = 'Disciplina';
   fld.help = 'Código das disciplinas que serão cursadas por este aluno.';
 });

export

Evento que será emitido quando o botão de exportar da grade for acionado.

Type: GridExportEvent

locate

Evento que será emitido quando a grade for localizar um conteúdo.
O comportamento padrão de localização da grade poderá ser substituído fazendo uso do método ngin.event.Listener#replaceListeners.

Type: uwi.classdef.GridLocateEvent
Example
// O exemplo abaixo personaliza a busca para permitir que sejam buscados apenas
 // números e executa o evento padrão através do "inherited".<br>
 // O evento deverá retornar um valor booleano, sendo true para indicar que localizou
 // o registro. O dataSet da grid deve ser posicionado no registro localizado.
 grid.replaceListeners('locate', function (evt, replacedEmit) {
   if (typeof evt.value !== 'number') {
     replacedEmit(evt)
     if (replacedEmit.locatedField) {
       grid.process.setNextInteraction('interactionName')
     }
   } else {
     throw new Error('Não é possível localizar valores diferentes de números!')
   }
 });

showLog

A grade possui o botão de "Log" que ao ser acionado exibe o histórico de alterações do registro corrente. Este evento será emitido quando esse botão for acionado.
O processo padrão de histórico de alterações da grade poderá ser substituído fazendo uso do método ngin.event.Listener#replaceListeners.

Type: GridEvent
See:
Example
grid.replaceListeners('showLog', function (evt) {
   evt.grid.process.setNextInteraction('run', ['chave', evt.data.ikey], -1898143458);
   evt.preventDefault();
 });

afterCreateProcess

Evento emitido após a criação de um novo processo no Web Framework. Seu uso é recomendado para customizações que devem ser aplicadas a todos os processos do sistema.

O processo recém criado estará disponível na propriedade process do evento.

Por ser um evento global que afetará todos os processos, é recomendado que ele seja definido em um script de inicialização do Web Framework (/Configuração/Inicialização do Web Framework).

Type: ProcessCreateEvent
See:
  • module:@nginstack/web-framework/lib/process/ProcessCreationEvent
Example
const ProcessManager = require('@nginstack/web-framework/lib/process/ProcessManager');

const processManager = ProcessManager.getInstance();
processManager.on('afterCreateProcess', function (event) {
  event.process.help += '\nAdiciona uma ajuda padrão aos processos.';
});

processError

Evento emitido quando um erro é disparado durante a execução de um processo. Seu uso é recomendado para customizações sobre o diálogo de erro que será exibido ou sobre o próprio erro.

O erro estará disponível na propriedade error do evento.

Por ser um evento global que afetará todos os processos, é recomendado que ele seja definido em um script de inicialização do Web Framework (/Configuração/Inicialização do Web Framework).

Type: ProcessErrorEvent
See:
  • module:@nginstack/web-framework/lib/process/ProcessErrorEvent
Example
const ProcessManager = require('@nginstack/web-framework/lib/process/ProcessManager');

const processManager = ProcessManager.getInstance();
processManager.on('processError', function (event) {
  if (event.error instanceof DetailedError) {
    event.dialogTitle = 'Erro detalhado';
  }

  if (event.error.solution) {
    event.error.solution += (!event.error.solution.endsWith('.') ? '. ' : ' ') +
        'Abra um ticket.';
  } else {
    event.error.solution += 'Abra um ticket.';
  }
});

afterCreate

Evento emitido após a criação do processo no Web Framework. O processo recém criado estará disponível na propriedade process do evento.

Type: ProcessCreateEvent
See:
  • module:@nginstack/web-framework/lib/process/ProcessCreationEvent

afterRunInteraction

Evento emitido após a execução de uma interação ou atividade do processo.

Type: ProcessInteractionEvent
See:

beforeExit

Evento que sinaliza que o processo está sendo encerrado. Seu uso é recomendado quando há necessidade de alertar o usuário que o fechamento do processo poderá gerar perda de informações não gravadas.

Ele é emitido antes da aba do processo ser fechada, seja pelo usuário ou pelo método closeTab, ou quando um botão, atalho ou atividade do processo redirecionar o usuário para um outro processo na mesma aba.

A finalização do processo poderá ser impedida chamando o método preventDefault do evento.

Importante: este evento não será emitido quando o usuário fechar o navegador ou a aba onde o sistema está aberto. Por questões de segurança, os navegadores impedem a execução de JavaScript no fechamento de uma página web.

Type: module:@nginstack/web-framework/lib/process/ProcessEvent~ProcessEvent
See:
Example
process.on('beforeExit', function (evt) {
   const process = evt.process;
   const grid = process.grid('pending');
   if (!grid.ds.isEmpty){
     if (!process.confirm('Ainda há operações a serem analisadas. Deseja realmente sair?') {
       evt.preventDefault();
     }
   }
 });