diff --git a/src/clients/Elsa.Client/Models/WorkflowDefinition.cs b/src/clients/Elsa.Client/Models/WorkflowDefinition.cs index ca213e221..a4aba7d5e 100644 --- a/src/clients/Elsa.Client/Models/WorkflowDefinition.cs +++ b/src/clients/Elsa.Client/Models/WorkflowDefinition.cs @@ -13,12 +13,12 @@ namespace Elsa.Client.Models Connections = new List(); } - [DataMember(Order = 1)] public int Id { get; set; } - [DataMember(Order = 2)] public string? Name { get; set; } - [DataMember(Order = 3)] public string? DisplayName { get; set; } - [DataMember(Order = 4)] public string? Description { get; set; } - [DataMember(Order = 5)] public string WorkflowDefinitionId { get; set; } = default!; - [DataMember(Order = 6)] public string WorkflowDefinitionVersionId { get; set; } = default!; + [DataMember(Order = 1)] public string Id { get; set; } = default!; + [DataMember(Order = 2)] public string DefinitionVersionId { get; set; } = default!; + [DataMember(Order = 3)] public string TenantId { get; set; } = default!; + [DataMember(Order = 4)] public string? Name { get; set; } + [DataMember(Order = 5)] public string? DisplayName { get; set; } + [DataMember(Order = 6)] public string? Description { get; set; } [DataMember(Order = 7)] public int Version { get; set; } [DataMember(Order = 8)] public Variables? Variables { get; set; } [DataMember(Order = 9)] public WorkflowContextOptions? ContextOptions { get; set; } diff --git a/src/core/Elsa.Core/Extensions/WorkflowDefinitionStoreExtensions.cs b/src/core/Elsa.Core/Extensions/WorkflowDefinitionStoreExtensions.cs index 7a408273c..cdb896314 100644 --- a/src/core/Elsa.Core/Extensions/WorkflowDefinitionStoreExtensions.cs +++ b/src/core/Elsa.Core/Extensions/WorkflowDefinitionStoreExtensions.cs @@ -13,6 +13,6 @@ namespace Elsa string id, VersionOptions versionOptions, CancellationToken cancellationToken = default) => - store.FindAsync(new WorkflowDefinitionIdSpecification(id).And(new VersionOptionsSpecification(versionOptions)), cancellationToken); + store.FindAsync(new WorkflowDefinitionIdSpecification(id, versionOptions), cancellationToken); } } \ No newline at end of file diff --git a/src/core/Elsa.Core/Persistence/Specifications/WorkflowDefinitionIdSpecification.cs b/src/core/Elsa.Core/Persistence/Specifications/WorkflowDefinitionIdSpecification.cs index 4bf8ce68f..25305189b 100644 --- a/src/core/Elsa.Core/Persistence/Specifications/WorkflowDefinitionIdSpecification.cs +++ b/src/core/Elsa.Core/Persistence/Specifications/WorkflowDefinitionIdSpecification.cs @@ -7,7 +7,8 @@ namespace Elsa.Persistence.Specifications public class WorkflowDefinitionIdSpecification : Specification { public string Id { get; set; } - public WorkflowDefinitionIdSpecification(string id) => Id = id; - public override Expression> ToExpression() => x => x.Id == Id; + public VersionOptions? VersionOptions { get; set; } + public WorkflowDefinitionIdSpecification(string id, VersionOptions? versionOptions = default) => (Id, VersionOptions) = (id, versionOptions); + public override Expression> ToExpression() => VersionOptions == null ? x => x.Id == Id : x => x.Id == Id && x.WithVersion(VersionOptions); } } \ No newline at end of file diff --git a/src/dashboards/blazor/ElsaDashboard.Application/ClientApp/package.json b/src/dashboards/blazor/ElsaDashboard.Application/ClientApp/package.json index 73fa0c64e..b70a71c8c 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/ClientApp/package.json +++ b/src/dashboards/blazor/ElsaDashboard.Application/ClientApp/package.json @@ -11,22 +11,23 @@ "start": "npm run serve" }, "dependencies": { - "@tailwindcss/ui": "^0.6.2", - "autoprefixer": "10.0.1", + "@tailwindcss/ui": "^0.7.2", + "@tailwindcss/forms": "^0.2.1", + "autoprefixer": "10.1.0", "onchange": "^7.1.0", - "tailwindcss": "1.8.10" + "tailwindcss": "2.0.2" }, "devDependencies": { "concurrently": "^5.3.0", - "cross-env": "^7.0.2", + "cross-env": "^7.0.3", "cssnano": "^4.1.10", - "htmlnano": "^0.2.7", + "htmlnano": "^0.2.8", "live-server": "^1.2.1", - "postcss": "8.1.0", - "postcss-cli": "8.0.0", - "posthtml": "^0.13.4", - "posthtml-cli": "^0.8.0", + "postcss": "8.2.1", + "postcss-cli": "8.3.1", + "posthtml": "^0.15.1", + "posthtml-cli": "^0.9.1", "posthtml-include": "^1.6.0", - "posthtml-modules": "^0.6.2" + "posthtml-modules": "^0.6.4" } } diff --git a/src/dashboards/blazor/ElsaDashboard.Application/ClientApp/tailwind.config.js b/src/dashboards/blazor/ElsaDashboard.Application/ClientApp/tailwind.config.js index a0ad3b0d5..b926374df 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/ClientApp/tailwind.config.js +++ b/src/dashboards/blazor/ElsaDashboard.Application/ClientApp/tailwind.config.js @@ -15,6 +15,7 @@ module.exports = { plugins: [ require('@tailwindcss/ui')({ layout: 'sidebar', - }) + }), + require('@tailwindcss/forms') ], }; diff --git a/src/dashboards/blazor/ElsaDashboard.Application/Models/TabItem.cs b/src/dashboards/blazor/ElsaDashboard.Application/Models/TabItem.cs new file mode 100644 index 000000000..63b9a0cef --- /dev/null +++ b/src/dashboards/blazor/ElsaDashboard.Application/Models/TabItem.cs @@ -0,0 +1,10 @@ +namespace ElsaDashboard.Application.Models +{ + public record TabItem(string Text, string Name) + { + public TabItem(string text) : this(text, text) + { + } + } + +} \ No newline at end of file diff --git a/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/Designer.razor b/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/Designer.razor index b0b6dc662..d2290e126 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/Designer.razor +++ b/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/Designer.razor @@ -1,10 +1,25 @@ @page "/workflow-definitions/designer" -@page "/workflow-definitions/{workflowDefinitionId}/designer" -
+@page "/workflow-definitions/{WorkflowDefinitionVersionId}/designer" +

