修改sample.bpmn文件,自定义流程节点,笔者这里模拟一个请假申请书的例子,截图如下:
修改后的ProcessMain.java文件内容如下:
package com.sample; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.jbpm.test.JBPMHelper; import org.kie.api.KieBase; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.manager.RuntimeEngine; import org.kie.api.runtime.manager.RuntimeEnvironmentBuilder; import org.kie.api.runtime.manager.RuntimeManager; import org.kie.api.runtime.manager.RuntimeManagerFactory; import org.kie.api.task.TaskService; import org.kie.api.task.model.TaskSummary; public class ProcessMain { public static void main(String[] args) { KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieBase kbase = kContainer.getKieBase("kbase"); RuntimeManager manager = createRuntimeManager(kbase); RuntimeEngine engine = manager.getRuntimeEngine(null); KieSession ksession = engine.getKieSession(); TaskService taskService = engine.getTaskService(); Mapparams = new HashMap (); params.put("recipient", "kylin"); ksession.startProcess("com.sample.bpmn.hello", params); // let salaboy execute Task 1 List list = taskService.getTasksAssignedAsPotentialOwner("salaboy", "en-UK"); TaskSummary task = list.get(0); System.out.println("Salaboy is executing task " + task.getName()); taskService.start(task.getId(), "salaboy"); taskService.complete(task.getId(), "salaboy", null); // let john execute Task 2 list = taskService.getTasksAssignedAsPotentialOwner("john", "en-UK"); task = list.get(0); System.out.println("John is executing task " + task.getName()); taskService.start(task.getId(), "john"); taskService.complete(task.getId(), "john", null); // let mary execute Task 3 list = taskService.getTasksAssignedAsPotentialOwner("mary", "en-UK"); task = list.get(0); System.out.println("Mary is executing task " + task.getName()); taskService.start(task.getId(), "mary"); taskService.complete(task.getId(), "mary", null); manager.disposeRuntimeEngine(engine); System.exit(0); } private static RuntimeManager createRuntimeManager(KieBase kbase) { JBPMHelper.startH2Server(); JBPMHelper.setupDataSource(); EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.jbpm.persistence.jpa"); RuntimeEnvironmentBuilder builder = RuntimeEnvironmentBuilder.Factory.get().newDefaultBuilder().entityManagerFactory(emf).knowledgeBase(kbase); return RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(builder.get()); //return RuntimeManagerFactory.Factory.get().newSingletonRuntimeManager(builder.get(), "com.sample:example:1.0"); } }
在eclipse里运行ProcessMain.java文件会在控制台得到如下结果:
Salaboy is executing task 起草请假申请书
John is executing task 部门经理审批
Mary is executing task 区域总监审批