none
FetchXML CRM 2011 Onpremiss RRS feed

  • Pergunta

  • Bom dia Pessoal, tudo bem com vocês?

    Em nosso sistema CRM 2011 criamos uma nova Entidade chamada Order para um processo interno, ele está associado a Oportunidade e graças ao universo deu tudo certo na implementação desse novo processo.

    Agora, restou a cerejinha em cima do bolo.

    1. Os registros Order tem um campo chamado Valor total (new_valortotal).
    2. A Entidade Order é do Tipo Atividade e está relacionada a Entidade Oportunidade.
    3. Em uma Oportunidade teremos 1 ou mais registros.
    4. Na Oportunidade temos um campo chamado Total serviços (new_totaldeservios).

    E esse é o FetchXML que eu criei para consultar os registros existentes e consolidar no campo Total da Oportunidade:

    <fetch count="50" aggregate="true" >
      <entity name="opportunity" >
        <attribute name="new_totaldeservios" alias="new_totaldeservios" aggregate="sum" />
        <order alias="new_totaldeservios" />
        <link-entity name="new_border" from="regardingobjectid" to="opportunityid" alias="new_totaldeservios" >
          <attribute name="new_valortotal" alias="new_valortotal" aggregate="sum" />
        </link-entity>
      </entity>
    </fetch>

    Porém tenho algumas dúvidas/dificuldades:

    1. Através do código acima será possível somar os valores (new_valortotal) dos registros "Order" e atualizar o campo "Total de Serviços" (new_totaldeservios) da "Oportunidade" com o seu resultado?

    2. Como eu faço para subir o fetchXML no CRM 2011?

    Desde já agradeço a ajuda!

    Muito obrigado...

    Atenciosamente,

    quarta-feira, 21 de setembro de 2016 12:52

Respostas

  • Olá Marcelo, tudo bem?

    Gostaria de fazer algumas sugestões, para que você tenha o comportamento desejado.

    1. Você precisa ajustar a sua query, obtendo a somatória de todos os registros da entidade Order, relacionados a Oportunidade. Obs: não esqueça de deixar o conteúdo do filtro dinâmico - no exemplo abaixo, está estático.
    <fetch distinct="false" mapping="logical" aggregate="true" >
        <entity name="new_border" >
            <attribute name="new_valortotal" alias="valor_total_sum" aggregate="sum" />
            <link-entity name="opportunity" from="opportunityid" to="regardingobjectid" alias="opp" >
                <filter type="and" >
                    <condition attribute="opportunityid" operator="eq" value="{9E0D0283-5BF2-E311-945F-6C3BE5A8DD64}" />
                </filter>
            </link-entity>
        </entity>
    </fetch>

       2. Para realizar uma query utilizando um fetchXml, basta usar a classe FetchExpression, conforme exemplo abaixo:

    string estimatedvalue_sum = @" 
    <fetch distinct='false' mapping='logical' aggregate='true'> 
         <entity name='opportunity'> 
           <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum' /> 
        </entity> 
    </fetch>";
    
    EntityCollection estimatedvalue_sum_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_sum));
    
    foreach (var c in estimatedvalue_sum_result.Entities)
    {
        decimal aggregate7 = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
        System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate7);
    
    }

    Observação: esse exemplo de código foi retirado do próprio SDK (caminho: SDK\SampleCode\CS\GeneralProgramming\Queries).

    Caso queira dar uma olhada, basta realizar o download neste link.

    Abraços


    • Editado Felipe Barboza de Lima quarta-feira, 5 de outubro de 2016 00:54 ajuste no código
    • Sugerido como Resposta Azevedo PedroMVP quinta-feira, 6 de outubro de 2016 09:51
    • Marcado como Resposta Mekaru sexta-feira, 18 de novembro de 2016 09:51
    quarta-feira, 5 de outubro de 2016 00:53

