gpt4 book ai didi

c# - 如何在 Dynamics CRM 2011 中获取每个帐户的事件?

转载 作者:行者123 更新时间:2023-11-30 15:22:14 25 4
gpt4 key购买 nike

我正在使用此 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,
});

在这个问题中已经建议了这种方式:Retrieve list of all accounts in CRM through C#?

问题是,我找不到获取事件的方法。是否有与事件关联的字段?我所能找到的只是一个单独的事件实体,它在 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但要注意限制:info about ExecuteMultipleRequest limitations .

更新

我没有在底部看到你的其他问题。如果您只需要获取打开的事件,则需要将 x.StateCode == 0 添加到上面编写的每个查询中;如果您只需要关闭的事件,则需要添加 x.StateCode == 2。例如,仅检索打开的电子邮件事件:

var emailActivityList = serviceContext.CreateQuery<Email>()
.Where(x => x.RegardingObjectId.Id == accountId && x.StateCode == 0).ToList();

Here is the list所有实体的所有开箱即用状态代码和状态。

如果您需要检索比方说仅最近打开的事件(您将自己定义需要多长时间),您可以进行以下调用:

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();

这是一个非常基本的代码,网上有很多关于它的信息。

关于c# - 如何在 Dynamics CRM 2011 中获取每个帐户的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36087267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com