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

How to fetch Workflow ID from Workflow Instance ID in Dynamics 365?

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

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

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

这样,即使您有多个工作流程calling/executing,相同的代码活动也能很好地工作。

您可以使用以下代码通过 C# 获取工作流的 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;

之后你就可以用它来获取笔记了。