none
CRM 2011 - Erro ao ordernar uma consulta - QueryExpression RRS feed

  • Pergunta

  • Boa noite a todos.

    Não estou conseguindo ordernar uma consulta para campos de entidades que estão relacionadas a entidade principal.

    Segue exemplo de código:

     QueryExpression query = new QueryExpression("account");
     query.Distinct = true;
     query.ColumnSet.AllColumns = true;
     query.Criteria = new FilterExpression();

     query.LinkEntities.Add(new LinkEntity("account", "salesorder", "accountid", "customerid", JoinOperator.Inner));

     query.LinkEntities[query.LinkEntities.Count - 1].Columns.AddColumns("ordernumber");
     query.LinkEntities[query.LinkEntities.Count - 1].EntityAlias = "salesorder";

     query.Orders.Add(new OrderExpression("accountid", OrderType.Ascending));
     query.Orders.Add(new OrderExpression("salesorder.ordernumber", OrderType.Ascending));

     var resultado = RetrieveMultiple(query);

    Quando executo o sistema apresenta erro dizendo que o campo "salesorder.ordernumber" não existe na entidade "account".

    Será que o QueryExpression só permite ordernar campos da entidade principal?


    • Editado FrCosta sexta-feira, 13 de julho de 2012 14:01
    quinta-feira, 12 de julho de 2012 21:57

Respostas

  • FrCosta, bom dia.

    Ordenação em linked entities não é suportado. Você vai conseguir ordenar apenas pelo campo accounid.

    É o mesmo comrtamento quando voce cria uma localização avançcada por exemplo de produtos do pedido e adiciona um campo da entidade produto. repare que na classificação ele não permite classificar por nenhum campo da entidade produto.


    Atenciosamente,
    Rodrigo Hentz - MCP.MCPS.MCNPS.MCTS.MBSS.MBSP.MCITP
    Profile
    Blog

    • Sugerido como Resposta Rodrigo HentzModerator terça-feira, 17 de julho de 2012 12:01
    • Marcado como Resposta FrCosta terça-feira, 17 de julho de 2012 18:34
    terça-feira, 17 de julho de 2012 12:01
    Moderador

Todas as Respostas

  • FrCosta,

    Creio que esteja errando o atributo que linka as entidades, pois dentro de uma salesorder temos um customerid e não um accountid. Outro ponto, seria o uso de fecthXML, pois agora o próprio CRM gera a query para nós, basta abrir um localização avançada e depois exportar.

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    sexta-feira, 13 de julho de 2012 14:10
    Moderador
  • Obrigado Tiago.

    O relacionamento que estou fazendo está correto, pois estou utilizando o campo accountid da entidade account com o campo customerid da entidade salesorder, conforme segue o exemplo abaixo:

    query.LinkEntities.Add(new LinkEntity("account", "salesorder", "accountid", "customerid", JoinOperator.Inner));

    O problema não está dando no relacionamento e sim quando tento ordernar um campo de uma entidade que está relacionada com a entidade principal da consulta.

    Se excluir o código que ordena o campo "ordernumber" da entidade salesorder a consulta é executada com sucesso.

    Código que ordena o campo: query.Orders.Add(new OrderExpression("salesorder.ordernumber", OrderType.Ascending));

    Vou tentar realizar a mesma consulta pela localização avançada do Dynamics.

    sexta-feira, 13 de julho de 2012 17:03
  • Tiago,

    Tentei realizar a consulta pela localização avançada porém o dynamics não permite realizar a ordenação de um campo da entidade que está relacionada a entidade principal da consulta. Na ordenação aparece apenas os campos que são da entidade principal.

    Você conhece outra forma de realizar esta operação?

    sexta-feira, 13 de julho de 2012 18:31
  • FrCosta,

    Você está relacionando ao contrário o correto e salesorder x account e não account x salesorder... 

    Veja o seu exemplo usando fetchXML:

    <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false">
      <entity name="salesorder">
        <attribute name="salesorderid" />
        <attribute name="vij_propostaseguradora" />
        <attribute name="customerid" />
        <order attribute="vij_propostaseguradora" descending="false" />
        <order attribute="customerid" descending="false" />
        <link-entity name="account" from="accountid" to="customerid" visible="false" link-type="outer" alias="a_92b77a4070bd4d1a82d9fa6ce38df2cc">
          <attribute name="emailaddress1" />
        </link-entity>
      </entity>
    </fetch>

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    sexta-feira, 13 de julho de 2012 18:32
    Moderador
  • Tiago,

    Então como faria o comando abaixo no Dynamics:

    SELECT A.name, S.ordernumber, S.totalamount

    FROM account A

    JOIN salesorder S ON(A.accountid = S.customerid)

    WHERE S.statecode = 0

    ORDER BY A.name, S.totalamount

    sexta-feira, 13 de julho de 2012 18:55
  • FrCosta,

    Sugeri a você a solução mais indicada, pois poderá usá-la em plugins, custom workflows, jscript, silverlight, por isso pense bem ao usar queryexpression e consulta ao banco. Além de que, a resposta informada funciona 100%.

    Conforme eu te disse, está fazendo a associação ao contrário, o seu from é salesorder e não account.

    Att,


    Tiago Michelini Cardoso MVP - MCC - MCTS
    https://tiagomcardoso.wordpress.com/

    sexta-feira, 13 de julho de 2012 19:26
    Moderador
  • Tiago,

    Independente da ordem que irei estabelecer a consulta ou se é através de QueryExpression ou de FetchXML. O meu objetivo é poder ordernar (classificar) pelos campos A.name e S.totalamount. Tem alguma forma de realizar isso?

    segunda-feira, 16 de julho de 2012 13:16
  • FrCosta, bom dia.

    Ordenação em linked entities não é suportado. Você vai conseguir ordenar apenas pelo campo accounid.

    É o mesmo comrtamento quando voce cria uma localização avançcada por exemplo de produtos do pedido e adiciona um campo da entidade produto. repare que na classificação ele não permite classificar por nenhum campo da entidade produto.


    Atenciosamente,
    Rodrigo Hentz - MCP.MCPS.MCNPS.MCTS.MBSS.MBSP.MCITP
    Profile
    Blog

    • Sugerido como Resposta Rodrigo HentzModerator terça-feira, 17 de julho de 2012 12:01
    • Marcado como Resposta FrCosta terça-feira, 17 de julho de 2012 18:34
    terça-feira, 17 de julho de 2012 12:01
    Moderador