﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-努力创造未来！-随笔分类-workflow</title><link>http://www.blogjava.net/pdw2009/category/12604.html</link><description>J2EE相关应用技术日志</description><language>zh-cn</language><lastBuildDate>Fri, 23 May 2008 09:21:02 GMT</lastBuildDate><pubDate>Fri, 23 May 2008 09:21:02 GMT</pubDate><ttl>60</ttl><item><title>jbpm最简单的例子(转)</title><link>http://www.blogjava.net/pdw2009/archive/2007/04/11/110027.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Wed, 11 Apr 2007 15:48:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/04/11/110027.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/110027.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/04/11/110027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/110027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/110027.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">process-definition&nbsp;</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="urn:jbpm.org:jpdl-3.1"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;name</span><span style="COLOR: #0000ff">="example_5"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">start-state&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="开始"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">event&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="node-leave"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">action&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="action1"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">action</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">event</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transition&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="tr1"</span><span style="COLOR: #ff0000">&nbsp;to</span><span style="COLOR: #0000ff">="工作中"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">transition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transition&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="tr2"</span><span style="COLOR: #ff0000">&nbsp;to</span><span style="COLOR: #0000ff">="求学中"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">transition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">start-state</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">state&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="工作中"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">event&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="node-enter"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">action&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="工作"</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">="com.wide.example5.WorkAction"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">action</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">event</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transition&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;to</span><span style="COLOR: #0000ff">="终成正果"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">transition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">state</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">state&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="求学中"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">event&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="node-enter"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">action&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="学习"</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">="com.wide.example5.StudyAction"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">action</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">event</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transition&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;to</span><span style="COLOR: #0000ff">="终成正果"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">transition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">state</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">end-state&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="终成正果"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">event&nbsp;</span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="node-enter"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">action&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="圆满"</span><span style="COLOR: #ff0000">&nbsp;class</span><span style="COLOR: #0000ff">="com.wide.example5.EndAction"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">action</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">event</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">end-state</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">process-definition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span></div>
这是一个比较简单的jbpm流程模板，通过这几天的学习（基本上是看别人的事子）发现jbpm原来这么的复杂的，好多东西想记下来，特别是一个同行总结出的例子，非常简洁的描述了各个小功能点。以下也是一个很简单的jpdl模板，清楚的描述了note与state的区别。jbpm提供了好几种不同的节点。<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">&lt;?</span><span style="COLOR: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="COLOR: #0000ff">?&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">process-definition&nbsp;</span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="urn:jbpm.org:jpdl-3.1"</span><span style="COLOR: #ff0000">&nbsp;&nbsp;name</span><span style="COLOR: #0000ff">="example_7"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">start-state&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="start"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transition&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="tr1"</span><span style="COLOR: #ff0000">&nbsp;to</span><span style="COLOR: #0000ff">="state"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">transition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transition&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="tr2"</span><span style="COLOR: #ff0000">&nbsp;to</span><span style="COLOR: #0000ff">="node"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">transition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">start-state</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">state&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="state"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;只有签收signal才执行&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transition&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;to</span><span style="COLOR: #0000ff">="end"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">transition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">state</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">node&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="node"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">&lt;!--</span><span style="COLOR: #008000">&nbsp;直接执行，当流转到这节点时，就马上执行transition&nbsp;</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">transition&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #ff0000">&nbsp;to</span><span style="COLOR: #0000ff">="end"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">transition</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">node</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">end-state&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="end"</span><span style="COLOR: #0000ff">&gt;&lt;/</span><span style="COLOR: #800000">end-state</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">process-definition</span><span style="COLOR: #0000ff">&gt;</span></div>
测试代码也很简单，<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;com.jbpm;<br><br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.jbpm.JbpmConfiguration;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.jbpm.JbpmContext;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.jbpm.db.GraphSession;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.jbpm.graph.def.ProcessDefinition;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.jbpm.graph.exe.ProcessInstance;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;org.jbpm.graph.exe.Token;<br><br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Execute&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;JbpmConfiguration&nbsp;cfg</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">JbpmConfiguration.getInstance();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;把流程部署到数据库<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;file<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;deploy(String&nbsp;file){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JbpmContext&nbsp;jc</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fis&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileInputStream(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">src/proc2.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessDefinition&nbsp;pd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ProcessDefinition.parseXmlInputStream(fis);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cfg.createJbpmContext();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jc.deployProcessDefinition(pd);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception&nbsp;e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jc.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String&nbsp;args[])</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Execute&nbsp;e</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Execute();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">e.deploy("src/proc2");</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JbpmContext&nbsp;jc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cfg.createJbpmContext();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GraphSession&nbsp;gs</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">jc.getGraphSession();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessDefinition&nbsp;pd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">gs.findLatestProcessDefinition(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">example_5</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessInstance&nbsp;pi</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ProcessInstance(pd);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Token&nbsp;token</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">pi.getRootToken();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">token--&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">token.getNode().getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token.signal(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tr1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">tr1--&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">token.getNode().getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token.signal();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">kk-&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">token.getNode().getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">是否已结束-&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">pi.hasEnded());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jc.save(pi);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span></div>
以上这个类对应第一个工作流模板，至于该模板里定义的接口，<br>&nbsp;&lt;action name="工作" class="com.wide.example5.WorkAction"&gt;&lt;/action&gt;<br>该class只需要实现ActionHandler接口就行了，具体有啥用我现也没搞懂：）我一直努力着。
<img src ="http://www.blogjava.net/pdw2009/aggbug/110027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-04-11 23:48 <a href="http://www.blogjava.net/pdw2009/archive/2007/04/11/110027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm流程部署和执行</title><link>http://www.blogjava.net/pdw2009/archive/2007/04/09/109512.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 09 Apr 2007 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/04/09/109512.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/109512.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/04/09/109512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/109512.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/109512.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;看了这么久jbpm还没有一个头绪，需要继续分析。jbpm把流程部署到数据库有好几种方法，今晚终于调试通过了java直接部署 的子，仅为述于此，不做分析。<br>&nbsp;static JbpmConfiguration cfg=JbpmConfiguration.getInstance(); //jbpm一切一切的基础<br>&nbsp;<br>&nbsp;public void setUp(){<br>&nbsp;&nbsp;//cfg.createSchema();&nbsp; //重建jbpm存储层..<br>&nbsp;}<br>以下是一个部署的方法<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;testDeployProcessDefinition()</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertNotNull(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JbpmConfiguration&nbsp;is&nbsp;null</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,cfg);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileInputStream&nbsp;fis&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileInputStream(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">src/proc1.xml</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessDefinition&nbsp;pd</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">ProcessDefinition.parseXmlInputStream(fis);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertNotNull(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">definition&nbsp;should&nbsp;not&nbsp;be&nbsp;null</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,pd);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JbpmContext&nbsp;jc</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cfg.createJbpmContext();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jc.deployProcessDefinition(pd);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jc.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
实例化并生成流程实例的方法<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;testLoadProcessAndInstance()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JbpmContext&nbsp;jbpmContext&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cfg.createJbpmContext()&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GraphSession&nbsp;graphSession&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;jbpmContext.getGraphSession();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessDefinition&nbsp;processDefinition&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;graphSession.findLatestProcessDefinition(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pro1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessInstance&nbsp;processInstance&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ProcessInstance(processDefinition);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Token&nbsp;token&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;processInstance.getRootToken();&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">start</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;token.getNode().getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Let's&nbsp;start&nbsp;the&nbsp;process&nbsp;execution</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;token.signal();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertEquals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">state1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;token.getNode().getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbpmContext.save(processInstance);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Tear&nbsp;down&nbsp;the&nbsp;pojo&nbsp;persistence&nbsp;context.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbpmContext.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
再执行上面生成的流程方法<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;testLoadInstanceAndDoActionAndEnd()&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JbpmContext&nbsp;jbpmContext&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;cfg.createJbpmContext()&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GraphSession&nbsp;graphSession&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;jbpmContext.getGraphSession();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessDefinition&nbsp;processDefinition&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;graphSession.findLatestProcessDefinition(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pro1</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;processInstances&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;graphSession.findProcessInstances(processDefinition.getId());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessInstance&nbsp;processInstance&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;(ProcessInstance)&nbsp;processInstances.get(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;this.assertEquals("message",(String)(processInstance.getContextInstance().getVariable("message")));</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processInstance.signal();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;assertTrue(processInstance.hasEnded());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbpmContext.save(processInstance);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jbpmContext.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br>实际上，上面的几段代码中写来写去就这几句话吧。加载流程，生成实例，然后签收执行。<br>明天继续......
<img src ="http://www.blogjava.net/pdw2009/aggbug/109512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-04-09 23:27 <a href="http://www.blogjava.net/pdw2009/archive/2007/04/09/109512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm表结构部署到oracle</title><link>http://www.blogjava.net/pdw2009/archive/2007/04/09/109487.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 09 Apr 2007 12:01:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/04/09/109487.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/109487.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/04/09/109487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/109487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/109487.html</trackback:ping><description><![CDATA[&nbsp;
<p align=left><span>看了网上挺多例子终于把<span>jbpm的数据库结构部署好，之前部署到mysql ,今晚部署到了oracle。步骤如下：<br>1、在lib目录下建立oracle目录，把oracle 9.1的jdbc驱动class12.jar拷贝进来。<br>2、在src/resources目录下建立oracle目录，把hsqldb目录入的两个文件拷贝进来。<br>3、修改create.db.hibernate.properties</span></span></p>
<p align=left><span>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">hibernate.dialect</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">org.hibernate.dialect.Oracle9Dialect<br>#&nbsp;for&nbsp;Oracle&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">&nbsp;compatibility&nbsp;use<br>#hibernate.dialect</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">org.hibernate.dialect.OracleDialect<br>hibernate.connection.driver_class</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">oracle.jdbc.driver.OracleDriver<br>hibernate.connection.url</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">jdbc:oracle:thin:@</span><span style="COLOR: #000000">192.168.0.20</span><span style="COLOR: #000000">:</span><span style="COLOR: #000000">1521</span><span style="COLOR: #000000">:JBPM<br>hibernate.connection.username</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;JBPM<br>hibernate.connection.password</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;JBPM<br>hibernate.show_sql</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">true<br>hibernate.c3p0.min_size</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br>hibernate.c3p0.max_size</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span></div>
<p align=left></span>&nbsp;</p>
<p><span>4、在src目录入copy build.deploy.xml文件到src目录，并改名为build.deploy.oracle.xml，然后修改文件的create.db&nbsp;&nbsp;&nbsp; target。内容如下</span></p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">target&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="create.db"</span><span style="COLOR: #ff0000">&nbsp;depends</span><span style="COLOR: #0000ff">="declare.jbpm.tasks"</span><span style="COLOR: #ff0000">&nbsp;description</span><span style="COLOR: #0000ff">="creates&nbsp;a&nbsp;oracle&nbsp;database&nbsp;with&nbsp;the&nbsp;jbpm&nbsp;tables&nbsp;and&nbsp;loads&nbsp;the&nbsp;processes&nbsp;in&nbsp;there"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">jbpmschema&nbsp;</span><span style="COLOR: #ff0000">actions</span><span style="COLOR: #0000ff">="create"</span><span style="COLOR: #ff0000">&nbsp;properties</span><span style="COLOR: #0000ff">="${basedir}/src/resources/oracle/create.db.hibernate.properties"</span><span style="COLOR: #ff0000">&nbsp;cfg</span><span style="COLOR: #0000ff">="${basedir}/src/config.files/hibernate.cfg.xml"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;<br><br>&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">loadidentities&nbsp;</span><span style="COLOR: #ff0000">file</span><span style="COLOR: #0000ff">="${basedir}/src/resources/oracle/identity.db.xml"</span><span style="COLOR: #ff0000">&nbsp;properties</span><span style="COLOR: #0000ff">="${basedir}/src/oracle/hsqldb/create.db.hibernate.properties"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;<br><br>&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">ant&nbsp;</span><span style="COLOR: #ff0000">antfile</span><span style="COLOR: #0000ff">="build.xml"</span><span style="COLOR: #ff0000">&nbsp;target</span><span style="COLOR: #0000ff">="build.processes"</span><span style="COLOR: #ff0000">&nbsp;inheritall</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000">&nbsp;<br><br>&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">deploypar&nbsp;</span><span style="COLOR: #ff0000">properties</span><span style="COLOR: #0000ff">="${basedir}/src/resources/oracle/create.db.hibernate.properties"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">fileset&nbsp;</span><span style="COLOR: #ff0000">dir</span><span style="COLOR: #0000ff">="build"</span><span style="COLOR: #ff0000">&nbsp;includes</span><span style="COLOR: #0000ff">="*.par"</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br><br>&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">deploypar</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">target</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br></span></div>
<br>至于开发环境就把jbpm本身自带例子中相关jar文件移植到自己新建的celipse Web项目中了。 <br><br>jbpm表名所对应的中文名称:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">JBPM_ACTION&nbsp;action记录表&nbsp;<br>JBPM_DECISIONCONDITIONS&nbsp;结果条件表&nbsp;<br>JBPM_DELEGATION&nbsp;委托表&nbsp;<br>JBPM_EVENT&nbsp;事件表&nbsp;处理进入或者离开事件&nbsp;<br>JBPM_EXCEPTIONHANDLER&nbsp;异常处理表&nbsp;<br>JBPM_ID_GROUP&nbsp;用户组表&nbsp;<br>JBPM_ID_MEMBERSHIP&nbsp;用户成员表&nbsp;表现用户和组之间的多对多关系&nbsp;<br>JBPM_ID_PERMISSIONS&nbsp;用户权限表&nbsp;<br>JBPM_ID_USER&nbsp;用户表&nbsp;<br>JBPM_MODULEDEFINITION&nbsp;模块定义表&nbsp;<br>JBPM_MODULEINSTANCE&nbsp;模块实例表&nbsp;<br>JBPM_NODE&nbsp;流程节点表&nbsp;<br>JBPM_POOLEDACTOR&nbsp;汇集参与着表&nbsp;<br>JBPM_PROCESSDEFINITION&nbsp;流程定义表&nbsp;<br>JBPM_PROCESSFILE&nbsp;流程文件表&nbsp;<br>JBPM_PROCESSFILEBLOCK&nbsp;流程文件块表&nbsp;<br>JBPM_PROCESSINSTANCE&nbsp;流程实例表&nbsp;<br>JBPM_RUNTIMEACTION&nbsp;运行中行为表&nbsp;<br>JBPM_SCRIPTVARIABLES&nbsp;脚本变量表&nbsp;<br>JBPM_SWIMLANE&nbsp;泳道表&nbsp;<br>JBPM_SWIMLANEINSTANCE&nbsp;泳道实例表&nbsp;<br>JBPM_TASK&nbsp;任务表&nbsp;<br>JBPM_TASKACTORPOOL&nbsp;用户行为汇总&nbsp;<br>JBPM_TASKINSTANCE&nbsp;任务实例&nbsp;<br>JBPM_TIMER&nbsp;计时表&nbsp;<br>JBPM_TOKEN&nbsp;令牌表&nbsp;<br>JBPM_TOKENVARIABLEMAP&nbsp;令牌变量影射表&nbsp;<br>JBPM_TRANSITION&nbsp;转换表&nbsp;<br>JBPM_VARIABLEINSTANCE&nbsp;变量实例表&nbsp;<br>JBPM_VARIABLEINSTANCEBLOCK&nbsp;变量实例块表&nbsp;<br>JBPM_VARIABLEMAPPING&nbsp;变量影射表&nbsp;<br></span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/pdw2009/aggbug/109487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-04-09 20:01 <a href="http://www.blogjava.net/pdw2009/archive/2007/04/09/109487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个值得参考的osworkflow工作流模板</title><link>http://www.blogjava.net/pdw2009/archive/2007/01/15/94002.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Mon, 15 Jan 2007 09:31:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2007/01/15/94002.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/94002.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2007/01/15/94002.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/94002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/94002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &lt;?				xml version="1.0" encoding="UTF-8"				?&gt;																		&lt;!				DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.7//EN" "http://www.opensymphony.com/oswork...&nbsp;&nbsp;<a href='http://www.blogjava.net/pdw2009/archive/2007/01/15/94002.html'>阅读全文</a><img src ="http://www.blogjava.net/pdw2009/aggbug/94002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2007-01-15 17:31 <a href="http://www.blogjava.net/pdw2009/archive/2007/01/15/94002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流管理系统需求</title><link>http://www.blogjava.net/pdw2009/archive/2006/10/17/75677.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Tue, 17 Oct 2006 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/10/17/75677.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/75677.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/10/17/75677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/75677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/75677.html</trackback:ping><description><![CDATA[
		<div>
				<font size="3">整理的工作流管理系统的需求列表，想要做一个好东西真的很难。</font>
				<p>
						<br />
						<font size="3">工作流定义 </font>
				</p>
				<p>
						<font size="3">  1.1 工作流定义语法检查<br />  1.2 工作流定义有效性检查 <br />  1.3 流程可视化建模 <br />  1.4 组织机构数据的引用 <br />  1.5 支持离线过程定义 <br />  1.6 工作流数据定义  <br />  1.7 图形打印工作流过程定义图形<br />  1.8 以xml格式保存过程定义文件<br />  1.9 直接对模板库访问操作 <br />  1.10 xml过程定义文件打开编辑 </font>
				</p>
				<p>
						<font size="3">工作流模板库 </font>
				</p>
				<p>
						<font size="3">  2.1 工作流模板的导入和导出 <br />  2.2 工作流模板版本控制 <br />  2.3 工作流模板复制 <br />  2.4 工作流模板所有者定义<br />  2.5 工作流模板状态（草稿、发布、过时）<br />  2.6 工作流模板有效时间</font>
				</p>
				<p>
						<font size="3">实例初始化 </font>
				</p>
				<p>
						<font size="3">  3.1 通过Email启动 <br />  3.2 通过文本文件（Text Files）启动<br />  3.3 通过XML消息启动  <br />  3.4 时间事件启动  <br />  3.5 手工启动 <br />  3.6 过程调用启动 <br /> <br />工作流模式 </font>
				</p>
				<p>
						<font size="3">  4.1 顺序（Sequence） <br />  4.2 并行分支（AND-split） <br />  4.3 并行汇聚（AND-join） <br />  4.4 条件分支（Conditional routing）、互斥选择（Exclusive Choice、XOR<br />  4.5 简单汇聚（XOR-join） <br />  4.6 多重选择（OR-split、Conditional routing）<br />  4.7 多重汇聚（？） <br />  4.8 部分汇聚（Partial join）MI<br />  4.9 取消活动  <br />  4.10 取消实例  <br />  4.11 同步/异步子过程 <br /> <br />工作流任务分配 </font>
				</p>
				<p>
						<font size="3">  5.1 任务分配的两种模式（拉和推）<br />  5.2 任务队列（拉模式）<br />  5.3 按工作量分配任务（推模式）<br />  5.4 分配任务给所有人员（部门、角色、工作组）<br />  5.5 按人员优先数分配任务（适合基于角色任务分配）<br />  5.6 先来先做（FCFA），将任务队列中最早创建的任务分配给最先提出执行任务请求的人员<br />  5.7 分配任务给指定人员<br />  5.8 推模式下的任务分配异常处理（任务分配异常时，通知模板所有者或工作流管理员）<br />  5.9 任务重分配（将任务分配给其他用户、指定角色中的用户、角色）<br />  5.10 任务替代者，由人员指定（交办、代办）</font>
				</p>
				<p>
						<font size="3">工作流动作 </font>
				</p>
				<p>
						<font size="3">  5.11 接收任务（状态转换）accept<br />  5.12 退件（回退到上一节点？）decline<br />  5.13 执行任务<br />  5.14 完成任务（状态转换）<br />  5.15 反向回传/抽单/召回（Process Rollback）<br />  5.16 分配任务给指定角色<br />  5.17 分配任务给指定人员<br />  5.18 使用路由表分配任务 <br />  5.19 取消任务分配<br />  5.20 创建子过程（将任务节点用子过程代替？）<br />  5.21 设置任务优先级（动态修改工作流活动优先级）<br />  5.22 设置任务说明<br />  5.23 设置任务期限（设置之时起时间段、指定时间点）<br />  5.24 取消任务<br />  5.25 挂起（暂停）任务<br />  5.26 终止任务<br />  5.27 启动工作流实例<br />  5.28 挂起（暂停）工作流实例<br />  5.29 取消工作流实例<br />  5.30 终止工作流实例<br />  5.31 设置工作流实例说明<br />  5.32 设置工作流实例变量（工作流实例变量赋值），可以作为工作流异常处理的一种方法</font>
				</p>
				<p>
						<font size="3">工作流活动路由 </font>
				</p>
				<p>
						<font size="3">  6.1 基于角色路由（任务分配给角色，职务发生变化，流程设计不需变化）<br />  6.2 基于关系路由（根据相对职务关系路由）<br />  6.3 设定型（Ad hoc）路由（由办理人员指定下一节点办理人）根据流程处理内容，由办理人从指定人员中选择合适的下一步执行人员</font>
				</p>
				<p>
						<font size="3">工作流组织机构 </font>
				</p>
				<p>
						<font size="3">  7.1 支持LDAP目录服务<br />  7.2 支持组（Group）<br />  7.3 循环组<br />  7.4 权重组<br />  7.5 工作职务组（相同职务的人组成一个组）<br />  7.6 支持动态定义组（流程执行过程中定义的组）<br />  7.7 多重角色管理（一人数职）<br />  7.8 相对职务关系<br />  7.9 组织图拥有人（组织结构的分级维护）</font>
				</p>
				<p>
						<font size="3">工作流时间管理 </font>
				</p>
				<p>
						<font size="3">  8.1 非工作日设定<br />  8.2 时间事情启动工作流实例（指定时间点、时间间隔、周期时间）<br />  8.3 任务挂起恢复（指定时间点、时间间隔）<br />  8.4 过程实例挂起恢复（指定时间点、时间间隔）<br />  8.5 任务超时通知<br />  8.6 工作流超时通知<br />  8.7 系统时钟</font>
				</p>
				<p>
						<font size="3">工作流系统通知 </font>
				</p>
				<p>
						<font size="3">  9.1 以邮件方式通知工作超时<br />  9.2 可自订通知邮件（新任务通知）<br />  9.3 主动式邮件通知（相对Web-based被动方式）<br />  9.4 工作流异常通知<br />  9.4 任务取消通知<br />  9.5 工作流取消通知</font>
				</p>
				<p>
						<font size="3">工作流异常处理 </font>
				</p>
				<p>
						<font size="3">  10.1 异常的分类<br />  10.2 不同的异常处理方法<br />  10.3 异常的报告、通知机制<br />  10.4 异常恢复程序的预定义</font>
				</p>
				<p>
						<font size="3">工作流接口需求 </font>
				</p>
				<p>
						<font size="3">  11.1 与Email服务器接口（JMS）<br />  11.2 与文件系统接口（如NTFS、unix-FS）<br />  11.3 与ERP、CRM、HR、SCM等系统接口<br />  11.4 与文档管理系统系统接口<br />  11.5 与其它工作流系统接口<br />  11.6 与其它应用系统接口</font>
				</p>
				<p>
						<font size="3">工作流系统需求 </font>
				</p>
				<p>
						<font size="3">  12.1 支持多个操作系统，包括windows、AIX、Solaris、HP-Unix、Linux等<br />  12.2 支持多种数据库，包括MS SQL server、Oracle、DB2、MySQL等<br />  12.3 支持多种应用服务器，包括weblogic、websphere、Jboss、Apusic、Tomcat等<br />  12.4 完备的系统日志<br />  12.5 可处理大量流程<br />  12.6 从失败（或错误）中恢复系统（自动、手动）、系统（应用）数据备份<br />  12.7 支持并发处理</font>
				</p>
				<p>
						<font size="3">工作流系统管理 </font>
				</p>
				<p>
						<font size="3">  13.1 图形化流程监控<br />  13.2 流程实例动态修改（修改未执行的过程步骤）<br />  13.3 工作负荷量显示<br />  13.4 工作流统计（流程模板、流程实例、任务统计）<br />  13.5 自定义统计报表<br />  13.6 统计数据图形化显示<br />  13.7 临时更改收件人<br />  13.8 工作重送<br />  13.9 流程实例挂起/恢复<br />  13.10 活动实例挂起/恢复<br />  13.11 代理未来工作<br />  13.12 可指定代理期限<br />  13.13 工作流实例超时统计<br />  13.14 单一步骤超时统计<br />  13.15 可传回子流程统计数据<br />  13.16 服务器定时清理</font>
				</p>
				<p>
						<font size="3">工作流客户端 </font>
				</p>
				<p>
						<font size="3">  14.1 B/S结构客户端界面<br />  14.2 浏览器端的数字认证功能<br />  14.3 单点登录<br />  14.4 按重要程度排列任务清单<br />  14.5 用户查看流程执行状态<br />  14.6 我的任务和共享任务队列（按角色分类）<br />  14.7 从共享任务队列中选取任务<br />  14.8 用户指定/取消代理人<br />  14.9 显示已被代理的工作</font>
				</p>
				<p>
						<font size="3">工作流数据 </font>
				</p>
				<p>
						<font size="3">  15.1 基本数据类型（整型、符点型、字符型、日期型、布尔型）<br />  15.2 复合数据类型（数组）<br />  15.3 XML数据定义<br />  15.4 时间数据（三种类型：时间点、时间间隔、周期时间）<br />  15.5 附件（word、excel等）文件夹的概念（Folder）<br />  15.6 附件的检入/检出 3<br />  15.7 变量作用域（全局变量、过程变量）<br />  15.8 数据的访问控制（读写、读、不可见）<br />  15.9 数据集合（Data Set）（由多个不同类型数据或数据子集合所构成）<br />  15.10 数据的表现（表单）<br />  15.11 子表单（sub-form）<br /></font>
				</p>
				<p>
						<font size="3">想想看，自己实现的太少了！！！只做到了皮毛而已!需继续努力</font>
				</p>
		</div>
<img src ="http://www.blogjava.net/pdw2009/aggbug/75677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-10-17 16:26 <a href="http://www.blogjava.net/pdw2009/archive/2006/10/17/75677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流系统功能特性描述</title><link>http://www.blogjava.net/pdw2009/archive/2006/09/12/69127.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Tue, 12 Sep 2006 04:31:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/09/12/69127.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/69127.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/09/12/69127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/69127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/69127.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
						<span style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-weight: bold">工作流系统功能特性描述</span>
						<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; FONT-FAMILY: Arial; mso-bidi-font-weight: bold; mso-bidi-font-family: 'Times New Roman'">
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
						<span style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">编写：</span>
						<span lang="EN-US" style="LINE-HEIGHT: 125%; FONT-FAMILY: Arial; mso-bidi-font-weight: bold; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">
								<span style="mso-field-code: ' USERNAME  '">
										<span style="mso-no-proof: yes">jerry</span>
								</span>
						</span>
						<b>
								<span lang="EN-US" style="LINE-HEIGHT: 125%; FONT-FAMILY: 华文新魏; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">
								</span>
						</b>
						<span style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">创建日期：</span>
						<span lang="EN-US" style="LINE-HEIGHT: 125%; FONT-FAMILY: Arial; mso-bidi-font-weight: bold; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">
								<span style="mso-no-proof: yes">2005-05-18</span>
						</span>
						<span lang="EN-US" style="LINE-HEIGHT: 125%; mso-bidi-font-size: 10.5pt">
						</span>
						<span style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">最后更新：</span>
						<span lang="EN-US" style="LINE-HEIGHT: 125%; FONT-FAMILY: Arial; mso-bidi-font-weight: bold; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">
								<span style="mso-no-proof: yes">2005-05-20</span>
						</span>
						<span lang="EN-US" style="LINE-HEIGHT: 125%; mso-bidi-font-size: 10.5pt">
						</span>
						<span style="LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">版次：</span>
						<span lang="EN-US" style="LINE-HEIGHT: 125%; FONT-FAMILY: Arial; mso-bidi-font-weight: bold; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">1.0</span>
						<span lang="EN-US" style="LINE-HEIGHT: 125%; mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
						<span lang="EN-US" style="LINE-HEIGHT: 125%; mso-bidi-font-size: 10.5pt">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
						<span lang="EN-US" style="LINE-HEIGHT: 125%; mso-bidi-font-size: 10.5pt">
								<o:p> </o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; tab-stops: list 21.25pt; mso-outline-level: 1; mso-list: l0 level1 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">      </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">流程操作</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.25pt; LINE-HEIGHT: 150%">
						<span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">流程在流转过程中需要确定的为下一环节以及该环节的相应的参与者</span>
						<span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">(</span>
						<span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">人或应用程序</span>
						<span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">)</span>
						<span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">，所有的流程操作均是围绕这两方面进行。</span>
						<span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.1.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">签收</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对事项进行签收表明该流程步骤进行生效阶段，说明当前人员已将事项从待办状态切换为了在办状态。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.2.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">直送</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">(</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">直流</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">) <o:p></o:p></span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">直流为流程操作中最为简单的一种操作，直流为当前环节往下仅有一个环节，不存在分支的流转，在直流过程中可确定的是流程下一环节，不可确定的是执行此环节的人员</span>
						<span lang="EN-US">(</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">需要系统根据流程设计时配置的环节参与角色获取具有相关权限的人员，根据配置的是否需要选择人员来决定是否显示选人界面</span>
						<span lang="EN-US">)</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span lang="EN-US">
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.3.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分送</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">(</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分流</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">)<o:p></o:p></span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">分流在流程操作中也很常见，分流为当前环节往下具有一个以上的环节可供选择，即存在分支的流转，在此种情况下往往需要提供选择环节的页面以供用户确定需要发往哪个环节。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span lang="EN-US">
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.4.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并流</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">并流为当前环节往下具有一个以上的环节可供选择，即存在分支的流转，但并不需要用户选择往哪个环节的一种流转操作，在并流的情况下系统将自动往所有的分支环节流转，并等待所有分支环节办理完毕后汇总至他们共同的下一环节。</span>
						<span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">
						</span>
						<span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span lang="EN-US" style="LINE-HEIGHT: 150%; mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.5.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">条件流转</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">条件流转为根据流程设计时所编写的脚本由系统计算出结果并决定流程的下一环节或下一环节的参与者。举例来说，当前申请事项金额大于</span>
						<span lang="EN-US">10</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">万的时候至经理审批，而大于</span>
						<span lang="EN-US">50</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">万的时候则需递交至副总经理审批。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span lang="EN-US">
						</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.6.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">退回</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">审批人员收到申请事项后发现申请条件不符或资料不齐等时需要退回当前申请事项至申请人或上一环节受理人，这种流程操作通常称为退回。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.7.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">取回</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当审批人员发现申请事项发送给了一个不合适的办理人员时，如该办理人员尚未签收该事项，则审批人员可将此申请事项取回，避免不必要的麻烦。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.8.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">挂起</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于申请事项的资料不符或其他原因需要将当前申请事项进行暂停办理，挂起当前流程，当需要恢复的时候则恢复该流程继续执行。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.9.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">终止</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">(</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">撤销申请</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">)<o:p></o:p></span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由于申请事项的不合理或申请人员需要撤销该事项的申请时，可对该流程进行终止或撤销申请操作。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.10.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">会签</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">申请事项需要几个人员按顺序的进行审批，事项将按顺序依次发送给相应的人员进行事项的审批。举例来说，事项需要进行会签，选择人员分别为张三、李四、王五，那么张三首先接收到该事项，张三填写意见后进行发送，系统将自动发送至李四进行处理，李四处理完毕后系统自动发送至王五，王五处理完毕后进入实现的下一处理环节处理。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.11.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">催办</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事项审批过程中的审批人员如觉得该事项在某一个审批人员处停留时间太长的话可对其进行催促，以提醒其迅速办理该事项，在流程操作上称为催办。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.12.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">竞争办理</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">竞争办理的概念为当两个用户都收到某事项时，谁先签收了该事项则为谁对该事项进行办理，同时该事项也将从另一用户的待办列表中移除。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.13.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">联审</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">联审为流程操作中较复杂的一种，事项发送后将发送至当前环节的下面所有环节，这时的环节通常由一个子流程构成，在各自的子流程执行完毕后统一回至主流程的下一环节中，此种流转过程称为联审。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span lang="EN-US">
						</span>
				</p>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
								<span style="mso-list: Ignore">1.14.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
						</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">跳转</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
								<o:p>
								</o:p>
						</span>
				</b>
				<p>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">审批人员在进行事项审批时，觉得该事项不需要经过流程图上所示意的其下的环节而可直接跳转到下面的其他任意一个环节进行流转。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如审批人员觉得不需要提交至科长审批以及处长审批，则可直接通过跳转操作将事项直接送至办公室环节进行办理。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.15.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传阅</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">审批人员在进行事项审批时，觉得需要将该事项传送给相关人员进行查看，此流转过程称为传阅，相关人员在接收到此事项后只可查看不可进行审批。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.16.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传阅办理</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">传阅办理与传阅的不同之处在于接收到此事项的人员可选择对此事项进行办理或不办理，而事项的流转并不等待此传阅办理过程的结束。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">1.17.<span style="FONT: 7pt 'Times New Roman'">        </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">意见补签</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">事项的审批人员在事项已经发送至后续环节办理的过程中均可进行意见的补签，此操作称为意见补签。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; tab-stops: list 21.25pt; mso-outline-level: 1; mso-list: l0 level1 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">      </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">流程管理</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">2.1.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">调度</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在流程执行的过程中根据流程的执行状态等等可对该流程事项进行调度，将事项调度至相应的环节中。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">2.2.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">监控</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对流程事项进行监控，包括查看流程的执行过程</span>
						<span lang="EN-US">(</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最好是可视化的图形表示</span>
						<span lang="EN-US">)</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、流程执行过程中的相关信息</span>
						<span lang="EN-US">(</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如签收人、签收时间、办理时间等</span>
						<span lang="EN-US">)</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">2.3.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查询</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">根据流程事项的关键字对流程事项进行简单或综合的查询。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">2.4.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">统计分析</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对查询所得的流程事项进行统计分析，主要为分析某类事项的办结率、效率、在办件、已办结件、已归档件等等。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; tab-stops: list 21.25pt; mso-outline-level: 1; mso-list: l0 level1 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">      </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">流程列表</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">3.1.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">待办列表</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在待办列表中列出发送至当前用户的所有事项，包括事项的一些基本信息</span>
						<span lang="EN-US">(</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">标题，时间等等</span>
						<span lang="EN-US">)</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，用户通过此处进行事项的签收工作。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">3.2.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已办列表</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在已办列表中列出经过当前用户办理但目前尚未办结归档的所有事项，用户可通过此对这些事项的办理状况进行监控，同时也可对事项进行催办操作。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">3.3.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">已办结列表</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在已办结列表中列出经过当前用户办理并已办结归档的所有事项，用户可通过此查看事项的整个办理过程以及办理结果。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; tab-stops: list 21.25pt; mso-outline-level: 1; mso-list: l0 level1 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">4.<span style="FONT: 7pt 'Times New Roman'">      </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与应用的接口</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">4.1.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组织机构的接口</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在事项流转过程中需要确定下一环节的参与者，此时如配置了此环节需进行选人操作，此时需要调用应用的组织机构接口以提供选人界面供用户选择下一环节的参与者，接口中需提供按角色获取人员以及根据人员组装出其相应的组织机构树。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">4.2.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">角色的接口</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在流程设计时需配置相应环节的参与角色，此时需调用应用提供的角色接口，接口中需提供获取该流程事项类型的角色、创建该流程事项类型的角色的功能，或者也可以采用在设计阶段不调用应用接口，当流程部署至应用时同时创建所需的角色。</span>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; TEXT-INDENT: -1cm; tab-stops: list 1.0cm; mso-outline-level: 2; mso-list: l0 level2 lfo1">
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; mso-fareast-font-family: 'Times New Roman'">
										<span style="mso-list: Ignore">4.3.<span style="FONT: 7pt 'Times New Roman'">    </span></span>
								</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表单的接口</span>
						</b>
						<b style="mso-bidi-font-weight: normal">
								<span lang="EN-US" style="FONT-SIZE: 14pt; LINE-HEIGHT: 125%">
										<o:p>
										</o:p>
								</span>
						</b>
				</p>
				<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 1cm; LINE-HEIGHT: 150%">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">表单使得流程系统有了实际的应用意义，表单作为流转过程中的载体，与流程系统的接口至关重要，涉及到表单的存储方式，表单数据的获取方式，流程环节中表单的挂接，流程信息与表单信息构成的相关数据表。</span>
				</p>
		</div>
<img src ="http://www.blogjava.net/pdw2009/aggbug/69127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/pdw2009/" target="_blank">有猫相伴的日子</a> 2006-09-12 12:31 <a href="http://www.blogjava.net/pdw2009/archive/2006/09/12/69127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>osworkflow不错的文章</title><link>http://www.blogjava.net/pdw2009/archive/2006/06/09/51671.html</link><dc:creator>有猫相伴的日子</dc:creator><author>有猫相伴的日子</author><pubDate>Fri, 09 Jun 2006 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/pdw2009/archive/2006/06/09/51671.html</guid><wfw:comment>http://www.blogjava.net/pdw2009/comments/51671.html</wfw:comment><comments>http://www.blogjava.net/pdw2009/archive/2006/06/09/51671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/pdw2009/comments/commentRss/51671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/pdw2009/services/trackbacks/51671.html</trackback:ping><description><![CDATA[
		<script language="javascript">
				<!--
		function getObject(objectId)
		{
			if(document.getElementById)
			{
				return document.getElementById(objectId)
			}
			else if(document.all&&document.all(objectId))
			{
				return document.all(objectId)
			}
			else
			{
				return false
			}
		}
		
		function hideObject(objectId)
		{
			var obj=getObject(objectId);
						
			if(obj&&obj.style)
			{
				obj.style.display="none";					
				return true
			}
			return false
		}
		
		function showObject(objectId)
		{
			var obj=getObject(objectId);
			if(obj&&obj.style)
			{
				obj.style.display="";
				return true
			}
			return false
		}
		
		function hideComment(){
			hideObject("commentForm");
			hideObject("commentform");
			return;
		}
		
		function showComment(){
			return;
		}
	//-->
		</script>
 OSWorkflow在用户管理方面所提供的功能，主要包括用户的创建、群组的定义、用户验证、以及对step执行人的跟踪记录和执行权限的判断等等。 
<form id="Form1" name="Form1" onsubmit="javascript:return WebForm_OnSubmit();" action="447742.aspx" method="post"><div class="pagelayout"><div class="centercolumn"><div class="post"><div class="postText"><div class="post"><div class="storycontent"><p>用户/群组的管理是由UserManager来完成的，它包含于一个单独的jar包内。我们可以这样使用UserManager：</p><p class="prettycode">UserManager um = UserManager.getInstance();<br />User test = um.createUser("test");<br />test.setPassword("test");<br />Group foos = um.createGroup("foos");<br />test.addToGroup(foos); </p><p>利用UserManager也可以实现用户验证功能：</p><p class="prettycode">UserManager um = UserManager.getInstance();<br />boolean authenticated = false;<br />authenticated = um.getUser(username).authenticate(password);<br />if (authenticated) {<br />　session.setAttribute("username");<br />　……<br />} else {<br />　……<br />} </p><p>关于step执行人的跟踪，首先我们可以在创建流程的时候传入调用者（caller）名称，比如：</p><p class="prettycode">Workflow wf = new BasicWorkflow((String) session.getAttribute("username")); </p><p>BasicWorkflow会负责创建一个实现了WorkflowContext接口的实例，其中记录了caller的信息。利用com.opensymphony.workflow.util.Caller，可以将WorkflowContext中的caller随时植入transientVars中，以供后续的条件判断。为此，我们需要在流程定义文件中的适当位置加入如下定义（比如initial-actions中的pre-functions节点处）：</p><p class="prettycode">&lt;pre-functions&gt;<br />　&lt;function type="class"&gt;<br />　　&lt;arg name="class.name"&gt;com.opensymphony.workflow.util.Caller&lt;/arg&gt;<br />　&lt;/function&gt;<br />&lt;/pre-functions&gt; </p><p>Caller是一个FunctionProvider，其excute方法中包含了如下代码：</p><p class="prettycode">WorkflowContext context = (WorkflowContext) transientVars.get("context");<br />transientVars.put("caller", context.getCaller()); </p><p>同时，我们还可以指定流程中某个step的执行人（owner），只需要在action的results节点处为其指定owner属性：</p><p class="prettycode">&lt;step id="2″ name="Edit Doc"&gt;<br />　&lt;actions&gt;<br />　　&lt;action id="2″ name="Sign Up For Editing"&gt;<br />　　　……<br />　　　&lt;results&gt;<br />　　　　&lt;unconditional-result old-status="Finished” status="Underway” step="2″ owner="${caller}"/&gt;<br />　　　&lt;/results&gt; </p><p>利用caller和owner信息，我们可以在流程定义文件的condition节点中以多种形式指定限定条件，比如，利用脚本限定只允许caller为test的用户触发某结果：</p><p class="prettycode">&lt;result old-status="Finished"&gt;<br />　&lt;condition type="beanshell"&gt;<br />　　&lt;arg name="script"&gt;<br />　　　propertySet.getString("caller").equals("test")<br />　　&lt;/arg&gt;<br />　&lt;/condition&gt;<br />　……<br />&lt;/result&gt; </p><p>又比如，利用util包中的OSUserGroupCondition限定仅当caller为foos群组中的用户时，才触发action：</p><p class="prettycode">&lt;action id="1″ name="Start Workflow"&gt;<br />　……<br />　&lt;condition type="class"&gt;<br />　　&lt;arg name="class.name"&gt;com.opensymphony.workflow.util.OSUserGroupCondition&lt;/arg&gt;<br />　　&lt;arg name="group"&gt;foos&lt;/arg&gt;<br />　&lt;/condition&gt; </p><p>再比如：利用util包中的AllowOwnerOnlyCondition限定仅当caller等于owner时，才触发action：</p><p class="prettycode">&lt;action id="1″ name="Start Workflow"&gt;<br />　……<br />　&lt;condition type="class"&gt;<br />　　&lt;arg name="class.name"&gt;com.opensymphony.workflow.util.AllowOwnerOnlyCondition&lt;/arg&gt;<br />　&lt;/condition&gt; </p></div><div class="feedback"><a href="http://morningspace.51.net/weblog/index.php?p=79#comments"><font color="#667755">Comments (0)</font></a></div><!--
	<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
	    xmlns:dc="http://purl.org/dc/elements/1.1/"
	    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
		<rdf:Description rdf:about="http://morningspace.51.net/weblog/index.php?p=79"
    dc:identifier="http://morningspace.51.net/weblog/index.php?p=79"
    dc:title="OSWorkflow解读之九"
    trackback:ping="http://morningspace.51.net/weblog/wp-trackback.php/79" />
</rdf:RDF>	--></div><div class="date">11/29/2004</div><div class="post"><h3 class="xstorytitle" id="post-78"><a title="Permanent Link: OSWorkflow解读之八" href="http://morningspace.51.net/weblog/index.php?p=78" rel="bookmark">OSWorkflow解读之八</a></h3><div class="meta">Filed under: 
<ul class="post-categories"><li><a title="View all posts in Workflow" href="http://morningspace.51.net/weblog/index.php?cat=6"><font size="2">Workflow</font></a></li></ul>— site admin @ 10:21 am </div><div class="storycontent"><p>WorkflowQuery及其有关查询类&gt;&gt;</p><p>我们知道，通常人们总是希望了解流程当前的运行状况，因此就需要工作流引擎在提供流程流转的基本功能的同时，还需要提供查询功能。在osworkflow中，查询功能是由WorkflowQuery及其相关类提供的。</p><p>WorkflowQuery提供了两种类型的构造函数：</p><p class="prettycode">public WorkflowQuery(int field, int type, int operator, Object value)<br />public WorkflowQuery(WorkflowQuery left, int operator, WorkflowQuery right) </p><p>我们可以利用第一个构造函数创建基本的WorkflowQuery实例，然后利用第二个构造函数组织装配。以查询执行者是“test”且状态是“Underway”的step实例为例：</p><p class="prettycode">WorkflowQuery queryLeft = new WorkflowQuery(<br />　　WorkflowQuery.OWNER, WorkflowQuery.CURRENT, WorkflowQuery.EQUALS, “test");<br />WorkflowQuery queryRight = new WorkflowQuery(<br />　　WorkflowQuery.STATUS, WorkflowQuery.CURRENT, WorkflowQuery.EQUALS, “Underway");<br />WorkflowQuery query = new WorkflowQuery(<br />　　queryLeft, WorkflowQuery.AND, queryRight);<br />List workflows = wf.query(query);<br />for (Iterator iterator = workflows.iterator(); iterator.hasNext();)<br />　　Long wfId = (Long) iterator.next();<br />} </p><p>装配好的查询条件，将会传入AbstractoWorkflow的query方法中，然后再由WorkflowStore的query方法执行具体查询操作。不同的WorkflowStore实例其查询方式不尽相同，以MemoryWorkflowStore为例，它将遍历所有位于cache中的流程，然后将满足条件的流程ID放入一个ArrayList中返回，查询的核心代码采用了递归调用的形式：</p><p class="prettycode">if (query.getLeft() == null) {<br />　return queryBasic(entryId, query);<br />} else {<br />　int operator = query.getOperator();<br />　WorkflowQuery left = query.getLeft();<br />　WorkflowQuery right = query.getRight();<br />　switch (operator) {<br />　　case WorkflowQuery.AND:<br />　　　return query(entryId, left) &amp;&amp; query(entryId, right);<br />　　case WorkflowQuery.OR:<br />　　　return query(entryId, left) || query(entryId, right);<br />　　case WorkflowQuery.XOR:<br />　　　return query(entryId, left) ^ query(entryId, right);<br />　}<br />} </p><p>这里的queryBasic再次使用了递归调用的方式，详细情况可以查看osworkflow的源代码。通过这样的方式，可以满足任意复杂的流程查询条件指定。 </p></div><div class="feedback"><a href="http://morningspace.51.net/weblog/index.php?p=78#comments"><font color="#667755">Comments (0)</font></a></div><!--
	<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
	    xmlns:dc="http://purl.org/dc/elements/1.1/"
	    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
		<rdf:Description rdf:about="http://morningspace.51.net/weblog/index.php?p=78"
    dc:identifier="http://morningspace.51.net/weblog/index.php?p=78"
    dc:title="OSWorkflow解读之八"
    trackback:ping="http://morningspace.51.net/weblog/wp-trackback.php/78" />
</rdf:RDF>	--></div><div class="date">11/28/2004</div><div class="post"><h3 class="xstorytitle" id="post-74"><a title="Permanent Link: OSWorkflow解读之七" href="http://morningspace.51.net/weblog/index.php?p=74" rel="bookmark">OSWorkflow解读之七</a></h3><div class="meta">Filed under: 
<ul class="post-categories"><li><a title="View all posts in Workflow" href="http://morningspace.51.net/weblog/index.php?cat=6"><font size="2">Workflow</font></a></li></ul>— site admin @ 4:32 pm </div><div class="storycontent"><p>Descriptors&gt;&gt;</p><p>在osworkflow的很多地方都会看到Descriptor的使用，最重要的一个是前面提到的WorkflowDescriptor。除此以外还有，ActionDescriptor、ConditionsDescriptor、ConditionDescriptor、FunctionDescriptor、PermissionDescriptor等等。这些类均位于com.opensymphony.workflow.loader包中。它们的作用，除了提供getter方法外（类似model的角色），还负责xml文件的读取与写入。WorkflowDescriptor在执行xml文件的读写时，如果涉及具体的流程定义元素，将会交由对应的Descriptor类来完成。比如，在WorkflowDescriptor的writeXML方法中，对initial action的序列化是这么实现的：</p><p class="prettycode">XMLUtil.printIndent(out, indent++);<br />out.println("&lt;initial-actions&gt;");<br />for (int i = 0; i &lt; initialActions.size(); i++) {<br />　ActionDescriptor action = (ActionDescriptor) initialActions.get(i);<br />　action.writeXML(out, indent);<br />}<br />XMLUtil.printIndent(out, –indent);<br />out.println("&lt;/initial-actions&gt;"); </p><p>实际上，这是典型的Interpreter Pattern的运用，下面是类图总结。<br /><a title="点击查看大图" href="http://morningspace.51.net/weblog/wp-content/osworkflow-desc.jpg"><img height="177" alt="" src="http://morningspace.51.net/weblog/wp-content/osworkflow-desc.jpg" width="580" border="0" /></a></p></div><div class="feedback"><a href="http://morningspace.51.net/weblog/index.php?p=74#comments"><font color="#667755">Comments (0)</font></a></div><!--
	<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
	    xmlns:dc="http://purl.org/dc/elements/1.1/"
	    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
		<rdf:Description rdf:about="http://morningspace.51.net/weblog/index.php?p=74"
    dc:identifier="http://morningspace.51.net/weblog/index.php?p=74"
    dc:title="OSWorkflow解读之七"
    trackback:ping="http://morningspace.51.net/weblog/wp-trackback.php/74" />
</rdf:RDF>	--></div><div class="date">11/27/2004</div><div class="post"><h3 class="xstorytitle" id="post-71"><a title="Permanent Link: OSWorkflow解读之六" href="http://morningspace.51.net/weblog/index.php?p=71" rel="bookmark">OSWorkflow解读之六</a></h3><div class="meta">Filed under: 
<ul class="post-categories"><li><a title="View all posts in Workflow" href="http://morningspace.51.net/weblog/index.php?cat=6"><font size="2">Workflow</font></a></li></ul>— site admin @ 10:53 am </div><div class="storycontent"><p>pre function和post function&gt;&gt;</p><p>pre function和post function是osworkflow提供的又一特色，它为某项执行逻辑提供了前驱和后继处理，运用十分灵活。并且，osworkflow为许多元件的执行逻辑都配备了pre function和post function的调用时机。这一点也可以从AbstractWorkflow.doAction的执行逻辑中看到。可以使用和pre function和post function的元件包括：action，result/unconditional result，step，split，join。</p><p>ScriptVariableParser&gt;&gt;</p><p>作为osworkflow的一个util class，ScriptVariableParser的主要功能是将给定字串中的${var}替换成相应的value。这意味着我们可以在许多地方使用类似于Ant中引用property的语法，来进一步提高灵活性。比如：<br />&lt;results&gt;<br />　&lt;unconditional -result old-status="Finished” status="Underway” step="1″ owner="${caller}"/&gt;<br />&lt;/results&gt;<br />在这里，unconditional result的owner属性将被caller的实际值所替代。</p><p>TransientVars和PropertySet&gt;&gt;</p><p>在osworkflow的流程流转过程中，时常会用到Transient Vars和Property Set。这两个工具用来暂存一些临时信息或者在step间传递一些共享信息，比如：context信息，workflow entry信息，以及上面提到的${var}的value，等等。</p><p>Transient Vars实际上就是一个普通的Map，至于Property Set，则是opensymphony的另一个独立模块，需要单独下载jar包。与Transient Vars将信息暂存与内存不同，Property Set还支持数据库存储（JDBCPropertySet）</p><p>Register&gt;&gt;</p><p>为了更进一步提高灵活性，osworkflow还提供了Register功能。我们可以定义自己的Register，以执行特殊任务，并在流程定义文件中注明，该Register便会被动态注册到Transient Vars中，以备随时取用。以下便是一个典型的使用场景：</p><div class="prettycode ">&lt;registers&gt;<br />　&lt;register type="class” variable-name="log"&gt;<br />　　&lt;arg name="class.name"&gt;com.opensymphony.workflow.util.LogRegister&lt;/arg&gt;<br />　　&lt;arg name="addInstanceId"&gt;true&lt;/arg&gt;<br />　&lt;/register&gt;<br />&lt;/registers&gt; </div><div class="prettycode ">&lt;function type="beanshell” name="bsh.function"&gt;<br />　&lt;arg name="script"&gt;transientVars.get("log").info("function called");&lt;/arg&gt;<br />&lt;/function&gt; </div><p>此外，为了方便使用，osworkflow的util包中还预定义了大量的Condition和FunctionProvider，以及其他的一些辅助类，比如：StatusCondition、AllowOwnerOnlyCondition、BeanShellCondition、Caller、EJBInvoker、ScheduleJob。</p><p>借助这些设施，osworkflow的扩展性、灵活性、易用性，得到了极大的体现。 </p></div><div class="feedback"><a href="http://morningspace.51.net/weblog/index.php?p=71#comments"><font color="#667755">Comments (0)</font></a></div><!--
	<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
	    xmlns:dc="http://purl.org/dc/elements/1.1/"
	    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
		<rdf:Description rdf:about="http://morningspace.51.net/weblog/index.php?p=71"
    dc:identifier="http://morningspace.51.net/weblog/index.php?p=71"
    dc:title="OSWorkflow解读之六"
    trackback:ping="http://morningspace.51.net/weblog/wp-trackback.php/71" />
</rdf:RDF>	--></div><div class="date">11/26/2004</div><div class="post"><h3 class="xstorytitle" id="post-75"><a title="Permanent Link: OSWorkflow解读之五" href="http://morningspace.51.net/weblog/index.php?p=75" rel="bookmark">OSWorkflow解读之五</a></h3><div class="meta">Filed under: 
<ul class="post-categories"><li><a title="View all posts in Workflow" href="http://morningspace.51.net/weblog/index.php?cat=6"><font size="2">Workflow</font></a></li></ul>— site admin @ 12:00 am </div><div class="storycontent"><p>Schedule&gt;&gt;</p><p>在osworkflow中提供了定时执行某项任务的功能，这主要得益于opensymphony的另一个项目——Quatz，该项目为工作的定期执行提供了底层设施支持。为此，我们需要引用quatrz.jar包，好在osworkflow的下载包中已经包含了该文件。</p><p>为了实现任务定时，我们需要在流程定义文件中做类似如下的配置：</p><div class="prettycode">&lt;function type="class"&gt;<br />　&lt;arg name="class.name"&gt;com.opensymphony.workflow.util.ScheduleJob&lt;/arg&gt;<br />　&lt;arg name="triggerId"&gt;1&lt;/arg&gt;<br />　&lt;arg name="jobName"&gt;testJob&lt;/arg&gt;<br />　&lt;arg name="triggerName"&gt;testTrigger&lt;/arg&gt;<br />　&lt;arg name="groupName"&gt;test&lt;/arg&gt;<br />　&lt;arg name="repeat"&gt;10&lt;/arg&gt;<br />　&lt;arg name="repeatDelay"&gt;2000&lt;/arg&gt;<br />　&lt;arg name="cronExpression"&gt;0,5,10,15,20,25,30,35,40,45,50,55 * * * * ?&lt;/arg&gt;<br />　&lt;arg name="username"&gt;test&lt;/arg&gt;<br />　&lt;arg name="password"&gt;test&lt;/arg&gt;<br />　&lt;arg name="local"&gt;true&lt;/arg&gt;<br />　&lt;arg name="schedulerStart"&gt;true&lt;/arg&gt;<br />&lt;/function&gt; </div><p>ScheduleJob是一个FunctionProiver，因此具有execute方法。在该方法执行期间，ScheduleJob将会读取这些配置参数，创建好job实例（实际上是一个JobDetail实例）和trigger实例，然后启动schedule。大致流程如下：<br />- 根据传入的shedulerName参数，利用org.quartz.impl.StdSchedulerFactory的getScheduler方法创建sheduler实例，该实例实现了org.quartz.Scheduler接口；<br />- 根据传入的jobClass参数，决定创建何种Job实例，osworkflow自身提供了两种选择：WorkflowJob和LocalWorkflowJob。前者支持SOAP协议，后者则是本地调用，它们都实现了org.quartz.Job接口。<br />- 创建一个描述Job信息的JobDetail实例，并做好初始设置；<br />- 若传入参数中未指定cronExpression，则创建SimpleTrigger，并设置好startDate、endDate、repeat，否则创建CronTrigger<br />- 在jobDetail和trigger准备完毕后，就可以启动schedule了：</p><p class="prettycode">s.addJob(jobDetail, true);<br />s.scheduleJob(trigger);<br />s.start(); </p><p>scheduler中应该可以同时维护多个job和trigger，当trigger的触发条件满足后，将会激活真正的job实例。由于，scheduler中只保存了jobDetail的实例，因此我猜想，job实例的真正创建是由jobDetail完成的。job实例（WorkflowJob、LocalWorkflowJob或者是其他自定义扩展类）激活后，其excute方法将会被执行。其内部的执行逻辑大体是获得指定的Workflow实例，然后执行该实例的executeTriggerFunction方法。trigger function的执行与先前在流程定义文件中所出现过的普通function大同小异。当然，我们还需要在流程定义文件中加入对trigger function的描述，大致格式如下：</p><p class="prettycode">&lt;trigger-functions&gt;<br />　&lt;trigger-function id="1″ &gt;<br />　&lt;function&gt;<br />　　…<br />　&lt;/function&gt;<br />&lt;/trigger-functions&gt; </p></div><div class="feedback"><a href="http://morningspace.51.net/weblog/index.php?p=75#comments"><font color="#667755">Comments (0)</font></a></div><!--
	<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
	    xmlns:dc="http://purl.org/dc/elements/1.1/"
	    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
		<rdf:Description rdf:about="http://morningspace.51.net/weblog/index.php?p=75"
    dc:identifier="http://morningspace.51.net/weblog/index.php?p=75"
    dc:title="OSWorkflow解读之五"
    trackback:ping="http://morningspace.51.net/weblog/wp-trackback.php/75" />
</rdf:RDF>	--></div><div class="date">11/25/2004</div><div class="post"><h3 class="xstorytitle" id="post-73"><a title="Permanent Link: osworkflow解读之四" href="http://morningspace.51.net/weblog/index.php?p=73" rel="bookmark">osworkflow解读之四</a></h3><div class="meta">Filed under: 
<ul class="post-categories"><li><a title="View all posts in Workflow" href="http://morningspace.51.net/weblog/index.php?cat=6"><font size="2">Workflow</font></a></li></ul>— site admin @ 9:38 am </div><div class="storycontent"><p>流程启动&gt;&gt;</p><p>前面分析流程流转的执行逻辑时，并没有讲到流程的启动。实际上，有了前面的基础，再加上对流程定义文件加载的过程有清晰认识之后，流程启动逻辑是很容易理解的。大致情况如下：<br />- 调用DefaultConfiguration的getWorkflow，传入流程名称，然后返回一个WorkflowDescriptor实例，流程定义文件的加载就是在这个时候完成的；<br />- 然后做一些准备工作，比如：获取WorkflowStore实例、准备好transientVars和propertySet等等；<br />- 调用WorkflowDescriptor的getInitialAction方法，获取initial action（如果有的话），注意此前的第一步中，流程定义文件已经成功加载；<br />- 调用transitionWorkflow，执行流程的流转（就是前面提到doAction执行逻辑时调用的那个重要的方法）；</p><p>在transitionWorkflow方法中，与流程启动后step间的流转稍有不同的是：当发现action为initial action时，将会把流程设置为activated状态，表示流程启动。就是下面这段代码：</p><p class="prettycode">if ((wf.getInitialAction(action.getId()) != null) &amp;&amp; (entry.getState() != WorkflowEntry.ACTIVATED)) {<br />　changeEntryState(entry.getId(), WorkflowEntry.ACTIVATED);<br />} </p><p>WorkflowStore和WorkflowEntry&gt;&gt;</p><p>前面提到过，在AbstractWorkflow中，包含流程流转关键逻辑的transitionWorkflow方法，会创建新的step。而这一创建工作是通过调用另一个member method实现的，也就是createNewCurrentStep。其执行逻辑大致如下：</p><p class="prettycode">int nextStep = theResult.getStep();<br />if (nextStep == -1) {<br />　if (currentStep != null) {<br 