'System.ServiceModel.FaultException`1' 在 Dynamics CRM 中将 RetrieveMultiple 与 FetchXML 结合使用时
'System.ServiceModel.FaultException`1' when using RetrieveMultiple with FetchXML in Dynamics CRM
我在尝试从 FetchXML 查询中获取结果时一直收到上述错误。任何帮助,将不胜感激。错误总是出现在行:
EntityCollection GetAllOpenActivitiesXML_result = service.RetrieveMultiple(fetched1);
这是代码的其余部分:
ITracingService tracingService = executionContext.GetExtension<ITracingService>();
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
Entity opp = new Entity("opportunity");
opp.Id = context.PrimaryEntityId;
string GetAllOpenActivitiesXML = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='activitypointer'>
<attribute name='activityid' aggregate='count' alias='activityid'/>
<filter type='and'>
<condition attribute='statecode' operator='eq' value='0' />
</filter>
<link-entity name='opportunity' from='opportunityid' to='regardingobjectid'>
<filter type='and'>
<condition attribute='name' operator='eq' value='MyOpportunity' />
</filter>
</link-entity>
</entity>
</fetch>";
try {
FetchExpression fetched1 = new FetchExpression(GetAllOpenActivitiesXML);
EntityCollection GetAllOpenActivitiesXML_result = service.RetrieveMultiple(fetched1);
foreach (var c in GetAllOpenActivitiesXML_result.Entities)
{
Int32 totalOpenActivities = (Int32)((AliasedValue)c["activityid"]).Value;
opp["new_openactivities"] = totalOpenActivities;
}
}
catch {
opp["new_openactivities"] = 0;
}
service.Update(opp);
问题是因为您将字段名称用作别名,所以如果您更改别名,它将开始工作:
<fetch distinct="false" mapping="logical" aggregate="true" >
<entity name="activitypointer" >
<attribute name="activityid" alias="activityid_count" aggregate="count" />
<filter type="and" >
<condition attribute="statecode" operator="eq" value="0" />
</filter>
<link-entity name="opportunity" from="opportunityid" to="regardingobjectid" >
<filter type="and" >
<condition attribute="name" operator="eq" value="MyOpportunity" />
</filter>
</link-entity>
</entity>
</fetch>
此外,我不知道您使用的是哪个 CRM 版本,但我很确定这个插件可以用汇总字段替换,所以我会试一试!
我在尝试从 FetchXML 查询中获取结果时一直收到上述错误。任何帮助,将不胜感激。错误总是出现在行:
EntityCollection GetAllOpenActivitiesXML_result = service.RetrieveMultiple(fetched1);
这是代码的其余部分:
ITracingService tracingService = executionContext.GetExtension<ITracingService>();
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
Entity opp = new Entity("opportunity");
opp.Id = context.PrimaryEntityId;
string GetAllOpenActivitiesXML = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='activitypointer'>
<attribute name='activityid' aggregate='count' alias='activityid'/>
<filter type='and'>
<condition attribute='statecode' operator='eq' value='0' />
</filter>
<link-entity name='opportunity' from='opportunityid' to='regardingobjectid'>
<filter type='and'>
<condition attribute='name' operator='eq' value='MyOpportunity' />
</filter>
</link-entity>
</entity>
</fetch>";
try {
FetchExpression fetched1 = new FetchExpression(GetAllOpenActivitiesXML);
EntityCollection GetAllOpenActivitiesXML_result = service.RetrieveMultiple(fetched1);
foreach (var c in GetAllOpenActivitiesXML_result.Entities)
{
Int32 totalOpenActivities = (Int32)((AliasedValue)c["activityid"]).Value;
opp["new_openactivities"] = totalOpenActivities;
}
}
catch {
opp["new_openactivities"] = 0;
}
service.Update(opp);
问题是因为您将字段名称用作别名,所以如果您更改别名,它将开始工作:
<fetch distinct="false" mapping="logical" aggregate="true" >
<entity name="activitypointer" >
<attribute name="activityid" alias="activityid_count" aggregate="count" />
<filter type="and" >
<condition attribute="statecode" operator="eq" value="0" />
</filter>
<link-entity name="opportunity" from="opportunityid" to="regardingobjectid" >
<filter type="and" >
<condition attribute="name" operator="eq" value="MyOpportunity" />
</filter>
</link-entity>
</entity>
</fetch>
此外,我不知道您使用的是哪个 CRM 版本,但我很确定这个插件可以用汇总字段替换,所以我会试一试!