QueryExpression 打电话给联系人

QueryExpression Phonecall to Contact

我一直坚持这一点。这是我正在尝试做的范围:

检索电话记录,同时在 "to" 字段中输入联系信息。

经过大量研究,我将代码归结为以下内容。我不太确定我是否正在正确地做链接实体 - 但无法确定如何像我需要的那样进行嵌套连接,因为我需要以某种方式到达 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"
        }
    }
};

看来我回答了我自己的问题,给了一些启发。我不得不将 link 嵌套在 link.

这是现在有效的方法

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"
                        }
                     }
                },
            }
        };

使用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");

要查看的代码少很多往往更容易理解恕我直言。

这就是我列出的 5 行教学行的阅读方式:

  1. 我正在对 Phone 调用实体进行查询
  2. 使用 activity Id 加入 Activity 派对(两者的密钥相同,无需重复)
  3. 其中 activityParty's ParticipationTypeMask == 2
  4. 然后加入 ActivityParty.PartyId 上的联系人 == Contact.ContactId
  5. 包括联系人姓名和ID。