none
Somar dados da entidade filho e colocar na pai RRS feed

  • Pergunta

  • Boa tarde,

    Tenho um necessidade de pegar valores de uma entidade realcionada de 1:N e colocar o resultado na etidade pai.

    tipo tenho um entidade venda e uma itens da venda.

    tenho que somar todos os valores da itens da venda e colocar o resultada na entidade venda.

    Tem como fazer isso vai JavaScript?


    Tiago Henrique Consultor de Implantação Microssoft Dynamics CRM
    segunda-feira, 12 de julho de 2010 20:55

Respostas

  • Tiago,

     

    Construí um método para fazer a soma... Coloque o onload da entidade pai.

     

     

    function SomarValoresDeFilhos(entidade, atributoRelacionado, idRelacionado, atributoSomar) {
    
     var XMLRequest = "" +
     "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
     "<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\">" +
     GenerateAuthenticationHeader() +
     " <soap:Body>" +
     " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
     " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
     " <q1:EntityName>" + entidade + "</q1:EntityName>" +
     " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
     " <q1:Attributes>" +
     " <q1:Attribute>" + atributoSomar + "</q1:Attribute>" +
     " </q1:Attributes>" +
     " </q1:ColumnSet>" +
     " <q1:Distinct>false</q1:Distinct>" +
     " <q1:Criteria>" +
     " <q1:FilterOperator>And</q1:FilterOperator>" +
     " <q1:Conditions>" +
     " <q1:Condition>" +
     " <q1:AttributeName>" + atributoRelacionado + "</q1:AttributeName>" +
     " <q1:Operator>Equal</q1:Operator>" +
     " <q1:Values>" +
     " <q1:Value xsi:type=\"xsd:string\">" +
     idRelacionado +
     "</q1:Value>" +
     "</q1:Values>" +
     " </q1:Condition>" +
     " </q1:Conditions>" +
     " </q1:Criteria>" +
     " </query>" +
     " </RetrieveMultiple>" +
     " </soap:Body>" +
     "</soap:Envelope>" +
     "";
    
     var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
     xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
     xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
     xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
     xmlHttpRequest.setRequestHeader("Content-Length", XMLRequest.length);
     xmlHttpRequest.send(XMLRequest);
    
     var Result = xmlHttpRequest.responseXML;
     var BusinessEntityNodes = Result.selectNodes("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");
    
     var soma = 0;
     if (BusinessEntityNodes.length != 0) {
      for (var i = 0; i < BusinessEntityNodes.length; i++) {
       soma += parseInt(BusinessEntityNodes[i].firstChild.text);
      }
     }
    
     return soma;
    }
    
    

     

     

    Fiz um exemplo de chamada, utilizando cotação:

     

    var entidadeFilho = "quote";
    var atributoRelacionamentoNoFilho = "accountid";
    var atributoRelacionamentoNoFilhoValor = "{78FAE379-E3E6-DC11-A30B-0019B9D772C6}";
    var campoASerSomadoNaEntidadeFilho = "billto_name";
    
    SomarValoresDeFilhos(entidadeFilho, atributoRelacionamentoNoFilho, atributoRelacionamentoNoFilhoValor, campoASerSomadoNaEntidadeFilho);
    

     

     

    Abraço,


    Ricardo Alves
    ricardoalves.me
    • Sugerido como Resposta RicardoAlves terça-feira, 27 de julho de 2010 19:33
    • Editado RicardoAlves terça-feira, 27 de julho de 2010 21:09 ajuste
    • Marcado como Resposta Tiago H sexta-feira, 24 de setembro de 2010 00:45
    terça-feira, 27 de julho de 2010 19:33

