[英]How to get Activities of each Account in Dynamics CRM 2011?
我正在使用此C#SDK从Dynamics CRM 2011获取数据: https : //msdn.microsoft.com/en-us/library/gg695803(v = crm.5).aspx
我需要从中读取所有帐户并阅读与之关联的活动(实际上,只有最后一次关闭和打开活动)。
要获取帐户,我使用以下代码:
var accounts = xrm.AccountSet
.Select(acc => new
{
name = acc.Name,
guid = acc.AccountId,
parent = acc.ParentAccountId,
number = acc.AccountNumber,
website = acc.WebSiteURL,
});
在这个问题中已经提出了这种方法: 通过C#检索CRM中所有帐户的列表?
问题是,我找不到获取活动的方法。 是否有与活动相关的字段? 我所能找到的只是一个单独的活动实体,它在Dynamics CRM 2011解决方案中拥有自己的字段。
我也是C#的新手。
编辑:感谢Jordi,我现在似乎能够使用以下方法获取特定类型的Activity:
public class AccountTask
{
public string account;
public string task;
}
var accountsAndTasks = (from t in xrm.CreateQuery<Task>() join a in xrm.CreateQuery<Account>() on t.RegardingObjectId.Id equals a.AccountId select new AccountTask {
account = a.Name,
task = t.OwnerId.Name.ToString()
}).ToList();
现在,有没有办法为每个帐户立即获取所有活动类型?
并且,是否可以仅为每个帐户获取最新的开放和已结束活动?
RegardingObjectId
字段是将活动实体记录与帐户实体记录相关联的字段之一。
您可以像这样获取activity
实体记录:
var activityBaseList = serviceContext.CreateQuery<Activity>()
.Where(x => x.RegardingObjectId.Id == accountId).ToList();
这是一个基本实体,它只包含有关活动的基本信息 。 如果您需要有关每个活动记录的更多信息(并且在大多数情况下您确实需要),那么您将不得不使用不同的活动类型进行多个查询。 像这样:
var emailActivityList = serviceContext.CreateQuery<Email>()
.Where(x => x.RegardingObjectId.Id == accountId).ToList();
var taskActivityList = serviceContext.CreateQuery<Task>()
.Where(x => x.RegardingObjectId.Id == accountId).ToList();
//and so on
我宁愿使用QueryBase
请求,因为在这种情况下,你可以查询合并为一个ExecuteMultipleRequest
调用IOrganizationService
以提高性能,但要注意的限制: 约ExecuteMultipleRequest限制信息 。
UPDATE
我没有在底部看到你的另一个问题。 如果只需要打开活动,则需要在上面写的每个查询中添加x.StateCode == 0
,如果只需要关闭活动,则需要添加x.StateCode == 2
。 例如,仅检索打开的电子邮件活动:
var emailActivityList = serviceContext.CreateQuery<Email>()
.Where(x => x.RegardingObjectId.Id == accountId && x.StateCode == 0).ToList();
以下是所有实体的所有现成状态代码和状态的列表 。
如果您需要检索我们只说最近的开放活动 (您将自己定义最近需要的),您可以进行以下调用:
var createdOnFilter = DateTime.Now.AddDays(-1); //change it as you need it
var emailActivityList = serviceContext.CreateQuery<Email>()
.Where(x => x.RegardingObjectId.Id == accountId &&
x.StateCode == 0 &&
x.CreatedOn >= createdOnFilter)
.ToList();
这是一个非常基本的代码,在WEB上有很多关于它的信息。
它看起来像你需要的加入。
根据活动类型,有不同的实体。
以下示例适用于Task活动,其他示例类似。
//This will pull all the related tasks
var accountsAndTasks = (from t in xrm.CreateQuery<Task>()
join a in xrm.CreateQuery<Account>() on t.RegardingObjectId.Id equals a.AccountId
select new AccountTask {
account = a,
task = t
}).ToList();
如果您需要其他相当复杂的查询示例,请在Git上查看此示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.