前文提到的流程引擎,基本做到了最高程度的封装,可以通过一个方法的调用即可完成公文的流转。下面将介绍相关方法的具体说明。

  一、流程整体操作的相关封装

  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相关进行二次过滤。

  七、流程任务处理人员类型需实现的接口(IPersonList)说明

  ① List<string> GetPersonList(string processingpersonnel)

  接口说明:传入可逗号分割的处理人员类型获得具体的处理人列表。如:出入角色 管理员 则返回所有管理员的具体人员列表。

  ② IDictionary<string, string> GetGlobalKeyValue()

  接口说明:获得具体实现类对应的键值对列表。如:具体实现类型为角色,则返回管理员、计划员等角色列表。具体实现类型为部门,则返回软件部、开发部等部门列表。此方法在SL的可视化流程设计中用到。

  ③ PersonnelMode类

  此类实现一个单例模式。用于注册处理人员类型的列表。结构为:键为注册的类型,如人员、部门、角色等。值为具体的实现类的实例,如人员的具体实现类实例,部门的具体实现类实例等。注:人员实现类为简单实现,如果不满足实际需求需要再重新实现。

  通过:Workflow.Abstract.PersonnelMode.GetInstance().GetPersonnelModeList() 可获得处理人员类型列表。返回类型为:IDictionary<string, IPersonList>。

  八、EF实体上下文

  流程相关是EF实体上下文是公开的,访问方式为:Workflow.Entities.WorkflowDB。

  由于篇幅过长,本篇到此为止。下篇将结束使用流程的整体解决方案。

 

相关文章连接:

  通用流程设计http://www.cnblogs.com/qidq/p/workflow.html

  可视化流程设计——流程设计器演示(基于Silverlight)http://www.cnblogs.com/qidq/p/Workflow_Silverlight.html

  流程引擎及流程设计器的嵌入方式http://www.cnblogs.com/qidq/p/3499769.html

  使用流程引擎整体解决方案http://www.cnblogs.com/qidq/p/3505112.html

posted on 2014-01-04 16:14  牟珏玘  阅读(1181)  评论(0编辑  收藏  举报