package org.fireflow.samples.event; import java.util.ArrayList; import java.util.List; import org.fireflow.engine.entity.runtime.ProcessInstance; import org.fireflow.engine.exception.InvalidOperationException; import org.fireflow.engine.modules.instancemanager.event.AbsProcessInstanceEventListener; import org.fireflow.engine.modules.instancemanager.event.ProcessInstanceEvent; import org.fireflow.pdl.fpdl.process.SubProcess; import org.fireflow.samples.pojo.Company; import org.fireflow.samples.pojo.Employee; public class MyProcessEventListener extends AbsProcessInstanceEventListener { @Override protected void afterProcessInstanceEnd(ProcessInstanceEvent e) { ProcessInstance procInst = e.getSource(); SubProcess subProcess = (SubProcess)e.getWorkflowElement(); System.out.println("==调用事件MyProcessEventListener.afterProcessInstanceEnd(...)"); System.out.println("====发起事件的流程实例是:id="+procInst.getId()+";displayName="+ procInst.getProcessDisplayName()+"; state="+procInst.getState().getDisplayName()); System.out.println("====该实例对应的流程定义是:id="+subProcess.getId()); System.out.println("==============================================="); super.afterProcessInstanceEnd(e); } /** * ProcessInstance创建之后,Run之前会触发该事件 */ @Override protected void onProcessInstanceCreated(ProcessInstanceEvent e) { ProcessInstance procInst = e.getSource(); SubProcess subProcess = (SubProcess)e.getWorkflowElement(); System.out.println("==调用事件MyProcessEventListener.onProcessInstanceCreated(...)"); System.out.println("====发起事件的流程实例是:id="+procInst.getId()+";displayName="+ procInst.getProcessDisplayName()+"; state="+procInst.getState().getDisplayName()); System.out.println("====该实例对应的流程定义是:id="+subProcess.getId()); System.out.println("====通过该事件,可以做一些复杂的初始化工作,比如初始化一个复杂类型的流程变量(请通过模拟数据查看本例的流程变量)……"); System.out.println("==============================================="); //初始化一个复杂的流程变量 Company company = new Company(); company.setId("company123"); company.setName("FireSOA开源组织"); company.setAddress("广州"); List<Employee> allEmployees = new ArrayList<Employee>(); Employee employee1 = new Employee(); employee1.setId("1"); employee1.setName("非也"); employee1.setAge(99); employee1.setSalary(999999.9f); employee1.setDeptId("dept1"); allEmployees.add(employee1); Employee employee2 = new Employee(); employee2.setId("2"); employee2.setName("太极"); employee2.setAge(99); employee2.setSalary(999999.9f); employee2.setDeptId("dept2"); allEmployees.add(employee2); Employee employee3 = new Employee(); employee3.setId("3"); employee3.setName("无极"); employee3.setAge(999); employee3.setSalary(100000f); employee3.setDeptId("dept3"); allEmployees.add(employee3); company.setAllEmployees(allEmployees); //对于Listener中抛出的异常,流程引擎自动将其全部“吃掉”,避免Listener中的错误影响流程执行。 //所以,最好的方法是在Listener中自行处理异常信息。 try { procInst.setVariableValue(e.getCurrentWorkflowSession(), "company", company); } catch (InvalidOperationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } super.onProcessInstanceCreated(e); } }