我需要使用特定帐户的相关对象ID 和状态码0来计算所有任务记录。这需要使用 Microsoft Dynamics CRM 2016 附带的新 365 Web API 和 REST 来完成。以下是使用 Javascript 完成基本查询(无分页)的方式:
var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v8.2/tasks?$filter=_regardingobjectid_value eq 00000000-0000-0000-0000-000000000000 and statecode eq 0", true);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("Prefer", "odata.include-annotations=\"*\",odata.maxpagesize=5000");
req.onreadystatechange = function() {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var results = JSON.parse(this.response);
for (var i = 0; i < results.value.length; i++) {
var activityid = results.value[i]["activityid"];
}
} else {
Xrm.Utility.alertDialog(this.statusText);
}
}
};
req.send();
此外,这必须以允许检索超过 5000 条记录的方式完成。可以在此处找到有关如何执行此操作的信息:https ://msdn.microsoft.com/en-us/library/gg334767.aspx
以下是我可以使用 C# 插件和 FETCH XML 查询多达 5000 条记录的方法:
int count = 0;
string fetchTemplate =
@"<fetch version='1.0' output-format='xml - platform' mapping='logical' distinct='false'>
<entity name='activitypointer'>
<attribute name='activitytypecode' />
<attribute name='subject' />
<attribute name='prioritycode' />
<attribute name='regardingobjectid' />
<attribute name='statecode' />
<attribute name='instancetypecode' />
<attribute name='community' />
<attribute name='scheduledend' />
<attribute name='activityid' />
<filter type='and'>
<condition attribute='isregularactivity' operator='eq' value='1' />
<condition attribute='statecode' operator='eq' value='0' />
</filter>
<link-entity name='account' from='accountid' to='regardingobjectid' alias='ab'>
<filter type='and'>
<condition attribute='accountid' operator='eq' uitype='account' value='{0}' />
</filter>
</link-entity>
</entity>
</fetch>";
fetchTemplate = String.Format(fetchTemplate, entityId.ToString());
List<Entity> records = context.RetrieveAll(fetchTemplate);
if (records != null && records.Count > 0)
{
count = records.Count;
}
对此的任何帮助将不胜感激。我正在使用 Microsoft Dynamics CRM Online 2016、Visual Studio Professional 2015、相关的 Nuget 包和插件注册工具。
我来 StackOverflow 寻求帮助,因为我找不到一个简单的 Microsoft Dynamics CRM 在线 REST 查询示例,它可以在 C# 插件中检索超过 5000 条记录。
我对@odata.nextlink 属性以及它如何实现对多个页面(以及可能超过 5000 条记录)的宁静检索特别感兴趣。
如果您想帮助我增强我当前的 C# 插件代码,以便它可以检索超过 5000 条记录,那也将不胜感激。