diff --git a/Elsa.sln b/Elsa.sln index 127edac5e..847865b0b 100644 --- a/Elsa.sln +++ b/Elsa.sln @@ -340,10 +340,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.WorkflowSettings.Persi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.WorkflowSettings.Persistence.EntityFramework.PostgreSql", "src\modules\workflowsettings\Elsa.WorkflowSettings.Persistence.EntityFramework.PostgreSql\Elsa.WorkflowSettings.Persistence.EntityFramework.PostgreSql.csproj", "{F006F3CC-22E9-4FDD-A8D4-2E8CBDFDA54A}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Samples.AspNetCore.SubPath", "src\samples\dashboard\aspnetcore\ElsaDashboard.Samples.AspNetCore.SubPath\ElsaDashboard.Samples.AspNetCore.SubPath.csproj", "{BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.MassTransitRabbitMq", "src\samples\aspnet\Elsa.Samples.MassTransitRabbitMq\Elsa.Samples.MassTransitRabbitMq.csproj", "{6BDC89F4-2E0A-4534-9BE4-10E771D06C93}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Webhooks.Api", "src\activities\webhooks\Elsa.Webhooks.Api\Elsa.Webhooks.Api.csproj", "{9D4B7BD1-AC36-4C94-9770-C42E4030E699}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.WorkflowSettings.Api", "src\modules\workflowsettings\Elsa.WorkflowSettings.Api\Elsa.WorkflowSettings.Api.csproj", "{7595784C-97DA-4C75-BCBC-D99C30E63973}" @@ -362,8 +358,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ElsaDashboard.Samples.Blazo EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.HttpEndpointSecurity", "src\samples\aspnet\Elsa.Samples.HttpEndpointSecurity\Elsa.Samples.HttpEndpointSecurity.csproj", "{82B115DA-E3D0-49D7-AD08-DE9387656756}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.WatchDirectoryWorker", "src\samples\worker\Elsa.Samples.WatchDirectoryWorker\Elsa.Samples.WatchDirectoryWorker.csproj", "{8EC3CF51-EBC1-4B45-881E-4B1B8190D579}" -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Elsa.Samples.InfiniteLoopDetection", "src\samples\aspnet\Elsa.Samples.InfiniteLoopDetection\Elsa.Samples.InfiniteLoopDetection.csproj", "{A2572DBF-AF11-4A02-AF99-B343871F2D85}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.WatchDirectoryWorker", "src\samples\worker\Elsa.Samples.WatchDirectoryWorker\Elsa.Samples.WatchDirectoryWorker.csproj", "{8EC3CF51-EBC1-4B45-881E-4B1B8190D579}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Elsa.Samples.InfiniteLoopDetection", "src\samples\aspnet\Elsa.Samples.InfiniteLoopDetection\Elsa.Samples.InfiniteLoopDetection.csproj", "{A2572DBF-AF11-4A02-AF99-B343871F2D85}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -775,6 +772,14 @@ Global {6E191628-927B-42FB-8805-D2977D8FC4E3}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E191628-927B-42FB-8805-D2977D8FC4E3}.Release|Any CPU.ActiveCfg = Release|Any CPU {6E191628-927B-42FB-8805-D2977D8FC4E3}.Release|Any CPU.Build.0 = Release|Any CPU + {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Release|Any CPU.Build.0 = Release|Any CPU + {6BDC89F4-2E0A-4534-9BE4-10E771D06C93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6BDC89F4-2E0A-4534-9BE4-10E771D06C93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6BDC89F4-2E0A-4534-9BE4-10E771D06C93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BDC89F4-2E0A-4534-9BE4-10E771D06C93}.Release|Any CPU.Build.0 = Release|Any CPU {AB926BCA-B73E-463D-8549-84D3D124F089}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AB926BCA-B73E-463D-8549-84D3D124F089}.Debug|Any CPU.Build.0 = Debug|Any CPU {AB926BCA-B73E-463D-8549-84D3D124F089}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -807,14 +812,6 @@ Global {F006F3CC-22E9-4FDD-A8D4-2E8CBDFDA54A}.Debug|Any CPU.Build.0 = Debug|Any CPU {F006F3CC-22E9-4FDD-A8D4-2E8CBDFDA54A}.Release|Any CPU.ActiveCfg = Release|Any CPU {F006F3CC-22E9-4FDD-A8D4-2E8CBDFDA54A}.Release|Any CPU.Build.0 = Release|Any CPU - {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388}.Release|Any CPU.Build.0 = Release|Any CPU - {6BDC89F4-2E0A-4534-9BE4-10E771D06C93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BDC89F4-2E0A-4534-9BE4-10E771D06C93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6BDC89F4-2E0A-4534-9BE4-10E771D06C93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BDC89F4-2E0A-4534-9BE4-10E771D06C93}.Release|Any CPU.Build.0 = Release|Any CPU {9D4B7BD1-AC36-4C94-9770-C42E4030E699}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9D4B7BD1-AC36-4C94-9770-C42E4030E699}.Debug|Any CPU.Build.0 = Debug|Any CPU {9D4B7BD1-AC36-4C94-9770-C42E4030E699}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -997,6 +994,8 @@ Global {4D4022DD-244B-47EE-95FA-7071EC687B24} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} {39DE1EE2-DF4F-44EB-9F5A-551BEADD6673} = {4673732F-2853-47BD-91B8-C95C229D2C89} {6E191628-927B-42FB-8805-D2977D8FC4E3} = {22E75696-6FE9-436A-9097-EE21C603F818} + {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388} = {39DE1EE2-DF4F-44EB-9F5A-551BEADD6673} + {6BDC89F4-2E0A-4534-9BE4-10E771D06C93} = {22E75696-6FE9-436A-9097-EE21C603F818} {69BB424A-AAA3-415C-9651-9F4349CA3AC5} = {DA71CDAA-8DD3-4D5F-9FBD-8E4B37A2D925} {513B0FAD-F92F-4C7B-B756-D735F8C3C5E1} = {69BB424A-AAA3-415C-9651-9F4349CA3AC5} {AB926BCA-B73E-463D-8549-84D3D124F089} = {513B0FAD-F92F-4C7B-B756-D735F8C3C5E1} @@ -1007,8 +1006,6 @@ Global {770456A5-547D-43AE-AB00-CF17BA799AF7} = {513B0FAD-F92F-4C7B-B756-D735F8C3C5E1} {F51C54C3-7C68-41E9-BC05-798589740F39} = {513B0FAD-F92F-4C7B-B756-D735F8C3C5E1} {F006F3CC-22E9-4FDD-A8D4-2E8CBDFDA54A} = {513B0FAD-F92F-4C7B-B756-D735F8C3C5E1} - {BB715C0C-BE88-4F7F-A43F-1F8DFC9A1388} = {39DE1EE2-DF4F-44EB-9F5A-551BEADD6673} - {6BDC89F4-2E0A-4534-9BE4-10E771D06C93} = {22E75696-6FE9-436A-9097-EE21C603F818} {9D4B7BD1-AC36-4C94-9770-C42E4030E699} = {90EC2D29-DE36-40AF-BDA7-70FFD538B8CA} {7595784C-97DA-4C75-BCBC-D99C30E63973} = {513B0FAD-F92F-4C7B-B756-D735F8C3C5E1} {6242E81F-688E-4098-948A-F0C59593328A} = {B43B546E-23F3-46E8-ACB7-D04F05CDA180} diff --git a/src/core/Elsa.Abstractions/Events/WorkflowDefinitionUpdated.cs b/src/core/Elsa.Abstractions/Events/WorkflowDefinitionUpdated.cs new file mode 100644 index 000000000..9874133bb --- /dev/null +++ b/src/core/Elsa.Abstractions/Events/WorkflowDefinitionUpdated.cs @@ -0,0 +1,11 @@ +using Elsa.Models; + +namespace Elsa.Events +{ + public class WorkflowDefinitionUpdated : WorkflowDefinitionNotification + { + public WorkflowDefinitionUpdated(WorkflowDefinition workflowDefinition) : base(workflowDefinition) + { + } + } +} \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Services/Workflows/IWorkflowPublisher.cs b/src/core/Elsa.Abstractions/Services/Workflows/IWorkflowPublisher.cs index 2ea2a4a20..158e419f5 100644 --- a/src/core/Elsa.Abstractions/Services/Workflows/IWorkflowPublisher.cs +++ b/src/core/Elsa.Abstractions/Services/Workflows/IWorkflowPublisher.cs @@ -12,6 +12,7 @@ namespace Elsa.Services Task RetractAsync(string workflowDefinitionId, CancellationToken cancellationToken = default); Task RetractAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default); Task GetDraftAsync(string workflowDefinitionId, CancellationToken cancellationToken= default); + Task GetAsync(string workflowDefinitionId, int version, CancellationToken cancellationToken = default); Task SaveDraftAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default); Task DeleteAsync(string workflowDefinitionId, CancellationToken cancellationToken = default); Task DeleteAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default); diff --git a/src/core/Elsa.Core/Services/Workflows/WorkflowLaunchpad.cs b/src/core/Elsa.Core/Services/Workflows/WorkflowLaunchpad.cs index e9fcb86bf..d623a6aa1 100644 --- a/src/core/Elsa.Core/Services/Workflows/WorkflowLaunchpad.cs +++ b/src/core/Elsa.Core/Services/Workflows/WorkflowLaunchpad.cs @@ -150,7 +150,8 @@ namespace Elsa.Services.Workflows // Acquire a lock on correlation ID to prevent duplicate workflow instances from being created. await using var correlationLockHandle = await AcquireLockAsync(correlationId, cancellationToken); - return await CollectStartableWorkflowInternalAsync(workflowBlueprint, activityId, correlationId, contextId, tenantId, cancellationToken); + var startableWorkflowDefinition = await CollectStartableWorkflowInternalAsync(workflowBlueprint, activityId, correlationId, contextId, tenantId, cancellationToken); + return startableWorkflowDefinition != null ? await InstantiateStartableWorkflow(startableWorkflowDefinition, cancellationToken) : default; } public async Task FindAndExecuteStartableWorkflowAsync( diff --git a/src/core/Elsa.Core/Services/Workflows/WorkflowPublisher.cs b/src/core/Elsa.Core/Services/Workflows/WorkflowPublisher.cs index abf78dd45..d83c997b7 100644 --- a/src/core/Elsa.Core/Services/Workflows/WorkflowPublisher.cs +++ b/src/core/Elsa.Core/Services/Workflows/WorkflowPublisher.cs @@ -135,6 +135,16 @@ namespace Elsa.Services.Workflows return draft; } + public async Task GetAsync(string workflowDefinitionId, int version, CancellationToken cancellationToken = default) + { + var definition = await _workflowDefinitionStore.FindByDefinitionIdAsync( + workflowDefinitionId, + VersionOptions.SpecificVersion(version), + cancellationToken); + + return definition; + } + public async Task SaveDraftAsync(WorkflowDefinition workflowDefinition, CancellationToken cancellationToken = default) { var draft = workflowDefinition; diff --git a/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-properties-panel/elsa-workflow-properties-panel.tsx b/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-properties-panel/elsa-workflow-properties-panel.tsx index af9445c53..dd43055be 100644 --- a/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-properties-panel/elsa-workflow-properties-panel.tsx +++ b/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-properties-panel/elsa-workflow-properties-panel.tsx @@ -1,13 +1,13 @@ -import {Component, Event, EventEmitter, h, Host, Method, Prop, State, Watch} from '@stencil/core'; +import {Component, Prop, Event, EventEmitter, h, Method, State, Watch, Host} from '@stencil/core'; import {HubConnection, HubConnectionBuilder} from '@microsoft/signalr'; import {enter, leave} from "el-transition" +import * as collection from 'lodash/collection'; import {WorkflowDefinition, WorkflowDefinitionSummary, WorkflowTestActivityMessage} from "../../../../models"; import {i18n} from "i18next"; import {loadTranslations} from "../../../i18n/i18n-loader"; import {resources} from "./localizations"; -import {createElsaClient} from "../../../../services"; +import {createElsaClient, WorkflowTestExecuteRequest, WorkflowTestSaveRequest} from "../../../../services"; import Tunnel from "../../../../data/dashboard"; -import { isJSDocThisTag } from 'typescript'; interface Tab { id: string; @@ -49,8 +49,6 @@ export class ElsaWorkflowPropertiesPanel { tabs: Array = []; testActivity: WorkflowTestActivityMessage; - t = (key: string) => this.i18next.t(key); - @Method() async selectTestActivity(message?: WorkflowTestActivityMessage) { const messageInternal = !!message ? message : null; @@ -81,7 +79,7 @@ export class ElsaWorkflowPropertiesPanel { }); this.hubConnection.on('DispatchMessage', (message) => { - debugger + message.data = JSON.parse(message.data); this.testActivityMessageReceived.emit(message); }); @@ -92,23 +90,40 @@ export class ElsaWorkflowPropertiesPanel { onTabClick(e: Event, tab: Tab) { e.preventDefault(); - this.selectedTabId = tab.id; } async onExecuteWorkflowClick() { this.testActivityMessageReceived.emit(null); const elsaClient = this.createClient(); - await elsaClient.workflowsApi.test(this.workflowDefinition.definitionId, this.workflowDefinition.version, this.signalRConnectionId); + + const request: WorkflowTestExecuteRequest = { + workflowDefinitionId: this.workflowDefinition.definitionId, + version: this.workflowDefinition.version, + signalRConnectionId: this.signalRConnectionId + }; + + await elsaClient.workflowTestApi.execute(request); } async onUseAsSchemaClick() { + + const elsaClient = this.createClient(); + const value = this.testActivity.data["Inbound Request"]; + const request: WorkflowTestSaveRequest = { + workflowDefinitionId: this.workflowDefinition.definitionId, + version: this.workflowDefinition.version, + activityId: this.testActivity.activityId, + json: value + }; + + await elsaClient.workflowTestApi.save(request); } selectTestActivityMessageInternal(message?: WorkflowTestActivityMessage) { this.testActivity = message; - } + } render() { return ( @@ -121,89 +136,72 @@ export class ElsaWorkflowPropertiesPanel { renderPropertiesButton() { - const {workflowDefinition, expanded, expandButtonPosition} = this; - const name = workflowDefinition.name || this.i18next.t("Untitled"); + const {expanded, expandButtonPosition} = this; const expandPositionClass = expandButtonPosition == 1 ? "elsa-right-12" : "elsa-right-28"; return ( + ); - } + } renderPanel() { - + const t = (x, params?) => this.i18next.t(x, params); + const {workflowDefinition} = this; + const name = workflowDefinition.name || this.i18next.t("Untitled"); + const {isPublished} = workflowDefinition; const tabs = this.tabs; const selectedTabId = this.selectedTabId; const selectedTab = tabs.find(x => x.id === selectedTabId); return ( -