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 行教学行的阅读方式:
- 我正在对 Phone 调用实体进行查询
- 使用 activity Id 加入 Activity 派对(两者的密钥相同,无需重复)
- 其中 activityParty's ParticipationTypeMask == 2
- 然后加入 ActivityParty.PartyId 上的联系人 == Contact.ContactId
- 包括联系人姓名和ID。
我一直坚持这一点。这是我正在尝试做的范围:
检索电话记录,同时在 "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 行教学行的阅读方式:
- 我正在对 Phone 调用实体进行查询
- 使用 activity Id 加入 Activity 派对(两者的密钥相同,无需重复)
- 其中 activityParty's ParticipationTypeMask == 2
- 然后加入 ActivityParty.PartyId 上的联系人 == Contact.ContactId
- 包括联系人姓名和ID。