none
Lista de preço e Unidades automático RRS feed

  • Pergunta

  • Bom dia pessoal,

    tenho uma dúvida que acredito ser bem simples.

     

    Gostaria de ao selecionar o cliente em uma oportunidade ou cotação, que a lista de preço viesse de acordo com a lista selecionada no cadastro da conta do cliente. Já fiz relacionamento, criei mapeamento, etc mas não funciona. O mesmo eu gostaria que acontecesse na cotação quando ao inserir um produto que viesse as unidades registradas no cadastro do produto, para não ter que selecionar novamente a cada inserção de novo produto na cotação. Isso é possível???

     

    Obrigado

     

    Pedro Andrade

    BHS Solution

    quinta-feira, 18 de dezembro de 2008 12:16

Respostas

  • Pedro,

     

    Por mapeamento não vai funcionar realmente; porém, via chamada ao Web Services do CRM (em JavaScript) funciona bem.

     

    Segue código template para que, ao selecionar uma Conta na Oportunidade, o sistema atualize a Lista de Preço (existente na Conta):

     

    No [OnChange] do campo [Cliente Provável] da Oportunidade, adicionar o template abaixo:

     

    P.S.: Substitua o nome [CAMPO_RETORNO] pelo nome do campo que representa o ID da Lista de Preço da Conta.

     

    getAccountPriceLevel();

    function getAccountPriceLevel()
    {
    var server = window.location.host;
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    xmlhttp.open("POST", "http://" + server + "/mscrmservices/2007/crmservice.asmx", true);
    xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");

    var soapBody = "<soap:Body><Retrieve xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\"><entityName>account</entityName>";
    soapBody += "<id>" + crmForm.all.customerid.DataValue[0].id + "</id>";
    soapBody +=  "<columnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\"><q1:Attributes>";
    soapBody += "<q1:Attribute>CAMPO_RETORNO</q1:Attribute>";
    soapBody += "</q1:Attributes></columnSet>";
    soapBody += "</Retrieve></soap:Body>";

    var soapXml = "<soap:Envelope " +
    "xmlns: soap='http://schemas.xmlsoap.org/soap/envelope/' "+
    "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "+
    "xmlns:xsd='http://www.w3.org/2001/XMLSchema'>";
    soapXml += GenerateAuthenticationHeader();
    soapXml += soapBody;
    soapXml += "</soap:Envelope>";

    xmlhttp.onreadystatechange = StateChangeAccountPriceLevel;
    xmlhttp.send(soapXml);
    }

    function StateChangeAccountPriceLevel()
    {
      if (xmlhttp.readyState == 4)
      {
        var oNodes = xmlhttp.responseXML.selectSingleNode("//RetrieveResult").childNodes;
        var priceLevelID = oNodes[0].text;

        if (crmForm.all.pricelevelid.DataValue == null)
        {
          var lookupData = new Array();
          var lookupItem= new Object();
          lookupItem.id = priceLevelID;
          lookupItem.typename = 'pricelevel';
          lookupItem.name = 'Lista de Preço Padrão';
          lookupData[0] = lookupItem;
          crmForm.all.pricelevelid.DataValue = lookupData;
        }
      }
    }

     

    O mesmo raciocínio da função [getAccountPriceLevel] serve para a busca da [Unidade] do produto.

     

    []

    quinta-feira, 18 de dezembro de 2008 17:14

Todas as Respostas

  • Pedro,

     

    Por mapeamento não vai funcionar realmente; porém, via chamada ao Web Services do CRM (em JavaScript) funciona bem.

     

    Segue código template para que, ao selecionar uma Conta na Oportunidade, o sistema atualize a Lista de Preço (existente na Conta):

     

    No [OnChange] do campo [Cliente Provável] da Oportunidade, adicionar o template abaixo:

     

    P.S.: Substitua o nome [CAMPO_RETORNO] pelo nome do campo que representa o ID da Lista de Preço da Conta.

     

    getAccountPriceLevel();

    function getAccountPriceLevel()
    {
    var server = window.location.host;
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    xmlhttp.open("POST", "http://" + server + "/mscrmservices/2007/crmservice.asmx", true);
    xmlhttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    xmlhttp.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Retrieve");

    var soapBody = "<soap:Body><Retrieve xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\"><entityName>account</entityName>";
    soapBody += "<id>" + crmForm.all.customerid.DataValue[0].id + "</id>";
    soapBody +=  "<columnSet xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:ColumnSet\"><q1:Attributes>";
    soapBody += "<q1:Attribute>CAMPO_RETORNO</q1:Attribute>";
    soapBody += "</q1:Attributes></columnSet>";
    soapBody += "</Retrieve></soap:Body>";

    var soapXml = "<soap:Envelope " +
    "xmlns: soap='http://schemas.xmlsoap.org/soap/envelope/' "+
    "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "+
    "xmlns:xsd='http://www.w3.org/2001/XMLSchema'>";
    soapXml += GenerateAuthenticationHeader();
    soapXml += soapBody;
    soapXml += "</soap:Envelope>";

    xmlhttp.onreadystatechange = StateChangeAccountPriceLevel;
    xmlhttp.send(soapXml);
    }

    function StateChangeAccountPriceLevel()
    {
      if (xmlhttp.readyState == 4)
      {
        var oNodes = xmlhttp.responseXML.selectSingleNode("//RetrieveResult").childNodes;
        var priceLevelID = oNodes[0].text;

        if (crmForm.all.pricelevelid.DataValue == null)
        {
          var lookupData = new Array();
          var lookupItem= new Object();
          lookupItem.id = priceLevelID;
          lookupItem.typename = 'pricelevel';
          lookupItem.name = 'Lista de Preço Padrão';
          lookupData[0] = lookupItem;
          crmForm.all.pricelevelid.DataValue = lookupData;
        }
      }
    }

     

    O mesmo raciocínio da função [getAccountPriceLevel] serve para a busca da [Unidade] do produto.

     

    []

    quinta-feira, 18 de dezembro de 2008 17:14
  • Oi Gilberto,

    valeu pela ajuda.

     

    Coloquei o script no campo, mas quando seleciono um cliente e mudo de campo, está dando algum conflinto. O windows fica me pedindo o nome de usuário e senha, acredito q esteja dando algum conflito com o AD.

    Só mais uma coisa para ter certeza, onde vc valou para eu alterar o CAMPO_RETORNO, é para colocara realmente o nome do campo ou o valor do campo?

     

    []s

     

    Pedro

     

    segunda-feira, 22 de dezembro de 2008 11:02
  • Pedro,

     

    Realmente pode estar ocorrendo algum conflito. Tente limpar os [arquivos temporários e cookies] do Internet Explorer.

     

    Qto ao [CAMPO_RETORNO], substitua pelo [Nome do Campo], por exemplo [new_pricelevelid] da entidade Conta.

     

    []s

    segunda-feira, 22 de dezembro de 2008 11:13