现在的位置: 首页 > 综合 > 正文

seam workflow 工作流demo

2013年10月24日 ⁄ 综合 ⁄ 共 3250字 ⁄ 字号 评论关闭

seamjbpm工作流实现了无缝整合,在基于seam来开发具有工作流的功能时,只需简单的将hibernate.cfg.xmljbpm.cfg.xml的文件配置一下,在WARcomponents.xml声明使用流程定义的jpdl流程定义文件就实现了系统的整合。工作流的核心工作分为二个部分,一为流程的定义,二为流程实例与业务数据实例绑定。之后以不同的角色实现流程的流转即可。

本例的流程定义十分简单,共五个节点,为开始节点,结束节点和三个不同角色的节点的流程。页面的导航在page.xml是配置,各节点的任务开始和结束使用注解式声明,页面的任务列表使用seam提供的单用户。集合表达式和JSF标签来完成用户交互操作。

1 流程定义文件,此流程定义会持久化到对应的数据表内。

2 对登陆类进行指定jbpm用户

3 用户逻辑实现类,用户页面跳转、流程开始、节点流转等。

4 定义业务实体

5 页面交互页面。

 

代码如下:

1 processdefinition.xml流程定义文件

<?xml version="1.0" encoding="UTF-8"?>

<process-definition name="文档测试流程">

   <start-state name="开始">

      <transition name="提交张三审批" to="张三审批"></transition>

   </start-state>

   <task-node name="张三审批">

      <task name="审批1">

         <assignment actor-id="#{actor.id}"/>

      </task>

      <transition name="提交李四审批" to="李四审批"></transition>

   </task-node>

   <task-node name="李四审批">

      <task name="审批2">

         <assignment actor-id="#{actor.id}"/>

      </task>

      <transition name="提交王五审批" to="王五审批"></transition>

   </task-node>

   <task-node name="王五审批">

      <task name="审批3">

         <assignment actor-id="#{actor.id}"/>

      </task>

      <transition name="结束流程" to="结束"></transition>

   </task-node>

   <end-state name="结束"></end-state>

</process-definition>

 

2 对登陆类进行指定jbpm用户

@In(create=true) Actor actor;

actor.setId(user.getUsername());

3 用户逻辑实现类,用户页面跳转、流程开始、节点流转等

/*******************************************************************************

 * 文件名:WorkFlowAction.java<br>

 * 版本: <br>

 * 描述:  <br>

 * 版权所有: <br>

 * //////////////////////////////////////////////////////// <br>

 * 创建者: 沙振中 <br>

 * 创建日期: May 12, 2009 <br>

 * 修改者:  <br>

 * 修改日期:  <br>

 * 修改说明:  <br>

 ******************************************************************************/

package org.shaneseam.action;

 

import javax.annotation.Resource;

import javax.ejb.Remove;

import javax.ejb.SessionContext;

import javax.ejb.Stateful;

import javax.persistence.EntityManager;

import javax.persistence.PersistenceContext;

 

import org.shaneseam.action.inte.WorkFlow;

import org.shaneseam.entitybean.WorkFlowDoc;

import org.jboss.seam.ScopeType;

import org.jboss.seam.annotations.In;

import org.jboss.seam.annotations.Name;

import org.jboss.seam.annotations.Out;

import org.jboss.seam.annotations.bpm.BeginTask;

import org.jboss.seam.annotations.bpm.CreateProcess;

import org.jboss.seam.annotations.bpm.EndTask;

 

@Stateful

@Name("workflowaction")

public class WorkFlowAction implements WorkFlow{

 

         @PersistenceContext

    EntityManager em;

        

    @Resource

    SessionContext ctx;

        

    @In(create=true)

    @Out

    WorkFlowDoc workFlowDoc;

        

    @In (required=false)  

    @Out(scope=ScopeType.BUSINESS_PROCESS, required=false)  

    Long workFlowId;   

   

    @CreateProcess(definition="文档测试流程") 

         public String createDoc() {

                          

            em.persist(workFlowDoc);

            workFlowId= workFlowDoc.getWorkFlowId();  

            return "success";

         }

        

         public String toPage(){

                  

                   return "topage";

         }

        

         @BeginTask

         @EndTask   

         public String taskOne() {

                   System.out.println("workFlowId========="+workFlowId); 

                   workFlowDoc=(WorkFlowDoc)em.createQuery("select o from WorkFlowDoc o where o.workFlowId= :workFlowId")

                   .setParameter("workFlowId", workFlowId).getSingleResult();

                   return "accept"; 

         }

 

 

         public String toListNode()

         {

抱歉!评论已关闭.