前面对流程引擎个方面已经有了比较详细的介绍,本篇将最后介绍流程调用的整体解决方案。
在具体项目调用流程引擎之前,我们需要做的是先把流程引擎以及可视化的流程设计器嵌入到自己的项目中,具体的嵌入方式请参考:流程引擎及流程设计器的嵌入方式。
欢迎加入流程交QQ流群:251834323。
一、根据具体项目扩展相关接口
在进行流程调用之前,首先需要根据具体的项目扩展流程引擎公开的相关接口(IPersonList)。此接口的作用为:把具体项目相关的人员信息、部门信息、角色信息等提供给流程引擎调用。
IPersonList接口包含两个方法。GetPersonList及GetGlobalKeyValue,前者扩展的目的为:让流程引擎可以通过调用此方法,获得人员类型ID对应的所有的人员列表。后者扩展的目的为:使具体的人员类型对流程引擎透明化(角色,具体有那些角色、部门,具体有哪些部门等),以便可视化流程设计中对相关人员类型处理。
1 using System.Collections.Generic; 2 using Workflow.Abstract; 3 4 namespace Workflow.Concrete 5 { 6 /// <summary> 7 /// 接口实现实例 8 /// </summary> 9 public class TestMode : IPersonList 10 { 11 /// <summary> 12 /// 获取人员列表 13 /// </summary> 14 /// <param name="processingpersonnel">逗号分割的多记录</param> 15 /// <returns></returns> 16 List<string> IPersonList.GetPersonList(string processingpersonnel) 17 { 18 //定义返回人员列表 19 var lst = new List<string>(); 20 21 //循环逗号分割的多个人员类型ID 22 foreach (var str in processingpersonnel.Split(',')) 23 { 24 //根据具体的人员类型ID以及项目的具体情况,返回包含在此人员类型ID下的所有人员列表 25 //foreach (var p in GetAllPerson(str)) 26 //{ 27 //循环组中的所有人员,利用下面代码加入到返回列表中。 28 lst.Add("具体人员"); 29 //} 30 } 31 32 return lst; 33 } 34 35 /// <summary> 36 /// 实现接口的具体类,获取其对应的键值对列表 37 /// </summary> 38 /// <returns></returns> 39 IDictionary<string, string> IPersonList.GetGlobalKeyValue() 40 { 41 //定义返回类型列表 42 IDictionary<string, string> d = new Dictionary<string, string>(); 43 //将具体的键值对加入到返回列表中 44 d.Add("键(如部门ID)", "值(如部门名称)"); 45 return d; 46 } 47 } 48 }