【问题标题】:How to fetch Workflow ID from Workflow Instance ID in Dynamics 365?如何从 Dynamics 365 中的工作流实例 ID 获取工作流 ID?
【发布时间】:2018-04-02 09:30:40
【问题描述】:

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

【问题讨论】:

    标签: dynamics-crm microsoft-dynamics dynamics-crm-2016 dynamics-crm-365


    【解决方案1】:

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

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

    这样,即使您有多个工作流调用/执行相同的代码活动,也会很好地工作。

    【讨论】:

    • 谢谢,我已经试过了。我正在寻找一种不传递参数的方法
    • @user3085988 这可能是唯一的方法,因为安全/非安全配置不适用于 WF,而且由于此事务尚未提交,因此无法从数据库中检索 Id。除非您决定在代码中硬编码名称/ID..
    • 是的,从数据库中检索 ID 是正确的。因此,将有关工作流的信息作为参数传递似乎是唯一的方法。
    【解决方案2】:

    您可以使用以下代码使用 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;
    

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

    【讨论】:

    • 您好,感谢您的回复。我尝试了这种方法,但出现错误“不存在具有此 ID 的异步操作”。我已经尝试过实时和后台工作流模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 2019-04-22
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多