前文提到的流程引擎,基本做到了最高程度的封装,可以通过一个方法的调用即可完成公文的流转。下面将介绍相关方法的具体说明。
1.WorkflowOperation类,对流程整体操作的一个封装。
实例化方法:(返回类的实例)
Workflow.Abstract.ConcreteFactory.CreateConcrete<IWorkflowOperation, WorkflowOperation>();
① int SendWorkflow(int WorkflowID, string FormID, string Condition = "", string HandlePerson = "")
参数说明:WorkflowID 表单需要走的流程ID,FormID 需要走流程的表单ID,Condition 发送下一级节点步骤的条件(可选),HandlePerson 处理人(可选)。
使用说明:一般的流程(不包含条件节点以及将来指定处理人的节点)只调用这一个方法即可完成表单的流转。当发起流程或某记录被审核后调用此方法,此方法会根据相关节点的定义以及处理结果,决定是否发送下一级节点的有关数据,如果下一节点为结束,亦会返回结束的标识码。此方法亦可以理解为推动流转的推动器,循环如此直到结束。注:Condition可选条件,只在相关节点需要条件的时候传入。HandlePerson 相关节点的处理人为将来指定时使用,多个人可逗号分割。
② bool SendStartWorkflow(int WorkflowID, string FormID, string HandlePerson = "")
参数说明:WorkflowID 表单需要走的流程ID,FormID 需要走流程的表单ID,HandlePerson 处理人(可选)。
使用说明:此方法为开启一个表单的流程审批,当待走流程的表单填写完毕后,由此方法开启 填写的表单 针对 某流程的 流转。此方法是方法① SendWorkflow的基础方法。
③ int SendNextWorkflow(int WorkflowID, string FormID, string Condition = "", string HandlePerson = "")
参数说明:WorkflowID 表单需要走的流程ID,FormID 需要走流程的表单ID,Condition 发送下一级节点步骤的条件(可选),HandlePerson 处理人(可选)。
使用说明:此方法会根据处理结果和节点定义,尝试发送下一级节点的数据,如果运行发送,则发送,否则,等待其它用户审核后发送。此方法是方法① SendWorkflow的基础方法。
④ bool SendEndWorkflow(int WorkflowID, string FormID)
参数说明:WorkflowID 表单需要走的流程ID,FormID 需要走流程的表单ID。
使用说明:此方法为发送结束节点数据。此方法是方法① SendWorkflow的基础方法。
⑤ bool IsHereafter(int WorkflowDetailed_ID) or bool IsHereafter(int WorkflowID, int StepID)
参数说明:重载方法。WorkflowDetailed_ID 节点的标识ID,WorkflowID 表单需要走的流程ID,StepID 节点的步骤号。
使用说明:此方法判断某节点步骤的处理方式是否为将来指定的方式,如果是,在调用SendWorkflow时需指定具体的处理人。
⑥ Workflow.Entities.WorkflowDetailed GetCurrentStep(int WorkflowID, string FormID)
参数说明:WorkflowID 表单需要走的流程ID,FormID 表单ID。
使用说明:此方法获取当前正在进行的节点步骤实体,如果返回空,说明表单还未进入流程。
1.ModuleOperation类,对流程中 模块 实体操作的一个封装。
实例化方法:(返回类的实例)
Workflow.Abstract.ConcreteFactory.CreateConcrete<IModuleOperation, ModuleOperation>();
① int ModuleAdd(ModuleList modulelist)
参数说明:modulelist 待添加的模块实体。
使用说明:添加一个需要流程的模块。相关实体类型可在公开的EF上下文中获得,后面将对公开的EF实体上下文做介绍。
② int ModuleDel(int ModuleID)
参数说明:ModuleID 模块的标识ID。
使用说明:删除指定ID的模块。
③ int ModuleUpdate(ModuleList modulelist)
参数说明:modulelist 待修改的模块实体。
使用说明:修改一个需要流程的模块。
④ ModuleList GetModel(int ModuleID)
参数说明:ModuleID 模块的标识ID。
使用说明:根据模块ID获得对应模块的实体。
⑤ List<ModuleList> GetModuleList()
使用说明:获得所有模块的泛型列表。可使用Linq相关进行二次过滤。
⑥ List<WorkflowMain> GetWorkflowMainList(int ModuleID)
参数说明:ModuleID 模块的标识ID。
使用说明:获得指定模块ID的对应的多个主流程实体的泛型列表。
⑦ int GetModuleID(string ModuleName)
参数说明:ModuleName 模块的名称。
使用说明:通过模块的名称,获得模块的标识ID。
1.WorkflowMainOperation类,对流程中 主流程 实体操作的一个封装。
实例化方法:(返回类的实例)
Workflow.Abstract.ConcreteFactory.CreateConcrete<IWorkflowMainOperation, WorkflowMainOperation>();
① int WorkflowMainAdd(WorkflowMain workflowmain)
参数说明:workflowmain 待添加的主流程实体。
使用说明:添加一个主流程实体。
② int WorkflowMainDel(int WorkflowID)
参数说明:WorkflowID 主流程的标识ID。
使用说明:删除指定ID的主流程。
③ int WorkflowMainUpdate(WorkflowMain workflowmain)
参数说明:workflowmain 待修改的主流程实体。
使用说明:修改主流程。
④ WorkflowMain GetModel(int WorkflowID)
参数说明:WorkflowID 主流程的标识ID。
使用说明:根据主流程ID获得对应主流程的实体。
⑤ List<WorkflowMain> GetWorkflowMainList()
使用说明:获得所有主流程的泛型列表。可使用Linq相关进行二次过滤。
⑥ List<WorkflowDetailed> GetWorkflowDetailedList(int WorkflowID)
参数说明:WorkflowID 主流程的标识ID。
使用说明:获得指定主流程ID的对应的多个节点步骤实体的泛型列表。
⑦ int GetWorkflowID(string WorkflowName)
参数说明:WorkflowName 主流程的名称。
使用说明:通过主流程的名称,获得主流程的标识ID。
1.WorkflowDetailedOperation类,对流程中 节点步骤 实体操作的一个封装。
实例化方法:(返回类的实例)
Workflow.Abstract.ConcreteFactory.CreateConcrete<IWorkflowDetailedOperation, WorkflowDetailedOperation>();
① int WorkflowDetailedAdd(WorkflowDetailed workflowdetailed)
参数说明:workflowdetailed 待添加的节点步骤实体。
使用说明:添加一个节点步骤实体。
② int WorkflowDetailedDel(int ID)
参数说明:ID 节点步骤实体的标识ID。
使用说明:删除指定ID的节点步骤。
③ int WorkflowDetailedUpdate(WorkflowDetailed workflowdetailed)
参数说明:workflowdetailed 待修改的节点步骤实体。
使用说明:修改节点步骤实体。
④ WorkflowDetailed GetModel(int ID)
参数说明:ID 节点步骤的标识ID。
使用说明:根据节点步骤ID获得对应节点步骤的实体。
⑤ List<WorkflowDetailed> GetWorkflowDetailedList()
使用说明:获得所有节点步骤的泛型列表。可使用Linq相关进行二次过滤。
⑥ List<TaskList> GetTaskList(int ID)
参数说明:ID节点步骤的标识ID。
使用说明:获得指定节点步骤ID的对应的多个任务实体的泛型列表。
⑦ int GetNextStepID(int WorkflowID)
参数说明:WorkflowID 主流程的标识ID。
使用说明:此方法获得下一节点的步骤号。
⑧ int StartStepAdd(int WorkflowID)
参数说明:WorkflowID 主流程的标识ID。
使用说明:为指定的主流程序号增加开始步骤,返回添加节点步骤的ID,如果返回0代表已经存在此步骤的开始步骤,如果返回-1代表不存在指定的待添加开始步骤的主流程。
⑨ int EndStepAdd(int WorkflowID)
参数说明:WorkflowID 主流程的标识ID。
使用说明:为指定的主流程序号增加结束步骤,返回添加节点步骤的ID,如果返回0代表已经存在此步骤的结束步骤,如果返回-1代表不存在指定的待添加结束步骤的主流程。
⑩ Enums.WorkflowErrorType VerifyWorkflow(int WorkflowID) or Enums.WorkflowErrorType VerifyWorkflow(List<WorkflowDetailed> lst)
参数说明:重载方法。WorkflowID 主流程的标识ID。lst 主流程下的节点步骤实体泛型列表。
使用说明:验证流程节点的有效性。返回枚举类型。具体错误枚举类型参考Workflow.Abstract.Enums.WorkflowErrorType。
⑪ bool UpNunciator(int ID, string Nunciator) or bool UpNunciator(int WorkflowID, int StepID, string Nunciator)
参数说明:重载方法。ID 节点步骤的标识ID,Nunciator 告知对象(多人逗号分割),WorkflowID 主流程的标识ID,StepID 节点步骤号。
使用说明:修改节点步骤的告知人。
⑫ bool UpNextStep(int ID, int NextStep) or bool UpNextStep(int WorkflowID, int StepID, int NextStep)
参数说明:重载方法。ID 节点步骤的标识ID,NextStep 节点步骤对象的下一节点步骤号,WorkflowID 主流程的标识ID,StepID 节点步骤号。
使用说明:修改节点步骤的下一步的节点步骤号。
1.TaskListOperation类,对流程中 任务 实体操作的一个封装。
实例化方法:(返回类的实例)
Workflow.Abstract.ConcreteFactory.CreateConcrete<ITaskListOperation, TaskListOperation>();
① int TaskListAdd(TaskList tasklist)
参数说明:tasklist 待添加的任务实体。
使用说明:添加一个任务实体。
② int TaskListDel(int ID)
参数说明:ID 任务实体的标识ID。
使用说明:删除指定ID的任务。
③ int TaskListUpdate(TaskList tasklist) or int TaskListUpdate(int taskid, string Opinion, int HandleType) or int TaskListUpdate(string FormID, int WorkflowID, string Person, string Opinion, int HandleType)
参数说明:重载方法。tasklist 待修改的任务实体,taskid 待修改的任务标识ID,Opinion 修改任务的处理意见,HandleType 处理类型(同意或不同意),FormID 表单ID,WorkflowID 流程ID,Person 处理人。
使用说明:修改任务的处理已经和处理状态。
④ TaskList GetModel(int ID)
参数说明:ID 任务的标识ID。
使用说明:根据任务ID获得对应任务的实体。
⑤ List<TaskList> GetTaskList()
使用说明:获得所有任务的泛型列表。可使用Linq相关进行二次过滤。
⑥ List<AnnexList> GetAnnexList(int ID)
参数说明:ID任务的标识ID。
使用说明:获得指定任务ID的对应的多个附件的泛型列表。
⑦ int UpExpire()
使用说明:如果告知类型的任务在有效期内未处理,通过此方法将失效的告知任务标记为已处理。
⑧ TaskList TaskCirculation(int taskid, string HandlePerson) or TaskList TaskCirculation(int taskid, string Opinion, string HandlePerson)
参数说明:重载方法。 taskid 任务的标识ID,HandlePerson 流转后的处理人,Opinion 流转意见。
使用说明:调用此方法可以将任务流转到其他处理人,并可添加流转的处理意见。
⑨ TaskList AddHandlePerson(string FormID, int WorkflowDetailed_ID, string HandlePerson) or TaskList AddHandlePerson(string FormID, int WorkflowID, int StepID, string HandlePerson)
参数说明:重载方法。FormID 表单ID,WorkflowDetailed_ID 节点步骤的标识ID,HandlePerson 待添加的处理人,WorkflowID 流程ID,StepID 步骤ID。
使用说明:调用此方法可以将指定的处理人添加到具体的任务中。
⑩ bool RemoveHandlePerson(string FormID, int WorkflowDetailed_ID, string HandlePerson) or bool RemoveHandlePerson(string FormID, int WorkflowID, int StepID, string HandlePerson)
参数说明:重载方法。FormID 表单ID,WorkflowDetailed_ID 节点步骤的标识ID,HandlePerson 待添加的处理人,WorkflowID 流程ID,StepID 步骤ID。
使用说明:调用此方法可以将指定的处理人从具体的任务中移除。
⑪ List<TaskList> GetPersonTask(string psersonid, bool? HandleStatus)
参数说明:psersonid 处理人,HandleStatus 任务类型
使用说明:通过此方法可以获取某处理人的所有待处理的任务。其中任务类型是区分获取的任务是告知类型还是处理类型,如果传入null值,则返回所有待处理任务列表。
⑫ List<TaskList> GetByFormTaskList(string FormID, int WorkflowID)
参数说明:FormID 表单ID,WorkflowID 流程ID.
使用说明:此方法获取某任务针对某流程的待处理任务列表。
1.AnnexListOperation类,对流程中 任务处理附件 实体操作的一个封装。
实例化方法:(返回类的实例)
Workflow.Abstract.ConcreteFactory.CreateConcrete<IAnnexListOperation, AnnexListOperation>();
① int AnnexListAdd(AnnexList annexlist)
参数说明:annexlist 待添加的附件实体。
使用说明:添加一个附件实体。
② int AnnexListDel(int ID)
参数说明:ID 附件的标识ID。
使用说明:删除指定ID的附件。
③ int AnnexListUpdate(AnnexList annexlist)
参数说明:annexlist 待修改的附件实体。
使用说明:修改一个附件实体。
④ AnnexList GetModel(int ID)
参数说明:ID 附件的标识ID。
使用说明:根据模块ID获得对应模块的实体。
⑤ List<AnnexList> GetAnnexList()
使用说明:获得所有附件的泛型列表。可使用Linq相关进行二次过滤。
① List<string> GetPersonList(string processingpersonnel)
接口说明:传入可逗号分割的处理人员类型获得具体的处理人列表。如:出入角色 管理员 则返回所有管理员的具体人员列表。
② IDictionary<string, string> GetGlobalKeyValue()
接口说明:获得具体实现类对应的键值对列表。如:具体实现类型为角色,则返回管理员、计划员等角色列表。具体实现类型为部门,则返回软件部、开发部等部门列表。此方法在SL的可视化流程设计中用到。
③ PersonnelMode类
此类实现一个单例模式。用于注册处理人员类型的列表。结构为:键为注册的类型,如人员、部门、角色等。值为具体的实现类的实例,如人员的具体实现类实例,部门的具体实现类实例等。注:人员实现类为简单实现,如果不满足实际需求需要再重新实现。
通过:Workflow.Abstract.PersonnelMode.GetInstance().GetPersonnelModeList() 可获得处理人员类型列表。返回类型为:IDictionary<string, IPersonList>。
流程相关是EF实体上下文是公开的,访问方式为:Workflow.Entities.WorkflowDB。
由于篇幅过长,本篇到此为止。下篇将结束使用流程的整体解决方案。
相关文章连接:
通用流程设计:http://www.cnblogs.com/qidq/p/workflow.html
可视化流程设计——流程设计器演示(基于Silverlight):http://www.cnblogs.com/qidq/p/Workflow_Silverlight.html