QueryExpression телефонный звонок для контакта

Я застрял на этом некоторое время. Вот размах того, что я пытаюсь сделать:

Получение записей телефонных звонков при вводе контактной информации в поле «Кому».

После долгих исследований я свел код ниже. Я не слишком уверен, правильно ли я делаю связанные сущности, но не могу определить, как сделать вложенное соединение, как мне нужно, поскольку мне нужно каким — то образом добраться до activitypointer -> activityparty ->> contact…Я просто не знаю, где я ошибаюсь. Любая помощь была бы очень признательна.

using Microsoft.Crm.Sdk.Messages.Samples;
using Microsoft.Xrm.Sdk.Query.Samples;

QueryExpression qExpression = new QueryExpression("phonecall")
{
    ColumnSet = cs,
    LinkEntities = 
    {

        new LinkEntity()
        {
            EntityAlias = "ap",
            LinkFromEntityName= "phonecall",
            LinkFromAttributeName = "activityid",
            LinkToEntityName = "activitypointer",
            LinkToAttributeName = "activityid",
            JoinOperator = JoinOperator.Inner
        },
        new LinkEntity()
        {
            EntityAlias = "app",
            LinkFromEntityName= "activitypointer",
            LinkFromAttributeName = "activityid",
            LinkToEntityName = "activityparty",
            LinkToAttributeName = "activityid",
            JoinOperator = JoinOperator.Inner,
            LinkCriteria = new FilterExpression
             {
                 Conditions = 
                 {
                     new ConditionExpression("ParticipationTypeMask", ConditionOperator.Equal, 2),                          
                 }
             }
        },
        new LinkEntity()
        {
            EntityAlias = "con",
            Columns = new ColumnSet("fullname","contactid"),
            JoinOperator = JoinOperator.Inner,
            LinkFromEntityName = "activityparty",
            LinkFromAttributeName = "partyid",
            LinkToEntityName = "contact",
            LinkToAttributeName = "contactid"
        }
    }
};

2 ответа

  1. Похоже, я ответил на свой собственный вопрос, давая некоторое вдохновение. Я должен был вложить ссылку в ссылку.

    Это то, что работает сейчас

    QueryExpression qExpression = new QueryExpression("phonecall")
            {
                ColumnSet = cs,
                LinkEntities = 
                {                   
                    new LinkEntity()
                    {
                        EntityAlias = "app",
                        LinkFromEntityName= "phonecall",
                        LinkFromAttributeName = "activityid",
                        LinkToEntityName = "activityparty",
                        LinkToAttributeName = "activityid",
                        JoinOperator = JoinOperator.Inner,
                        LinkCriteria = new FilterExpression
                         {
                             Conditions = 
                             {
                                 new ConditionExpression("participationtypemask", ConditionOperator.Equal, 2),                          
                             }
                         },
                         LinkEntities = 
                         {                             
                            new LinkEntity()
                            {
                                EntityAlias = "con",
                                Columns = new ColumnSet("fullname","contactid"),
                                JoinOperator = JoinOperator.Inner,
                                LinkFromEntityName = "activityparty",
                                LinkFromAttributeName = "partyid",
                                LinkToEntityName = "contact",
                                LinkToAttributeName = "contactid"
                            }
                         }
                    },
                }
            };
    
  2. Использование DLaB.Xrm, вы можете переписать это так:

    var qe = QueryExpressionFactory.Create(cs, "phonecall");
    var activityParty = qe.AddLink("activityparty", "activityid");
    activityParty.WhereEqual("participationtypemask", 2);
    activityParty.AddLink("contact", "partyid", "contactid")
                 .AddColumns("fullname","contactid");
    

    Имея гораздо меньше кода, чтобы посмотреть на, как правило, сделать его легче Grok IMHO.

    Это, как я прочитал бы учить строку из моих 5 строк, перечисленных:

    1. Я делаю запрос к сущности телефонного вызова
    2. Присоединение к стороне действия по идентификатору действия (один и тот же ключ для обоих, нет необходимости дублировать)
    3. Где participationtypemask участника activity’S == 2
    4. И присоединение от того к контакту на ActivityParty.PartyId = = Контакт.ContactId
    5. Включая имя и идентификатор контакта.