GE - Como Fazer - Pesquisa Dinâmica

De CIGAM WIKI
Revisão de 11h56min de 24 de janeiro de 2023 por Camila.Oliveira (discussão | contribs) (Como personalizar/definir um valor inicial para os filtros do tipo lista)

Voltar

Pesquisa Dinâmica

Com a proposta de otimizar e facilitar as pesquisas do CIGAM, foi desenvolvido uma nova tela na versão do CIGAM11. Assim, a partir de um modelo pré-cadastrado em XML, será possível utilizar a pesquisa dinâmica. Na pesquisa dinâmica será possível criar filtros com campos macros e/ou por faixas. Nesta tela de pesquisa existem 4 funcionalidades disponíveis:

  1. Visão rápida - Mostra algumas informações conforme o modelo configurado.
  2. Visualizar - Abre a tela em modo de consulta no item selecionado.
  3. Modificar - Abre a tela em modo modificar no item selecionado.
  4. Criar - Abre a tela em modo de criação.

Como parametrizar/buscar modelos de pesquisas dinâmicas

Para buscar um modelo para pesquisa dinâmica automaticamente é necessário somente existir uma pasta dentro do %Cigam_Instal% chamada Modelos\Pesquisas\Modulo\NomePublico_decrição.

Ao ter um modelo com a nomenclatura NomePublico_decrição dentro da pasta do Módulo dentro de Pesquisas, ao abrir o programa esse modelo é buscado automaticamente e vinculado ao Perfil de usuário, caso o mesmo não exista é possível a busca automática via Disco Virtual, podendo assim fazer a baixa dos modelos no %cigam_instal% com somente um clique no programa a que possui a chamada para a pesquisa dinâmica.

A alteração da pesquisa dinâmica e o vínculo aos demais usuários é possível através do Perfil de usuário, facilitando assim vincular os modelos da pesquisa dinâmica sem que seja necessário informar caminhos.

Como fazer alteração de Modelo Pesquisa Dinâmica

Acesse a página GE - Como Fazer - Alteração de Modelo Pesquisa Dinâmica para obter maiores informações.

Como montar a pesquisa dinâmica para utilização no CIGAM

A empresa deverá possuir um arquivo modelo xml e também um arquivo modelo rtf para a visão rápida, dentro da pasta %CIGAM_INSTAL%Modelos\Pesquisas\.
Exemplo:

 CG02075_Empresas.xml
 CG02075_Empresas.rtf

