天天看點

Activiti通過代碼生成流程圖

activiti除了可以通過流程設計器畫流程圖之外,其實也可以通過代碼生成流程圖。

activiti的流程圖核心對象就是BpmnModel,隻要生成了這個BpmnModel對象,流程圖就OK了。

示例代碼如下:

//建立bpmn模型
  BpmnModel model = new BpmnModel();
  Process process = new Process();
  model.addProcess(process);
  process.setId("my-process");


//建立bpmn元素
  process.addFlowElement(createStartEvent());
  process.addFlowElement(createUserTask("task1", "First task", "fred"));
  process.addFlowElement(createUserTask("task2", "Second task", "john"));
  process.addFlowElement(createEndEvent());


  process.addFlowElement(createSequenceFlow("start", "task1"));
  process.addFlowElement(createSequenceFlow("task1", "task2"));
  process.addFlowElement(createSequenceFlow("task2", "end"));


  // 2.生成BPMN自動布局
  new BpmnAutoLayout(model).execute();
  
  建立task
protected UserTask createUserTask(String id, String name, String assignee) {
  UserTask userTask = new UserTask();
  userTask.setName(name);
  userTask.setId(id);
  userTask.setAssignee(assignee);
  return userTask;
}


//建立箭頭
protected SequenceFlow createSequenceFlow(String from, String to) {
  SequenceFlow flow = new SequenceFlow();
  flow.setSourceRef(from);
  flow.setTargetRef(to);
  return flow;
}


protected StartEvent createStartEvent() {
  StartEvent startEvent = new StartEvent();
  startEvent.setId("start");
  return startEvent;
}


protected EndEvent createEndEvent() {
  EndEvent endEvent = new EndEvent();
  endEvent.setId("end");
  return endEvent;
}


           

上面的代碼是上網找的,代碼生成流程圖其實最麻煩的就是節點的定位問題。

而代碼new BpmnAutoLayout(model).execute();就幫我們自動布局了,這樣隻要生成想要的節點就可以生成bpmn對象了.