ZCMS/工作流定义
工作流定义是创建,管理系统工作流的栏目,打开对应界面如下:
例如工作流“录入---编辑---审核---复审”,当某栏目选择此工作流时,在此栏目下添加文章时,过程如下:
- 录入:录入编辑文章,把编辑好的文章提交给审核人员。
- 审核:审核人员可以对此文章进行修改,退回,如果文章通过,则把文章交给复审人员。
- 复审:复审人员对文章进行一系列操作,如果文章没有问题,则直接发布此文章。
建立工作流[ ]
工作流建立过程如下:
根据流程的需求填写工作流名称,说明,然后点击确定键即可。
- 点击新建工作流名称,打开下面界面:
工作流代码编写[ ]
下面做一个简单的文章录入—审核工作流,来了解工作流的编写过程及方法。
首先,要分析流程,过程如下:
- 用户登录,如果用户具有录入信息的权限,则就可以直接编写文章,否则退出系统。
- 文章编辑完并且保存后,提交给审核人员。
- 审核人员查看文章,如果文章通过审核,直接发布即可。否则文章被退回录入人员,回到第二步,进行重复操作。
具体操作如下面流程图:
一个工作流包含多个步骤。每一个步骤都有一个当前状态(status)。每一个步骤中都有一个或者多个动作(action)可以被执行。每一个动作都可以设置执行条件(condition),也可以设置执行函数(pre-function or post-function)。动作产生结果(result),导致工作流的状态和当前步骤发生改变。
通过分析流程,总共分为三个步骤:录入,审核,审核完毕。分别对应:“录入状态”,“审核状态”,“审核完毕”三个状态。其中,“录入”步骤有“保存”,“提交给审核”两个动作可以被执行,“审核”步骤有“保存”,“置为已审”,“退回”三个工作可以被执行。
- 首先要进行初始化,如下面代码:
<initial-actions> <action id="100" name="Start Workflow"> <pre-functions> <function type="class"> <arg name="class.name">com.zving.workflow.util.FunctionCaller</arg> </function> </pre-functions> <results> <unconditional-result old-status="Finished" status="正在录入" step="1" owner="${caller}"/> </results> </action> </initial-actions>
其中,有两种类型的 functions: 步骤前和步骤后 pre-function and post-function。
pre-function 是在工作流执行某一特定的流转之前进行的。
args Map 是一个包含<function/>标签中所有<arg/>标签的 Map。这些参数都是String 类型的并且已经经过了变量替换。这意味着<arg name="foo">this is ${someVar}</arg>将会由配置中的"foo"转换成为"this is [contents of someVar]"。
对于一个类方法,类加载器必须知道方法所属的类的名字。这可以通过 class.name 参数来完成,例如:
<function type="class"> <arg name="class.name">com.zving.workflow.util.FunctionCaller</arg> </function>
每一个动作必须有一个 unconditional result(默认)和零到多个条件结果。
Conditional Result是 Unconditional Result 的一个扩展。如:
<results> <unconditional-result old-status="Finished" status="正在录入" step="1" owner="${caller}"/> </results>
其中,old-status 为进行此动作之前所对应的状态,status 为当前状态,如果状态不是Queued 的话,那么 owner=”${caller}”就是新步骤的所有者(owner)。
- 下面添加步骤 1:
<step id="1" name="录入状态"> <external-permissions> <permission name="permA"> <restrict-to> <conditions type="AND"> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionStatus </arg> <arg name="status">正在录入</arg> </condition> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionAllowOwnerOnly </arg> </condition> </conditions> </restrict-to> </permission> </external-permissions>
每个 condition 必须作为一个 conditions 的子标签被定义。这个元素有一个属性叫做type,它的值是 AND 或者 OR。当你使用"AND"类型,所有的 condition 元素的值必须都是"true",整个 conditions 才能是 true。
具体用法如上面代码:<conditions type="AND"></condition>表明,只有具有权限和处于“正在录入”状态才能执行。
许可和约束(Permissions and Restrictions):基于工作流实例的状态,Permissions 可被赋予到用户和/或群组。这些 Permission 和工作流引擎的功能无关,但是它们会对使用OSWorkflow 的应用相当有好处。如例子,一个录入管理系统可能需要一个"file-write-permission",只让具有权限的用户编辑文档。程序便可以使用 API 去判断是否文件应该被录入。如果在工作流中有好多状态都适用“file-write-permission”,这就很有用,不再需要去检查特定的步骤或者条件,检查是依照某个特定许可进行的。 Permission 和 action 都使用了约束(restriction)的概念。约束是定义在 restrict-to 元素内的一个或多个条件。
- 下面为步骤添加动作:
<action id="11" name="保存"> <restrict-to> <conditions type="AND"> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionStatus </arg> <arg name="status">正在录入</arg> </condition> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionAllowOwnerOnly </arg> </condition> </conditions> </restrict-to> <pre-functions> <function type="class"> <arg name="class.name">com.zving.workflow.util.FunctionCaller</arg> </function> </pre-functions> <results> <unconditional-result old-status=" 正 在 录 入 " status=" 正 在 录 入 " step="1" owner="${caller}"/> </results> </action> <action id="12" name="提交给审核"> <restrict-to> <conditions type="AND"> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionStatus </arg> <arg name="status">正在录入</arg> </condition> <condition type="class"> <arg name="class.name"> com.zving.workflow.util.ConditionAllowOwnerOnly </arg> </condition> </conditions> </restrict-to> <results> <unconditional-result old-status=" 录 入 完 成 " status=" 正 在 审 核 " step="2" owner="audit1"/> </results> </action>
其中,步骤1 有两个动作可以被执行: "保存","提交给审核"。
步骤 2,3 创建如步骤 1。
参考来源[ ]
ZCMS使用手册导航 | ||||||
---|---|---|---|---|---|---|
|