Class: ViewDefField

@nginstack/web-framework/lib/classdef/ViewDefField~ ViewDefField


new ViewDefField(name, type, size, size)

Campo de uma definição de visão (x-view ou x-class) do Web Framework.

Parameters:
Name Type Argument Description
name string

Nome único que identificará o campo.

type string

Tipo do campo, observe a propriedade #type para mais detalhes .

size number <nullable>

Tamanho do campo, requerido apenas para campos do tipo "string".

size Number

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

Extends

  • Field

Members


<static> VM_LIST :number

Indica se campos do tipo "file" deverão exibir uma lista dos nomes dos arquivos armazenados.

Type:
  • number
See:
  • Field#viewMode

<static> VM_THUMBNAIL :number

Indica se campos do tipo "file" deverão exibir o conteúdo dos arquivos armazenados quando possível.

Type:
  • number
See:
  • Field#viewMode

aggregate :DataSetAggregate

Irá aplicar alguma função de totalização no field, criando uma linha a mais no final, mostrando a totalização aplicada.
As possibilidades de agregação são: SumDataSetAggregate, AvgDataSetAggregate, MaxDataSetAggregate, MinDataSetAggregate e CountDataSetAggregate
ATENÇÃO!Para que a totalização funcione corretamente, o field deve estar associado a um campo do DataSet.
Fields com o evento onCalculate não podem ser totalizados por esse motivo.
O exemplo abaixo mostra uma aplicação da propriedade

Type:
  • DataSetAggregate
See:
  • Field#onCalculate
Example
fld.aggregate = new SumDataSetAggregate();

alignment :string

Determina qual será o alinhamento do campo na grade.

Observe na tabela abaixo os valores possíveis e o modo de alinhamento:

  • "left": alinhamento à esquerda (Valor padrão);
  • "right": alinhamento à direita;
  • "center": alinhamento centralizado;
Type:
  • string

allowMultipleInsert :boolean

Indica que a partir da grade de lookup, será possível fazer múltiplas inserções na grade corrente. Os novos registros serão inseridos com base no registro corrente.
Importante: campos somente para leitura no momento da inserção do novo registro não terão o seu conteúdo sugerido com base no registro corrente.

Type:
  • boolean

breakLine :boolean

Indica se deverá ser forçada a quebra de linha após o campo quando da escrita da grade.

Type:
  • boolean

changed :boolean

Indica se o campo foi alterado.

Type:
  • boolean

column :number

Índice da coluna em que o campo deve ser exibido em modo formulário.
O uso desta propriedade permite dispor campos lado-a-lado. Quando utilizado em colunas do tipo grade, todas as demais colunas na mesma linha devem ser do tipo grade.

Type:
  • number
Examples
Um exemplo de disposição de linhas e colunas:
 ----------------------------------------------------------
| order=0;column=0 | order=2;column=1 | order=3;column=2 |
| order=4;column=0 | order=5;column=1 | order=6;column=2 |
| order=7;column=0 | order=8;column=1 | order=9;column=2 |
----------------------------------------------------------
fld = grid.field('e1', 'masterdetail');
   fld.label = 'e1';
   fld.order = 1;
   fld.classKey = -123;
   fld.masterFieldNames = 'iKey';
   fld.detailFieldNames = 'iClass';
   fld.column = 0;

   fld = grid.field('e2', 'masterdetail');
   fld.label = 'e2';
   fld.order = 2;
   fld.classKey = -123;
   fld.masterFieldNames = 'iKey';
   fld.detailFieldNames = 'iClass';
   fld.column = 1;

controlType

