starterassigment.java.svn-base

来自「jbpm工作流 jbpm工作流」· SVN-BASE 代码 · 共 53 行

SVN-BASE
53
字号
package com.chinacars.oss.data.appform.workflow.assignment;

import java.util.Map;

import net.sf.jaype.ext.domain.sys.User;

import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;
import org.springframework.web.context.WebApplicationContext;

import com.chinacars.oss.data.appform.domain.Task;
import com.chinacars.oss.data.appform.services.TaskService;

public class StarterAssigment implements AssignmentHandler {
	private static final long serialVersionUID = 1L;
	
	/*
	 * (non-Javadoc)
	 * @see org.jbpm.taskmgmt.def.AssignmentHandler#assign(org.jbpm.taskmgmt.exe.Assignable, org.jbpm.graph.exe.ExecutionContext)
	 * 
	 * 判断逻辑:
	 * 当用户首次开始流程时,starter会为空,此时将当前发起人即(loginuser)设置为任务的actor;
	 * 流程在执行过中返回给发起人时,此时starter不为空,直接设为任务的actor
	 * 
	 */
	@SuppressWarnings("unchecked")
	public void assign(Assignable assignable, ExecutionContext executionContext)
			throws Exception {
		ContextInstance ci = executionContext.getTaskInstance().getContextInstance();
		User user = (User)ci.getTransientVariable("LOGIN_USER");		
		//获取此次流程的发起人,即第一个开始流程的人
		String starter = executionContext.getProcessInstance().getTaskMgmtInstance().getSwimlaneInstance("requester").getActorId();
		//如果发起人为空,设置当前用户为任务的发起人
		if (null == starter || starter.trim().length()==0){
			starter = user.getId();
		}
		
		String[] actors = new String[]{starter};
		assignable.setPooledActors(actors);
		
		//修改项目状态
		Map<String,Object> params = ci.getTransientVariables();
		Task task = (Task)params.get("BUSINESS_TASK");
		task.setState(2);		//设置项目为修改状态
		WebApplicationContext wac = (WebApplicationContext)params.get("WEB_APPLICATION_CONTEXT");
		TaskService taskService = (TaskService) wac.getBean("taskServiceBase");
		taskService.upateTask(task);
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?