Todas as Respostas

  • Boas Meraku,

    Mas onde queres saber esse resultado? Em algum relatório, queres saber quando alguém adicionar uma atividade order?

    Podes executar esse fetch por exemplo no plugin, ou seja, quando existe o create da entidade order adicionar a oportunidade relacionada o valor presente nessa atividade. Senão podes usar Javascript, onde não necessitas de FetchXml, no onsave da order colocas um código que acede ao formulário pai (oportunidade) e atualizas o valor total.

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


    Pedro Azevedo Crm Specialist 4.0\2011

    • Sugerido como Resposta Azevedo PedroMVP quinta-feira, 22 de setembro de 2016 22:01
    quinta-feira, 22 de setembro de 2016 22:01
  • Boas Azevedo,

    Desde já muito obrigado pelo contato.

    Mas onde queres saber esse resultado?
    Resp.: O resultado deve ser apresentando na Entidade Oportunidade. No caso será a soma das informações dos registros Orders - Campo Valor Total

    Em algum relatório, queres saber quando alguém adicionar uma atividade order?
    Resp.: Na verdade não, somente quando o usuário criar novos Orders, o sistema deverá somar ao campo da Oportunidade.

    "Podes executar esse fetch por exemplo no plugin, ou seja, quando existe o create da entidade order adicionar a oportunidade relacionada o valor presente nessa atividade. Senão podes usar Javascript, onde não necessitas de FetchXml, no onsave da order colocas um código que acede ao formulário pai (oportunidade) e atualizas o valor total."

    Conhece algum video que possa me orientar na criação desse?

    Mais uma vez, muito obrigado pela ajuda de sempre!

    Meka


    Marcelo Mekaru

    terça-feira, 27 de setembro de 2016 12:36
  • Olá Marcelo, tudo bem?

    Gostaria de fazer algumas sugestões, para que você tenha o comportamento desejado.

    1. Você precisa ajustar a sua query, obtendo a somatória de todos os registros da entidade Order, relacionados a Oportunidade. Obs: não esqueça de deixar o conteúdo do filtro dinâmico - no exemplo abaixo, está estático.
    <fetch distinct="false" mapping="logical" aggregate="true" >
        <entity name="new_border" >
            <attribute name="new_valortotal" alias="valor_total_sum" aggregate="sum" />
            <link-entity name="opportunity" from="opportunityid" to="regardingobjectid" alias="opp" >
                <filter type="and" >
                    <condition attribute="opportunityid" operator="eq" value="{9E0D0283-5BF2-E311-945F-6C3BE5A8DD64}" />
                </filter>
            </link-entity>
        </entity>
    </fetch>

       2. Para realizar uma query utilizando um fetchXml, basta usar a classe FetchExpression, conforme exemplo abaixo:

    string estimatedvalue_sum = @" 
    <fetch distinct='false' mapping='logical' aggregate='true'> 
         <entity name='opportunity'> 
           <attribute name='estimatedvalue' alias='estimatedvalue_sum' aggregate='sum' /> 
        </entity> 
    </fetch>";
    
    EntityCollection estimatedvalue_sum_result = _serviceProxy.RetrieveMultiple(new FetchExpression(estimatedvalue_sum));
    
    foreach (var c in estimatedvalue_sum_result.Entities)
    {
        decimal aggregate7 = ((Money)((AliasedValue)c["estimatedvalue_sum"]).Value).Value;
        System.Console.WriteLine("Sum of estimated value of all opportunities: " + aggregate7);
    
    }

    Observação: esse exemplo de código foi retirado do próprio SDK (caminho: SDK\SampleCode\CS\GeneralProgramming\Queries).

    Caso queira dar uma olhada, basta realizar o download neste link.

    Abraços


    • Editado Felipe Barboza de Lima quarta-feira, 5 de outubro de 2016 00:54 ajuste no código
    • Sugerido como Resposta Azevedo PedroMVP quinta-feira, 6 de outubro de 2016 09:51
    • Marcado como Resposta Mekaru sexta-feira, 18 de novembro de 2016 09:51
    quarta-feira, 5 de outubro de 2016 00:53