public string StartWorkflow([FromBody] WorkflowServiceParameter param) { try { logger.InfoFormat("Starting Workflow: EntityId = {0}, EntityType = {1}, CurrentUserId = {2}, WorkflowDefinitionId = {3}, WorkflowVersion = {4}", param.EntityId, param.EntityType, param.CurrentUserId, param.WorkflowDefinitionId, param.WorkflowVersion); //new workflow definition from workflow repository var workflowDefinition = GetWorkflowDefinition(param); WorkflowApplication wfApp = null; Dictionary <string, object> inputs = new Dictionary <string, object>(); var workflowInput = new WorkflowInput { CreatedUserId = param.CurrentUserId, EntityId = param.EntityId, EntityType = param.EntityType, WorkflowDefinitionId = param.WorkflowDefinitionId }; inputs.Add("WorkflowInput", workflowInput); wfApp = CustomWorkflowManager.StartWorkflow(workflowDefinition, inputs); logger.InfoFormat("Started workflow: EntityId = {0}, EntityType = {1}, WorkflowInstanceId = {2}, CurrentUserId = {3}, WorkflowDefinitionId = {4}", param.EntityId, param.EntityType, wfApp.Id.ToString(), param.CurrentUserId, param.WorkflowDefinitionId); return(wfApp.Id.ToString()); } catch (Exception ex) { //log exception logger.ErrorFormat("StartWorkflow: {0}", ex.Message); throw this.ExceptionInternalServerError(ex); } }
public async Task Consume(ConsumeContext <T> context) { var message = context.Message; var correlationId = default(Guid?); foreach (var item in CorrelationIdSelectors) { if (item.TryGetCorrelationId(message, out correlationId)) { break; } } var bookmark = new MessageReceivedBookmark { MessageType = message.GetType().Name }; var workflowQuery = new WorkflowsQuery( nameof(ReceiveMassTransitMessage), bookmark, correlationId.ToString() ); var workflowInput = new WorkflowInput { Input = message }; await _workflowLaunchpad.CollectAndExecuteWorkflowsAsync(workflowQuery, workflowInput, context.CancellationToken); }
public async ValueTask <WorkflowInputReference> SaveAsync(WorkflowInput input, WorkflowInstance workflowInstance, CancellationToken cancellationToken = default) { var workflowStorageContext = new WorkflowStorageContext(workflowInstance, workflowInstance.DefinitionId); var inputStorageProvider = GetProviderByNameOrDefault(input.StorageProviderName); await inputStorageProvider.SaveAsync(workflowStorageContext, nameof(WorkflowInstance.Input), input.Input, cancellationToken); return(new WorkflowInputReference(inputStorageProvider.Name)); }
protected WorkflowInput GetInput(string name = "in1", string key = "in1", ParameterTypes parameterType = ParameterTypes.String) { var input = new WorkflowInput(); input.Name = name; input.Key = key; SetAuditParams(input); input.InputType = EntityHeader <ParameterTypes> .Create(parameterType); return(input); }
public async Task <Workflow> PostNewWorkflow(WorkflowInput input, string username = null, string password = null) { using (HttpClient client = new HttpClient(clientHandler)) { client.BaseAddress = new Uri(_url); AuthorizeClientWithUser(client, username, password); var response = await client.PostAsync("/api/Workflows", new StringContent(JsonConvert.SerializeObject(input), Encoding.UTF8, "application/json")); var contents = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { return(JObject.Parse(contents)["result"].ToObject <Workflow>()); } else { throw new Exception("Error sending Workflow request, returned with error " + response.StatusCode + " with message " + contents); } } }
public async Task <RunWorkflowResult?> FindAndRestartTestWorkflowAsync( string workflowDefinitionId, string activityId, int version, string signalRConnectionId, string lastWorkflowInstanceId, string?tenantId = default, CancellationToken cancellationToken = default) { var workflowBlueprint = await _workflowRegistry.FindAsync(workflowDefinitionId, VersionOptions.SpecificVersion(version), tenantId, cancellationToken); if (workflowBlueprint == null) { return(null); } var lastWorkflowInstance = await _workflowInstanceStore.FindAsync(new EntityIdSpecification <WorkflowInstance>(lastWorkflowInstanceId), cancellationToken); if (lastWorkflowInstance == null) { return(null); } var startActivity = workflowBlueprint.Activities.First(x => x.Id == activityId); var previousActivityData = GetActivityDataFromLastWorkflowInstance(lastWorkflowInstance, workflowBlueprint, activityId); // If previousActivityOutput has any items, then the first one is from activity closest to the starting one. var previousActivityOutput = previousActivityData.Count == 0 ? null : previousActivityData.First().Value?.GetItem("Output"); var input = new WorkflowInput(previousActivityOutput); var startableWorkflowDefinition = new StartableWorkflowDefinition(workflowBlueprint, startActivity.Id); var workflow = await InstantiateStartableWorkflow(startableWorkflowDefinition, input, cancellationToken); MergeActivityDataIntoInstance(workflow.WorkflowInstance, previousActivityData); SetMetadata(workflow.WorkflowInstance, signalRConnectionId); return(await ExecuteStartableWorkflowAsync(workflow, cancellationToken)); }
private async Task <StartableWorkflow> InstantiateStartableWorkflow(StartableWorkflowDefinition startableWorkflowDefinition, WorkflowInput workflowInput, CancellationToken cancellationToken) { var workflowInstance = await _workflowFactory.InstantiateAsync( startableWorkflowDefinition.WorkflowBlueprint, startableWorkflowDefinition.CorrelationId, startableWorkflowDefinition.ContextId, cancellationToken : cancellationToken); await _workflowStorageService.UpdateInputAsync(workflowInstance, workflowInput, cancellationToken); await _workflowInstanceStore.SaveAsync(workflowInstance, cancellationToken); return(new StartableWorkflow(startableWorkflowDefinition.WorkflowBlueprint, workflowInstance, startableWorkflowDefinition.ActivityId)); }
/// <summary> /// /// </summary> /// <param name="input">Returns task Id</param> /// <returns></returns> public async Task <string> PostNewWorkflow(WorkflowInput input, string idToken) { return((await SendPostRequest("/api/Workflows", input, true)).Value <string>("objectRefId")); }
public async Task CreateWorkflow(WorkflowInput input) { await _workflowService.CreateWorkflow(input); }