SEAM框架之我见--Business Process Management

一、 概念
相对PageFlow(页面流)由同一用户与系统之间的一系列交互完成一项任务不同,Business Process Management(工作流)的范围更宽,它包含一系列相关任务,这些任务一般由不同人在不同时间完成。
Seam对jbpm的集成的方便性我认为表现在三个方面:
1. 提供内置对象显示任务列表给用户;
2. 前文曾提到seam除新增conversation上下文外,还新增了business_ process上下文,这就是为工作流管理提供的,应用程序可以将流程中涉及的相关状态作为jbpm变量存储于business process上下文,然后seam可以持久化这些jbpm变量;
3. 提供方便的标签开始一个流程,开始一个任务、结束一个任务。
二、 用法
下面我还是用一个示例讲述工作流的用法,这个示例是一个客户订单审批的例子:客户在网上提交一个订单后,开始订单审批流程;经理查看任务列表,接收订单,查看订单明细信息,根据情况批准或不批准此订单。
1. 流程定义
流程图:
    (见附件)
Jpdl文件:

    (见附件) <process-definition name="订单管理"></process-definition>

2. 初始化actor ids
Jbpm对流程中用户的管理是通过actor id和group actor ids.为此seam内置了一个部件Actor来方便指定当前的actor ids.这个工作一般在用户登陆时完成。
@In(create=true) Actor actor

Public String login(){
  …
  Actor.setId(user.getUserName());
  Actor.getGroupActorIds().addAll(user.getGroupNames());
  …
}
3. 启动一个工作流
@out(scope=ScopeType.BUSINESS_PROCESS,required=false)
Long orderId;
@Out(scope=ScopeType.BUSINESS_PROCESS,required=false)
Float amount;
@Out(value=”customer”,scope=ScopeType.BUSINESS_PROCESS,required=false)
String customerName;

  @CreateProcess(definition="OrderManagement")
      public void submitOrder() {
        try {
            completedOrder = purchase(customer, currentOrder);

            orderId      = completedOrder.getOrderId();
            amount       = completedOrder.getNetAmount();
            customerName = completedOrder.getCustomer().getUserName();
        } catch (InsufficientQuantityException e) {
           …       
        } catch (Throwable t) {
            …
        }
      }    
4. 任务分配
当开始一个工作流的时候,任务实例被创建,任务实例必须分配给一个用户或用户组,相应seam中分配任务有二种方式—分配给用户或用户组,如:
分配给用户:
<task description="ship order" name="ship"></task>(见附件)
          <assignment actor-id="#{ shipperAssignment.actorId}"></assignment>                    
  
分配给用户组:
<task description="Ship order" name="ship"></task>(见附件)
           <assignment pooled-actors="#{shipperAssignment.pooledActors}"></assignment>

5. 任务列表
有两个内置的seam部件方便显示任务列表—一个是显示分配给组用户的任务,一个是显示分配给当前用户的指定类型的任务。
显示分配给当前用户的指定类型的任务示例如下:
<h:datatable var="task" value="#{taskInstanceListForType['ship']}">
            (见附件)<h:column>               </h:column>              
</h:datatable>
显示分配给当前用户所属组的任务示例如下:
<h:datatable var="task" value="#{pooledTaskInstanceList}">(见附件)<h:column>            </h:column>
            <h:column>
                  <s:link value="Assign" action="#{pooledTask.assignToCurrentActor}" taskinstance="#{task}" linkstyle="button">
             </h:column>
</h:datatable>

6. 开始任务
Seam提供了两个标注开始任务:@StartTask和@BeginTask.开始任务时开始一个conversation上下文,能在其中访问保存在business process上下文中的变量。
@BeginTask
      public String viewTask() {
    order = (Order) em.createQuery("select o from Order o join fetch o.orderLines where o.orderId = :orderId")
            .setParameter("orderId", orderId)
            .getSingleResult();
          return "accept";
}
7. 结束任务
Seam提供@EndTask标注结束任务,并指明下一步流程。如:
@EndTask(transition="approve")
      public String accept() {
          order.process();
          return "admin";
 }
8. 系统配置
和配置pageflow类似,seam在component.xml文件中配置JBPM.
<component class="org.jboss.seam.core.Jbpm">(见附件)  </component>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值