如何以编程方式关闭crm 2011中的案例

我正在使用ssis在crm中进行一些更新。 我试图根据某些条件关闭crm中的一些案例。 这是我在public override void Input0_ProcessInputRow(Input0Buffer Row)方法中的示例代码。

 public override void Input0_ProcessInputRow(Input0Buffer Row) { // Create a Entity object of type 'case' Entity caseEnt = new Entity("incident"); Entity incidentResolution= new Entity("incidentresolution"); incidentResolution.Attributes.Add("incidentid", new EntityReference("incident", Row.DEVCaseGUID)); caseEnt["incidentid"] = Row.DEVCaseGUID; //organizationservice.Update(caseEnt); //Changes added here by // EntityCollection collection= GetAssociatedActivities(new EntityReference("incident", Row.DEVCaseGUID)) foreach (Entity activity in collection.Entities) { CancelActivity(activity, organizationservice); } // Changes added here // // Close the incident with the resolution. var closeIncidentRequest = new CloseIncidentRequest { IncidentResolution = incidentResolution, Status = new OptionSetValue(5) }; organizationservice.Execute(closeIncidentRequest); } private EntityCollection GetAssociatedActivities(EntityReference regarding) { QueryExpression query = new QueryExpression { EntityName = "activitypointer", ColumnSet = new ColumnSet(new string[] { "activitytypecode" }) }; query.Criteria.AddCondition("regardingobjectid", ConditionOperator.Equal, regarding.Id); query.Criteria.AddCondition("statecode", ConditionOperator.NotEqual, 1); //ignore completed EntityCollection collection = organizationservice.RetrieveMultiple(query); return collection } // Cancel an Activity private static void CancelActivity(Entity entity, IOrganizationService service) { EntityReference moniker = new EntityReference(); if (entity.LogicalName == "activitypointer") { if (entity.Attributes.Contains("activityid") & entity.Attributes.Contains("activitytypecode")) { moniker.LogicalName = entity.Attributes["activitytypecode"].ToString(); moniker.Id = (Guid)entity.Attributes["activityid"]; SetStateRequest request = new SetStateRequest(); request.EntityMoniker = moniker; request.State = new OptionSetValue(2); request.Status = new OptionSetValue(-1); SetStateResponse response = (SetStateResponse)service.Execute(request); } } } 

Row.DEVCaseGUID是Case的GUID。 statuscode5表示已关闭。 已解决的状态码为2

我尝试按照这个例子但没有成功。 或者有没有简单的方法来实现这一目标?

在CRM中关闭案例与设置州/状态码不同。 关闭案例时会创建名为IncidentResoultion的中间实体。 您可以尝试以下代码以编程方式关闭案例。

 Entity incidentResolution= new Entity("incidentresolution"); incidentResolution.Attributes.Add("incidentid", new EntityReference("incident", Row.DEVCaseGUID)); // Close the incident with the resolution. var closeIncidentRequest = new CloseIncidentRequest { IncidentResolution = incidentResolution, Status = new OptionSetValue(5) }; organizationservice.Execute(closeIncidentRequest); 

请注意,只有在Closed/Completed only有关该案例的所有activitites ,才能将案例标记为Closed/Completed only完成。

2017年11月9日更新:添加关闭CASE相关活动的代码

 private List GetAssociatedActivities(EntityReference regarding) { QueryExpression query = new QueryExpression { EntityName = "activitypointer", ColumnSet = new ColumnSet(new string[] { "activitytypecode" }) }; query.Criteria.AddCondition("regardingobjectid", ConditionOperator.Equal, regarding.Id); query.Criteria.AddCondition("statecode", ConditionOperator.NotEqual, 1); //ignore completed EntityCollection activities = organizationservice.RetrieveMultiple(query);//change collection to activities foreach (Entity activity in activities.Entities) { CancelActivity(activity, organizationservice); } } // Cancel an Activity private static void CancelActivity(Entity entity, IOrganizationService service) { EntityReference moniker = new EntityReference(); if (entity.LogicalName == "activitypointer") { if (entity.Attributes.Contains("activityid") & entity.Attributes.Contains("activitytypecode")) { moniker.LogicalName = entity.Attributes["activitytypecode"].ToString(); moniker.Id = (Guid)entity.Attributes["activityid"]; SetStateRequest request = new SetStateRequest(); request.EntityMoniker = moniker; request.State = new OptionSetValue(2); request.Status = new OptionSetValue(-1); SetStateResponse response = (SetStateResponse)service.Execute(request); } } } 

https://www.magnetismsolutions.com/blog/roshanmehta/2012/2/16/Dynamics_CRM_2011_Closing_all_Related_Activities_for_a_Record.aspx

https://msdynamicscrmblog.wordpress.com/2013/06/18/there-are-still-open-activities-associated-with-this-case-when-resolving-a-case-in-dynamics-crm-2011/