diff --git a/src/core/Elsa.Abstractions/Services/Models/ActivityExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/ActivityExecutionContext.cs index 02fe2897d..a8885776b 100644 --- a/src/core/Elsa.Abstractions/Services/Models/ActivityExecutionContext.cs +++ b/src/core/Elsa.Abstractions/Services/Models/ActivityExecutionContext.cs @@ -58,7 +58,11 @@ namespace Elsa.Services.Models activity.Data = ActivityInstance.Data; return activity; } - + + public T GetInput() => (T)Input!; public object? GetOutputFrom(string activityName) => WorkflowExecutionContext.GetOutputFrom(activityName); + public T GetOutputFrom(string activityName) => (T)GetOutputFrom(activityName)!; + public void SetWorkflowContext(object? value) => WorkflowExecutionContext.SetWorkflowContext(value); + public T GetWorkflowContext() => WorkflowExecutionContext.GetWorkflowContext(); } } \ No newline at end of file diff --git a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs index f79847341..0f396cd32 100644 --- a/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs +++ b/src/core/Elsa.Abstractions/Services/Models/WorkflowExecutionContext.cs @@ -27,7 +27,7 @@ namespace Elsa.Services.Models IsFirstPass = true; Serializer = serviceProvider.GetRequiredService(); } - + public IWorkflowBlueprint WorkflowBlueprint { get; } public IServiceProvider ServiceProvider { get; } public WorkflowInstance WorkflowInstance { get; } @@ -49,7 +49,7 @@ namespace Elsa.Services.Models foreach (var activity in activities) ScheduleActivity(activity); } - + public void PostScheduleActivities(IEnumerable activities) { foreach (var activity in activities) @@ -68,7 +68,7 @@ namespace Elsa.Services.Models get => WorkflowInstance.CorrelationId; set => WorkflowInstance.CorrelationId = value; } - + public bool DeleteCompletedInstances { get; set; } public ICollection ExecutionLog => WorkflowInstance.ExecutionLog; public WorkflowStatus Status => WorkflowInstance.Status; @@ -98,11 +98,9 @@ namespace Elsa.Services.Models public IActivityBlueprint? GetActivityBlueprintById(string id) => WorkflowBlueprint.Activities.FirstOrDefault(x => x.Id == id); public IActivityBlueprint? GetActivityBlueprintByName(string name) => WorkflowBlueprint.Activities.FirstOrDefault(x => x.Name == name); - private JObject Serialize(IActivity activity) => JObject.FromObject(activity); - public void SchedulePostActivities() { - while(HasPostScheduledActivities) + while (HasPostScheduledActivities) ScheduleActivity(WorkflowInstance.PostScheduledActivities.Pop()); } @@ -112,5 +110,9 @@ namespace Elsa.Services.Models var activityInstance = WorkflowInstance.Activities.Single(x => x.Id == activityBlueprint.Id); return activityInstance.Output; } + + public T GetOutputFrom(string activityName) => (T)GetOutputFrom(activityName)!; + public void SetWorkflowContext(object? value) => WorkflowContext = value; + public T GetWorkflowContext() => (T)WorkflowContext!; } } \ No newline at end of file diff --git a/src/samples/Elsa.Samples.ContextualWorkflowHttp/Workflows/DocumentApprovalWorkflow.cs b/src/samples/Elsa.Samples.ContextualWorkflowHttp/Workflows/DocumentApprovalWorkflow.cs index 9d6825d72..ee2bbcc4e 100644 --- a/src/samples/Elsa.Samples.ContextualWorkflowHttp/Workflows/DocumentApprovalWorkflow.cs +++ b/src/samples/Elsa.Samples.ContextualWorkflowHttp/Workflows/DocumentApprovalWorkflow.cs @@ -28,7 +28,7 @@ namespace Elsa.Samples.ContextualWorkflowHttp.Workflows .ReceiveHttpPostRequest("/documents") // Store the document as the workflow context. It will be saved automatically when the workflow gets suspended. - .Then(context => context.WorkflowExecutionContext.WorkflowContext = (Document)((HttpRequestModel)context.Input!).Body!) + .Then(context => context.SetWorkflowContext(context.GetInput().GetBody())) // Write an HTTP response. .WriteHttpResponse( @@ -57,7 +57,7 @@ namespace Elsa.Samples.ContextualWorkflowHttp.Workflows }); } - private static Document GetDocument(ActivityExecutionContext context) => (Document)context.WorkflowExecutionContext.WorkflowContext!; + private static Document GetDocument(ActivityExecutionContext context) => context.GetWorkflowContext(); private static string GetDocumentId(ActivityExecutionContext context) => GetDocument(context).DocumentId; private static void StoreComment(ActivityExecutionContext context)