更改Dynamics 365 Customer Engagement本地部署的高级配置
在实施项目的时候,Dynamics 365数据量比较多,展示的图表(chart)显示这个错误,
AggregateQueryRecordLimit exceeded. Cannot perform this operation.
这个错误的意思就是聚合的记录超过了高级配置AggregateQueryRecordLimit字段的值,操作终止。
这个高级配置项目AggregateQueryRecordLimit在哪儿?它不像组织属性那样在组织数据库中,
如 更改组织属性-以更改maxrecordsforexporttoexcel为例 ,而是在 MSCRM_CONFIG 数据库的 [dbo].[DeploymentProperties] 表中,有哪些项目呢,我这里以我自己的本地部署的Dynamics 365 Customer Engagement 版本 1612 (9.0.3.7) (DB 9.0.3.7) (本地) 为了,通过如下SQL查出来。
SELECT [ColumnName]
,[BigIntColumn]
,[IntColumn]
,[SmallIntColumn]
,[TinyIntColumn]
,[BitColumn]
,[FloatColumn]
,[DateTimeColumn]
,[SmallDateTimeColumn]
,[NVarCharColumn]
FROM [MSCRM_CONFIG].[dbo].[DeploymentProperties]
ORDER BY [ColumnName]
我这里截图出来部分结果如下:
如何更改呢?根据文档 Use Advanced Configuration Settings (ConfigDB) 可以用 RetrieveAdvancedSettingsRequest 消息来查找,然后使用 UpdateAdvancedSettingsRequest 消息来更新。若是用这两个消息来处理,程序需要引用 Microsoft.CrmSdk.Deployment ,我这里亲自测试有效的代码如下:
DeploymentServiceClient deploySvc = Microsoft.Xrm.Sdk.Deployment.Proxy.ProxyClientHelper.CreateClient(new Uri("https://demo.luoyong.me/XRMDeployment/2011/Deployment.svc"));
deploySvc.ClientCredentials.Windows.ClientCredential = new NetworkCredential("crmadmin", "Paseewxw", "luoyong.me");
ConfigurationEntity entity = new ConfigurationEntity();
entity.LogicalName = "Deployment";
entity.Attributes = new Microsoft.Xrm.Sdk.Deployment.AttributeCollection();
entity.Attributes.Add(new KeyValuePair<string, object>("AggregateQueryRecordLimit", 100000));
UpdateAdvancedSettingsRequest request = new UpdateAdvancedSettingsRequest();
request.Entity = entity;
deploySvc.Execute(request);
更方便的是使用PowerShell命令来更新,我这里根据 Simon Jenkinson 的文章 Microsoft Dynamics CRM 2013 Change Deployment Settings via PowerShell 稍作更改可以使用如下代码:
$itemSetting = new-object 'System.Collections.Generic.KeyValuePair[String,Object]'("AggregateQueryRecordLimit",50000)
$configEntity = New-Object "Microsoft.Xrm.Sdk.Deployment.ConfigurationEntity"
$configEntity.LogicalName="Deployment"
$configEntity.Attributes = New-Object "Microsoft.Xrm.Sdk.Deployment.AttributeCollection"
$configEntity.Attributes.Add($itemSetting)
Set-CrmAdvancedSetting -Entity $configEntity
最后一个方法不推荐使用,但是也可行,就是用SQL来更新,记得更新后需要对CRM的Web 站点对应的应用程序池执行Recycle,当然也可以用执行 IISRESET代替Recycle。
UPDATE [MSCRM_CONFIG].[dbo].[DeploymentProperties]
SET IntColumn = 50000
where ColumnName = 'AggregateQueryRecordLimit'