Como ocultar botões?

Data de postagem: Dec 21, 2011 6:45:54 PM

Começo dizendo que, de uma forma geral, não é saudável alterar comportamentos e mesmo layout das telas de produtos UNUM. É importante ressaltar que, em casos de defeitos causados por estas alterações e apesar de ser uma tela de um produto UNUM, o cliente responderá como se fosse custom, pois de fato houve uma customização. Em outras palavras, é importante ficar claro que o cliente terá o ônus do ajuste sobre problemas desta natureza.

Existe ainda dois detalhes importantes. O botão Mostrar Chaves está passando para a infra-estrutura das grades, ou seja, deixará de ser um botão clássico e, portanto, não poderemos desligá-lo conforme a explicação abaixo.

Bem, feita a parte política, vamos à técnica! :)

Posso iniciar dizendo que temos botões em dois contextos, um no Processo (1) e outro na Grade (2).

1 - Caso o botão seja definido no processo, sua visibilidade só poderá ser desligada no próprio script do processo, ou seja, você não poderá fazê-lo caso o processo seja de um produto UNUM). O que você pode fazer é criar um segundo processo como cópia do anterior e redefinir os botões como quiser. Novamente, essa não é uma boa idéia, pois a manutenção e evolução de seu novo processo não estaria sendo feita pelaUNUM. A probabilidade de se ter uma quebra de compatibilidade é muito alta. O ideal é contactar a UNUM e solicitar uma melhoria onde seria criado um ponto de customização para esta necessidade.

2 - Caso o botão seja de uma Grade e ela tenha sido definida em um x-class, o trabalho fica mais fácil. Vamos tomar um exemplo de uma grade de nome "titulos". Na criação dessa grade, o desenvolvedor informa qual o classKey da grade. Isso é feito através do terceiro parâmetro do método grid. Veja um exemplo:

this.grid("titulos", ds, classKey);

O classKey informado corresponde à chave da classe onde ficam os arquivos x-class de onde, um deles, definirá a grade "titulos". Posicionando o cursor sobre o classKey, um CTRL+ENTER fará com que uma nova guia IDE seja aberta na classe de definição desta grade. Basta vasculhar os arquivos x-class desta classe e procurar qual x-class implementa a definição da grade. O x-class em questão deve conter algo parecido com isso:

this.defineGrid( "titulos", function (){ ...

Para redefinir a visibilidade de um botão desta grade, basta então criar um novo x-class que fique ordenado abaixo do x-class onde se encontra a última definição da grade "titulos". Por isso, temos arquivos x-class custom com o nome iniciando com 9900. Essa nomeclatura geralmente garante que este novo arquivo custom ficará ordenado abaixo dos arquivos x-class dos produtos UNUM. Feito isso, basta que, no x-class custom, tenhamos algo do tipo:

this.defineGrid( "titulos", function (){ inherited(this); this.button("Duplicar").visible = false; ...

Geralmente isso é o suficiente para alterar a visibilidade de um botão. É importantíssimo que a linha "inherited(this);" seja definida, caso contrário não herdaremos o comportamento definido pelo x-class anterior.