diff --git a/src/designer/elsa-workflows-studio/src/components/screens/workflow-blueprint-viewer/elsa-workflow-blueprint-viewer-screen/elsa-workflow-blueprint-viewer-screen.tsx b/src/designer/elsa-workflows-studio/src/components/screens/workflow-blueprint-viewer/elsa-workflow-blueprint-viewer-screen/elsa-workflow-blueprint-viewer-screen.tsx index 524ab92bc..45f99359c 100644 --- a/src/designer/elsa-workflows-studio/src/components/screens/workflow-blueprint-viewer/elsa-workflow-blueprint-viewer-screen/elsa-workflow-blueprint-viewer-screen.tsx +++ b/src/designer/elsa-workflows-studio/src/components/screens/workflow-blueprint-viewer/elsa-workflow-blueprint-viewer-screen/elsa-workflow-blueprint-viewer-screen.tsx @@ -96,11 +96,12 @@ export class ElsaWorkflowBlueprintViewerScreen { updateModels(workflowBlueprint: WorkflowBlueprint) { this.workflowBlueprint = workflowBlueprint; this.workflowModel = this.mapWorkflowModel(workflowBlueprint); + debugger; } mapWorkflowModel(workflowBlueprint: WorkflowBlueprint): WorkflowModel { return { - activities: workflowBlueprint.activities.map(this.mapActivityModel), + activities: workflowBlueprint.activities.filter(x => x.parentId == null).map(this.mapActivityModel), connections: workflowBlueprint.connections.map(this.mapConnectionModel), persistenceBehavior: workflowBlueprint.persistenceBehavior, }; diff --git a/src/designer/elsa-workflows-studio/src/components/screens/workflow-instance-viewer/elsa-workflow-instance-journal/elsa-workflow-instance-journal.tsx b/src/designer/elsa-workflows-studio/src/components/screens/workflow-instance-viewer/elsa-workflow-instance-journal/elsa-workflow-instance-journal.tsx index 5a3d6db01..447aa1218 100644 --- a/src/designer/elsa-workflows-studio/src/components/screens/workflow-instance-viewer/elsa-workflow-instance-journal/elsa-workflow-instance-journal.tsx +++ b/src/designer/elsa-workflows-studio/src/components/screens/workflow-instance-viewer/elsa-workflow-instance-journal/elsa-workflow-instance-journal.tsx @@ -70,8 +70,7 @@ export class ElsaWorkflowInstanceJournal { @Method() async selectActivityRecord(activityId?: string) { const record = !!activityId ? this.records.items.find(x => x.activityId == activityId) : null; - this.selectedRecordId = !!record ? record.id : null; - this.selectedActivityId = activityId; + this.selectActivityRecordInternal(record); await this.show(); } @@ -93,6 +92,12 @@ export class ElsaWorkflowInstanceJournal { await this.workflowInstanceIdChangedHandler(this.workflowInstanceId); } + selectActivityRecordInternal(record?: WorkflowExecutionLogRecord) { + const activity = !!record ? this.workflowBlueprint.activities.find(x => x.id === record.activityId) : null; + this.selectedRecordId = !!record ? record.id : null; + this.selectedActivityId = activity != null ? activity.parentId != null ? activity.parentId : activity.id : null; + } + getEventColor(eventName: string) { const map = { 'Executing': 'blue', @@ -114,8 +119,7 @@ export class ElsaWorkflowInstanceJournal { } onRecordClick(record: WorkflowExecutionLogRecord) { - this.selectedRecordId = record.id; - this.selectedActivityId = record.activityId; + this.selectActivityRecordInternal(record); this.recordSelected.emit(record); } @@ -245,7 +249,7 @@ export class ElsaWorkflowInstanceJournal { if (!value) continue; - + let valueText = null; if (typeof value == 'string') diff --git a/src/designer/elsa-workflows-studio/src/components/screens/workflow-instance-viewer/elsa-workflow-instance-viewer-screen/elsa-workflow-instance-viewer-screen.tsx b/src/designer/elsa-workflows-studio/src/components/screens/workflow-instance-viewer/elsa-workflow-instance-viewer-screen/elsa-workflow-instance-viewer-screen.tsx index bc3c9eb00..575422f8f 100644 --- a/src/designer/elsa-workflows-studio/src/components/screens/workflow-instance-viewer/elsa-workflow-instance-viewer-screen/elsa-workflow-instance-viewer-screen.tsx +++ b/src/designer/elsa-workflows-studio/src/components/screens/workflow-instance-viewer/elsa-workflow-instance-viewer-screen/elsa-workflow-instance-viewer-screen.tsx @@ -121,7 +121,7 @@ export class ElsaWorkflowInstanceViewerScreen { mapWorkflowModel(workflowBlueprint: WorkflowBlueprint): WorkflowModel { return { - activities: workflowBlueprint.activities.map(this.mapActivityModel), + activities: workflowBlueprint.activities.filter(x => x.parentId == null).map(this.mapActivityModel), connections: workflowBlueprint.connections.map(this.mapConnectionModel), persistenceBehavior: workflowBlueprint.persistenceBehavior, }; @@ -160,7 +160,9 @@ export class ElsaWorkflowInstanceViewerScreen { } onRecordSelected(e: CustomEvent) { - this.selectedActivityId = e.detail.activityId; + const record = e.detail; + const activity = !!record ? this.workflowBlueprint.activities.find(x => x.id === record.activityId) : null; + this.selectedActivityId = activity != null ? activity.parentId != null ? activity.parentId : activity.id : null; } onActivitySelected(e: CustomEvent) { diff --git a/src/designer/elsa-workflows-studio/src/index.html b/src/designer/elsa-workflows-studio/src/index.html index 258f94cb1..b6402d31f 100644 --- a/src/designer/elsa-workflows-studio/src/index.html +++ b/src/designer/elsa-workflows-studio/src/index.html @@ -15,6 +15,8 @@ + + diff --git a/src/designer/elsa-workflows-studio/src/models/domain.ts b/src/designer/elsa-workflows-studio/src/models/domain.ts index 16a1ec370..8dec2b078 100644 --- a/src/designer/elsa-workflows-studio/src/models/domain.ts +++ b/src/designer/elsa-workflows-studio/src/models/domain.ts @@ -42,6 +42,7 @@ export interface ActivityBlueprint { displayName?: string; description?: string; type: string; + parentId?: string; persistWorkflow: boolean; loadWorkflowContext: boolean; saveWorkflowContext: boolean; diff --git a/src/persistence/Elsa.Persistence.YesSql/Documents/WorkflowInstanceDocument.cs b/src/persistence/Elsa.Persistence.YesSql/Documents/WorkflowInstanceDocument.cs index 61815684a..2320f89e0 100644 --- a/src/persistence/Elsa.Persistence.YesSql/Documents/WorkflowInstanceDocument.cs +++ b/src/persistence/Elsa.Persistence.YesSql/Documents/WorkflowInstanceDocument.cs @@ -37,7 +37,7 @@ namespace Elsa.Persistence.YesSql.Documents public WorkflowFault? Fault { get; set; } public SimpleStack ScheduledActivities { get; set; } = new(); - public SimpleStack Scopes { get; set; } = new(); + public SimpleStack Scopes { get; set; } = new(); public ScheduledActivity? CurrentActivity { get; set; } } } \ No newline at end of file diff --git a/src/samples/server/Elsa.Samples.Server.Host/Activities/SampleCompositeActivity.cs b/src/samples/server/Elsa.Samples.Server.Host/Activities/SampleCompositeActivity.cs new file mode 100644 index 000000000..628c08246 --- /dev/null +++ b/src/samples/server/Elsa.Samples.Server.Host/Activities/SampleCompositeActivity.cs @@ -0,0 +1,15 @@ +using Elsa.Activities.Console; +using Elsa.Builders; +using Elsa.Services; + +namespace Elsa.Samples.Server.Host.Activities +{ + public class SampleCompositeActivity : CompositeActivity + { + public override void Build(ICompositeActivityBuilder builder) + { + builder.WriteLine("Line 1"); + builder.WriteLine("Line 2"); + } + } +} \ No newline at end of file diff --git a/src/server/Elsa.Server.Api/Endpoints/WorkflowRegistry/Models.cs b/src/server/Elsa.Server.Api/Endpoints/WorkflowRegistry/Models.cs index c46a6f075..68e8e8d20 100644 --- a/src/server/Elsa.Server.Api/Endpoints/WorkflowRegistry/Models.cs +++ b/src/server/Elsa.Server.Api/Endpoints/WorkflowRegistry/Models.cs @@ -38,6 +38,7 @@ namespace Elsa.Server.Api.Endpoints.WorkflowRegistry public string? DisplayName { get; set; } public string? Description { get; set; } public string Type { get; set; } = default!; + public string? ParentId { get; set; } public bool PersistWorkflow { get; set; } public bool LoadWorkflowContext { get; set; } public bool SaveWorkflowContext { get; set; } diff --git a/src/server/Elsa.Server.Api/Mapping/ActivityBlueprintConverter.cs b/src/server/Elsa.Server.Api/Mapping/ActivityBlueprintConverter.cs index 63a759080..a6b52bd98 100644 --- a/src/server/Elsa.Server.Api/Mapping/ActivityBlueprintConverter.cs +++ b/src/server/Elsa.Server.Api/Mapping/ActivityBlueprintConverter.cs @@ -19,6 +19,7 @@ namespace Elsa.Server.Api.Mapping DisplayName = source.DisplayName, Description = source.Description, Type = source.Type, + ParentId = source.Parent?.Id, PersistWorkflow = source.PersistWorkflow, LoadWorkflowContext = source.LoadWorkflowContext, SaveWorkflowContext = source.SaveWorkflowContext,