public IEnumerable <WorkflowInfo> GetWorkflows(string repositoryPath) { string wfPath = GetWorkflowPath(repositoryPath); return(_workflowParser.Parse(new[] { "*.yml", "*.yaml" } .SelectMany(p => Directory.EnumerateFiles(wfPath, p, SearchOption.AllDirectories)))); }
/// <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); }
//根据审批流程方案实例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)); }
/// <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; }