首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# - elsa工作流-子工作流-如何获取父工作流的workflowInstanceId

c# - elsa工作流-子工作流-如何获取父工作流的workflowInstanceId
EN

Stack Overflow用户
提问于 2022-04-07 12:25:22
回答 1查看 510关注 0票数 0

我有一个elsa工作流parent,它调用一些child工作流。每个子工作流都有一些自定义活动(基于SendHttpRequest elsa活动)。这些自定义活动需要调用外部api并提供workflowInstanceId of parent工作流。

我试图将workflowInstanceId of parent作为子工作流的ContextId传递--因为在子工作流自定义活动中被覆盖了(这当然是有意义的)。

如何从运行在子工作流上的代码(例如来自子工作流自定义活动的workflowInstanceId )获得(服务器端) parent工作流?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-14 20:58:59

虽然Elsa 2(在编写本报告时为2.6)没有父-子工作流的真正概念(即其他工作流调用的工作流没有对其父工作流的任何引用),但您可以使用RunWorkflow活动向子工作流提供任意的输入。包括它自己的工作流实例ID。

例如,在RunWorkflow活动中使用以下JS表达式将工作流实例发送到子工作流:

代码语言:javascript
复制
({ parentWorkflowInstanceId: workflowInstanceId })

然后,从您的子工作流中,您的第一个活动应该是捕获这个值的活动,例如使用一个SetVariable活动:

代码语言:javascript
复制
input.parentWorkflowInstanceId

现在,您已经将父工作流实例ID存储在工作流变量中,您可以从子工作流中的任何位置访问它。

下面是一个可以通过设计器导入的父工作流示例:

代码语言:javascript
复制
{
  "$id": "1",
  "definitionId": "f3da997090fe4752b4f7abf799f372a8",
  "versionId": "8d6c6e2b441a4d22952a7b19ebf9ceca",
  "name": "Parent",
  "version": 2,
  "variables": {
    "$id": "2",
    "data": {}
  },
  "customAttributes": {
    "$id": "3",
    "data": {}
  },
  "isSingleton": false,
  "persistenceBehavior": "WorkflowBurst",
  "deleteCompletedInstances": false,
  "isPublished": true,
  "isLatest": true,
  "activities": [
    {
      "$id": "4",
      "activityId": "2952daee-646e-431f-b02b-006557507755",
      "type": "RunWorkflow",
      "displayName": "Run Workflow",
      "persistWorkflow": false,
      "loadWorkflowContext": false,
      "saveWorkflowContext": false,
      "properties": [
        {
          "$id": "5",
          "name": "WorkflowDefinitionId",
          "syntax": "Liquid",
          "expressions": {
            "$id": "6",
            "Liquid": "{{ \"Child\" | workflow_definition_id: \"name\" }}"
          }
        },
        {
          "$id": "7",
          "name": "Input",
          "syntax": "JavaScript",
          "expressions": {
            "$id": "8",
            "JavaScript": "({ parentWorkflowInstanceId: workflowInstanceId})"
          }
        },
        {
          "$id": "9",
          "name": "PossibleOutcomes",
          "expressions": {
            "$id": "10"
          }
        },
        {
          "$id": "11",
          "name": "Mode",
          "expressions": {
            "$id": "12"
          }
        },
        {
          "$id": "13",
          "name": "TenantId",
          "expressions": {
            "$id": "14"
          }
        },
        {
          "$id": "15",
          "name": "CorrelationId",
          "expressions": {
            "$id": "16"
          }
        },
        {
          "$id": "17",
          "name": "ContextId",
          "expressions": {
            "$id": "18"
          }
        },
        {
          "$id": "19",
          "name": "CustomAttributes",
          "expressions": {
            "$id": "20"
          }
        }
      ],
      "propertyStorageProviders": {}
    },
    {
      "$id": "21",
      "activityId": "2a6d90ee-5e7a-4d68-8629-386abdaf70ad",
      "type": "HttpEndpoint",
      "displayName": "HTTP Endpoint",
      "persistWorkflow": false,
      "loadWorkflowContext": false,
      "saveWorkflowContext": false,
      "properties": [
        {
          "$id": "22",
          "name": "Path",
          "expressions": {
            "$id": "23",
            "Literal": "/parent"
          }
        },
        {
          "$id": "24",
          "name": "Methods",
          "expressions": {
            "$id": "25",
            "Json": "[\"GET\"]"
          }
        },
        {
          "$id": "26",
          "name": "ReadContent",
          "expressions": {
            "$id": "27"
          }
        },
        {
          "$id": "28",
          "name": "TargetType",
          "expressions": {
            "$id": "29"
          }
        },
        {
          "$id": "30",
          "name": "Schema",
          "syntax": "Literal",
          "expressions": {
            "$id": "31",
            "Literal": ""
          }
        },
        {
          "$id": "32",
          "name": "Authorize",
          "expressions": {
            "$id": "33"
          }
        },
        {
          "$id": "34",
          "name": "Policy",
          "expressions": {
            "$id": "35"
          }
        }
      ],
      "propertyStorageProviders": {}
    }
  ],
  "connections": [
    {
      "$id": "36",
      "sourceActivityId": "2a6d90ee-5e7a-4d68-8629-386abdaf70ad",
      "targetActivityId": "2952daee-646e-431f-b02b-006557507755",
      "outcome": "Done"
    }
  ],
  "id": "8d6c6e2b441a4d22952a7b19ebf9ceca"
}

这是你可以进口的孩子:

代码语言:javascript
复制
{
  "$id": "1",
  "definitionId": "81efcdb2f9aa473a84931814f5ee1c65",
  "versionId": "cc21182603564d68876efd9079382c27",
  "name": "Child",
  "version": 1,
  "variables": {
    "$id": "2",
    "data": {}
  },
  "customAttributes": {
    "$id": "3",
    "data": {}
  },
  "isSingleton": false,
  "persistenceBehavior": "WorkflowBurst",
  "deleteCompletedInstances": false,
  "isPublished": true,
  "isLatest": true,
  "activities": [
    {
      "$id": "4",
      "activityId": "83c6931f-f481-47c0-add8-3b1ea7d864a2",
      "type": "SetVariable",
      "displayName": "Set ParentWorkflowInstanceId Variable",
      "persistWorkflow": false,
      "loadWorkflowContext": false,
      "saveWorkflowContext": false,
      "properties": [
        {
          "$id": "5",
          "name": "VariableName",
          "expressions": {
            "$id": "6",
            "Literal": "ParentWorkflowInstanceId"
          }
        },
        {
          "$id": "7",
          "name": "Value",
          "syntax": "JavaScript",
          "expressions": {
            "$id": "8",
            "JavaScript": "input.parentWorkflowInstanceId"
          }
        }
      ],
      "propertyStorageProviders": {}
    },
    {
      "$id": "9",
      "activityId": "80e7eb8f-3fca-42a7-be3d-16827bd6ba38",
      "type": "WriteHttpResponse",
      "displayName": "HTTP Response",
      "persistWorkflow": false,
      "loadWorkflowContext": false,
      "saveWorkflowContext": false,
      "properties": [
        {
          "$id": "10",
          "name": "Content",
          "syntax": "Liquid",
          "expressions": {
            "$id": "11",
            "Liquid": "Parent ID: {{ Variables.ParentWorkflowInstanceId }}"
          }
        },
        {
          "$id": "12",
          "name": "ContentType",
          "expressions": {
            "$id": "13"
          }
        },
        {
          "$id": "14",
          "name": "StatusCode",
          "expressions": {
            "$id": "15"
          }
        },
        {
          "$id": "16",
          "name": "CharSet",
          "expressions": {
            "$id": "17"
          }
        },
        {
          "$id": "18",
          "name": "ResponseHeaders",
          "expressions": {
            "$id": "19"
          }
        }
      ],
      "propertyStorageProviders": {}
    }
  ],
  "connections": [
    {
      "$id": "20",
      "sourceActivityId": "83c6931f-f481-47c0-add8-3b1ea7d864a2",
      "targetActivityId": "80e7eb8f-3fca-42a7-be3d-16827bd6ba38",
      "outcome": "Done"
    }
  ],
  "id": "cc21182603564d68876efd9079382c27"
}

导入后,确保两个工作流都已发布。然后,您可以通过其HTTP端点调用父工作流,例如:https://localhost:11000/parent

这将导致类似这样的反应:

代码语言:javascript
复制
Parent ID: 0178617bbeca47088e74330c0905237c

此响应由子工作流(成功接收父工作流实例ID)生成。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71782160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档