Fuguo-workflow-core

来自ling
跳转至: 导航搜索

功能

基本属性

  • 名称
  • 事件Bean
  • 描述

任务配置

  • 任务名称
  • url

工作流概述 开始节点 结束节点 人工任务节点 子流程节点 路由决策节点 动作节点 分支节点 动态分支节点 聚合节点 业务与流程的绑定


TaskClient TaskListener CountersignHandler AssignmentHandler DeptAssigneeProvider UserAssigneeProvider ReminderHandler CalendarProvider TaskDueDefinitionProvider DecisionHandler ConditionHandler ForeachHandler

依赖

配置文件说明

关键类说明

TaskClient TaskListener CountersignHandler AssignmentHandler DeptAssigneeProvider UserAssigneeProvider ReminderHandler CalendarProvider TaskDueDefinitionProvider DecisionHandler ConditionHandler ForeachHandler

NodeEventHandler

流程在进入及离开当前节点时触发的事件Bean,这里要求我们的业务系统要实现com.bstek.uflo.process.handler.NodeEventHandler接口,并其实现类配置到spring环境当中,该属性的值就是这个配置到spring环境中实现类的bean的id。在这里我们提供了一个快捷选择实现类bean的id方法,点击“选择”按钮,在弹出窗口中输入下面格式的地址:

/**
 * 节点事件监听接口
 * @author Jacky.gao
 * @since 2013年8月20日
 */
public interface NodeEventHandler {
	/**
	 * 进入节点后触发的方法
	 * @param node 当前节点对象
	 * @param processInstance 当前流程实例对象
	 * @param context 流程上下文
	 */
	void enter(Node node,ProcessInstance processInstance,Context context);
	
	/**
	 * 离开节点后触发的方法
	 * @param node 当前节点对象
	 * @param processInstance 当前流程实例对象
	 * @param context 流程上下文
	 */
	void leave(Node node,ProcessInstance processInstance,Context context);
}

TaskListener

  第三个属性是“监听Bean”,该属性从UFLO-1.0.7版本开始提供,它要求配置了一个实现了com.bstek.uflo.process.listener.TaskListener接口的实现类配置在Spring当中的Bean的ID,这个接口中提供了三个方法,分别用于控制流程在流转到当前人工任务节点时是否创建任务,以及对创建任务的监听,其源码如下:
package com.bstek.uflo.process.listener;
import com.bstek.uflo.env.Context;
import com.bstek.uflo.model.ProcessInstance;
import com.bstek.uflo.model.task.Task;
import com.bstek.uflo.process.node.TaskNode;
/**
 * @author Jacky.gao
 * @since 2014年5月28日
 */
public interface TaskListener {
    /**
     * 在流程实例流转到人工任务节点时触发该方法,此时还未开始创建任务。<br>
     * 该方法的返回值决定流程实例是否在当前人工任务节点上创建任务并停留,<br>
     * 1.当返回值为false,那么就继续执行人工任务动作,创建对应的人工任务.<br>
     * 2.当返回值为true时,则沿当前人工任务下默认连线(如果存在多条连接,则系统随机取一条)进入下一个流程节点.<br>
     * @param context 上下文对象
     * @param processInstance 流程实例对象
     * @param node 当前的人工任务节点对象
     * @return 返回连接名称,为false,则不处理,否则则离开当前节点.
     */
    boolean beforeTaskCreate(Context context,ProcessInstance processInstance,TaskNode node);
     
    /**
     * 人工任务创建后触发该方法,此时人工任务虽然已创建,但还未持久化,<br>
     * 所以在该方法当前可以对任务属性进行修改,修改结果将影响人工任务的创建.
     * 需要注意的时,如果当前节点有多个任务产生(如会签),那么每个任务都会触发该方法调用.
     * @param context 上下文对象
     * @param task 当前节点上产生的一个人工任务.
     */
    void onTaskCreate(Context context,Task task);
     
    /**
     * 当前节点上人工任务完成时将触发该方法调用,如果当前节点生成有多个任务(比如会签),那么每个任务完成时都会触发该方法调用.
     * @param context 上下文对象
     * @param task 当前节点上一个已完成的人工任务.
     */
    void onTaskComplete(Context context,Task task);
}

AssigneeProvider

默认提供了两个AssigneeProvider接口的实现类,分别是com.bstek.uflo.process.assign.impl.DeptAssigneeProvider及com.bstek.uflo.process.assign.impl.UserAssigneeProvider,这两个实现类分别代表两种不同类型的任务处理人提供者,有兴趣的开发人员可以查询它们的源码,以学习AssigneeProvider的具体写法。

/**
 * @author Jacky.gao
 * @since 2013年8月17日
 */
public interface AssigneeProvider {
    /**
     * 设计器层面是否要用树形结构进行展示
     * @return 返回true,表示设计器会用树形加载当前任务处理人列表
     */
    boolean isTree();
    /**
     * @return 返回当前任务处理人提供者名称,比如员工列表,部门列表等
     */
    String getName();
    /**
     * 分页方式查询返回具体的任务处理人,可以是具体的人,也可以是部门等之类容器型对象
     * @param pageQuery
     * @param parentId
     */
    void queryEntities(PageQuery<Entity> pageQuery,String parentId);
    /**
     * 根据指定的处理人ID,返回具体的任务处理人用户名
     * @param entityId 处理人ID,可能是一个用户的用户名,这样就是直接返回这个用户名,也可能是一个部门的ID,那么就是返回这个部门下的所有用户的用户名等 
     * @return
     */
    Collection<String> getUsers(String entityId);
    /**
     * @return 是否禁用当前任务处理人提供器
     */
    boolean disable();
}