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