none
Remover filtro campo LookUp - CRM 2016 ONLINE RRS feed

  • Pergunta

  • Boa tarde a todos.

    Estou com o seguinte problema:

    Na entidade Lead tenho que aplicar um filtro em um campo LookUp do tipo 'Cliente'. Com base no valor de outro campo será exibido apenas Contas ou Contatos. Porém ao seguir um exemplo do link abaixo o filtro só dura apenas por 2 "OnChanges"

    http://www.powerobjects.com/2015/11/20/restrict-customer-lookup-to-accounts-or-contacts-in-dynamics-crm/

    Imagino que o script apenas acrescenta os filtros, e não os sobrepõe. No meu caso eu precisaria disso eu acho.

    Abaixo posto uma figura e depois dela deixo a legenda do que eu pretendo fazer.

    A ==> O campo 'Tipo de Cliente' inicia a função 'TipoClienteOnChange' que definirá o filtro do campo lookup 'Cliente Existente'.

    Porém caso o usuário mude o valor deste campo mais de duas vezes seguidas (algo que pode acontecer vindo de pessoas com dedos nervosos ), os filtros são somados e o campo 'Cliente Existente' não exibe nenhum registro mais.

    B ==> Campo que preciso filtrar o tipo de registro independente de quantas vezes o usuário mude o valor do campo 'Tipo de Cliente' que chama a função 'TipoClienteOnChange'.

    OBS: Deixo meu código em seguinda, onde fiz uma pequena alteração se comparado com o link acima.

    function TipoClienteOnChange() {
        try {
            if (Xrm.Page.getAttribute('tulus_tipodecliente').getValue() == null) { return; }
    
            Xrm.Page.ui.tabs.get(0).sections.get("clienteExistente").setVisible(true);//sessão cliente existente
    
            debugger;
            if (isPessoaJuridica() == true) {
    
                Xrm.Page.ui.controls.get("tulus_pessoadecontatoexistente").setVisible(true);
               
    
                Xrm.Page.getControl("customerid").addPreSearch(function () {
                    AdicionaFiltroEntidadeLookUp("customerid", "contactid", "contact");
                });
               
    
            } else {
                
    
                Xrm.Page.getControl("customerid").addPreSearch(function () {
                    AdicionaFiltroEntidadeLookUp("customerid", "accountid", "account");
                });
               
            }
    
        } catch (e) {
            alert("Erro no Método: TipoClienteOnChange" + "\n Tipo de Erro: " + e.name + "\n Mensagem do Erro: " + e.message);
            console.log("O ERRO ENCONTRADO: TipoClienteOnChange -> " + e.message);
        }
    }
    function AdicionaFiltroEntidadeLookUp(campo_a_ser_filtrado, nome_campo_filtro, entidade_negada) {
        try {
    
            var filtro = "<filter type='and'><condition attribute='" + nome_campo_filtro + "' operator='null' /></filter>";
    
            var PROVISORIO = Xrm.Page.getControl(campo_a_ser_filtrado);
            debugger;
            Xrm.Page.getControl(campo_a_ser_filtrado).addCustomFilter(filtro, entidade_negada);
    
        } catch (e) {
            alert("Erro no Método: AdicionaFiltroEntidadeLookUp" + "\n Tipo de Erro: " + e.name + "\n Mensagem do Erro: " + e.message);
            console.log("O ERRO ENCONTRADO: AdicionaFiltroEntidadeLookUp -> " + e.message);
        }
    }
    function isPessoaJuridica() {
       
       
        if (Xrm.Page.getAttribute('tulus_tipodecliente').getValue() == 272070001/*JURIDICA*/) {
    
            return true;
        }
        return false;
    }

    terça-feira, 20 de setembro de 2016 15:31

Respostas

  • Boas Wagner,

    O seu problema é que não está a limpar o PreSearch, ou seja, está sempre adicionar handlers para o PreSearch. Eu aconselhava a colocar no OnLoad do formulátio o addPreSearch, assim só ocorre uma vez. Ficava algo como isto:

    function OnLoad(){
        Xrm.Page.getControl("customerid").addPreSearch(AdicionaFiltroEntidadeLookUp);
    }
    
    function AdicionaFiltroEntidadeLookUp() {
        try {
            var nome_campo_filtro, entidade_negada;
            if (Xrm.Page.getAttribute('tulus_tipodecliente').getValue() == true) {
                nome_campo_filtro = "accountid";
                entidade_negada = "account";
            }
            else{
                nome_campo_filtro = "contactid";
                entidade_negada = "contact";
            }
            var filtro = "<filter type='and'><condition attribute='" + nome_campo_filtro + "' operator='null' /></filter>";
    
            Xrm.Page.getControl('customerid').addCustomFilter(filtro, entidade_negada);
        } catch (e) {
            alert("Erro no Método: AdicionaFiltroEntidadeLookUp" + "\n Tipo de Erro: " + e.name + "\n Mensagem do Erro: " + e.message);
            console.log("O ERRO ENCONTRADO: AdicionaFiltroEntidadeLookUp -> " + e.message);
        }
    }

    Espero ter ajudado.
    Se respondi a sua pergunta por favor marque como resposta e\ou como útil.

    Pedro Azevedo Crm Specialist 4.0\2011

    quinta-feira, 22 de setembro de 2016 22:54