论坛首页 Java企业应用论坛

基于开源工作流引擎OSWorkflow的业务系统实例——请假审批系统

浏览 114527 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-07-23  
可能是中文问题,把system.out.println()的中文去掉,就好了
0 请登录后投票
   发表时间:2007-07-24  
挺好简单的例子可以给初学者一个形象的概念
jbpm底层一定要用hibernate,要是有jdbc实现就好了
0 请登录后投票
   发表时间:2007-07-27  
Workflow wf = new BasicWorkflow((String) session.getAttribute("username"));
    Map map = new HashMap();
    map.put("applicant", applicant);
    map.put("reason", reason);
    map.put("dayCount", new Integer(dayCount));
   
    try {
      long wfid = wf.initialize("leave_apply", 100, null);

为什么我启用一个工作流的时候会报这个错呢?
DEBUG [(opensymphony.workflow.AbstractWorkflow)] Outcome: stepId=1, status=Underway, owner=, actionId=100, currentStep=0
DEBUG [(spi.jdbc.JDBCWorkflowStore)] Executing SQL statement: INSERT INTO OS_CURRENTSTEP (ID,ENTRY_ID, STEP_ID, ACTION_ID, OWNER, START_DATE, DUE_DATE, FINISH_DATE, STATUS, CALLER ) VALUES (?, ?, ?, null, ?, ?, ?, null, ?, null)
com.opensymphony.workflow.StoreException: Unable to create current step for workflow instance #7: root cause: Cannot add or update a child row: a foreign key constraint fails (`workflowtest/os_currentstep`, CONSTRAINT `os_currentstep_ibfk_2` FOREIGN KEY (`OWNER`) REFERENCES `os_user` (`USERNAME`))

owner没有值造成的...而我session.getAttribute("username")是可以取得值的...??
0 请登录后投票
   发表时间:2007-07-27  
你的session.getAttribute("username")取值是多少
看异常信息是插入的纪录OWNER字段违反外键约束,你看看取出的数据和os_user表中数据是否一致。
如果正常登陆,应该不会出现不一致的问题,检查检查
0 请登录后投票
   发表时间:2007-07-31  
你好,我想把这个工程放在tomcat下运行,另外我没用JSQLConnect这种方式,而是用jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=osworkflow_app,结果连登录都不行。小弟刚开始接触这个,希望。QQ:251713646
希望大家,谢谢
0 请登录后投票
   发表时间:2007-07-31  
to:lfh220
用什么驱动没有关系,都是可以的,我只是随便用了一个;
结果连登录都不行,那就根据后台显示的异常信息进行检查
0 请登录后投票
   发表时间:2007-08-02  
非常感谢楼主把这么好的东西贡献出来.
你用的是jboss,能把tomcat的配置也写出来吧?谢谢.
0 请登录后投票
   发表时间:2007-08-02  
to:zhangyqpost
tomcat下都一样,只是数据源配置一下即可
0 请登录后投票
   发表时间:2007-08-03  
你好,能不能通过组中的人员来审批。而不是hr,manager这两个人,希望楼主提供这样的例子,还有hr manager都不能申请请假
0 请登录后投票
   发表时间:2007-08-03  
lfh220 写道
能不能通过组中的人员来审批。而不是hr,manager这两个人,希望楼主提供这样的例子

通过组来审批是完全可以的,上面的例子是通过在流程定义文件中,为每个审批步骤指定一个特定的用户来作为所有者,配置如:
<result old-status="Finished" status="Underway" step="2" owner="manager1">
这样就限制了下一个步骤只能由用户名为manager1的这个人来完成。
如果某个步骤可以由一个组中的任何用户来操作,就可以将owner设置为组的名字,后面提取任务的时候通过组名来提取,比如一个部门有多个主管可以审批请假申请(先不管业务上是否合理),这些主管都属用用户组manager,这样就可以将下一步审批的owner置为manager,然后在后面用户任务提取的页面,即underway.jsp中,通过组名来提取任务即可,代码如下,注释部分为原来的提取表达式:
  String username = (String) session.getAttribute("username");
  UserManager userManager = UserManager.getInstance();
  User user = userManager.getUser(username);
  List groups = user.getGroups();
  
  Workflow wf = new BasicWorkflow(username);
  
//  NestedExpression nestedExpression = new NestedExpression(
//  new Expression[]{new FieldExpression(FieldExpression.OWNER, FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS, session.getAttribute("username")),
//                   new FieldExpression(FieldExpression.STATUS, FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS, "Underway")}, 
//                   NestedExpression.AND) ;

  Expression[] expressions = new Expression[groups.size()];
  for (int i = 0; i < groups.size(); i++){
    expressions[i] = new FieldExpression(FieldExpression.OWNER,
     FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS, (String)groups.get(i));
  }
  NestedExpression nestedExpression = new NestedExpression(
  new Expression[]{new NestedExpression(expressions, NestedExpression.OR),
                   new FieldExpression(FieldExpression.STATUS, FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS, "Underway")}, 
                   NestedExpression.AND);
                   
  WorkflowExpressionQuery query = new WorkflowExpressionQuery(nestedExpression);

后面代码全部一样

lfh220 写道
还有hr manager都不能申请请假

在示例中hr等不能申请请假,是因为流程定义文件中有限制,如下:
  <step id="1" name="请假申请">
   <actions>
    <action id="1" name="提交请假申请">
     <restrict-to>
      <conditions type="AND">
       <condition type="class">
        <arg name="class.name">com.opensymphony.workflow.util.OSUserGroupCondition</arg>
        <arg name="group">employee</arg>
       </condition>
      </conditions>
     </restrict-to>
     ......
    </action>
   </actions>
  </step>
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics