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



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

我试图将parentworkflowInstanceId作为子工作流的ContextId传递,但由于在子工作流自定义活动内部被覆盖,因此不起作用(当然这是有道理的(。

如何从在子工作流上运行的一段代码中获取(服务器端(parent工作流的workflowInstanceId(比方说从子工作流自定义活动的OnExecuteAsync(ActivityExecutionContext context)(?

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

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

({ parentWorkflowInstanceId: workflowInstanceId })

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

input.parentWorkflowInstanceId

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

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

{
"$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"
}

这是你可以导入的孩子:

{
"$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

这将导致类似的响应:

Parent ID: 0178617bbeca47088e74330c0905237c

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

最新更新