using Elsa.Extensions;
using Elsa.Workflows.Runtime.Contracts;
using Elsa.Workflows.Runtime.Models.Requests;
using Quartz;
namespace Elsa.Quartz.Jobs;
///
/// A job that resumes a workflow.
///
public class ResumeWorkflowJob : IJob
{
private readonly IWorkflowDispatcher _workflowDispatcher;
///
/// The job key.
///
public static readonly JobKey JobKey = new(nameof(ResumeWorkflowJob));
///
/// Initializes a new instance of the class.
///
public ResumeWorkflowJob(IWorkflowDispatcher workflowDispatcher)
{
_workflowDispatcher = workflowDispatcher;
}
///
public async Task Execute(IJobExecutionContext context)
{
var map = context.MergedJobDataMap;
var request = new DispatchWorkflowInstanceRequest
{
InstanceId = (string)map.Get(nameof(DispatchWorkflowInstanceRequest.InstanceId)),
BookmarkId = (string)map.Get(nameof(DispatchWorkflowInstanceRequest.BookmarkId)),
ActivityId = (string?)map.Get(nameof(DispatchWorkflowInstanceRequest.ActivityId)),
ActivityNodeId = (string?)map.Get(nameof(DispatchWorkflowInstanceRequest.ActivityNodeId)),
ActivityInstanceId = (string?)map.Get(nameof(DispatchWorkflowInstanceRequest.ActivityInstanceId)),
CorrelationId = (string?)map.Get(nameof(DispatchWorkflowInstanceRequest.CorrelationId)),
Input = map.GetDictionary(nameof(DispatchWorkflowInstanceRequest.Input))
};
await _workflowDispatcher.DispatchAsync(request, context.CancellationToken);
}
}