diff --git a/src/modules/Elsa.Workflows.Core/Services/IdentityGraphService.cs b/src/modules/Elsa.Workflows.Core/Services/IdentityGraphService.cs index 456817ccb8..8deaa2ea01 100644 --- a/src/modules/Elsa.Workflows.Core/Services/IdentityGraphService.cs +++ b/src/modules/Elsa.Workflows.Core/Services/IdentityGraphService.cs @@ -2,6 +2,7 @@ using Elsa.Workflows.Activities; using Elsa.Workflows.Contracts; using Elsa.Workflows.Models; +using Humanizer; namespace Elsa.Workflows.Services; @@ -56,32 +57,30 @@ public void AssignIdentities(ICollection flattenedList) public void AssignInputOutputs(IActivity activity) { var activityDescriptor = _activityRegistry.Find(activity.Type, activity.Version) ?? throw new Exception("Activity descriptor not found"); - var inputs = activityDescriptor.GetWrappedInputProperties(activity).Values.Cast().ToList(); - var seed = 0; + var inputDictionary = activityDescriptor.GetWrappedInputProperties(activity); - foreach (var input in inputs) + foreach (var (inputName, input) in inputDictionary) { var blockReference = input?.MemoryBlockReference(); - if (blockReference != null!) - if (string.IsNullOrEmpty(blockReference.Id)) - blockReference.Id = $"{activity.Id}:input-{seed}"; - - seed++; + if (blockReference == null!) + continue; + + if (string.IsNullOrEmpty(blockReference.Id)) + blockReference.Id = $"{activity.Id}:input-{inputName.Humanize().Kebaberize()}"; } - - seed = 0; + var outputs = activity.GetOutputs(); foreach (var output in outputs) { var blockReference = output.Value.MemoryBlockReference(); - if (blockReference != null!) - if (string.IsNullOrEmpty(blockReference.Id)) - blockReference.Id = $"{activity.Id}:output-{seed}"; - - seed++; + if (blockReference == null!) + continue; + + if (string.IsNullOrEmpty(blockReference.Id)) + blockReference.Id = $"{activity.Id}:output-{output.Name.Humanize().Kebaberize()}"; } } diff --git a/src/modules/Elsa.Workflows.Management/Serialization/Converters/InputJsonConverter.cs b/src/modules/Elsa.Workflows.Management/Serialization/Converters/InputJsonConverter.cs index 0717ccd0fd..60fbea6b4c 100644 --- a/src/modules/Elsa.Workflows.Management/Serialization/Converters/InputJsonConverter.cs +++ b/src/modules/Elsa.Workflows.Management/Serialization/Converters/InputJsonConverter.cs @@ -39,24 +39,12 @@ public override Input Read(ref Utf8JsonReader reader, Type typeToConvert, Jso var expressionTypeNameElement = expressionElement.ValueKind != JsonValueKind.Undefined ? expressionElement.TryGetProperty("type", out var expressionTypeNameElementValue) ? expressionTypeNameElementValue : default : default; var expressionTypeName = expressionTypeNameElement.ValueKind != JsonValueKind.Undefined ? expressionTypeNameElement.GetString() ?? "Literal" : default; var expressionDescriptor = expressionTypeName != null ? _expressionDescriptorRegistry.Find(expressionTypeName) : default; - - doc.RootElement.TryGetProperty("memoryReference", out var memoryReferenceElement); - - var memoryReferenceId = memoryReferenceElement.ValueKind is JsonValueKind.Undefined or JsonValueKind.Null - ? default - : memoryReferenceElement.TryGetProperty("id", out var memoryReferenceIdElement) - ? memoryReferenceIdElement.GetString() - : default; - var expression = expressionElement.ValueKind == JsonValueKind.Object ? expressionElement.Deserialize(options) : new Expression(expressionTypeName!, null); var memoryBlockReference = expressionDescriptor?.MemoryBlockReferenceFactory(); if (memoryBlockReference == null) return default!; - if (memoryBlockReference.Id == null!) - memoryBlockReference.Id = memoryReferenceId!; - return (Input)Activator.CreateInstance(typeof(Input), expression, memoryBlockReference)!; } @@ -75,17 +63,12 @@ public override void Write(Utf8JsonWriter writer, Input value, JsonSerializer throw new JsonException($"Could not find an expression descriptor for expression type '{expressionType}'."); var targetType = value.Type; - var memoryReferenceId = value.MemoryBlockReference().Id; var expressionValue = expressionDescriptor.IsSerializable ? expression : null; var model = new { TypeName = targetType, - Expression = expressionValue!, - MemoryReference = new - { - Id = memoryReferenceId - } + Expression = expressionValue! }; JsonSerializer.Serialize(writer, model, options);