我有一个elsa工作流parent,它调用一些child工作流。每个子工作流都有一些自定义活动(基于SendHttpRequest elsa活动)。这些自定义活动需要调用外部api并提供workflowInstanceId of parent工作流。
我试图将workflowInstanceId of parent作为子工作流的ContextId传递--因为在子工作流自定义活动中被覆盖了(这当然是有意义的)。
如何从运行在子工作流上的代码(例如来自子工作流自定义活动的workflowInstanceId )获得(服务器端) parent工作流?
发布于 2022-04-14 20:58:59
虽然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)生成。
https://stackoverflow.com/questions/71782160
复制相似问题