Zoom - filterValues

Tenho um zoom "velho" que mostra os grupos de acordo com a matrícula do usuário.

Quero fazer isso no zoom "novo", mas ele não funciona com o filterValues. Alguém sabe como ajudar?

ZOOM VELHO - FUNCIONA


<div class="grid-5-12">
    <label for="nm_area">&Aacute;rea Solicitante&nbsp; <span style="color: red;">*</span></label>
    <input type="text" name="nm_area" id="nm_area" tabindex="6" readonly>
</div>
<div class="grid-1-12">
    <label>&nbsp;&nbsp;&nbsp;</label>
    <a id="lupa_area" href="#" class="zoomResponsible" data-select-user="" onClick="Javascript:zoomArea(this)"></a>
</div>

<script>
function zoomArea(){
    window.open('/webdesk/zoom.jsp?'+
    'datasetId=colleagueGroup&' +
    'dataFields=colleagueGroupPK.companyId,Código da Empresa,colleagueGroupPK.groupId,Área&' +
    'resultFields=colleagueGroupPK.companyId,colleagueGroupPK.groupId&' +
    'filterValues=colleagueGroupPK.colleagueId,'+document.getElementById("id_solicitante").value+
    '&type=area','zoom', 'status, scrollbars=no, width=640, height=480, top=0, left=0');
}
</script>

ZOOM NOVO - NÃO FUNCIONA


<input type="zoom" class="form-control" id="nm_area" name="nm_area" 
    dataset="colleagueGroup" 
    datasetvalue="groupId" 
    data-zoom="{
        'displayKey':'groupId',
        'datasetId':'colleagueGroup',
        'filterValues':'colleagueGroupPK.colleagueId, id_solicitante',
        'fields':[{'field':'groupId','label':'Área','standard':true}]}">

PEGANDO O CAMPO ID_SOLICITANTE

Formulário:


<input type="hidden" name="id_solicitante" id="id_solicitante">

displayFields:


if (atividade == '0') {
    var matricula = getValue("WKUser");
    var c1 = DatasetFactory.createConstraint("colleaguePK.colleagueId", matricula, matricula, ConstraintType.MUST);
    var ds_solicitante = DatasetFactory.getDataset("colleague", null, new Array(c1), null);

    form.setValue('nm_solicitante', ds_solicitante.getValue(0, "colleagueName"));
    form.setValue("id_solicitante", ds_solicitante.getValue(0, "colleaguePK.colleagueId"));
}

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Marcella, caso a resposta abaixo tenha solucionado, peço que sinalize para ajudar os outros que tenham a mesma dúvida. Não testei a solução, respondi no “teoricamente”.

Não funcionou, acredito que tenha algum problema com as aspas, anexei a imagem.

Tem a ver com as aspas sim, Marcella, acabei de editar o exemplo na resposta, tente novamente.

Caso ainda assim não funcione, remova o filterValues da definição do campo e utilize a função: reloadZoomFilterValues como mostrada na resposta.

Já tinha tentado assim, ele até traz os dados, mas vem duplicado, coisa que não acontece com o zoom antigo. Coloquei a foto para você ver. Vou continuar tentando, caso consiga, posto a resposta.

Ah, o campo id_solicitante é preenchido assim que a página carrega.

Marcella, mostra a consulta do dataset no eclipse, consegue fazer isso? Provavelmente o filtro não tá sendo aplicado ainda. Ah, mesmo sendo após o carregamento da página, tem que ter certeza se não tá sendo renderizado antes do campo. Já tentou fixar o valor no filterValues. Desta forma:

            'filterValues':'colleagueGroupPK.colleagueId,        'filterValues':'colleagueGroupPK.colleagueId,1233456789',

Coloquei o print da consulta do dataset, é um dataset interno. Testei com a matrícula chumbada, dessa forma não traz nenhum dado. Mesmo que ele não esteja sendo renderizado, não deveria funcionar com o reloadZoomFilterValues?



'filterValues':'colleagueGroupPK.colleagueId,1233456789'


