From b3ae33c5867a9288ef366e9116c1f6ea4239fbc7 Mon Sep 17 00:00:00 2001 From: MariusVuscanNx <96233009+MariusVuscanNx@users.noreply.github.com> Date: Fri, 12 Apr 2024 17:49:08 +0300 Subject: [PATCH] Bulk BulkDispatchWorkflows fixes (#5221) --- .../Activities/BulkDispatchWorkflows.cs | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/modules/Elsa.Workflows.Runtime/Activities/BulkDispatchWorkflows.cs b/src/modules/Elsa.Workflows.Runtime/Activities/BulkDispatchWorkflows.cs index 9907ba696..485dc5639 100644 --- a/src/modules/Elsa.Workflows.Runtime/Activities/BulkDispatchWorkflows.cs +++ b/src/modules/Elsa.Workflows.Runtime/Activities/BulkDispatchWorkflows.cs @@ -106,6 +106,8 @@ public class BulkDispatchWorkflows : Activity /// [Port] public IActivity? ChildFaulted { get; set; } + + private List _errors = new List(); /// protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) @@ -116,8 +118,16 @@ public class BulkDispatchWorkflows : Activity await foreach (var item in items) { - await ProcessItem(context, item); - dispatchedInstancesCount++; + var dispatchedSuccessful = await ProcessItem(context, item); + if (dispatchedSuccessful) + { + dispatchedInstancesCount++; + } + } + + if (_errors.Count > 1) + { + context.JournalData.Add("Error", _errors); } context.SetProperty(DispatchedInstancesCountKey, dispatchedInstancesCount); @@ -145,19 +155,22 @@ public class BulkDispatchWorkflows : Activity } } - private async Task ProcessItem(ActivityExecutionContext context, object item) + private async Task ProcessItem(ActivityExecutionContext context, object item) { try { await DispatchChildWorkflowAsync(context, item); + return true; } catch (TaskCanceledException) { await context.CompleteActivityWithOutcomesAsync("Canceled"); + return false; } catch (Exception ex) { - context.JournalData.Add("Error", ex.Message); + _errors.Add(ex.Message); + return false; } } @@ -173,18 +186,19 @@ public class BulkDispatchWorkflows : Activity ["ParentInstanceId"] = parentInstanceId }; - var itemAsInputDictionary = item as IDictionary ?? new Dictionary + var itemDictionary = new Dictionary { [defaultInputItemKey] = item }; var evaluatorOptions = new ExpressionEvaluatorOptions { - Arguments = itemAsInputDictionary + Arguments = itemDictionary }; + var inputDictionary = item as IDictionary ?? new Dictionary(); input["ParentInstanceId"] = parentInstanceId; - input.Merge(itemAsInputDictionary); + input.Merge(inputDictionary); var workflowDispatcher = context.GetRequiredService(); var identityGenerator = context.GetRequiredService();