Botão "Duplicar registro" na grade

Introdução

Devido a necessidade cada vez mais constante de se criar registros com base em outros, foi criado o botão "Duplicar registro" para todas as grades.

O comportamento

Por padrão o botão "Duplicar registro" irá duplicar todos os campos com exceção da grade e dos campo que possuam os nomes IKEY, CHAVE, IVERSION e VERSAO.

Os campos de nome ICODE, CODIGO, INAME e TITULO serão duplicados por padrão com a adição do sufixo "+".

Este comportamento pode ser alterado definindo a propriedade duplicateMode do campo. Esta propriedade pode receber os seguintes valores:

    • uwi.field.DuplicateModes.NONE: o valor do campo não será duplicado.

    • uwi.field.DuplicateModes.COPY: o valor do campo será duplicado integralmente, caso este campo seja uma grade os dados dela serão duplicados seguindo o comportamento padrão do botão.

    • uwi.field.DuplicateModes.COPY_AND_SUFIX: o valor do campo será duplicado com a adição do sufixo "+".

Alterando o comportamento

Suponhamos que queremos que uma grade detalhe tenha seus dados duplicados para um novo registro e que os items do seu campo iName não recebam sufixo. Podemos fazer como no código abaixo:

Exemplo:

var grid = this.grid('Ambientes', connection.cloneLocalCacheByClass(-1892604132), -1892604132);

grid.onDefineFields.set(function (grid) {

// grid.field('ToolbarItems') = field contendo a grade detalhe.

var field = grid.field('ToolbarItems');

field.duplicateMode = uwi.field.DuplicateModes.COPY;

field.grid.onDefineFields(function (grid) {

grid.field('iName').duplicateMode = uwi.field.DuplicateModes.COPY;

});

});

grid.write();

Alterando o comportamento via x-class

É possível informar que uma determinada classe não pode ter seus dados duplicados por padrão para isso basta adicionar um x-class na classe desejada e definir a propriedade canDuplicate.

Exemplo:

this.canDuplicate = false;

Os eventos

Há dois eventos que são executados a cada clique no botão "Duplicar registro" são eles:,

    • onBeforeDuplicate: Executado antes de iniciar o processo de duplicação do registro;

    • onAfterDuplicate: Executado ao terminar o processo de duplicação do registro;

var grid = this.grid('Ambientes', connection.cloneLocalCacheByClass(-1892604132),

-1892604132);

grid.onDefineFields.set(function (grid) {

// grid.field('ToolbarItems') = field contendo a grade detalhe.

var field = grid.field('ToolbarItems');

field.duplicateMode = uwi.field.DuplicateModes.COPY;

field.grid.onDefineFields(function (grid) {

grid.field('iName').duplicateMode = uwi.field.DuplicateModes.COPY;

});

});

grid.onBeforeDuplicate.set(function(grid) {

inherited(grid);

grid.process.alert('Duplicando registros');

});

grid.onAfterDuplicate.set(function(grid) {

inherited(grid);

grid.process.alert('Registros duplicados com sucesso');

});

grid.write();

Pronto, você já pode começar a alterar o comportamento do botão "Duplicar Registro"!