Determina qual controle será utilizado no cliente para renderizar e editar o conteúdo do campo.
Os valores permitidos são:

  • "input": O campo será editado através de um input HTML. O valor do campo deve ser textual, sem tags HTML. (valor padrão)
  • "image": O campo exibirá imagens em seu conteúdo. Campos deste tipo de controle utilizarão o valor do campo como URI da imagem a ser exibida.
  • "color": O campo exibirá uma cor em seu conteúdo. Campos deste tipo utilizarão um seletor de cores para que o usuário selecione a cor desejada.
  • "none": Não será utilizado um controle e o conteúdo do campo será considerado um HTML que deve ser inserido diretamente na célula da grade, sem nenhum tipo de validação ou restrição. Por não existir um controle, o conteúdo exibido não poderá ser editado pelo usuário.

    O controlType "none" permite uma grande flexibilidade na exibição de dados, no entanto é recomendado que seja utilizado com moderação. O seu uso delega ao desenvolvedor a responsabilidade de:
  • definir o estilo CSS do campo, em especial em sobrescrever estilos não desejados herdados do tema. Upgrades futuros do WebFramework ou alterações nos temas podem exigir que o CSS do campo seja revisto.
  • garantir que não sejam inseridas tags que possam quebrar o leiaute da grade.
    Conteúdos informados pelo cliente devem ser validados para não permitir a injeção de códigos maliciosos por usuários mal-intencionados.

cssClass :string

Classe CSS utilizada para definir visualmente o campo.

Type:
  • string

detailDescendingIndexFieldNames :string

Indica quais campos da propriedade detailIndexFieldNames devem estar em ordem descendente.
Recurso disponível apenas para campos do tipo "grid".

Type:
  • string
See:
  • Field#detailIndexFieldNames

detailIndexFieldNames :string

Indica a ordem desejada dos campos na grade detalhe. Os índices do DataSet serão os campos definidos na propriedade detailFieldNames e os campos informados nesta propriedade.
Recurso disponível apenas para campos do tipo "grid".

Type:
  • string
See:
  • Field#detailFieldNames
  • Field#detailDescendingIndexFieldNames

duplicateMode :string

Informa o comportamento do campo ao ser duplicado. Por padrão, todos os campos visíveis são duplicados, exceto grades detalhes, que explicitamente devem ser configurados para serem duplicados.

Type:
  • string
See:
  • DuplicateMode
Example
var fld = this.field('campo1', 'string', 50);
//Indica que não ocorre nada durante a duplicação, o valor será vazio no
//para o registro duplicado
fld.duplicateMode = 'none';

var fld = this.field('campo2', 'string', 50);
//Indica que o valor será copiado para o registro duplicado
fld.duplicateMode = 'copy';

var fld = this.field('campo3', 'string', 50);
//Indica que o valor será a copia com um caractere '+' adicionado
fld.duplicateMode = 'copyAddingSuffix';

editable :boolean

Determina se o campo pode ser editado, não leva em consideração a propriedade readOnly.
Apenas campos calculados que não tenham o evento onAfterChange definido serão considerados campos não-editáveis.

Type:
  • boolean

emptyResultMessage :string

Mensagem personalizada que será exibida ao usuário quando o lookup não encontrar resultados.

Type:
  • string

formViewable :boolean

Determina se o campo é visível no modo formulário.

Type:
  • boolean
See:
  • Field#tableViewable

hasInformedControl :boolean

Indica se o campo deve sinalizar em negrito que o valor foi alterado pelo usuário. Os campos alterados pelo usuário serão gravados no campo especial "iInformedFields".

Type:
  • boolean

Indica se o campo possui links associados a ele.

Se não explicitamente configurada, ela será true sempre que houver links configurados ou quando a classe lookup do campo tiver ações globais.

Ela pode ser manualmente configurada para false quando não for desejado exibir as ações globais de um determinado campo. Na prática, esta propriedade indica se o botão de exibir os links estará disponível na interface.

Type:
  • boolean
See:
  • Field#links

height :number

Altura do campo em linhas.
Utilizado apenas no modo formulário da grade.
Este atributo náo é válido para campos do tipo boolean e grid.

Type:
  • number
Default Value:
  • 1
See:
  • Field#width

isCalculated :boolean

Determina se é um campo calculado, ou seja, se possui o evento calculate configurado.

Type:
  • boolean

labelCssClass :string

Estilo (CSS) que será atribuído ao título do campo. O exemplo abaixo aplica o estilo "novoEstilo" ao campo "my_field".

Type:
  • string
