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"!