Tentou dessa forma, Marcella, caso funcione podemos ajustar o filtro.

Tinha testado errado, foi mal hehehe
Dessa forma funcionou, trouxe direitinho os grupos pela matrícula do usuário.
Coloquei o print.

Marcella, o problema está no filtro. Como havia mencionado, a renderização do ZOOM tem acontecido antes do valor campo id_solicitante ser preenchido. Como que você preenche esse campo?

Marcella, como disse, inicializa o ZOOM sem o filterValues, depois no console, no contexto do formulário, executa o seguinte:



reloadZoomFilterValues('nm_area', 'colleagueGroupPK.colleagueId,'+document.getElementById("id_solicitante").value);


Deve funcionar.

Eu pego por meio do displayFields. Acrescentei o código. Vou tentar dessa forma.

Faz o teste que passei, Marcella, acima do seu comentário, ele poderá ser executado via displayFields. Porém, precisa confirmar se funcionará efetuando o procedimento que passei aí no comentário.

Não sei se entendi bem. Fiz o teste no console do navegador:


function setSelectedZoomItem(selectedItem) {
    reloadZoomFilterValues('nm_area', 'colleagueGroupPK.colleagueId,' + document.getElementById("id_solicitante").value); 
}
> undefined


reloadZoomFilterValues('nm_area', 'colleagueGroupPK.colleagueId,' + document.getElementById("id_solicitante").value);
> VM3537:1 Uncaught ReferenceError: reloadZoomFilterValues is not defined at <anonymous>:1:1 (anonymous) @ VM3537:1

Não postei o print pq está dando erro.

Não, Marcella, não pode ser no setSelectedZoomItem não. Quando quando falo pra executar no console é pq o filtro tem que acontecer após a renderização do zoom. Uma das opções é o console. Porém, você pode criar um botão no formulário que chama essa função. Funcionará do mesmo jeito. Vou exemplificar.

Adiciona esse botão


<button type="button" class="btn btn-primary" onclick="filtraZoom()">Teste Filtro</button>



E adiciona essa função aos scripts



function filtraZoom(){

  reloadZoomFilterValues('nm_area', 'colleagueGroupPK.colleagueId,'+document.getElementById("id_solicitante").value);

}


Vai funcionar!

Obrigada Alef, ajudou bastante!
Pena que o usuário acabou desistindo desse campo hahaha

Marcella, não analisei a fundo o exemplo citado, porém, acredito que o filterValues não esteja correto. Você está passando o id_solicitante como String e com valor "id_solicitante". Pelo que entendi na definição do ZOOM antigo, você quer passar o valor do campo do id_solicitante. (document.getElementById("id_solicitante").value)

Seu código está assim:


<input type="zoom" class="form-control" id="nm_area" name="nm_area" 
    dataset="colleagueGroup" 
    datasetvalue="groupId" 
    data-zoom="{
        'displayKey':'groupId',
        'datasetId':'colleagueGroup',
        'filterValues':'colleagueGroupPK.colleagueId, id_solicitante',
        'fields':[{'field':'groupId','label':'Área','standard':true}]}">

O correto deve ser esse:


<input type="zoom" class="form-control" id="nm_area" name="nm_area" 
    dataset="colleagueGroup" 
    datasetvalue="groupId" 
    data-zoom="{
        'displayKey':'groupId',
        'datasetId':'colleagueGroup',
        'filterValues':'colleagueGroupPK.colleagueId, '+ document.getElementById("id_solicitante").value +',
        'fields':[{'field':'groupId','label':'Área','standard':true}]}">

IMPORTANTE: Para funcionar o campo id_solicitante precisa ter valor preenchido antes da renderização do zoom. Caso não consiga fazer isso antes deste momento, pode utilizar o reloadZoomFilterValues(inputName, filterValues); para alterar o filtro que é passado no dataset desta forma:


reloadZoomFilterValues('nm_area', 'colleagueGroupPK.colleagueId,'+document.getElementById("id_solicitante").value);

Segue documentação: https://tdn.totvs.com/pages/releaseview.action?pageId=75270483

Espero ter ajudado!