繁体   English   中英

Dynamics CRM:为系统用户检索多个约会

[英]Dynamics CRM : Retrieve multiple appointments for a systemuser

我正在尝试使用RetrieveMultiple方法和查询表达式来获取系统用户的所有约会。 范例:

WhoAmIRequest userRequest = new WhoAmIRequest();
WhoAmIResponse userResponse = (WhoAmIResponse)_serviceProxy.Execute(userRequest);

QueryExpression qe = new QueryExpression();
qe.EntityName = "systemuser";

...
slos.RetrieveMultiple(qe);

我可以从systemuser实体检索systemuser的所有约会(所有者,组织者,必需的与会者,可选的与会者)吗?

还是我必须检索CRM的所有约会并添加条件才能知道用户是所有者,组织者,必需参与者还是可选参与者?

最后,我正在使用SOAP Logger,这是生成SOAP请求的最佳方法吗?

您将需要使用appointmentsystemuser之间的关系实体activitypointer systemuser 正如您在我的示例中看到的那样,这使事情有些复杂。

至少有两种可能的方式来构建所需的查询:

1)如您所料,您可以按systemuserid过滤约会:

var qe = new QueryExpression
{
    EntityName = "appointment",
    ColumnSet = new ColumnSet("subject"),
    LinkEntities =
    {
        new LinkEntity
        {
            EntityAlias = "ap",
            JoinOperator = JoinOperator.Inner,
            Columns = new ColumnSet(false),
            LinkFromEntityName = "appointment",
            LinkFromAttributeName = "activityid",
            LinkToEntityName = "activityparty",
            LinkToAttributeName = "activityid",
            LinkCriteria = new FilterExpression
            {
                Conditions =
                {
                    new ConditionExpression("partyid", ConditionOperator.Equal, userid),
                },
            },
        },
    },
};

2)您可以通过systemuserid查询systemuser并将约会添加为链接的实体(例如sql查询中的JOIN):

var qe2 = new QueryExpression
{
    EntityName = "systemuser",
    ColumnSet = new ColumnSet(false),
    LinkEntities =
    {
        new LinkEntity
        {
            EntityAlias = "ap",
            Columns = new ColumnSet(false),
            JoinOperator = JoinOperator.Inner,
            LinkFromEntityName = "systemuser",
            LinkFromAttributeName = "systemuserid",
            LinkToEntityName = "activityparty",
            LinkToAttributeName = "partyid",
            LinkEntities =
            {
                new LinkEntity
                {
                    EntityAlias = "a",
                    Columns = new ColumnSet("subject"),
                    JoinOperator = JoinOperator.Inner,
                    LinkFromEntityName = "activityparty",
                    LinkFromAttributeName = "activityid",
                    LinkToEntityName = "appointment",
                    LinkToAttributeName = "activityid",
                },
            },
        },
    },
    Criteria = new FilterExpression
    {
        Conditions =
        {
            new ConditionExpression("systemuserid", ConditionOperator.Equal, userid),
        },
    },
};

关于参与角色的过滤器,您必须在activitypointerparticipationtypemask上添加一个条件:

// user is Organizer, Owner, required or optional Attendee
ConditionExpression("participationtypemask", ConditionOperator.In, new int[] { 5, 6, 7, 9 }),

有了这个表达,我现在没有收到任何约会:

QueryExpression qe = new QueryExpression
{
    EntityName = "appointment",
    ColumnSet = new ColumnSet("activityid", "subject", "scheduledstart", "scheduledend", "location", "description"),
    Criteria = new FilterExpression
    {
        FilterOperator = LogicalOperator.And,
        Conditions = 
        {
            new ConditionExpression("scheduledend", ConditionOperator.GreaterThan, startTime),
            new ConditionExpression("scheduledstart", ConditionOperator.LessThan, endTime)
         }
     },
     LinkEntities = 
     {
         new LinkEntity
         {
             LinkFromEntityName = "activitypointer",
             LinkFromAttributeName = "activityid",
             LinkToEntityName = "activityparty",
             LinkToAttributeName = "activityid",
             LinkCriteria = new FilterExpression
             {
                 FilterOperator = LogicalOperator.And,
                 Conditions = 
                 {
                     new ConditionExpression("participationtypemask", ConditionOperator.In, new int[] { 5, 6, 7, 9 }),
                     new ConditionExpression("partyid", ConditionOperator.Equal, userResponse.UserId)

                 }
             }
         },
         new LinkEntity
         {
             EntityAlias = "requiredattendees",
             Columns = new ColumnSet(false),
             JoinOperator = JoinOperator.Inner,
             LinkFromEntityName = "activitypointer",
             LinkFromAttributeName = "activityid",
             LinkToEntityName = "activityparty",
             LinkToAttributeName = "activityid",
             LinkCriteria = new FilterExpression
             {
                 Conditions = 
                 {
                     new ConditionExpression("participationtypemask", ConditionOperator.Equal, 5)

                 }
             },
             LinkEntities =
             {
                 new LinkEntity
                 {
                     EntityAlias = "contact",
                     Columns = new ColumnSet("fullname"),
                     JoinOperator = JoinOperator.Inner,
                     LinkFromEntityName = "activityparty",
                     LinkFromAttributeName = "activityid",
                     LinkToEntityName = "contact",
                     LinkToAttributeName = "contactid"
                 },
             }
         }
     }
 };

 qe.Distinct = true;

 slos.RetrieveMultiple(qe);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM