2011-06-10 67 views
0

我试图通过Web服务在Microsoft CRM 4.0中重现活动页面。我可以检索活动列表,我相信我需要使用ActivityPointers来检索实体,但迄今为止不成功。我是否需要遍历从第一个查询返回的每个实体以检索它的ActivityPointer?如果是这样,那么我将如何获得“关注”字段或活动的主题(例如:电子邮件)。通过Web服务列出活动

代码检索活动是:

var svc = GetCrmService(); 
    var cols = new ColumnSet(); 
    cols.Attributes = new[] { "activityid", "addressused", "scheduledstart", "scheduledend", "partyid", "activitypartyid", "participationtypemask", "ownerid" }; 
    var query = new QueryExpression(); 
    query.EntityName = EntityName.activityparty.ToString(); 
    query.ColumnSet = cols; 

    LinkEntity link = new LinkEntity(); 
    //link.LinkCriteria = filter; 
    link.LinkFromEntityName = EntityName.activitypointer.ToString(); 
    link.LinkFromAttributeName = "activityid"; 
    link.LinkToEntityName = EntityName.activityparty.ToString(); 
    link.LinkToAttributeName = "activityid"; 
    query.LinkEntities = new[] {link}; 

    var activities = svc.RetrieveMultiple(query); 
    var entities = new List<ICWebServices.activityparty>(); 
    RetrieveMultipleResponse retrieved = (RetrieveMultipleResponse) svc.Execute(request); 
    //var pointers = new List<activitypointer>(); 
    foreach (activityparty c in activities.BusinessEntities) 
    { 
     entities.Add(((activityparty)c)); 
     //the entities don't seem to contain a link to the email which they came from 
    } 

回答

1

不知道如果我理解你的问题,但场“activityid”在activitypointer对象是相同activityid为基本活动(电子邮件,任务,电话等)。合适的观点是与相关实体的联系。

继承人你需要获得活动页面

 ColumnSet cols = new ColumnSet() 
     { 
      Attributes = new string[] { "subject", "regardingobjectid", "regardingobjectidname", "regardingobjectidtypecode", "activitytypecodename", "createdon", "scheduledstart", "scheduledend" } 
     }; 
     ConditionExpression condition = new ConditionExpression() 
     { 
      AttributeName = "ownerid", 
      Operator = ConditionOperator.Equal, 
      Values = new object[] { CurrentUser.systemuserid.Value } //CurrentUser is an systemuser object that represents the current user (WhoAmIRequest) 
     }; 
     FilterExpression filter = new FilterExpression() 
     { 
      Conditions = new ConditionExpression[] { condition }, 
      FilterOperator = LogicalOperator.And 
     }; 
     QueryExpression query = new QueryExpression() 
     { 
      EntityName = EntityName.activitypointer.ToString(), 
      ColumnSet = cols, 
      Criteria = filter 
     }; 

     BusinessEntityCollection activities = svc.RetrieveMultiple(query); 

     foreach (activitypointer activity in activities) 
     { 
      //do something with the activity 

      //or get the email object 
      email originalEmail = (email)svc.Retrieve(EntityName.email.ToString(), activity.activityid.Value, new AllColumns()); 

     } 
+0

感谢相当于,我给这个一展身手。 – Echilon 2011-06-17 07:05:47