1、osworkflow.xml文件里面的配置基本不动,你需要按照osworkflow的要求建造数据库表。
2、当你要用osworkflow的函数时,你得先调用这个类
如:你用它的内置函数call
你的先定义
<action id="1" name="Start First Draft">
<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="1" owner="${caller}"/>
</results>
</action>
3、OSUserGroupCondition - 使用OSUser来判断调用者是否在参数"group"中,有个OSUser.xml文件。
StatusCondition - 判断当前步骤的状态是否与参数"status"相同。
AllowOwnerOnlyCondition - 如果调用者是指定的步骤的所有者的话,那么只返回true,如果没有指明步骤的话,就返回当前步骤。
DenyOwnerCondition - 与AllowOwnerOnlyCondition功能相反
4、 Caller用当前动作的执行者名字设置持久化变量caller。
MostRecentOwner用最近指定的步骤的所有者的名字来设置持久化变量mostRecentOwner。可选特 性可以在有所有者时将变量设置为nothing,或者返回一个内部错误。
5、------------------------------osworkflow 异常大全 --------------------------------
1-----org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
xml配置文件头错误 如:docpath写错了什么的
一般就用tomact配置页面配置出来的数据
2-----javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
首先 应配置同样工程名称的.xml文件 放在tomact的Tomcat 5.0/conf/Catalina/localhost目录
里面配置的为数据库连接池
其次 在osworkflow中用到数据连接池的应在前加java:comp/env/XXXXXXX
再次 应在web.xml中配置
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/leave</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
前提是你应在tomact配置了连接池
3--------提示初始化的action的ID value为‘ ’应查看你的流程xml文件里面 action是否重复 action的名字在整个xml文件都是唯一的
4--------提示找不到配置文件 你应注意把所有的配置文件放在src的根目录
5--------tomact提示找不到驱动程序 把驱动程序classes12.jar放到Tomcat 5.0/common/lib下
6---------报orcale数据库增长因子的错SEQUENCE ;应注意数据库SEQUENCE 的创建
正确的为 应注意SQL语句顺序
create sequence my_seq ---创建序列名
start with 1 ---从1开始
increment by 1 ---每次增长1
maxvalue 999999999 ---最大值
minvalue 1 ---最小值
cycle ---循环
cache ---缓存
order
7--------You are restricted from initializing this workflow 异常
应注意你的workflow配置里限制了你不能初始化flow,看看<initial-actions>的<restrict-to>段落
8------------Unable to create current step for workflow instance #14: root cause: ORA-02289: ????????
osworkflow的内置错误 指orcale里面的 step 的ID自增因子不存在。
9、java.sql.SQLException: ORA-02291: ???????? (LEAVE.SYS_C001393) - ????????
Cause: A foreign key value has no matching primary key value.(原因:外键值没有匹配的主键值与它匹配)
Action: Delete the foreign key or add a matching primary key.(解决:删除外键关联或者添加一个和外键匹配的主键值)
解决方法:通过找程序找出这个主外键数据不一致冲突的地方 修改数据库数据
10、ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
(1).可能是系统资源不足或oracle正在作一些非常占系统处资源的处理(建议从新启动数据库)
(2).该登录的用户没有分配删除表的权限。
(3)表被锁住了,杀掉锁表的进程,最好是等一会儿再做,
(4)是不是你在别的程序中正在使用这个表!
-------------------------------------------------------------------------------------------
6、在流程配置文件的同一个action中 脚本方法不可以重复定义
7、在初试化workflow时initialize()方法 和调用工作流doaction()都要
Workflow work = new BasicWorkflow(username);//设置上下文context 将caller值传入
应注意username的传入 否则会引发异常
8、
<condition type="class">
<arg name="class.name">
com.opensymphony.workflow.util.AllowOwnerOnlyCondition
</arg>
</condition>
含义为:如果调用者是指定的步骤的所有者的话,那么只返回true,如果没有指明步骤的话,就返回当前步骤。
不应该用在配置文件的<initial-actions>XXX</initial-actions>中
9、问题:从配置文件获得参数可以 读Map args中的数据 但如何动态的给配置文件里面的参数赋值??
10、一旦输入控件被disable掉 那么就无法用request.getparamenter(“XXX”)获得它的value
11、核心方法propertySet的值一般在每个方法函授的excute方法里面设置;它可以在任意地方取出来
propertySet一般不能设置object对象,会要求你序列化 所以当你要传对象时最好使用transientVars
当你想初始化时传入值 那么你就在doaction方法中放入map,然后你可以在execute方法中将map transientVars的值set到ps中。
12、方法 execute(Map transientVars, Map args, PropertySet ps) 里面的transientVars值是在执行工作流 wf.doAction(id, action, map);的map值 你可以创建一个map,
13、工作流不能执行完了 方法step=-1时 又返回来执行其他的步骤;-1就是这个工作流已经完了
14、工作流的wf.doAction方法只能创建一次 你不能这个方法创建了 另一个方法又创建它
你一般没办法在别的地方重新获得动作列表然后又执行他 否则他可能会重复出现相同action