87347969 2012-11-25
工作流在企业开发中经常被使用,最近半年做了一个工作流程引擎,没商用,纯粹个人爱好。 最近半个月,就将半年的学习总结一下,和大家共享一下开发的乐趣。
希望不要太监, ~~
【工作流的概念】
【基本的工作流模式】
【常用的开源流程引擎介绍】
【基本架构】
【自己来实现】
好,先抛砖引玉,贴一下流程模板
AND
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns2:workflow name="Example_WorkFlow_XOR" type="MAIN" xmlns:ns2="http://www.donkey.com/workflow"> <ns2:desc>这是一个测试流程生成的</ns2:desc> <ns2:end name="END" /> <ns2:tache name="TACHE_A"> <transition to="TACHE_AND_JOIN" desc="到合并节点" /> </ns2:tache> <ns2:tache name="TACHE_B"> <transition to="TACHE_AND_JOIN" desc="到合并节点" /> </ns2:tache> <ns2:and_split name="TACHE_AND_SPLIT"> <transition to="TACHE_A" desc="到普通环节TACHE_A" /> <transition to="TACHE_B" desc="到普通环节TACHE_B" /> </ns2:and_split> <ns2:and_join name="TACHE_AND_JOIN"> <transition to="END" desc="节点->结束节点" /> </ns2:and_join> <ns2:start name="START"> <transition to="TACHE_AND_SPLIT" desc="开始->节点A" /> </ns2:start> <ns2:version version="1.0" status="publish" desc="这个版本已经启用" /> <ns2:template name="example"> <ns2:category name="example"> <ns2:parent name="root" /> </ns2:category> </ns2:template> </ns2:workflow>
XOR <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:workflow name="Example_WorkFlow_XOR" type="MAIN" xmlns:ns2="http://www.donkey.com/workflow"> <ns2:desc>这是一个测试流程生成的</ns2:desc> <ns2:end name="END" /> <ns2:tache name="TACHE_A"> <transition to="TACHE_XOR_JOIN" desc="到合并节点" /> </ns2:tache> <ns2:tache name="TACHE_B"> <transition to="TACHE_XOR_JOIN" desc="到合并节点" /> </ns2:tache> <ns2:xor_split name="TACHE_XOR_SPLIT"> <transition to="TACHE_A" desc="到普通环节TACHE_A"> <ns2:condition type="SQL"> <ns2:action>select count(1) from dual where 1 = :value</ns2:action> <ns2:param> <ns2:exp scope="INSTANCE" name="value" expression="value" /> </ns2:param> </ns2:condition> </transition> <transition to="TACHE_B" desc="到普通环节TACHE_B" /> </ns2:xor_split> <ns2:xor_join name="TACHE_XOR_JOIN"> <transition to="TACHE_XOR_JOIN" desc="到合并节点" /> </ns2:xor_join> <ns2:start name="START"> <transition to="TACHE_XOR_SPLIT" desc="开始->节点A" /> </ns2:start> <ns2:version version="1.0" status="publish" desc="这个版本已经启用" /> <ns2:template name="example"> <ns2:category name="example"> <ns2:parent name="root" /> </ns2:category> </ns2:template> </ns2:workflow>
LOOP
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:workflow name="Example_WorkFlow_XOR" type="MAIN" xmlns:ns2="http://www.donkey.com/workflow"> <ns2:desc>这是一个测试流程生成的</ns2:desc> <ns2:end name="END" /> <ns2:tache name="TACHE_A"> <transition to="TACHE_XOR_JOIN" desc="到合并节点" default="false" /> </ns2:tache> <ns2:tache name="TACHE_B"> <transition to="TACHE_LOOP" desc="到合并节点" default="false" /> </ns2:tache> <ns2:xor_split name="TACHE_XOR_SPLIT"> <transition to="TACHE_A" desc="到普通环节TACHE_A" default="false"> <ns2:condition type="SQL"> <ns2:action>select count(1) from dual where 1 = :value</ns2:action> <ns2:param> <ns2:exp scope="INSTANCE" name="value" expression="value" /> </ns2:param> </ns2:condition> </transition> <transition to="TACHE_B" desc="到普通环节TACHE_B" default="false" /> </ns2:xor_split> <ns2:loop max="0" name="TACHE_LOOP"> <transition to="TACHE_B" desc="循环节点-B" default="false"> <ns2:condition type="SQL"> <ns2:action>select count(1) from dual where 1 = :value</ns2:action> <ns2:param> <ns2:exp scope="INSTANCE" name="value" expression="value" /> </ns2:param> </ns2:condition> </transition> <transition to="TACHE_XOR_JOIN" desc="循环节点-Xor_join" default="true" /> </ns2:loop> <ns2:xor_join name="TACHE_XOR_JOIN"> <transition to="END" desc="节点->结束节点" default="false" /> </ns2:xor_join> <ns2:start name="START"> <transition to="TACHE_XOR_SPLIT" desc="开始->节点A" default="false" /> </ns2:start> <ns2:version version="1.0" status="publish" desc="这个版本已经启用" /> <ns2:template name="example"> <ns2:category name="example"> <ns2:parent name="root" /> </ns2:category> </ns2:template> </ns2:workflow>