本文继续剖析基于Notes/Domino的文档工作流系统的设计和代码,以方便用户能应用和创建自己的工作流。(CSDN的下载资源一旦上传就不能修改,很不方便,现已将下载地址改到GitHub,若发现下载有问题,请与我联系。)
在前文对工作流建模时,我们抽象出以下几类对象:
工作流:每个工作流实例都存放工作流名称、当前节点等信息,并负责处理流程各节点的操作。
采用工作流的业务对象:在这里也就是采购单。
工作流的配置对象:不同工作流实例以及各个节点的操作的实际差异都是从配置数据中读取的。
最后一类对象体现为工作流、节点和操作三种配置文档,在上文已经介绍。前两类对象在我们的Notes工作流里保存于同一个文档,即流程文档主文档合一。现在我们就来看看与这个文档对应的表单设计和代码类。
流程子表单
流程文档的字段都包含在FlowControls子表单内,主文档对应的则是主表单,这样只要将该子表单嵌入主表单,主文档就具备了运行工作流的数据。
应用它创建你的工作流时需注意以下几点:
1. 能进行工作流的操作的用户有三类,一是流程在当前节点的处理人,保存在FlowControls子表单的PersonInCharge字段里。二是能进行像取消Cancel这样的操作的特殊用户,保存在FlowHandlers字段里。三是特权用户角色,像本演示流程用的[IT]角色,能进行上述两类操作。这个[IT]不宜配置,所以在Actions按钮的隐藏公式和代码里都直接用的。所以须将它换成你的系统里代表特权用户的角色。
2. 流程名称保存在FlowName字段里。因为位于通用的子表单内,无法直接写入特定的流程名称,所以在创建主文档时,要将应用的流程名称写入该字段。例如:
Dim doc As NotesDocument
'CreateDoc is a function in LS library lsNotes
Set doc=CreateDoc("fmPurchasing")
doc.FlowName="Purchasing"