Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamics crm 如何从Dynamics 365中的工作流实例ID获取工作流ID?_Dynamics Crm_Microsoft Dynamics_Dynamics Crm 2016_Dynamics Crm 365 - Fatal编程技术网

Dynamics crm 如何从Dynamics 365中的工作流实例ID获取工作流ID?

Dynamics crm 如何从Dynamics 365中的工作流实例ID获取工作流ID?,dynamics-crm,microsoft-dynamics,dynamics-crm-2016,dynamics-crm-365,Dynamics Crm,Microsoft Dynamics,Dynamics Crm 2016,Dynamics Crm 365,这是关于Dynamics CRM 365中Microsoft CRM工作流中的代码活动。我需要在代码活动中获取与工作流相关的注释。为此,我需要在代码活动中使用该工作流的工作流Id。但是,代码活动上下文中只有工作流实例Id,而没有工作流Id。如何从工作流实例Id获取工作流Id?很遗憾,您无法直接获取此信息 解决方法是设置一个输入参数,并在designer中将工作流名称甚至工作流Id作为配置项发送。在codeactivity中读取此输入参数并检索与其关联的注释 这样,即使您有多个工作流调用/执行同一

这是关于Dynamics CRM 365中Microsoft CRM工作流中的代码活动。我需要在代码活动中获取与工作流相关的注释。为此,我需要在代码活动中使用该工作流的工作流Id。但是,代码活动上下文中只有工作流实例Id,而没有工作流Id。如何从工作流实例Id获取工作流Id?

很遗憾,您无法直接获取此信息

解决方法是设置一个输入参数,并在designer中将工作流名称甚至工作流Id作为配置项发送。在codeactivity中读取此输入参数并检索与其关联的注释


这样,即使您有多个工作流调用/执行同一个codeactivity,也可以很好地工作。

您可以使用以下代码使用C#获取工作流id:

IWorkflowContext=executionContext.GetExtension();
IOOrganizationServiceFactory服务工厂=executionContext.GetExtension();
IOOrganizationService=serviceFactory.CreateOrganizationService(context.UserId);
//检索当前工作流实例的processid
实体asyncOperation=service.Retrieve(“asyncOperation”,
context.OperationId,新的Microsoft.Xrm.Sdk.Query.ColumnSet(“workflowactivationid”);
var workflowid=asyncOperation.GetAttributeValue(“workflowactivationid”).Id;

之后,您可以用它来取笔记。

您好,谢谢您的回复。我尝试了此方法,但出现错误“具有此id的异步操作不存在”。我已经尝试过实时和后台工作流模式。谢谢,我已经尝试过了。我正在寻找一种不通过考试的方法parameter@user3085988这可能是唯一的方法,因为WF无法使用安全/非安全配置,也无法从DB检索Id,因为此事务尚未提交。除非您决定在代码中硬编码名称/Id。是的,您从DB中检索Id是正确的。因此,将有关工作流的信息作为参数传递似乎是唯一的方法。
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

//Retrieve processid of current workflow instance
Entity asyncOperation = service.Retrieve("asyncoperation", 
    context.OperationId, new Microsoft.Xrm.Sdk.Query.ColumnSet("workflowactivationid"));

var workflowid = asyncOperation.GetAttributeValue<EntityReference>("workflowactivationid").Id;