Todas as Respostas

  • Tiago,

     

    Você pode fazer isso via JScript sim, utilizando Fetch.

     

    Você cria um xml como se você um query, e executa o método Fetch passando esse xml como parâmetro utilizando o CrmService via JScript, onde o retorno da execução é um xml.

     

    Com isso você pode por exemplo em um determinado evento da entidade Venda, buscar todos os Itens relacionados e somar os valores do atributo "x" dos registros retornados.

     

    Segue o exemplo:

    http://msdn.microsoft.com/en-us/library/cc677073.aspx

     

    Abraços,

     


    Ricardo Alves
    www.dracomo.com
    • Sugerido como Resposta RicardoAlves segunda-feira, 12 de julho de 2010 21:32
    segunda-feira, 12 de julho de 2010 21:32
  • Olá Tiago,

     

    Conseguiu implementar a solução?

     

    Abraço,


    Ricardo Alves
    ricardoalves.me
    terça-feira, 20 de julho de 2010 13:07
  • Tiago,

     

    Construí um método para fazer a soma... Coloque o onload da entidade pai.

     

     

    function SomarValoresDeFilhos(entidade, atributoRelacionado, idRelacionado, atributoSomar) {
    
     var XMLRequest = "" +
     "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
     "<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\">" +
     GenerateAuthenticationHeader() +
     " <soap:Body>" +
     " <RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
     " <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
     " <q1:EntityName>" + entidade + "</q1:EntityName>" +
     " <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +
     " <q1:Attributes>" +
     " <q1:Attribute>" + atributoSomar + "</q1:Attribute>" +
     " </q1:Attributes>" +
     " </q1:ColumnSet>" +
     " <q1:Distinct>false</q1:Distinct>" +
     " <q1:Criteria>" +
     " <q1:FilterOperator>And</q1:FilterOperator>" +
     " <q1:Conditions>" +
     " <q1:Condition>" +
     " <q1:AttributeName>" + atributoRelacionado + "</q1:AttributeName>" +
     " <q1:Operator>Equal</q1:Operator>" +
     " <q1:Values>" +
     " <q1:Value xsi:type=\"xsd:string\">" +
     idRelacionado +
     "</q1:Value>" +
     "</q1:Values>" +
     " </q1:Condition>" +
     " </q1:Conditions>" +
     " </q1:Criteria>" +
     " </query>" +
     " </RetrieveMultiple>" +
     " </soap:Body>" +
     "</soap:Envelope>" +
     "";
    
     var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
     xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
     xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple");
     xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
     xmlHttpRequest.setRequestHeader("Content-Length", XMLRequest.length);
     xmlHttpRequest.send(XMLRequest);
    
     var Result = xmlHttpRequest.responseXML;
     var BusinessEntityNodes = Result.selectNodes("//RetrieveMultipleResult/BusinessEntities/BusinessEntity");
    
     var soma = 0;
     if (BusinessEntityNodes.length != 0) {
      for (var i = 0; i < BusinessEntityNodes.length; i++) {
       soma += parseInt(BusinessEntityNodes[i].firstChild.text);
      }
     }
    
     return soma;
    }
    
    

     

     

    Fiz um exemplo de chamada, utilizando cotação:

     

    var entidadeFilho = "quote";
    var atributoRelacionamentoNoFilho = "accountid";
    var atributoRelacionamentoNoFilhoValor = "{78FAE379-E3E6-DC11-A30B-0019B9D772C6}";
    var campoASerSomadoNaEntidadeFilho = "billto_name";
    
    SomarValoresDeFilhos(entidadeFilho, atributoRelacionamentoNoFilho, atributoRelacionamentoNoFilhoValor, campoASerSomadoNaEntidadeFilho);
    

     

     

    Abraço,


    Ricardo Alves
    ricardoalves.me
    • Sugerido como Resposta RicardoAlves terça-feira, 27 de julho de 2010 19:33
    • Editado RicardoAlves terça-feira, 27 de julho de 2010 21:09 ajuste
    • Marcado como Resposta Tiago H sexta-feira, 24 de setembro de 2010 00:45
    terça-feira, 27 de julho de 2010 19:33
  • Olá Tiago,

     

    Sobre esta thread, conseguiu implementar a solução proposta?

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me

    Se for útil, por favor marque ;)
    quarta-feira, 11 de agosto de 2010 19:19
  • Olá Tiago,

     

    Alguma novidade sobre este problema?

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me
    domingo, 19 de setembro de 2010 16:06
  • Op beleza, consegui sim obrigado.
    Tiago Henrique Consultor de Implantação Microssoft Dynamics CRM
    sexta-feira, 24 de setembro de 2010 00:45
  • Legal Tiago... abraço.
    Ricardo Alves
    www.ricardoalves.me
    sexta-feira, 24 de setembro de 2010 10:59