- 浏览: 5105649 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:wallimn
电邮:wallimn@sohu.com
博客:http://wallimn.iteye.com
http://blog.csdn.net/wallimn
时间:2006-11-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/
相信现在关注工作流的人越来越多了,我也是其中之一,上网狂搜了一下,发现很多人说开源的工作流OSWorkFlow还不错,我也Download下载研究研究。
文档很少,只有上网再搜,发现很多资料都是你转载我,我转载你,原创的不多。反来复去地看了看网上的资料,再看看OSWorkFlow的自带文档,调试带的例子。
发现那个例子说明性不是很强,把人弄得很晕,经过一翻分析,我把例子修改了一下,添加了些注释,一些JSP页面也修改了一下并进行了汉化,设定了几个用户组,分别具有不同的权限,使工作流流转起来真正象个工作流。希望能对刚开始学习工作流的同志有所帮助。下面我贴出工作流定义的XML文件。完整的例子请到我的网络硬盘下载。下载地址:http://wallimn.gbaopan.com
工作流文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.6//EN" "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd
">
<!--OSWorkFlow工作流定义文件修改 by wallimn(wallimn@sohu.com
)-->
<!--欢迎转载,转载请保留这些信息。-->
<workflow>
<initial-actions>
<action id="100" name="启动工作流">
<restrict-to>
<conditions type="AND">
<condition type="beanshell">
<arg name="script">true</arg>
</condition>
<condition type="class"><!--仅作家组可以启动流程-->
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">writer</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class">
<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
<results><!--转到step 1,流程所有者设为流程启动者-->
<unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/>
</results>
</action>
</initial-actions>
<steps>
<step id="1" name="撰写初稿">
<external-permissions>
<permission name="permA">
<restrict-to>
<conditions type="AND">
<condition type="class"><!--流程处于Underway状态(流程已经启动)-->
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class"><!--流程启动者(也即流程所有者)-->
<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
</condition>
</conditions>
</restrict-to>
</permission>
</external-permissions>
<actions>
<action id="1" name="完成初稿">
<restrict-to>
<conditions type="AND">
<condition type="beanshell">
<arg name="script">true</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.AllowOwnerOnlyCondition</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="beanshell">
<arg name="script">
String caller = context.getCaller();
propertySet.setString("caller", caller);
boolean test = true;
String yuck = null;
String blah = "987654321";
System.out.println("Step:1预处理函数");
</arg>
</function>
</pre-functions>
<results>
<result old-status="Finished" split="1">
<conditions type="AND"><!--如果是新手(假定新手的用户名为newplayer),流转到分枝1-->
<condition type="beanshell">
<arg name="script">
propertySet.getString("caller").equals("newplayer")
</arg>
</condition>
</conditions>
<post-functions>
<function type="beanshell">
<arg name="script">
System.out.println("Step:1的Action后处理函数");
</arg>
</function>
</post-functions>
</result>
<unconditional-result old-status="Finished" split="2"/><!--其余情况跳转到分枝2-->
</results>
<post-functions>
<function type="beanshell">
<arg name="script">
System.out.println("Step:2的后处理函数");
</arg>
</function>
<!--
<function type="class">
<arg name="class.name">com.opensymphony.workflow.util.ScheduleJob</arg>
<arg name="triggerId">1</arg>
<arg name="jobName">testJob</arg>
<arg name="triggerName">testTrigger</arg>
<arg name="groupName">test</arg>
<arg name="repeat">10</arg>
<arg name="repeatDelay">2000</arg>
<arg name="cronExpression">0,5,10,15,20,25,30,35,40,45,50,55 * * * * ?</arg>
<arg name="username">test</arg>
<arg name="password">test</arg>
<arg name="local">true</arg>
<arg name="schedulerStart">true</arg>
</function>
-->
</post-functions>
</action>
</actions>
</step>
<step id="2" name="校对稿件"><!--稿件都弄好了,校对一下吧-->
<external-permissions>
<permission name="permB">
<restrict-to>
<conditions type="AND">
<condition type="class"><!--状态为Underway-->
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class"><!--仅允许editor组的成员-->
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">editor</arg>
</condition>
</conditions>
</restrict-to>
</permission>
</external-permissions>
<actions>
<action id="2" name="准备校对积压的稿件"><!--从队列中提取,准备校对-->
<restrict-to>
<conditions type="AND">
<condition type="class"><!--队列中-->
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Queued</arg>
</condition>
<condition type="class"><!--仅允许editor组的成员-->
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">editor</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class"><!--设置caller变量为执行当前action的用户-->
<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
<results><!--状态变为Underway-->
<unconditional-result old-status="Finished" status="Underway" step="2" owner="${caller}"/>
</results>
</action>
<action id="3" name="校对完成"><!--检验完成,流转到下一步-->
<restrict-to>
<conditions type="AND">
<condition type="class"><!--处理当前的任务(也就是说不在队列中的)-->
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class"><!--仅允许editor组的成员-->
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">editor</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class"><!--设置mostRecentOwner的值为第一阶段时的Owner-->
<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
<arg name="stepId">1</arg>
</function>
</pre-functions>
<results>
<unconditional-result old-status="Finished" status="Underway" step="3" owner="${mostRecentOwner}"/>
</results>
</action>
<action id="4" name="处理不过来了,等一等"><!--还有几个没有下理,排一下队,等我空闲了再说吧-->
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class"><!--仅允许editor组的成员-->
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">editor</arg>
</condition>
</conditions>
</restrict-to>
<results><!--转为排队等候状态-->
<unconditional-result old-status="Finished" status="Queued" step="2"/>
</results>
</action>
</actions>
</step>
<step id="3" name="检查校对情况">
<external-permissions>
<permission name="permA">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class"><!--publisher组的成员来检查-->
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
</permission>
</external-permissions>
<actions>
<action id="5" name="重新校对"><!--错误比较多,重新校对-->
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class">
<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
<arg name="stepId">2</arg>
</function>
</pre-functions>
<results>
<unconditional-result old-status="Finished" status="Underway" step="2" owner="${mostRecentOwner}"/>
</results>
</action>
<action id="6" name="需要二审"><!--需要二审-->
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
<results><!--转入二审阶段-->
<unconditional-result old-status="Finished" status="Queued" step="4"/>
</results>
</action>
<action id="7" name="可以出版了"><!--可以了,准备出版-->
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class">
<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
<arg name="stepId">2</arg>
</function>
</pre-functions>
<results>
<unconditional-result old-status="Finished" status="Underway" step="5" owner="${mostRecentOwner}"/>
</results>
</action>
</actions>
</step>
<step id="4" name="二审阶段"><!--二审阶段-->
<external-permissions>
<permission name="permC">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
</permission>
</external-permissions>
<actions>
<action id="8" name="二审通过"><!--二审通过,转到step2,等候出版-->
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class">
<arg name="class.name">com.opensymphony.workflow.util.MostRecentOwner</arg>
<arg name="stepId">3</arg>
</function>
</pre-functions>
<results>
<unconditional-result old-status="Finished" status="Underway" step="3" owner="${mostRecentOwner}"/>
</results>
</action>
<action id="9" name="从排队中取出准备二审"><!--仍停留在此阶段-->
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Queued</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class">
<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
<results>
<unconditional-result old-status="Finished" status="Underway" step="4" owner="${caller}"/>
</results>
</action>
<action id="10" name="好多要二审的,排队等等">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
<results><!--变为排队状态-->
<unconditional-result old-status="Finished" status="Queued" step="4"/>
</results>
</action>
</actions>
</step>
<step id="5" name="出版稿件">
<actions>
<action id="11" name="出版">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">publisher</arg>
</condition>
</conditions>
</restrict-to>
<pre-functions>
<function type="class">
<arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
</function>
</pre-functions>
<results>
<unconditional-result old-status="Finished" status="Finished" step="5" owner="${caller}"/>
</results>
</action>
</actions>
</step>
<step id="6" name="设计封面">
<actions>
<action name="封面设计完成" id="12">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
<arg name="stepId">6</arg>
</condition>
<condition type="class"><!--仅允许美工组-->
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">designer</arg>
</condition>
</conditions>
</restrict-to>
<results>
<unconditional-result old-status="Finished" join="1"/>
</results>
</action>
</actions>
</step>
<step id="7" name="设计插图">
<actions>
<action name="插图设计完毕" id="13">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
<arg name="stepId">7</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">designer</arg>
</condition>
</conditions>
</restrict-to>
<results>
<unconditional-result old-status="Finished" owner="test" status="Underway" step="8"/>
</results>
</action>
</actions>
</step>
<step id="8" name="排版">
<actions>
<action name="排版完毕" id="14">
<restrict-to>
<conditions type="AND">
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.StatusCondition</arg>
<arg name="status">Underway</arg>
<arg name="stepId">8</arg>
</condition>
<condition type="class">
<arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
<arg name="group">designer</arg>
</condition>
</conditions>
</restrict-to>
<results>
<unconditional-result old-status="Finished" join="1"/>
</results>
</action>
</actions>
</step>
</steps>
<splits>
<split id="1">
<unconditional-result old-status="Finished" status="Underway" owner="test" step="6"/>
<unconditional-result old-status="Finished" status="Underway" owner="test" step="7"/>
</split>
<split id="2">
<unconditional-result old-status="Finished" status="Queued" step="2"/>
</split>
</splits>
<joins>
<join id="1">
<conditions type="AND">
<condition type="beanshell">
<arg name="script"><![CDATA[
"Finished".equals(jn.getStep(6).getStatus()) && "Finished".equals(jn.getStep(8).getStatus())
]]></arg>
</condition>
</conditions>
<unconditional-result old-status="Finished" status="Underway" owner="test" step="2"/>
</join>
</joins>
</workflow>
完整例子请到我的网络硬盘下载:http://wallimn.ys168.com
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18193编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2131部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3177两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 16451.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7562一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1178我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3212做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1093写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3909大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2300一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7316我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2696@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2010转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3047用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1688element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9719示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6196申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5202最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5241springboot2.0跨域配置: 一、代码 ... -
微信小程序使用code换openid的方法(JAVA、SpringBoot)
2018-07-01 21:52 10301微信小程序序的代码中提示,使用code换取openid,但 ...
相关推荐
工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow工作流 osworkflow
状态机工作流OSWorkflow 包括中文手册、开发指南等
自己写的 OsWorkflow 工作流 实例 已测试通过
osworkflow详细资料 pdf 工作流
osworkflow入门资料,帮助大家入门早期工作流项目
从j2ee应用服务器,到o/rmapping工具,到这个工作流引擎等等。为什么Shark的持久层采用DODS来实现?就是因为他们是一家人。 Jbpm的靠山是jboss。Jbpm3的持久层采用hibernate3来实现,也是因为这个原因吧。Jbpm3的...
由OpensymPhony组织开发的开源工作流引擎 OSWorkflow是一种非常灵活的工作 流引擎。它主要基于有限状态机理论,通过状态的迁移描述工作的流转。每一种状态(state) 被描述成为 step ID和 status。从一种状态(state)...
工作流引擎(osworkflow) 2.80 有例子,有文档,可以自己跑例子看效果
这是一点关于OSWorkFlow 工作流系统设计知识的详细讲解
电子政务,即政府机构运用现代计算机和网络技术,将其管理和服务职能转移到网络,同时实现政府组织结构和工作流程的重组优化,超越时间、空间和部门分隔的制约,为全社会提供高效优质、规范透明和全方位的管理与服务...
一种基于OSWorkflow工作流引擎的工作流监控技术,仇璐,,目前工作流监控技术存在的问题是:流程监控得到的流程图与实际业务流程有一定差距,针对存在的这个问题,本文提出了一种基于OSWork
OSWorkflow 工作流 开发指南、中文手册
Osworkflow2.8 工作流,简单的实现流程。
OSWorkflow演示例子
用OSWorkFlow和JBPM开发工作流异同点解析
OsWorkflow2.8(工作流)例子
一个osworkflow的例子,其实就是官方的例子,只是除了是汉化的外我还把在jsp中的Java代码提取到一个单独的类中,这样便于阅读和理解。希望对大家有帮助。
开源工作流osworkflow的资料
OSWorkflow