예제 #1
0
        public IEnumerable <WorkflowInfo> GetWorkflows(string repositoryPath)
        {
            string wfPath = GetWorkflowPath(repositoryPath);

            return(_workflowParser.Parse(new[] { "*.yml", "*.yaml" }
                                         .SelectMany(p => Directory.EnumerateFiles(wfPath, p, SearchOption.AllDirectories))));
        }
예제 #2
0
        /// <summary>
        /// 创建工作流实例
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        public static WorkflowInstance CreateInstance(Process p, IWorkflowParser parser)
        {
            var workflow = parser.Parse(GetCacheKey(p.ProcessType)
                                        , p.ProcessType.Workflow.Serialized
                                        , p.ProcessType.ActivitySettings);
            var instance = new WorkflowInstance(workflow, p.ID, p.GetInputs());

            //HACK:【重要】强制让Core调度使用同步上下文进行调度而不使用Threaded模式,使得事务与resumption嵌套,便于事务控制和错误处理 20120507
            instance.SynchronizationContext = new WorkflowInstance.DefaultSynchronizationContext();
            //标记为可持久化
            instance.IsPersistable = true;
            //数据字段扩展
            instance.Extensions.Add <DataFieldExtension>(WorkflowBuilder.CreateDataFieldExtension(p));
            //自定义节点扩展
            instance.Extensions.Add <CustomExtension>(new CustomExtension(p.ProcessType.ActivitySettings
                                                                          .Where(o => o is CustomSetting)
                                                                          .Select(o => o as CustomSetting)
                                                                          .ToList()));
            //人工节点扩展
            instance.Extensions.Add <HumanExtension>(new HumanExtension());
            //服务端节点扩展
            instance.Extensions.Add <ServerExtension>(new ServerExtension());
            //并行节点扩展
            instance.Extensions.Add <ParallelExtension>(new ParallelExtension());
            //子流程节点扩展
            instance.Extensions.Add <SubProcessExtension>(new SubProcessExtension());
            return(instance);
        }
예제 #3
0
        //根据审批流程方案实例SchemeDefinition的模型定义及其内容转换为ProcessDefinition
        /// <summary>
        /// 根据审批流程方案实例SchemeDefinition的模型定义及其内容转换为ProcessDefinition
        /// </summary>
        /// <param name="schemeDefinition"></param>
        /// <returns></returns>
        private ProcessDefinition GetProcessDefinition(SchemeDefinition <TSchemeMedium> schemeDefinition)
        {
            if (_haveCache)
            {
                var cachedDefinition = _cache.GetProcessDefinitionBySchemeId(schemeDefinition.Id);
                if (cachedDefinition != null)
                {
                    return(cachedDefinition);
                }
                var processDefinition = Parser.Parse(schemeDefinition.Scheme);
                _cache.AddProcessDefinition(schemeDefinition.Id, processDefinition);
                return(processDefinition);
            }

            return(Parser.Parse(schemeDefinition.Scheme));
        }
예제 #4
0
 /// <summary>
 /// 创建工作流实例
 /// </summary>
 /// <param name="p"></param>
 /// <returns></returns>
 public static WorkflowInstance CreateInstance(Process p, IWorkflowParser parser)
 {
     var workflow = parser.Parse(GetCacheKey(p.ProcessType)
         , p.ProcessType.Workflow.Serialized
         , p.ProcessType.ActivitySettings);
     var instance = new WorkflowInstance(workflow, p.ID, p.GetInputs());
     //HACK:【重要】强制让Core调度使用同步上下文进行调度而不使用Threaded模式,使得事务与resumption嵌套,便于事务控制和错误处理 20120507
     instance.SynchronizationContext = new WorkflowInstance.DefaultSynchronizationContext();
     //标记为可持久化
     instance.IsPersistable = true;
     //数据字段扩展
     instance.Extensions.Add<DataFieldExtension>(WorkflowBuilder.CreateDataFieldExtension(p));
     //自定义节点扩展
     instance.Extensions.Add<CustomExtension>(new CustomExtension(p.ProcessType.ActivitySettings
         .Where(o => o is CustomSetting)
         .Select(o => o as CustomSetting)
         .ToList()));
     //人工节点扩展
     instance.Extensions.Add<HumanExtension>(new HumanExtension());
     //服务端节点扩展
     instance.Extensions.Add<ServerExtension>(new ServerExtension());
     //并行节点扩展
     instance.Extensions.Add<ParallelExtension>(new ParallelExtension());
     //子流程节点扩展
     instance.Extensions.Add<SubProcessExtension>(new SubProcessExtension());
     return instance;
 }