//This is all in another app Domain
        public async Task <WorkflowState> Start(IWorkflowContextPersistor persistor, IWorkflowLoader loader, string workflowId, int version, string systemId, string initialData)
        {
            WorkflowContext context = new WorkflowContext(workflowId, version, systemId)
            {
                GlobalParameters = JObject.Parse(initialData)
            };
            var result = await CreateGraphAndExecute(context, loader, persistor);

            return(result);
        }
        public async Task <WorkflowState> Resume(IWorkflowContextPersistor persistor, IWorkflowLoader loader, string workflowInstanceId, string data)
        {
            var context = persistor.Load(workflowInstanceId);

            if (context == null)
            {
                throw new WorkflowEngineException("Workflow context can not be null");
            }

            if (string.IsNullOrWhiteSpace(context.WorkflowId))
            {
                throw new WorkflowEngineException("workflowId is missing in the route");
            }


            context.MergeGlobalContexts(JObject.Parse(data));

            var result = await CreateGraphAndExecute(context, loader, persistor, true);

            return(result);
        }
Пример #3
0
 public Controller(IWorkflowContextPersistor persistor, WorkflowContext context)
 {
     this.persistor = persistor;
     this.context   = context;
 }
        private async Task <WorkflowState> CreateGraphAndExecute(WorkflowContext context, IWorkflowLoader loader, IWorkflowContextPersistor instancePersistor, bool isResume = false)
        {
            IWorkflowInstance workflowInstance = loader.LoadWorkflow(context.WorkflowId, context.WorkflowVersion, context
                                                                     , new Controller(instancePersistor, context));
            await workflowInstance.Initialize();

            var state = isResume ? await workflowInstance.Resume() : await workflowInstance.Execute();

            instancePersistor.Save(context);
            return(new WorkflowState()
            {
                Context = context.ToJson(), Id = workflowInstance.Id, State = state
            });
        }
Пример #5
0
        private WorkflowState CreateGraphAndExecute(WorkflowContext context, IWorkflowLoader loader, IWorkflowContextPersistor instancePersistor, bool isResume = false)
        {
            IWorkflowInstance workflowInstance = loader.LoadWorkflow(context.WorkflowId, context.WorkflowVersion, context
                                                                     , new Controller(instancePersistor, context));

            workflowInstance.Initialize().Wait();
            var state           = isResume ?  workflowInstance.Resume().Result :workflowInstance.Execute().Result;
            var persistentState = instancePersistor.Save(context);

            return(new WorkflowState()
            {
                Context = persistentState.Context,
                Id = persistentState.InstanceId,
                State = state,
                RequiredParameters = context.RequiredParameters.ToArray()
            });
        }