今天整理代码Q发C个去q写的简单的工作引擎,Zpetri|(参考这里的W记)Q实C序、ƈ行、@环和选择四种路由Q资源也实现了h工驱动和定时、gq时间驱动;目前只实C工作流数据保存在内存的版本Q然后就换工作,折腾着忘了这个事儿,本来是计划加入数据库存储的。尽只是个toyQ可能对工作感兴趣Q或者想自己实现一个玩玩的朋友有参考h|攑ֈ了google code上,svn地址Q?br />
http://insectworkflow.googlecode.com/svn/trunk/
源码中有在example包下l了个请假的例子Q流E定义文件就是processes包下的leave.xmlQ实现大概是q么个流E:
填写假单-》提交假?and-split节点-》项目经理审?》and-join节点-》结?br />
-》部门经理审??br />
其中目l理审批和部门经理审Ҏq行路由。xml配置大概q样Q?br />
<node type="and-split" name="and-split" id="2">
<inputs>
<place id="3" />
</inputs>
<outputs>
<place id="4" />
<place id="5" />
</outputs>
</node>
<node name="dept_manager_confirm" id="3">
<resource class="com.google.code.insect.workflow.impl.Group" id="2"
name="dept_manager">
</resource>
<conditions type="and">
<condition
class="com.google.code.insect.workflow.impl.NullHandler" value="false"
variable-name="LeaveInfo" />
</conditions>
<handler
class="com.google.code.insect.workflow.example.leave.SendRemindHandler" />
<inputs>
<place id="4" />
</inputs>
<outputs>
<place id="6" />
</outputs>
</node>
<node name="project_manager_confirm" id="4">
<resource class="com.google.code.insect.workflow.impl.Group" id="3"
name="project_manager">
</resource>
<conditions type="and">
<condition
class="com.google.code.insect.workflow.impl.NullHandler" value="false"
variable-name="LeaveInfo" />
</conditions>
<handler
class="com.google.code.insect.workflow.example.leave.SendRemindHandler" />
<inputs>
<place id="5" />
</inputs>
<outputs>
<place id="7" />
</outputs>
</node>
<node type="and-join" name="and-join" id="5">
<handler
class="com.google.code.insect.workflow.example.leave.ResultHandler" />
<inputs>
<place id="6" />
<place id="7"></place>
</inputs>
<outputs>
<place id="8" />
</outputs>
</node>
其中的place是各个Transition的输入或者输出库所Q所谓node其实是变迁Qtransition)Q每个变q对应一个handlerQ执行具体的业务操作Q比如这里的com.google.code.insect.workflow.example.leave.SendRemindHandler 用于发送提醒消息给l理们?br />
具体调用和工作项的h工触发:
//初始化工作流理?/span>
WorkFlowManager wm = new BasicWorkflowManager();
wm.setConfiguration(new DefaultConfiguration());
//启动一个案?/span>
Token token = wm.startWorkFlow("leave");
token.setAttribute("LeaveInfo", leaveInfo);
//提交假单
wm.doAction(token.getId(), this.dennis, "l领导发送消息:"
+ leaveInfo.getStaff_name() + "甌请假Q请批准!");
//token的id传递给后箋节点做处理。。token的id是案例id
processes包下面的程定义文g和test包下的TestUnitQ分别测试了四种路由和定时、g时触发,有兴的可以看一下?br />

]]>