diff --git a/src/WorkflowCore.DSL/Services/DefinitionLoader.cs b/src/WorkflowCore.DSL/Services/DefinitionLoader.cs index ef7fadc9a..0d8fe1af4 100644 --- a/src/WorkflowCore.DSL/Services/DefinitionLoader.cs +++ b/src/WorkflowCore.DSL/Services/DefinitionLoader.cs @@ -398,12 +398,30 @@ void acn(IStepBody pStep, object pData, IStepExecutionContext pContext) } } - foreach (var child in subobj.Children()) - stack.Push(child); + foreach (var child in subobj.Children()) + { + var childObject = destObj.SelectToken(child.Path); + + if (childObject is JObject) + { + stack.Push(childObject as JObject); + } + else if (childObject is JArray) + { + foreach (var item in childObject as JArray) + { + var elem = destObj.SelectToken(item.Path); + if (elem is JObject) + { + stack.Push(elem as JObject); + } + } + } + } } stepProperty.SetValue(pStep, destObj); - } + } return acn; } diff --git a/test/WorkflowCore.TestAssets/Steps/DynamicDataStep.cs b/test/WorkflowCore.TestAssets/Steps/DynamicDataStep.cs new file mode 100644 index 000000000..db58b9c54 --- /dev/null +++ b/test/WorkflowCore.TestAssets/Steps/DynamicDataStep.cs @@ -0,0 +1,16 @@ +using Newtonsoft.Json.Linq; +using WorkflowCore.Interface; +using WorkflowCore.Models; + +namespace WorkflowCore.TestAssets.Steps +{ + public class DynamicDataStep : StepBody + { + public JObject DynamicData { get; set; } + + public override ExecutionResult Run(IStepExecutionContext context) + { + return ExecutionResult.Next(); + } + } +} diff --git a/test/WorkflowCore.TestAssets/stored-dynamic-definition.json b/test/WorkflowCore.TestAssets/stored-dynamic-definition.json index 8c6a10dbe..93c8a3e34 100644 --- a/test/WorkflowCore.TestAssets/stored-dynamic-definition.json +++ b/test/WorkflowCore.TestAssets/stored-dynamic-definition.json @@ -83,8 +83,26 @@ { "Id": "Step4", "StepType": "WorkflowCore.TestAssets.Steps.Counter, WorkflowCore.TestAssets", + "NextStepId": "Step5", "Inputs": { "Value": "data[\"Counter6\"]" }, "Outputs": { "Counter6": "step.Value" } + }, + { + "Id": "Step5", + "StepType": "WorkflowCore.TestAssets.Steps.DynamicDataStep, WorkflowCore.TestAssets", + "Inputs": { + "DynamicData": { + "ComplexObject": { + "@Integer": "data[\"Counter1\"]", + "Array": [ + { + "@Computed": "data[\"Counter6\"]" + }, + "string" + ] + } + } + } } ] } \ No newline at end of file