我正在使用此C#SDK从Dynamics CRM 2011中获取数据:https://msdn.microsoft.com/zh-cn/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#的新手。
编辑:多亏了乔迪,我现在似乎能够使用以下方法获得特定类型的活动:
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限制的信息。
更新
我没有在底部看到您的其他问题。如果只需要打开活动,则需要添加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上有很多有关它的信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句