diff --git a/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-test-panel/elsa-workflow-test-panel.tsx b/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-test-panel/elsa-workflow-test-panel.tsx index acb4578de..9ff619e55 100644 --- a/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-test-panel/elsa-workflow-test-panel.tsx +++ b/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-test-panel/elsa-workflow-test-panel.tsx @@ -20,6 +20,7 @@ export class ElsaWorkflowTestPanel { @Prop() serverUrl: string; @State() hubConnection: HubConnection; @State() workflowTestActivityMessages: Array = []; + @State() workflowStarted: boolean = false; i18next: i18n; signalRConnectionId: string; @@ -63,9 +64,9 @@ export class ElsaWorkflowTestPanel { async onExecuteWorkflowClick() { this.message = null; + this.workflowStarted = true; this.workflowTestActivityMessages = []; eventBus.emit(EventTypes.TestActivityMessageReceived, this, null); - const client = await createElsaClient(this.serverUrl); const request: WorkflowTestExecuteRequest = { workflowDefinitionId: this.workflowDefinition.definitionId, @@ -73,9 +74,24 @@ export class ElsaWorkflowTestPanel { signalRConnectionId: this.signalRConnectionId }; + const client = await createElsaClient(this.serverUrl); await client.workflowTestApi.execute(request); } + async onStopWorkflowClick() { + eventBus.emit(EventTypes.TestActivityMessageReceived, this, null); + + let message = this.workflowTestActivityMessages.last(); + debugger; + if (!!message) { + const client = await createElsaClient(this.serverUrl); + await client.workflowInstancesApi.delete(message.workflowInstanceId); + } + + this.workflowStarted = false; + this.workflowTestActivityMessages = []; + } + render() { const t = (x, params?) => this.i18next.t(x, params); @@ -119,11 +135,19 @@ export class ElsaWorkflowTestPanel {
- + {!this.workflowStarted ? + + : + + }
{renderActivityTestMessage()} diff --git a/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-test-panel/localizations.ts b/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-test-panel/localizations.ts index 36189e915..a834f2ea8 100644 --- a/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-test-panel/localizations.ts +++ b/src/designer/elsa-workflows-studio/src/components/screens/workflow-definition-editor/elsa-workflow-test-panel/localizations.ts @@ -2,6 +2,7 @@ export const resources = { 'en': { default: { 'ExecuteWorkflow': 'Execute Workflow', + 'StopWorkflow': 'Stop Workflow', 'EntryEndpoint': 'Entry Endpoint', 'Status': 'Status' } @@ -9,6 +10,7 @@ export const resources = { 'nl-NL': { default: { 'ExecuteWorkflow': 'Werkstroom uitvoeren', + 'StopWorkflow': 'Werkstroom stoppen', 'EntryEndpoint': 'Invoer eindpunt', 'Status': 'Toestand' } diff --git a/src/designer/elsa-workflows-studio/src/models/domain.ts b/src/designer/elsa-workflows-studio/src/models/domain.ts index f7cb4773a..f19a0839e 100644 --- a/src/designer/elsa-workflows-studio/src/models/domain.ts +++ b/src/designer/elsa-workflows-studio/src/models/domain.ts @@ -325,6 +325,7 @@ export class SyntaxNames { export interface WorkflowTestActivityMessage { path?: string; + workflowInstanceId: string; correlationId: string; activityId: string; status: string; diff --git a/src/server/Elsa.Server.Api/Handlers/ActivityExecutionResultExecutedHandler.cs b/src/server/Elsa.Server.Api/Handlers/ActivityExecutionResultExecutedHandler.cs index bc7eb35aa..c49034797 100644 --- a/src/server/Elsa.Server.Api/Handlers/ActivityExecutionResultExecutedHandler.cs +++ b/src/server/Elsa.Server.Api/Handlers/ActivityExecutionResultExecutedHandler.cs @@ -26,7 +26,6 @@ namespace Elsa.Server.Api.Handlers var context = notification.ActivityExecutionContext; string? path = default; - //var signalRConnectionId = context.WorkflowExecutionContext.WorkflowBlueprint.SignalRConnectionId; var signalRConnectionId = context.WorkflowExecutionContext.WorkflowInstance.GetMetaData("signalRConnectionId")?.ToString(); if (string.IsNullOrWhiteSpace(signalRConnectionId)) return; @@ -53,6 +52,7 @@ namespace Elsa.Server.Api.Handlers var message = new WorkflowTestMessage { Path = path, + WorkflowInstanceId = context.WorkflowInstance.Id, CorrelationId = context.CorrelationId, ActivityId = context.ActivityId, WorkflowStatus = context.WorkflowExecutionContext.Status == WorkflowStatus.Running @@ -81,12 +81,12 @@ namespace Elsa.Server.Api.Handlers public async Task Handle(ActivityExecutionResultFailed notification, CancellationToken cancellationToken) { var context = notification.ActivityExecutionContext; - //var signalRConnectionId = context.WorkflowExecutionContext.WorkflowBlueprint.SignalRConnectionId; var signalRConnectionId = context.WorkflowExecutionContext.WorkflowInstance.GetMetaData("signalRConnectionId")?.ToString(); if (string.IsNullOrWhiteSpace(signalRConnectionId)) return; var message = new WorkflowTestMessage { + WorkflowInstanceId = context.WorkflowInstance.Id, CorrelationId = context.CorrelationId, ActivityId = context.ActivityId, Error = notification.Exception.InnerException?.InnerException?.ToString() diff --git a/src/server/Elsa.Server.Api/Models/WorkflowTestMessage.cs b/src/server/Elsa.Server.Api/Models/WorkflowTestMessage.cs index 690ab2f75..122b15ef9 100644 --- a/src/server/Elsa.Server.Api/Models/WorkflowTestMessage.cs +++ b/src/server/Elsa.Server.Api/Models/WorkflowTestMessage.cs @@ -3,6 +3,7 @@ namespace Elsa.Server.Api.Models public class WorkflowTestMessage { public string? Path { get; set; } + public string WorkflowInstanceId { get; set; } = default!; public string CorrelationId { get; set; } = default!; public string ActivityId { get; set; } = default!; public string Status { get; set; } = default!;