如何以编程方式关闭 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是案例的 GUID。的StatusCode5封闭式。statecode2用于解决。

我尝试遵循此示例但没有成功。或者有什么简单的方法可以实现这一目标?

点网专业版

在 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内容都已完成。

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

private List<Entity> 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-related-with-this-case-when-resolving-a-case-in-dynamics-crm-2011/

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何“取消发布” CRM 2011中的更改?

如何在CRM 2011中以编程方式(通过插件)获取CRMWRPCToken和CRMWRPCTokenTimeStamp?

如何在Dynamics CRM 2011中获取每个帐户的活动?

如何在CRM 2011开发中编写单元测试

如何使用JavaScript在CRM 2011中读取以下属性?

如何在CRM 2011中捕获QueueItem发布日期时间

是否可以通过编程方式收听Dynamics crm 2011事件?

CRM 2011高级查找中的比较列表

CRM 2011,插件和DST中的日期

如何使旧的JS CRM 2011适应CRM 2015

在CRM 2011中,如何创建记录并将其关联到同一ExecuteMultipleRequest中

在线Dynamics CRM 2011:如何从插件中的对话框获取用户响应

如何在Microsoft Dynamics CRM 2011中使用jquery和webresource?

如何在CRM 2011中使用Javascript和oData获取PartyList字段的值

如何在Microsoft Dynamics CRM 2011中实现字段级安全

crm 2011:在丢弃插件中的请求后如何提供友好的响应

如何以编程方式关闭Android中的对话框?

如何以编程方式关闭 IRIS 中的日记功能

CRM 2011 GUID ID

datetime插件crm 2011

防止删除-在CRM 2011中使用插件

CRM 2011 SSRS日期范围中的约会报告

选择QueryExpression CRM 2011中的所有列

CRM 2011工作流程中的电子邮件

CRM 2011工作流程中的DynamicActivity验证错误

在Outlook 2013中更改CRM 2011导航部分

使用 jQuery/javascript 从 CRM 2011 中获取记录

在CRM 2011中保存表单后调用javascript函数

IFRame中的CRM 2011自定义Aspx页面