Recursos Avançados do Dicionário de Dados
Nesta seção serão abordados recursos avançados do dicionário de dados, com por exemplo:
- Propriedade para criar agrupadores de campos
- Propriedade para definir a visibilidade de campos
- Propriedade Propriedade para criar abas para visibilidade de campos por licença ou profile
- Propriedade para definir campos somente leitura
- Propriedade para copiar campos na duplicação de registros do dataset
- Propriedades para criar campos específicos (Telefone, CPF, Senha, CEP)
- Propriedade para criar campo do tipo SelectDistinct
- Propriedade para definir a quantidade de casas decimais de um campo
- Propriedade para forçar campo do tipo Data (sem h/min/s)
- Propriedade para gerar encode do campo
- Propriedade para definir interceptador de metados de campos
- Propriedade para definir row_metadata
- Propriedades para criação de filtros rápidos
- Criação de campos calculados do tipo BeanShell e SQL
Nos exemplos apresentados abaixo, será utilizada uma tela "Catálogo de Produto”, que apresenta os seguintes campos:
- TIPOPROD - Tipo de Produto
- REFERENCIA - Referência
- DESCRICAO - Descrição
- CODUND - Unidade
- CODCTP - Código
- ATIVO - Ativo
![1.png 1061](https://files.readme.io/3a9ce7d-1.png)
Tela - Catálogo de Produto
Criação de abas (UITabName)
Esta propriedade possibilidade a criação de abas. No exemplo abaixo a aba Características.
![3.png 999](https://files.readme.io/ab5cd40-3.png)
Propriedade: UITabName
![2.png 836](https://files.readme.io/20225a4-2.png)
Nova aba: Características
Além de enviar um campo para outra aba, também é possível enviá-lo para o formulário principal.
![4.png 921](https://files.readme.io/20ac77f-4.png)
Propriedade: UITabName
![5.png 816](https://files.readme.io/d9251db-5.png)
Envio para o formulário principal
Criação de agrupadores de campos (UIGroupName)
Esta propriedade possibilidade a criação de grupos. No exemplo abaixo os grupos selecionados a partir do tipo de produto.
![6.png 662](https://files.readme.io/52fc56e-6.png)
Propriedade: UIGroupName
![7.png 712](https://files.readme.io/892b061-7.png)
Agrupador por Tipo de Produto
Definição de visibilidade de campos (visivel)
Esta propriedade possibilidade de ocultar campos. Dois valores são possíveis para o uso dessa propriedade:
- N - oculto para os usuários
- S - visível para os usuários
![8.png 621](https://files.readme.io/3ed7c8a-8.png)
Propriedade: visivel
Perceba que após o uso dessa propriedade o campo Unidade foi ocultado para o usuário.
![9.png 939](https://files.readme.io/7c60bba-9.png)
Campos Unidade invisível ao usuário final
Definição de visibilidade de campos por licença ou profile (ADD_PROFILE)
Visualmente tem o mesmo efeito da propriedade “visivel”, apresentada no tópico acima, mas agora depende de uma licença ou o profile em específico para ser visualizada.
![10.png 434](https://files.readme.io/fad3fba-10.png)
Propriedade: APP_PROFILE
Definição de campos somente leitura (readOnly)
Esta propriedade definem campos que serão utilizados apenas como leitura. No exemplo abaixo o campo definido como somente leitura será o campo Referência.
![11.png 591](https://files.readme.io/ef365de-11.png)
Propriedade: readOnly
![12.png 1037](https://files.readme.io/e90a1e9-12.png)
Campo Referência somente para Leitura
Criação de campos específicos (UIType)
Esta propriedade é utilizada para criação de campos específicos. Entre os campos específicos de criação temos:
- PASSWORD
- CEP
- Phone (Telefone)
- CGC (CNPJ)
- CPF
No exemplo abaixo o campo utilizado para demonstração será o PHONE.
![13.png 794](https://files.readme.io/99af923-13.png)
Propriedade: UIType
![14.png 1017](https://files.readme.io/7238e5f-14.png)
Campo Referência para inserção do campo Phone
Criação de campos do tipo SelectDistinct (useSelectDistinct)
Esta propriedade transforma um campo qualquer em uma pesquisa. A pesquisa busca os registros diferentes da própria tabela, por isso o nome SelectDistinct.
![15.png 671](https://files.readme.io/a1f955d-15.png)
Propriedade: useSelectDistinct
![16.png 1164](https://files.readme.io/0e39237-16.png)
Campo Referência como Pesquisa para busca de registros
Definição de casas decimais de um campo (nuCasasDecimais)
Esta propriedade permite editar o número de casas decimais em campos numéricos. No exemplo abaixo o campo utilizado para demonstração será o %Desconto que passa a ter 5 casas decimais.
![17.png 816](https://files.readme.io/e7cf009-17.png)
Propriedade: nuCasasDecimais
![18.png 714](https://files.readme.io/02fe654-18.png)
Campo % com cinco casas decimais.
Submeter campo do tipo Data (dataOnly)
Essa propriedade não é visual e foi criada para resolver os problemas de horário de verão. Quando ativa o campo sofre uma tratativa para inserção e alteração no banco de dados.
![19.png 401](https://files.readme.io/6e34f50-19.png)
Propriedade: dateOnly
Geração de encode de campos
Esta propriedade é utilizada para que o conteúdo do campo seja encriptado antes de apresentar ao usuário.
![20.png 807](https://files.readme.io/8694c08-20.png)
Propriedade: encodedtransport
![21.png 1512](https://files.readme.io/e944188-21.png)
Campo Referência com encriptação de dados
![22.png 705](https://files.readme.io/7b39276-22.png)
Campo Referência com informação dos dados sem encriptação no banco.
Definição de interceptador de metados de campos (metadataInterceptor)
Esta propriedade permite definir um interceptador de metadados. O interceptador deve ser uma classe Java e implementar a interface FieldMetadataInterceptor.
![23.png 898](https://files.readme.io/a8bb9a9-23.png)
Propriedade: metadatainterceptor
![24.png 938](https://files.readme.io/783caa9-24.png)
Implementação da interface FieldMetadataInterceptor
![25.png 1606](https://files.readme.io/96734fe-25.png)
Campo Tipo Produto com adição do tipo Produto Importado
Definição de row_metadata (rmp)
Esta propriedade permite criar provedores de metadados adicionais. Os metadados são resolvidos pelo próprio dataset. Um exemplo da utilização deste recurso pode ser vista na TGFITE, onde a formatação dos campos VLRUNIT e QTDNEG depende da configuração realizada na TGFPRO (DECVLR e DECQTD).
![26.png 878](https://files.readme.io/4da39fc-26.png)
Propriedade: rmp
![27.png 897](https://files.readme.io/76eb8a0-27.png)
Propriedade: rmp_precision
![28.png 847](https://files.readme.io/a96d230-28.png)
Propriedade: rmp_precision
Para concluir a geração dos metadados adicionais basta criar o provedor. Este deve implementar a interface RowMetadataProvider.
![29.png 800](https://files.readme.io/428cc2d-29.png)
Implementação da interface RowMetadataProvider
![30.png 877](https://files.readme.io/743a3e9-30.png)
Implementação da interface RowMetadataProvider
Criação de Filtros Rápidos
Existem propriedades específicas para criação automática de filtros rápidos. As propriedades disponíveis são:
-
filterType: Define o tipo do filtro. Podendo assumir os valores “period”, “mult-list” ou “default”. O valor “period” irá criar um filtro do tipo período (intervalo de datas). O valor “mult-list” irá criar uma lista de múltipla seleção. O valor “default” irá usar os metadados do próprio campo para criar o respectivo componente.
-
filterOrder: Define a ordem do filtro no painel de filtros.
-
filterRequired: Define a obrigatoriedade do filtro.
-
filterLabel: Define o label do filtro. O “filterLabel” tem prioridade sobre o “filterType” em relação a descrição do filtro.
-
filterSql: Define uma expressão SQL para o filtro.
![31.png 867](https://files.readme.io/677820b-31.png)
Propriedades: filterOrder, filterRequired, filterType
![32.png 1000](https://files.readme.io/d270aab-32.png)
Adição do campo de filtros: Filtros Rápidos
![33.png 895](https://files.readme.io/361890e-33.png)
Propriedades: filterGroup, filterOrder, filterType
![34.png 938](https://files.readme.io/bb438c4-34.png)
Adição do campo de filtros: Outros
Criação de campos calculados do tipo BeanShell e SQL.
Os campos calculados são apenas a nível de dicionário de dados, eles não existem fisicamente na tabela. Existem duas formas para criar um campo calculado:
-
BeanShell: basicamente criamos com ele scripts java para resolver o resultado do campo. Podem variar de uma simples expressão de soma até mesmo a chamada de um método com toda uma complexidade interna.
-
Expressão SQL: basicamente criamos um SELECT que deve retornar apenas uma única linha, com um único campo. Este SELECT será injetado na query principal da entidade na forma de sub SELECT.
-
BeanShell
![35.png 1007](https://files.readme.io/cc5aaef-35.png)
Campo Calculado utilizando BeanShell
- Expressão SQL
![36.png 936](https://files.readme.io/f4813ef-36.png)
Campo Calculado utilizando Expressão SQL
![37.png 1121](https://files.readme.io/a78787e-37.png)
Campo calculado - Caracterização
![38.png 1095](https://files.readme.io/7740e9d-38.png)
Campo calculado - DTATUAL
Definir totalizadores de colunas de grade
Para criar um totalizador de coluna basta incluir a propriedade gridFooterOper com o valor sum. Essa propriedade deve ser utilizada para campos numéricos do tipo Integer ou Float.
![39.png 1216](https://files.readme.io/504187c-39.png)
Propriedades: gridFooterOper
![40.png 1231](https://files.readme.io/62cfed9-40.png)
![41.png 1413](https://files.readme.io/d0e1ca9-41.png)
Totalizador do Campo Base do ICMS
Controle de Acesso Especial
Para definir um controle de acesso especial devemos utilizar a opção “Controle de Acesso” do DWF Designer ou alterar o xml correspondente ItensAcessos.xml.
O acesso é criado por resourceID, ou seja pelo identificador único da tela. Neste caso, precisamos definir uma sigla e descrição para cada opção que se deseja criar o acesso especial. A sigla deve ser única dentro do contexto do resourceID, ou seja não podemos ter duas siglas iguais para a mesma tela.
Uma vez criado o acesso a opção será exibida na tela Acessos para a respectiva tela.
![42.png 1239](https://files.readme.io/b5c50c5-42.png)
![43.png 951](https://files.readme.io/34c48c9-43.png)
![44.png 1379](https://files.readme.io/e088ab2-44.png)
A configuração realizada anteriormente serve apenas para disponibilizar a opção via controle de acessos.
Posteriormente é necessário implementar a verificação de acesso via fonte (na respectiva tela). Por exemplo, para o botão “Baixar” foi verificado se o usuário logado possui acesso a sigla “Baixa”.
![45.png 1152](https://files.readme.io/2692574-45.png)
![46.png 1155](https://files.readme.io/215394a-46.png)
![47.png 1156](https://files.readme.io/bd7fba4-47.png)
Updated almost 2 years ago