Dynamics crm crm dynamics中的插件c#:在设定的时间段后,插件触发工作流

Dynamics crm crm dynamics中的插件c#:在设定的时间段后,插件触发工作流,dynamics-crm,microsoft-dynamics,dynamics-crm-365,Dynamics Crm,Microsoft Dynamics,Dynamics Crm 365,我正在dynamics 365中创建一个插件,目的是当事件实体statuscode设置为1或3时,触发工作流。但是,在触发工作流之前,必须在24小时内将statuscode设置为1或3。 此外,在执行工作流后,应将statuscode设置为pending 我不确定我是否朝着正确的方向编写代码。我不知道怎么做。如果有人能告诉我如何解决这个问题。谢谢 这就是我到目前为止所做的:出于测试目的,触发工作流的时间段是10秒 public void Execute(IServiceProvider serv

我正在dynamics 365中创建一个插件,目的是当事件实体statuscode设置为1或3时,触发工作流。但是,在触发工作流之前,必须在24小时内将statuscode设置为1或3。 此外,在执行工作流后,应将statuscode设置为pending

我不确定我是否朝着正确的方向编写代码。我不知道怎么做。如果有人能告诉我如何解决这个问题。谢谢

这就是我到目前为止所做的:出于测试目的,触发工作流的时间段是10秒

public void Execute(IServiceProvider serviceProvider)
{
  ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
  IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
  IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
  IOrganizationService service = factory.CreateOrganizationService(context.UserId);

  //create an entity
  Entity entity = (Entity)context.InputParameters["Target"];

  //after creating the entity, we need to retrieve the required entity: Incident
  //retrieve incident entity
  Incident detail = entity.ToEntity<Incident>();

  //contain int value that represents the optionset
  TimeSpan sec = new TimeSpan(00,00,10);

  // var incident = service.Retrieve("incident", detail.IncidentId.Value, new Microsoft.Xrm.Sdk.Query.ColumnSet(true)).ToEntity<Incident>();
  //retrieve the value of status code of a particular entity
  //if optionsetvalue is the same for a 24 hr period

  if (detail.StatusCode== new OptionSetValue(1) || detail.StatusCode == new OptionSetValue(3))
  {
    if (sec != null)
    {
      ExecuteWorkflowRequest request = new ExecuteWorkflowRequest()
      {
          WorkflowId = new Guid("DB9ABA7E-D4F9-4EBF-8062-C85EF7B850FB"),
          EntityId = detail.Id,
      };
      ExecuteWorkflowResponse response = (ExecuteWorkflowResponse)service.Execute(request);

      //change it to pending..statuscode
      detail.StatusCode = new OptionSetValue(425390002);
    }

    service.Update(detail);
  }
}
public void Execute(IServiceProvider服务提供者)
{
ITracingService tracingService=(ITracingService)serviceProvider.GetService(类型(ITracingService));
IPluginExecutionContext上下文=(IPluginExecutionContext)serviceProvider.GetService(类型为(IPluginExecutionContext));
IOOrganizationServiceFactory工厂=(IOOrganizationServiceFactory)服务提供者.GetService(类型(IOOrganizationServiceFactory));
IOOrganizationService=factory.CreateOrganizationService(context.UserId);
//创建实体
实体=(实体)上下文。输入参数[“目标”];
//创建实体后,我们需要检索所需的实体:Incident
//检索事件实体
事件详细信息=实体。实体();
//包含表示optionset的int值
TimeSpan秒=新的TimeSpan(00,00,10);
//var incident=service.Retrieve(“incident”,detail.IncidentId.Value,new Microsoft.Xrm.Sdk.Query.ColumnSet(true)).ToEntity();
//检索特定实体的状态代码的值
//如果选项设置值在24小时内相同
if(detail.StatusCode==newoptionsetvalue(1)| | detail.StatusCode==newoptionsetvalue(3))
{
如果(秒!=null)
{
ExecuteWorkflowRequest请求=新的ExecuteWorkflowRequest()
{
WorkflowId=新Guid(“DB9ABA7E-D4F9-4EBF-8062-C85EF7B850FB”),
EntityId=detail.Id,
};
ExecuteWorkflowResponse=(ExecuteWorkflowResponse)服务。执行(请求);
//将其更改为pending..statuscode
detail.StatusCode=新选项设置值(425390002);
}
服务更新(详情);
}
}

不建议在此场景中使用插件。您必须使用UI工作流来执行此操作。有一个选项可以等待&稍后执行所需的步骤

大概是这样的:

甚至您也可以从此WF执行所需的WF作为子工作流