Para a montagem da pesquisa dinâmica é necessário montar o select com os filtros dos campos desejados considerando na montagem no xml os seguintes parâmetros:

 Parâmetros de sintaxe do banco de dados:
 
 {#}  MSSQL                          Oracle
 {0}  with (nolock)                  (branco)
 {1}  top 1                          (branco)
 {2}  %DBUSUARIO%.                   (branco)
 {3}  +                              ||
 {4}  substring                      substr
 {5}  (branco)                       from dual
 {6}  (branco)                       and rownum = 1
 {7}  cast(                          utl_raw.cast_to_varchar2(
 {8}  as varchar(max))               )
 {9}  Comentado            	     (branco)
 {10} (branco)               	     Comentado
 {11} /*               	             (branco)
 {12} */               	             (branco)
 {13} (branco)               	     /*
 {14} (branco)               	     */


Dentro do modelo XML deve ser apontado o caminho do modelo para a visão rápida. Pode ser apontado mais de um caminho, conforme o exemplo a seguir:

 <lupa>
 <modelo arquivo="CG02075_Empresas.rtf" />
 <modelo arquivo="CG02075_Empresas_PF.rtf" tag="Pessoa" valor="Física" />
 </lupa>

Voltar ao início

Como será iniciado a Pesquisa Dinâmica

Após a parametrização os filtros são apresentados conforme o xml vinculado. Ao selecionar um segundo filtro, o outro será fechado.

Voltar ao início

Como configurar para iniciar aberto em faixa ou pesquisar

Dentro do arquivo xml poderá ser selecionado qual guia iniciará aberta.

Para isso, poderá ser definido o atributo “initFolder” na tag “select”. Os valores válidos para essa tag serão “P” e “F” para Pesquisar e Faixa respectivamente:

 <pesquisaPaginada>
 <select paginacao="0" initFolder="P">

Voltar ao início

Como configurar o duplo clique na Pesquisa Dinâmica

O duplo clique sobre um dos registros listados pela Pesquisa Dinâmica, bem como o uso da tecla 'Enter', pode ser parametrizado para definir o modo de abertura do registro. Este comportamento pode ser definido através do atributo “duploClick” na tag “select” e os valores possíveis são “V”, “M” e “C”, respectivamente, para Visualizar, Modificar e Criar. Exemplo:

 <pesquisaPaginada>
 <select paginacao="0" initFolder="P" duploClick="M">

Voltar ao início

Como Utilizar dados nos filtros

Os dados de filtros deverão ser utilizados da maneira que são informados pelo usuário. Se um filtro tem uma formatação, tal formatação deve ser considerada no local que será usado. Por exemplo, se um filtro é do tipo alpha, na consulta Sql deverá ser colocado o valor desse filtro entre aspas.
Para variações de sintaxe conforme o banco de dados, deverá ser considerado também que somente o valor do filtro será dinâmico. Por exemplo, se um filtro é do tipo data, sem a formatação no padrão DateToDbString, a instrução Sql deverá ser diferente para Sql Server e Oracle, tal como Convert(datetime,'[value]',103) ou To_date('[value]', 'dd/MM/yyyy') respectivamente.
No mesmo exemplo citado antes, para poder manter o mesmo modelo de pesquisa para ambos os bancos de dados, tais variações poderiam ser substituídas pelo uso da opção “DB” no atributo “validate” do filtro do tipo data.

 <filtros order="order by">
 <item nome="Vencimento" atrib="A" where="lc.Dt_vencimento = '[value]'" format="00/00/0000" validate="DB" />
 </filtros>

Voltar ao início

Como ordenar um filtro

[Versão 220404.c 1] Podemos indicar por qual campo do select os dados serão ordenados para ser exibidos. Para isso, dentro do xml é possível colocar o order by 1 dentro do select na tag item. O número junto no order by indica a coluna do select que irá ser ordenada.

 <faixa order="order by 3">
 <item nome="Divisão" select="select Divisao, Descricao_divis from /*nl<GEDIVISAO>*/ {0} order by 2" where="e.Divisao = '[divisao]'" display="Descricao_divis"/>
 <item nome="UF" select="select distinct Codigo_estado as estado, Nome_estado from /*nl<GEESTADO>*/ {0} order by 2" where="e.Uf = '[estado]'" display="Nome_estado"/>
 </faixa>

Voltar ao início

Como personalizar/definir um valor inicial para os filtros do tipo lista

O valor inicial vem sempre definido como 'Todos' pois é o valor default, e não é possível fazer essa personalização.
Cadastro Empresas

Voltar ao início

Como visualizar em formato de mosaico na pesquisa dinâmica

Dentro do xml poderá existir a tag “mosaicos” para definição dos mosaicos para os registros.
Se for encontrada essa tag no parser, estará visível na barra de topo um botão para alternar a exibição entre grid e mosaicos.

Cada registro irá renderizar um mosaico.

Na definição dos mosaicos, os atributos da tag principal definem o mosaico já as tag’s filhas definem as informações a serem colocadas dentro do mosaico.

 <mosaicos width="400" height="160" color="204;204;255" maxRender="300" clickAction="M" allPages="false">
 <label display="@Nome Completo" x="100" y="10" size="12" color="50;50;50" />
 <label display="@Fantasia" x="101" y="36" size="10" color="50;50;50" />
 <label display="Telefone:" x="100" y="60" size="8" color="63;72;204" />
 <label display="@Fone" x="130" y="76" size="25" color="63;72;204" />
 <picture file="Foto" x="5" y="5" width="90" height="90" circular="true" />
 </mosaicos>

Atributos da tag “mosaicos”:

  • “width” e “height” definem o tamanho do mosaico.
  • “color” é informado com o RGB da cor desejada
  • “maxRender” informa o número máximo de mosaicos que devem ser renderizados. Neste caso, se a consulta de registros retornar muitos registros, somente serão desenhados o número de mosaicos definidos nessa opção.
  • “clickAction” define o evento padrão quando o mosaico for clicado. Os valores válidos são “M” e “V” para modificação e visualização respectivamente.
  • “allPages” como “true” informa que antes de exibir os mosaicos deverá carregar todos os registros da pesquisa (equivalente a um click no botão “Última página”)


Tags filhas da tag “mosaicos”:

  • “label”: escreve um label no mosaico. Essa tag tem os seguintes atributos:
    • “display” é a informação que será escrita no label. Se começar com “@”, a informação será buscada na respectiva coluna da consulta que contém o dado. Do contrário, ou seja, se não iniciar com “@”, será escrito o valor informado.
    • “x” e “y” são as coordenadas dentro do mosaico em que o label irá iniciar
    • “size” é o tamanho da fonte para escrever o label
    • “color” é a cor da fonte do texto que label será escrito
  • “picture”: insere imagens no mosaico. Essa tag tem os seguintes atributos:
    • “file” é o nome da coluna que contém o caminho do arquivo que contém a imagem
    • “x” e “y” são as coordenadas dentro do mosaico em que a imagem irá iniciar
    • “width” e “height” definem o tamanho da imagem
    • “circular” se “true”, informa se a moldura da imagem deve ser circular. Do contrário, utiliza a moldura retangular.


Dica: O RGB das cores será informado por uma string separada por “;” (ponto é vírgula). Para visualizar o RGB de maneira simples e rápida poderá ser utilizado o Paint do Windows.

Funcionamento
Se o número de mosaicos for maior que o valor informado na tag “maxRender”, será renderizado esse número máximo e uma mensagem informativa será colocado no topo do container de mosaicos. Essa mesma regra vale caso um refinamento da pesquisa retorne um número de mosaicos maior que essa tag.
Se o número de mosaicos não for maior que o valor informado na tag “maxRender”, o refinamento da pesquisa poderá ser feito no textbox da parte superior da tela sendo que a busca é feita a cada caractere digitado.
Do contrário, ou seja, se o número de mosaicos for maior que o valor informado na tag “maxRender”, a busca será feita somente após teclar enter depois de digitar o valor no textbox.
O cuetext, que é o texto de background do textbox de pesquisa, informará quando é necessário teclar enter para aplicar o refinamento da pesquisa.
A pesquisa de refinamento irá considerar somente as informações que estão nos label’s dos mosaicos.
Ao clicar com o botão direito do mouse sobre o mosaico, esse será marcado e os botões de “Selecionar” “Visualizar” e “Modificar” serão ativados caso estivem visíveis. A marcação de mosaicos será individual, o que faz com que a marcação anterior seja desfeita quando marcar um novo.

Voltar ao início

Como utilizar uma fonte de dados em xml

Geralmente os dados da pesquisa irão vir de uma consulta de bancos de dados. Mesmo assim, para casos específicos, poderá ser utilizado o recurso que carrega as definições de colunas a partir de um arquivo .xsd e os dados de um arquivo .xml
Para utilização, na tag “select” não deve ser definida nenhuma instrução de banco de dados como valor e informar as tags “xml” e “xsd” como os nomes de arquivos respectivamente.

 <pesquisaPaginada>
 <select paginacao="0" xml="f:\pp.xml" xsd="f:\pp.xsd" />

Diferentemente do modelo de Visão rápida, que o nome de arquivo deverá ser informado sem seu path completo, esses valores/nomes de arquivos deverão estar com seu nome completo pois eles provavelmente estarão numa pasta diferente do modelo pois sofrem alteração no seu conteúdo.

O atributo “userTempFolder” quando informado e com o valor “true” irá considerar que a localização dos arquivos xml e xsd será a pasta temporária do usuário no Windows.

Poderá ser conferido o valor dessa pasta através da variável de ambiente TEMP do Windows: WIN + R para abrir o Run e digitar %TEMP%.

O Windows abrirá o Windows Explorer posicionando na respectiva pasta.
Os arquivos xml e xsd seguem o padrão de exportação de DataSet’s do .Net Framework, e podem facilmente serem gerados pelos métodos WriteXml e WriteXmlSchecma da classe DataTable (fazer isso com um DataTable populado para facilitar a criação dos modelos).

Para a implementação das demais funcionalidades da pesquisa, deverá ser observado o seguinte:

  • Sempre que fazer referência ao nome de um campo num filtro, não deverá ser usado o prefixo com a tabela/apelido do campo. Esse recurso é exclusivo de fontes de dados baseadas em instruções SQL.
  • Os atributos usados nos filtros, como por exemplo “where” e “order by” continuam a ser suportados, mas vale a mesma regra de não usar prefixo conforme visto no item anterior.
  • Nome de campos com espaço no meio do nome deverão ser informados com colchetes no início e fim. Exemplo “[nome da empresa]”. Essa é uma particularidade do recurso quando não se usa fonte de dados baseadas em instruções SQL.
  • A paginação da fonte de dados xml sempre será completa, ou seja, todos os registros do xml serão carregados. Não há como ser eficiente nessa funcionalidade pois é necessário abrir o arquivo xml para ser parseado e nesse caso, já que conteúdo do arquivo já está em memória, basta “aproveitar” e trazer os registros para a grid.
  • Não será dado suporte aos filtros por faixa que usam uma fonte de dados secundária (geralmente um sub-select ou uma outra consulta de bancos de dados) pois seria necessário ter dois ou mais xml’s com seus xsd’s para isso. Neste caso, não será tratado o preenchimento dos itens caso encontrada essa definição no modelo (sempre ficará com somente a opção “Todos”).

Na parte de filtros podemos incluir o zoom de campo, colocando o número da tabela e o número do seu campo correspondente.
Exemplo: zoom="[número da tabela];[número do campo]"
No cadastro de empresas ficaria nesse formato:

 <filtros order="order by e.Cd_empresa">
 <item nome="CNPJ/CPF" atrib="A" where="e.Cnpj_cpf like '%[value]%'" />
 <item nome="Nome" atrib="A" where="e.Nome_completo like '%[value]%'" />
 <item nome="Empresa" atrib="A" where="e.Cd_empresa = '[value]'" zoom="2;1" />
 </filtros>

O zoom de campo pode ser consultado através do xml que consta em: %CIGAM_INSTAL%Apoio/Geral/tabelas_cigam.xml

Voltar ao início

Como configurar um valor inicial para um filtro

Nos filtros podemos informar um valor inicial configurado através do atributo “init” onde o valor desse pode ser informado conforme o tipo de filtro.
Exemplo:

 <item nome="Nome" atrib="A" where="e.Nome_completo like '%[value]%'" init="MARIA" />

Para campos data é possível usar o comando [dataAtual] para setar a data atual no valor inicial e fazer cálculos baseados em dias.
Exemplo de aplicação da data atual diminuindo 365 dias, ou seja, irá considerar registros de um ano atrás:

 <item nome="Aniversario" atrib="D" where="e.Dt_aniversario >= '[value]'" format="00/00/0000" init="[dataAtual] - 365" validate="DB" />

Como resultado terá os dados já filtrados na inicialização da pesquisa e o valor disponível no filtro para alteração.

Voltar ao início

Como habilitar o limitador de registro

[Versão 211104RC 1] Para implementar limitador de registros em uma pesquisa dinâmica é necessário informar a tag: limiteRegistros, conforme exemplo a seguir:

 <pesquisaPaginada>
 <select paginacao="0" initFolder="P" limiteRegistros="100">

Voltar ao início

Como ordenar uma listagem

[Versão 221107Beta 1] Para realizar uma listagem em ordem alfabética de componentes que possuem acentuação, é necessário incluir NLSSORT no order by dentro do select na tag item.

 <faixa order="order by 3">
 <item nome="Divisão" select="select Divisao, Descricao_divis from /*nl<GEDIVISAO>*/ {0} order by NLSSORT(nome_coluna, 'NLS_SORT=LATIN_AI')

Essa alteração se faz necessária apenas para Oracle, ao realizá-la deve se incluir também uma pesquisa para SQL sem o NLSSORT, assim o mesmo modelo pode ser utilizado para os dois tipos de bancos.

Voltar ao início

Como criar uma seleção de filtros dinâmicos

[Versão 221107Beta 2] Na opção Filtros Dinâmicos comando Ctrl + R dentro do grid na pesquisa dinâmica, é possível adicionar filtros para pesquisa no lado esquerdo.
É possível incluir um campo por vez, não sendo possível a seleção múltipla, caso seja necessária a remoção dos campos basta utilizar o botão Remover todos, ao fechar a pesquisa e abrir novamente a pesquisa retornará para seu estado padrão.

Filtros Dinâmicos

Voltar ao início

Atributo VALIDATE

Quando o campo de NF tiver mais de 10 dígitos na pesquisa de NF da pesquisa dinâmica de lançamentos, deve ser configurado na tag filtros o atributo validate="A".

O atributo VALIDATE é uma validação para o que se informa no campo:

  • Validate = “DB” (data) - para campos do tipo data;
  • Validate = “N” (números) - apenas para NF com até 10 dígitos;
  • Validate = “A” (alfa) - para NF com 10 ou 12 dígitos.


Para configurar o modelo financeiro deve-se localizar o arquivo "Lancamento.xml" dentro da pasta %CIGAM_INSTAL%Modelos\Pesquisas\Financeiro\.

Exemplo:

  <filtros order="ORDER BY 2 DESC"> 
  <item nome="NF" atrib="N" where="lc.Nf = '[value]'" format="999999999999" validate="A" />

Voltar ao início

Versões

Versão 211104RC

  1. versão 211104RC

Versão 220404.c

  1. versão 220404.c

Versão 221107 Beta

  1. Liberado a partir da OS 778096/37
  2. Liberado a partir da OS 373456/357