- Workflow Definition Editor + @DisplayName

+

+ Workflow Definition +

+
+ +
@@ -14,4 +29,17 @@
- \ No newline at end of file +@if (CurrentTab.Name == "Designer") +{ + +} +else if (CurrentTab.Name == "Dsl") +{ +
+ +
+} +else if (CurrentTab.Name == "Settings") +{ + +} \ No newline at end of file diff --git a/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/Designer.razor.cs b/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/Designer.razor.cs index d4eee8b8e..598c360c3 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/Designer.razor.cs +++ b/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/Designer.razor.cs @@ -12,14 +12,24 @@ namespace ElsaDashboard.Application.Pages.WorkflowDefinitions { partial class Designer { - [Parameter] public string? WorkflowDefinitionId { get; set; } + [Parameter] public string? WorkflowDefinitionVersionId { get; set; } [Inject] private IWorkflowDefinitionService WorkflowDefinitionService { get; set; } = default!; [Inject] private IActivityService ActivityService { get; set; } = default!; [Inject] private NavigationManager NavigationManager { get; set; } = default!; private IDictionary ActivityDescriptors { get; set; } = default!; - private WorkflowDefinition WorkflowDefinition { get; set; } = default!; + + private WorkflowDefinition WorkflowDefinition { get; set; } = new() + { + Name = "Untitled", + DisplayName = "Untitled", + Version = 1 + }; + private WorkflowModel WorkflowModel { get; set; } = WorkflowModel.Blank(); private BackgroundWorker BackgroundWorker { get; } = new(); + private string DisplayName => !string.IsNullOrWhiteSpace(WorkflowDefinition.DisplayName) ? WorkflowDefinition.DisplayName : !string.IsNullOrWhiteSpace(WorkflowDefinition.Name) ? WorkflowDefinition.Name : "Untitled"; + private static TabItem[] Tabs => new[] {new TabItem("Designer"), new TabItem("DSL", "Dsl"), new TabItem("Settings")}; + private TabItem CurrentTab { get; set; } = Tabs.First(); protected override async Task OnInitializedAsync() { @@ -29,9 +39,9 @@ namespace ElsaDashboard.Application.Pages.WorkflowDefinitions protected override async Task OnParametersSetAsync() { - if (WorkflowDefinitionId != null) + if (WorkflowDefinitionVersionId != null) { - WorkflowDefinition = await WorkflowDefinitionService.GetByIdAsync(WorkflowDefinitionId, VersionOptions.Latest); + WorkflowDefinition = await WorkflowDefinitionService.GetByVersionIdAsync(WorkflowDefinitionVersionId); WorkflowModel = CreateWorkflowModel(WorkflowDefinition); } else @@ -45,7 +55,7 @@ namespace ElsaDashboard.Application.Pages.WorkflowDefinitions { var request = new SaveWorkflowDefinitionRequest { - WorkflowDefinitionId = WorkflowDefinition.WorkflowDefinitionId, + WorkflowDefinitionId = WorkflowDefinition.Id, Activities = WorkflowModel.Activities.Select(CreateActivityDefinition).ToList(), Connections = WorkflowModel.Connections.Select(x => new ConnectionDefinition(x.SourceId, x.TargetId, x.Outcome)).ToList(), Name = WorkflowDefinition.Name, @@ -60,11 +70,11 @@ namespace ElsaDashboard.Application.Pages.WorkflowDefinitions DeleteCompletedInstances = WorkflowDefinition.DeleteCompletedInstances }; - var isNew = WorkflowDefinition.WorkflowDefinitionId == null!; - WorkflowDefinition = await WorkflowDefinitionService.SaveAsync(request); + var isNew = WorkflowDefinition.Id == null!; + var savedWorkflowDefinition = await WorkflowDefinitionService.SaveAsync(request); - if (isNew) - NavigationManager.NavigateTo($"workflows/{WorkflowDefinition.WorkflowDefinitionId}/designer"); + if (isNew) + NavigationManager.NavigateTo($"workflow-definitions/{savedWorkflowDefinition.DefinitionVersionId}/designer"); } private ActivityDefinition CreateActivityDefinition(ActivityModel activityModel) @@ -86,10 +96,7 @@ namespace ElsaDashboard.Application.Pages.WorkflowDefinitions }; } - private ConnectionModel CreateConnectionModel(ConnectionDefinition connectionDefinition) - { - return new(connectionDefinition.SourceActivityId, connectionDefinition.TargetActivityId, connectionDefinition.Outcome); - } + private ConnectionModel CreateConnectionModel(ConnectionDefinition connectionDefinition) => new(connectionDefinition.SourceActivityId, connectionDefinition.TargetActivityId, connectionDefinition.Outcome); private ActivityModel CreateActivityModel(ActivityDefinition activityDefinition) { @@ -104,6 +111,11 @@ namespace ElsaDashboard.Application.Pages.WorkflowDefinitions }; } + private void SelectTab(TabItem tab) + { + CurrentTab = tab; + } + private void StartBackgroundWorker() { #pragma warning disable 4014 @@ -116,5 +128,10 @@ namespace ElsaDashboard.Application.Pages.WorkflowDefinitions WorkflowModel = e.WorkflowModel; await BackgroundWorker.ScheduleTask(SaveWorkflowAsync); } + + private async Task OnSettingsChanged() + { + await BackgroundWorker.ScheduleTask(SaveWorkflowAsync); + } } } \ No newline at end of file diff --git a/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/List.razor b/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/List.razor index e20e1082f..09746dbf5 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/List.razor +++ b/src/dashboards/blazor/ElsaDashboard.Application/Pages/WorkflowDefinitions/List.razor @@ -115,7 +115,7 @@ @@ -154,7 +154,7 @@ class="z-10 mx-3 origin-top-right absolute right-7 top-0 w-48 mt-1 rounded-md shadow-lg">
diff --git a/src/dashboards/blazor/ElsaDashboard.Application/Shared/Activity.razor b/src/dashboards/blazor/ElsaDashboard.Application/Shared/Activity.razor index eb1afefd4..a9c1abc72 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/Shared/Activity.razor +++ b/src/dashboards/blazor/ElsaDashboard.Application/Shared/Activity.razor @@ -31,11 +31,11 @@ class="z-10 mx-3 origin-top-left absolute -right-48 top-3 w-48 mt-1 rounded-md shadow-lg"> diff --git a/src/dashboards/blazor/ElsaDashboard.Application/Shared/Activity.razor.cs b/src/dashboards/blazor/ElsaDashboard.Application/Shared/Activity.razor.cs index 52c176cb7..7615e7e73 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/Shared/Activity.razor.cs +++ b/src/dashboards/blazor/ElsaDashboard.Application/Shared/Activity.razor.cs @@ -10,6 +10,8 @@ namespace ElsaDashboard.Application.Shared public const string DefaultIconClass = "h-10 w-10 text-blue-500"; [Parameter] public ActivityModel Model { get; set; } = new(); [Parameter] public EventCallback OnClick { get; set; } + [Parameter] public EventCallback OnEditClick { get; set; } + [Parameter] public EventCallback OnDeleteClick { get; set; } [Parameter] public RenderFragment Body { get; set; } = default!; [Parameter] public RenderFragment Icon { get; set; } = default!; diff --git a/src/dashboards/blazor/ElsaDashboard.Application/Shared/WorkflowDesigner.razor b/src/dashboards/blazor/ElsaDashboard.Application/Shared/WorkflowDesigner.razor index ea0844ea0..1128fd260 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/Shared/WorkflowDesigner.razor +++ b/src/dashboards/blazor/ElsaDashboard.Application/Shared/WorkflowDesigner.razor @@ -9,7 +9,6 @@
-
    diff --git a/src/dashboards/blazor/ElsaDashboard.Application/Shared/WorkflowDesigner.razor.cs b/src/dashboards/blazor/ElsaDashboard.Application/Shared/WorkflowDesigner.razor.cs index b8d18394f..539e32229 100644 --- a/src/dashboards/blazor/ElsaDashboard.Application/Shared/WorkflowDesigner.razor.cs +++ b/src/dashboards/blazor/ElsaDashboard.Application/Shared/WorkflowDesigner.razor.cs @@ -21,7 +21,7 @@ namespace ElsaDashboard.Application.Shared partial class WorkflowDesigner : IAsyncDisposable { private static Func _connectionCreatedAction = default!; - + [Parameter] public WorkflowModel Model { private get; set; } = WorkflowModel.Blank(); [Parameter] public EventCallback WorkflowChanged { get; set; } [Inject] private IJSRuntime JS { get; set; } = default!; @@ -200,7 +200,7 @@ namespace ElsaDashboard.Application.Shared if (existingConnection != null) { model = model with {Connections = model.Connections.Remove(existingConnection)}; - var replacementConnection = existingConnection with { SourceId = activity.ActivityId}; + var replacementConnection = existingConnection with {SourceId = activity.ActivityId}; model.AddConnection(replacementConnection); } else @@ -216,7 +216,7 @@ namespace ElsaDashboard.Application.Shared if (existingConnection != null) { model = model with {Connections = model.Connections.Remove(existingConnection)}; - var replacementConnection = existingConnection with { TargetId = activity.ActivityId}; + var replacementConnection = existingConnection with {TargetId = activity.ActivityId}; model = model.AddConnection(replacementConnection); var connection = new ConnectionModel(activity.ActivityId, existingConnection.TargetId, outcome); @@ -232,7 +232,7 @@ namespace ElsaDashboard.Application.Shared await UpdateModelAsync(model); await FlyoutPanelService.HideAsync(); } - + private RenderFragment RenderActivity(ActivityModel activityModel) { return builder => @@ -240,20 +240,21 @@ namespace ElsaDashboard.Application.Shared var index = 0; builder.OpenComponent(index++); builder.AddAttribute(index++, "Model", activityModel); + builder.AddAttribute(index++, "OnDeleteClick", EventCallbackFactory.Create(this, () => OnActivityDelete(activityModel))); var displayDescriptor = activityModel.DisplayDescriptor; if (displayDescriptor != null) { var context = new ActivityDisplayContext(activityModel.Type, activityModel.Properties); - - if(displayDescriptor.RenderBody != null) + + if (displayDescriptor.RenderBody != null) builder.AddAttribute(index++, "Body", displayDescriptor.RenderBody(context)); - - if(displayDescriptor.RenderIcon != null) + + if (displayDescriptor.RenderIcon != null) builder.AddAttribute(index, "Icon", displayDescriptor.RenderIcon(context)); } - + builder.CloseComponent(); }; } @@ -276,15 +277,9 @@ namespace ElsaDashboard.Application.Shared ButtonDescriptor.Create("Cancel", _ => ShowActivityPickerAsync(sourceActivityId, targetActivityId, outcome)), ButtonDescriptor.Create("OK", _ => AddActivityAsync(activityInfo, sourceActivityId, targetActivityId, outcome), true)); } - - private async ValueTask OnActivityClick(MouseEventArgs e) - { - await FlyoutPanelService.ShowAsync("Timer Properties"); - } - - private async Task OnConnectionCreatedAsync(ConnectionModel connection) - { - await UpdateModelAsync(Model.AddConnection(connection)); - } + + private async Task OnActivityDelete(ActivityModel activityModel) => await UpdateModelAsync(Model.RemoveActivity(activityModel)); + private async ValueTask OnActivityClick(MouseEventArgs e) => await FlyoutPanelService.ShowAsync("Timer Properties"); + private async Task OnConnectionCreatedAsync(ConnectionModel connection) => await UpdateModelAsync(Model.AddConnection(connection)); } } \ No newline at end of file diff --git a/src/persistence/Elsa.Persistence.YesSql/Extensions/WorkflowDefinitionDocumentExtensions.cs b/src/persistence/Elsa.Persistence.YesSql/Extensions/WorkflowDefinitionDocumentExtensions.cs index d1ee8e0f7..7cb2062c9 100644 --- a/src/persistence/Elsa.Persistence.YesSql/Extensions/WorkflowDefinitionDocumentExtensions.cs +++ b/src/persistence/Elsa.Persistence.YesSql/Extensions/WorkflowDefinitionDocumentExtensions.cs @@ -1,4 +1,6 @@ -using Elsa.Models; +using System; +using System.Linq.Expressions; +using Elsa.Models; using Elsa.Persistence.YesSql.Documents; using Elsa.Persistence.YesSql.Indexes; using YesSql; diff --git a/src/persistence/Elsa.Persistence.YesSql/Stores/YesSqlStore.cs b/src/persistence/Elsa.Persistence.YesSql/Stores/YesSqlStore.cs index 76045188c..66f02f888 100644 --- a/src/persistence/Elsa.Persistence.YesSql/Stores/YesSqlStore.cs +++ b/src/persistence/Elsa.Persistence.YesSql/Stores/YesSqlStore.cs @@ -115,5 +115,6 @@ namespace Elsa.Persistence.YesSql.Stores protected IQuery Query() => Session.Query(CollectionName); protected IQuery Query(Expression> predicate) where TIndex : class, IIndex => Session.Query(predicate, CollectionName); + protected IQuery Query() where TIndex : class, IIndex => Session.Query(CollectionName); } } \ No newline at end of file diff --git a/src/persistence/Elsa.Persistence.YesSql/Stores/YesSqlWorkflowDefinitionStore.cs b/src/persistence/Elsa.Persistence.YesSql/Stores/YesSqlWorkflowDefinitionStore.cs index 34363c448..9239bdda1 100644 --- a/src/persistence/Elsa.Persistence.YesSql/Stores/YesSqlWorkflowDefinitionStore.cs +++ b/src/persistence/Elsa.Persistence.YesSql/Stores/YesSqlWorkflowDefinitionStore.cs @@ -5,6 +5,7 @@ using Elsa.Data; using Elsa.Models; using Elsa.Persistence.Specifications; using Elsa.Persistence.YesSql.Documents; +using Elsa.Persistence.YesSql.Extensions; using Elsa.Persistence.YesSql.Indexes; using YesSql; using IIdGenerator = Elsa.Services.IIdGenerator; @@ -21,10 +22,13 @@ namespace Elsa.Persistence.YesSql.Stores protected override IQuery MapSpecification(ISpecification specification) { - if (specification is EntityIdSpecification entityIdSpecification) - return Query(x => x.DefinitionId == entityIdSpecification.Id); - - return AutoMapSpecification(specification); + return specification switch + { + EntityIdSpecification entityIdSpecification => Query(x => x.DefinitionId == entityIdSpecification.Id), + VersionOptionsSpecification versionOptionsSpecification => Query().WithVersion(versionOptionsSpecification.VersionOptions), + WorkflowDefinitionIdSpecification definitionIdSpecification => definitionIdSpecification.VersionOptions == null ? Query(x => x.DefinitionId == definitionIdSpecification.Id) : Query(x => x.DefinitionId == definitionIdSpecification.Id).WithVersion(definitionIdSpecification.VersionOptions), + _ => AutoMapSpecification(specification) + }; } protected override IQuery OrderBy(IQuery query, IOrderBy orderBy, ISpecification specification) diff --git a/src/server/Elsa.Server.Api/Endpoints/WorkflowDefinitions/Save.cs b/src/server/Elsa.Server.Api/Endpoints/WorkflowDefinitions/Save.cs index 1d5711544..09be2af48 100644 --- a/src/server/Elsa.Server.Api/Endpoints/WorkflowDefinitions/Save.cs +++ b/src/server/Elsa.Server.Api/Endpoints/WorkflowDefinitions/Save.cs @@ -63,7 +63,7 @@ namespace Elsa.Server.Api.Endpoints.WorkflowDefinitions else workflowDefinition = await _workflowPublisher.SaveDraftAsync(workflowDefinition, cancellationToken); - return CreatedAtAction("Handle", "GetByVersionId", new {workflowDefinitionVersionId = workflowDefinition.DefinitionVersionId, apiVersion = apiVersion.ToString()}, workflowDefinition); + return CreatedAtAction("Handle", "GetByVersionId", new {versionId = workflowDefinition.DefinitionVersionId, apiVersion = apiVersion.ToString()}, workflowDefinition); } } } \ No newline at end of file diff --git a/src/server/Elsa.Server.Api/Models/WorkflowInstance.cs b/src/server/Elsa.Server.Api/Models/WorkflowInstance.cs deleted file mode 100644 index 3318174e2..000000000 --- a/src/server/Elsa.Server.Api/Models/WorkflowInstance.cs +++ /dev/null @@ -1,48 +0,0 @@ -// using System.Collections.Generic; -// using System.Runtime.Serialization; -// using Elsa.Comparers; -// using Elsa.Models; -// using Newtonsoft.Json.Linq; -// using NodaTime; -// -// namespace Elsa.Server.Api.Models -// { -// [DataContract] -// public class WorkflowInstanceModel -// { -// private HashSet _blockingActivities = new(BlockingActivityEqualityComparer.Instance); -// -// public WorkflowInstanceModel() -// { -// Variables = new Variables(); -// Activities = new List(); -// ScheduledActivities = new Stack(); -// PostScheduledActivities = new Stack(); -// } -// -// [DataMember(Order = 1)] public string WorkflowInstanceId { get; set; } = default!; -// [DataMember(Order = 2)] public string WorkflowDefinitionId { get; set; } = default!; -// [DataMember(Order = 3)] public int Version { get; set; } -// [DataMember(Order = 4)] public WorkflowStatus Status { get; set; } -// [DataMember(Order = 5)] public string? CorrelationId { get; set; } -// [DataMember(Order = 6)] public string? ContextId { get; set; } -// [DataMember(Order = 7)] public string? Name { get; set; } -// [DataMember(Order = 8)] public Instant CreatedAt { get; set; } -// [DataMember(Order = 9)] public Instant? LastExecutedAt { get; set; } -// [DataMember(Order = 10)] public Instant? LastBurstAt { get; set; } -// [DataMember(Order = 11)] public Instant? CompletedAt { get; set; } -// [DataMember(Order = 12)] public Variables Variables { get; set; } -// [DataMember(Order = 13)] public JObject? Output { get; set; } -// [DataMember(Order = 14)] public ICollection Activities { get; set; } -// -// [DataMember(Order = 15)] public HashSet BlockingActivities -// { -// get => _blockingActivities; -// set => _blockingActivities = new HashSet(value, BlockingActivityEqualityComparer.Instance); -// } -// -// [DataMember(Order = 16)] public WorkflowFault? Fault { get; set; } -// [DataMember(Order = 17)] public Stack ScheduledActivities { get; set; } -// [DataMember(Order = 18)] public Stack PostScheduledActivities { get; set; } -// } -// } \ No newline at end of file