Example
// Este código deverá ser executado em interações.
this.write('
   <style type="text/css">
    .novoEstilo {
     letter-spacing:   0px;
     font-family:    MS Sans Serif, Arial, Helvetica, Verdana;
     text-align:     right;
     font-weight:    bold;
     font-size:      8pt;
     color:        #000000;
     background-color: #D1E1CA;
     text-decoration:  none;
     padding:      2px;
    }
   </style>
');

var gr = this.grid('vars')
gr.title = 'Variáveis'
gr.onDefineFields.set(function(grid) {
   var fld = grid.field('my_field', 'integer')
   fld.labelCssClass = 'novoEstilo'
})

gr.write()

labelPosition :string

Determina a posição do rótulo do campo no modo de visualização formulário. Possíveis valores: "left" e "top".

Type:
  • string
Default Value:
  • left

Link associado ao campo. API desaconselhada, utilize a propriedade "links".

Type:
Deprecated:
  • Yes
See:
  • Field#links

linkParametersValuesFieldNames :Array

Nomes dos campos dos quais deverão ser extraídos os parâmetros dos links.

Type:
  • Array
Deprecated:
  • Yes
See:
  • Field#links

Coleção de atalhos que estão associados ao campo.
Para criar um novo atalho, utilize o método AnchorCollection#add.

Type:
  • AnchorCollection
See:
Example
// Cria(m)-se o(s) objeto(s) link antes de adicioná-los ao field
 const lnk1 = process.link('Explorador', 'main', -1898145512, false);
 const lnk2 = process.link('Alerta', function (link){
   process.alert('Alerta do meu segundo atalho!');
 });
 fld.links.add(lnk1);
 fld.links.add(lnk2);

masterDetailMaxRecordCount :number

Quantidade máxima de registros que serão exibidos na grade detalhe.
Recurso disponível apenas para campos do tipo "grid".

Type:
  • number
Deprecated:

negativeInRed :boolean

Determina se os valores negativos de campos do tipo "number" ou "integer" devem ser destacados com a cor vermelha.

Type:
  • boolean
Default Value:
  • true

onBlur :Event

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:
  • Event
Deprecated:
  • Utilize on('blur', listener).
Example
field.onBlur.set(function (field) {
   field.parent.process.alert('O campo perdeu o foco.');
 });

onCalculate :Event

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

Type:
  • Event
Deprecated:
  • Utilize on('calculate', function (listener).
Example
// O exemplo abaixo retorna o registro do DataSet em que o cursor está
 // posicionado e atribui esse valor ao campo.
 field.onCalculate.set(function (field) {
   return field.parent.ds.recNo;
 });

onDefineGrid :Event

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

Type:
  • Event
Deprecated:
  • Utilize on('defineGrid', listener).
Example
// O exemplo abaixo cria uma grade detalhe e seta o título como "Grade personalizada".
 grid.field('campo', 'grid').onDefineGrid.set(function (field) {
   var grid = field.grid;
   grid.title = 'Grade detalhe';
 });

onFocus :Event

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:
  • Event
Deprecated:
  • Utilize on('focus', listener).
Example
// O exemplo abaixo exibe o help do campo no label "helpMessages" existente no
 // processo.
 field.onFocus.set(function (field) {
   var label = field.parent.process.helpMessages;
   label.text = field.help;
 });

onGetTreeIcon :Event

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 a chave ou URL de uma imagem da virtual file system (VFS).

Type:
  • Event
Deprecated:
  • Utilize on('getTreeIcon', listener).
Example
field.onGetTreeIcon.set(function(field) {
   if (!field.level) {
     return '/treeImages/root.png';
   }
 });

onLookupMultipleInsert :Event

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:
  • Event
Deprecated:
  • Utilize on('lookupMultipleInsert', listener).
Example
// O exemplo abaixo, mostra a possibilidade de estender esse comportamento
 // herdando ou não o procedimento padrão.
 var field = grid.field('CAMPO', 'integer');
 field.classKey = -1898187808; // Tipos de Arquivo
 field.allowMultipleInsert = true;
 field.onLookupMultipleInsert.set(function (sender, grdLookup) {
   inherited(sender, grdLookup); // herda o comportamento padrão (opcional)
   var grid = sender.parent;
   for (var i = 0; i < grdLookup.selectedRecords.length; ++i) {
     grdLookup.ds.bookmark = grdLookup.selectedRecords[i];
     grid.ds.append();
     grid.ds.campo = grdLookup.ds.ikey;
     grid.ds.obs = 'Registro inserido manualmente';
     grid.ds.post();
   }
 });

onOpenKey :Event

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:
  • Event
Deprecated:
  • Utilize on('openKey', listener);

parent :Grid|ViewDef

Grade ou definição de classe a qual este campo está associado.

Type:
  • Grid | ViewDef

requiredDataSetFields :string

Lista dos campos que devem existir no dataset da grade para que este campo possa ser exibido.
Por padrão: É necessário no mínimo existir um campo no dataset com o mesmo nome que este campo.

Type:
  • string

resyncPending :boolean

Indica se o campo deve ter seu valor sincronizado entre o cliente e o servidor. Esta propriedade é de uso interno.

Type:
  • boolean

saveInputAsDefault :boolean

Indica se o valor informado pelo usuário deve ser armazenado e sugerido como valor padrão nos próximo usos.
Recurso disponível apenas em grades de variáveis.

Type:
  • boolean
See:
  • Field#defaultValue

showGlobalActions :boolean

Define se este campo deve apresentar ações globais.

Type:
  • boolean

tableViewable :boolean

Determina se o campo é visível no modo tabela.

Type:
  • boolean
See:
  • Field#formViewable

tableViewHeight :number|string|null

Altura da imagem dentro de um campo definida em quantidade de pixels que devem ser exibidos na visão da grade em modo tabela. Caso não seja informado, será utilizado o valor da propriedade height.

Type:
  • number | string | null
See:
  • Field#height

tableViewWidth :number

Largura do campo definida em quantidade de caracteres que devem ser exibidos na visão da grade em modo tabela. Caso não seja informado, será utilizado o valor da propriedade width.
Com base nesta informação será calculado a quantidade de pixels necessários para exibir a quantidade de caracteres informada. No entanto, a largura das letras variam e este cálculo é aproximado, podendo haver variações na quantidade real de caracteres exibidos.

Type:
  • number
See:
  • Field#width

thumbnail :CellThumbnail

Configuração do thumbnail das imagens do cadastro indicado por este campo. O thumbnail das imagens do cadastro é exibido apenas em campos com classKey informado.

Type:
  • CellThumbnail

treeChildFieldName :string

Nome do campo que deve ser utilizado para pesquisar os nós filhos a partir do valor do campo treeParentFieldName do nó mãe.
Utilizado apenas em campos do tipo "tree".

Type:
  • string
See:
  • Field#treeParentFieldName
  • Field#treeRootValues
Example
Exemplo na documentação da propriedade treeParentFieldName.

treeParentFieldName :string

Nome do campo que relaciona os registros em uma estrutura em árvore. O valor deste campo no registros filhos é igual ao campo treeChildFieldName do registro mãe. Utilizado apenas em campos do tipo "tree".
Exemplo:

Type:
  • string
See:
  • Field#treeChildFieldName
  • Field#treeRootValues
Example
this.interaction('main', function () {
    var classe = connection.cloneLocalCache('CLASSE');
    this.classesTree = this.grid('classesTree', classe);
    this.classesTree.title = 'Árvore de Classes';
    this.classesTree.tableViewFieldNames = 'NOME';
    this.classesTree.onDefineFields.set(function (grid) {
        var fld = grid.field('NOME', 'tree')
        fld.order = 10;
        fld.label = 'Nome';
        fld.treeParentFieldName = 'MAE';
        fld.treeChildFieldName = 'CHAVE';
        fld.treeRootValues = [-1898146248]; // data
    });
    this.classesTree.write();
});

treeRootValues :Object

Valor ou array de valores que devem ser utilizados para encontrar a raiz da uma árvore. Os valores informados serão pesquisados no campo informado na propriedade treeChildFieldName.
Utilizado apenas em campos do tipo "tree".

Type:
  • Object
See:
  • Field#treeParentFieldName
  • Field#treeChildFieldName
Example
Exemplo na documentação da propriedade treeParentFieldName.

viewMode :number

Modo de visão dos campos do tipo "file". Valores permitidos: Field.VM_THUMBNAIL ou Field.VM_LIST.

Type:
  • number
Deprecated:
  • Campos do tipo file não são mais suportados. Utilize as classes Relações entre cadastros e arquivos.
See:
  • Field#VM_THUMBNAIL
  • Field#VM_LIST

visible :boolean

Indica se o campo deverá ser visível no modelo. Para o valor false no modelo implica dizer que o campo nunca será utilizado. Ou seja nenhum Framework será capaz de obter a informação do campo. Contudo caso o campo não seja utilizado no Web Framework, o desenvolvedor deve utilizar o valor false na camada de visão.

Type:
  • boolean
See:

width :number

Largura do campo definida em quantidade de caracteres que devem ser exibidos.
Com base nesta informação será calculado a quantidade de pixels necessários para exibir a quantidade de caracteres informada. No entanto, a largura das letras variam e este cálculo é aproximado, podendo haver variações na quantidade real de caracteres exibidos.
Para definir o tamanho de campos do tipo "string", utilize a propriedade "size".

Type:
  • number
See:
  • Field#height
  • Field#tableViewWidth
  • Field#size

wrap :boolean

Indica se o texto contido no field deve quebrar as linhas, não tendo assim uma barra de rolagem horizontal. Só faz sentido usar esta propriedade em campo do tipo "memo".

Type:
  • boolean

zoomMaxHeight :number|string|null

Altura para imagem definida em quantidade de pixels que devem ser exibidos no preview da grade em modo tabela. Caso não seja informado, será utilizado o valor da propriedade height.

Type:
  • number | string | null
See:
  • Field#height

zoomMaxWidth :number|string|null

Largura para imagem definida em quantidade de pixels que devem ser exibidos no preview da grade em modo tabela. Caso não seja informado, será utilizado o valor da propriedade height.

Type:
  • number | string | null
See:
  • Field#height

Methods


canHaveGlobalActions()

Checa se este campo possui estrutura de ter ações globais.

Returns:

Indica se é possível ter ações globais neste campo.

Type
boolean

getGlobalActionClassKey( [opt_key])

Pega a chave da classe para ser usada como base de cálculo das ações globais levando em consideração o estado atual deste campo.

Parameters:
Name Type Argument Description
opt_key number <optional>

Caso esta chave seja passada significa que este campo sabe exatamente aonde está posicionado e quer calcular a classe mais próxima a dada chave.

Returns:

Chave da classe calculada para uso nas ações globais.

Type
number

getGlobalActionRegisterKey( [opt_key])

Pega a chave do registro para ser usado como base de cálculo das ações globais levando em consideração o estado atual deste campo.

Parameters:
Name Type Argument Description
opt_key number <optional>

Força que o resultado seja esta chave.

Returns:

Chave do registro posicionado caso seja possível pegá-lo.

Type
number

getIsDataBaseField()


hasEvent(eventName)

Verifica se foi adicionada uma função ou método ao evento informado.

Parameters:
Name Type Description
eventName string

Nome do evento

Deprecated:
  • Utilize #hasListeners.
Returns:

True se houver pelo menos uma função ou método adicionado ao evento.

Type
boolean

hasLookupDisplayEvent()

Indica se há um evento onLookupDisplay configurado nesse campo ou na definição da classe (x-class) a qual este campo está associado.

Returns:
Type
boolean

isGrid()

Indica se o tipo do campo é grid ou masterdetail.

Returns:

True se o campo for uma grade detalhe, false caso contrário.

Type
boolean

isKey()

Indica se o conteúdo do campo é uma chave.

Returns:

True se o campo armazena chave de uma outra tabela

Type
boolean

isMasterDetail()

Verifica se o campo é do tipo masterdetail ou se é uma grade que estabelece uma relação mestre-detalhe por meio das propriedades #classKey, #masterFieldNames e #detailFieldNames.

Returns:

True se o campo estabelecer uma relação mestre-detalhe.

Type
boolean

isTree()

Indica se o conteúdo do campo deve ser exibido em árvore.

Returns:

True se o campo é do tipo tree, false caso contrário.

Type
boolean

Events


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 a chave ou URL de uma imagem da virtual file system (VFS).

Type: GetTreeIconEvent | GridFieldEvent
Example
field.on('getTreeIcon', function (evt) {
   if (!evt.node.level) {
     evt.iconPath = '/treeImages/root.png';
   }
 });

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', 'integer');
 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;
 });