O campo de pesquisa (ou campo zoom) é uma ferramenta poderosa para otimizar a seleção e visualização de dados em formulários. Com um simples campo, o usuário passa a ter acesso à dados de uma forma ágil, podendo filtrar e selecionar valores de outros componentes e formulários do Fluig ou mesmo de aplicativos externos através de Datasets.
Pré-requisitos
Essa documentação é indicada para desenvolvedores familiarizados com html e javascript, e com o uso de Datasets no Fluig.
Sintaxe
<input type="zoom" id="campo" name="campo" data-zoom="...">
<input type="zoom" id="campo" name="campo" zoomvalue="campoIdDoDataset" data-zoom="...">
Atributos
zoomvalue
Uma string com o nome de um campo do dataset que pode ser armazenado além do texto visível em tela.
O campo de pesquisa pode ser usado para armazenar uma informação para o usuário (como nome de uma pessoa ou empresa) mas a solicitação precisa de um código de identificação (como id do usuário, cpf, cnpj) para alguma integração ou mesmo mecanismo de atribuição. Quando não utilizado o atributo zoomvalue, apenas o valor que é exibido após a seleção é gravado.
Ao utilizar o zoomvalue, o formulário deve conter um campo com nome e id iguais ao do campo de pesquisa com o prefixo "hidden_" (por exemplo, campo "pessoa" precisa do campo "hidden_pessoa"). Assim, ao selecionar um registro, o Fluig irá automaticamente preencher o hidden_campo com o campo do dataset definido no atributo.
Importante: O campo definido no zoomvalue deve estar entre os campos listados em fields no atributo data-zoom
Data-zoom
O atributo data-zoom recebe um objeto onde a maior parte das configurações possíveis para o campo pesquisa são feitas. Ele é um objeto complexo onde é definido qual o dataset, qual campo deste dataset será usado para preencher o campo, se permite mais de uma item selecionado e quais os campos podem ser usados de filtro. Consulte mais sobre ele neste documentação.
Métodos
O campo zoom invoca algumas funções que podem ser sobrescritos para uma maior personalização do formulário.
setSelectedZoomItem (Object item)
Esta função é chamada sempre que um item é selecionado em um campo pesquisa. Pode ser utilizado para armazenar outra informação do item de dataset selecionado em outro campo, validações ou mesmo para atualizar os filtros de outros componentes e campos pesquisa do formulário.
removedZoomItem (Object item)
Esta função é chamada sempre que um item é removido do campo pesquisa. Normalmente é usado em conjunto com setSelectedZoomItem para "desfazer" as ações.
reloadZoomFilterValues (String inputName, String filterValues)
Esta função é usada para atualizar o filterValues da configuração realizada no atributo data-zoom, e pode ser utilizado para adicionar filtros extras conforme outros dados do formulário ou outras opções selecionadas em outros campos pesquisa. Por exemplo, o usuário selecionou um cliente em um campo pesquisa e eu posso adicionar esta seleção como um novo filtro no campo de pedido.
Dependências
Para o funcionamento correto do componente, o seu formulário deve carregar as seguintes bibliotecas
<link rel="stylesheet" type="text/css" href="/style-guide/css/fluig-style-guide.min.css"> <script src="/resources/js/jquery/jquery.js"></script> <script src="/resources/js/jquery/jquery-ui.min.js"></script> <script src="/style-guide/js/fluig-style-guide.min.js"></script>
Exemplos de uso
Consulta simples ao cadastro de usuários buscando e ordenando pelo nome
<div class="form-group"> <label for="user">Usuário</label> <input type="zoom" class="form-control" id="user" name="user" data-zoom=" { 'displayKey':'colleagueName', 'placeholder': 'Selecione o usuário do Fluig', 'datasetId':'colleague', 'fields':[{ 'field':'colleagueName', 'label':'colleagueName', 'standard':true }] }"> </div>
Consulta simples ao cadastro de usuários buscando e ordenando pelo nome, mas exibindo o e-mail após a seleção
<div class="form-group"> <label for="user">Usuário</label> <input type="zoom" class="form-control" id="user" name="user" data-zoom=" { 'displayKey':'mail', 'placeholder': 'Selecione o usuário do Fluig', 'datasetId':'colleague', 'fields':[{ 'field':'colleagueName', 'label':'colleagueName', 'standard':true }] }"> </div>
Consulta ao cadastro de usuários buscando e exibindo o nome do usuário selecionado e o código em outro campo
<div class="form-group"> <label for="zoomfield0">Usuário</label> <input type="zoom" class="form-control" id="user" name="user" zoomvalue="colleagueId" data-zoom=" { 'displayKey':'colleagueName', 'datasetId':'colleague', 'fields':[{ 'field':'colleagueId', 'label':'colleagueId', 'visible': 'false' },{ 'field':'colleagueName', 'label':'colleagueName', 'standard':true },{ 'field':'mail', 'label':'mail' }] }"> <input type="hidden" class="form-control" id="hidden_user" name="hidden_user"> <!-- este campo irá armazenar o campo 'collegueId' --> </div>
Consulta à solicitação de um determinado processo
<div class="form-group"> <label for="solicitacaoRelacionada">Solicitação relacionada</label> <input type="zoom" class="form-control" id="solicitacaoRelacionada" name="solicitacaoRelacionada" data-zoom=" { 'displayKey':'processInstanceId', 'placeholder': 'Selecione a solicitação relacionada', 'datasetId':'workflowProcess', 'filterValues': 'processId,FLUIGADHOC', 'fields':[{ 'field':'processInstanceId', 'label':'Solicitação', 'standard':true },{ 'field':'active', 'label':'Em andamento?' }] }"> </div>
Consulta à solicitação de um determinado processo, após selecionar um processo em outro campo pesquisa
<div class="form-group"> <label for="process">Selecione o processo</label> <input type="zoom" class="form-control" id="process" name="process" data-zoom=" { 'displayKey':'processId', 'placeholder': 'Selecione o processo', 'datasetId':'processDefinition', 'fields':[{ 'field':'processId', 'label':'Código do Processo' },{ 'field':'processDescription', 'label':'Descrição', 'standard': true }] }"> </div> <div class="form-group"> <label for="solicitacaoRelacionada">Solicitação relacionada</label> <input type="zoom" class="form-control" id="solicitacaoRelacionada" name="solicitacaoRelacionada" data-zoom=" { 'displayKey':'processInstanceId', 'placeholder': 'Selecione a solicitação relacionada', 'datasetId':'workflowProcess', 'fields':[{ 'field':'processInstanceId', 'label':'Solicitação', 'standard':true },{ 'field':'active', 'label':'Em andamento?' }] }"> </div>
function setSelectedZoomItem(item) { if(item.inputId == "user") { reloadZoomFilterValues("solicitacaoRelacionada","process," + item.processId); } } function removedZoomItem(item) { if(item.inputId == "user") { reloadZoomFilterValues("solicitacaoRelacionada",""); } }
Consulta aos usuários permitindo selecionar até 5 usuários
<div class="form-group"> <label for="user">Usuário</label> <input type="zoom" class="form-control" id="user" name="user" data-zoom=" { 'displayKey':'colleagueName', 'datasetId':'colleague', 'maximumSelectionLength': 5, 'fields':[{ 'field':'colleagueId', 'label':'colleagueId' },{ 'field':'colleagueName', 'label':'colleagueName', 'standard':true },{ 'field':'mail', 'label':'mail' }] }"> </div>
Consulta à solicitação limitando a quantidade de registros retornados
<div class="form-group"> <label for="zoomfield1">Solicitação anterior</label> <input type="zoom" class="form-control" id="solicitacaoAnterior" name="solicitacaoAnterior" data-zoom=" { 'displayKey':'processInstanceId', 'placeholder': 'Selecione o chamado que você irá avaliar', 'datasetId':'workflowProcess', 'resultLimit': 10, 'fields':[{ 'field':'processInstanceId', 'label':'Solicitação', 'standard':true },{ 'field':'processId', 'label':'Código do processo' },{ 'field':'active', 'label':'Em andamento?' }] }"> </div>
Consulta ao cadastro de usuários buscando e exibindo o nome do usuário selecionado e o código em outro campo via métodos
<div class="form-group"> <label for="zoomfield0">Usuário</label> <input type="zoom" class="form-control" id="user" name="user" zoomvalue="colleagueId" data-zoom=" { 'displayKey':'colleagueName', 'datasetId':'colleague', 'fields':[{ 'field':'colleagueId', 'label':'colleagueId', 'visible': 'false' },{ 'field':'colleagueName', 'label':'colleagueName', 'standard':true },{ 'field':'mail', 'label':'mail' }] }"> <input type="hidden" class="form-control" id="selected_userCode" name="selected_userCode"> <!-- este campo irá armazenar o campo 'collegueId' --> </div>
function setSelectedZoomItem(item) { if(item.inputId == "user") { $("#selected_userCode").val(item.colleagueId); } } function removedZoomItem(item) { if(item.inputId == "user") { $("#selected_userCode").val(""); } }
Outros exemplos de uso em nossos repositórios
Smart Zoom
Um exemplo com 3 campos zooms interagindo uns com os outro, modificando os valores atribuídos nos demais conforme a seleção de dados
Integração com serviços de terceiros
Um exemplo simples consultando datasets personalizados.
Solicitação de Compra de RM
Um exemplo consultando datasets personalizados onde a seleção de um dado no campo de pesquisa filtra os resultados do campo pesquisa seguinte.