Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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));
        }
Exemplo n.º 8
0
 /// <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"));
 }
Exemplo n.º 9
0
 public async Task CreateWorkflow(WorkflowInput input)
 {
     await _workflowService.CreateWorkflow(input);
 }