activiti笔记
附上eclipse的activiti插件下载地址:http://www.activiti.org/designer/archived/activiti-designer-5.18.0.zip
然后是官方文档地址:https://www.activiti.org/userguide/
1.task
常用的task有UserTask,ScriptTask,ServiceTask
user task是分派给用户的,用户任务
script task是脚本任务
service task指定Java类,调用方法完成任务
2.常用的service
RepositoryService提供流程管理部署的操作
RuntimeService 它处理启动流程定义的新流程实例
TaskService 查询任务,完成任务,创建新的独立任务
IdentityService 对组和用户进行管理(创建、更新、删除、查询……)
FormService 是一项可选服务。这意味着 Activiti 可以在没有它的情况下完美使用,而不会牺牲任何功能。
HistoryService 查询所有历史数据
应用.
1。使用插件创建一个比较复杂的流程图

2.启动该流程实例
@Test void contextLoads() { ProcessInstance myProcess = runtimeService.startProcessInstanceByKey("myProcess"); }
3.创建实时流程图,
@Test void png() throws Exception{ DefaultProcessDiagramGenerator processDiagramGenerator = new DefaultProcessDiagramGenerator(); BpmnModel bpmnModel = repositoryService.getBpmnModel("myProcess:1:4"); String id = taskService.createTaskQuery().list().get(0).getId(); System.out.println(id); List<String> activeActivityIds = runtimeService.getActiveActivityIds("6"); InputStream generateDiagram = processDiagramGenerator.generateDiagram(bpmnModel, "png", activeActivityIds); FileOutputStream fileOutputStream = new FileOutputStream(new File("a.png")); byte[] bytes = new byte[1024]; int read; while ((read = generateDiagram.read(bytes)) != -1) { fileOutputStream.write(bytes); } generateDiagram.close(); fileOutputStream.close(); }
4.如图,启动第一步后流程就在

activiti的api已经提供了创建图片的api,拿来直接用就好了
尝试在HTML页面显示
1.创建controller,然后把处理的逻辑放到service层
@Controller public class PngController { @Autowired private PngService pngService; @ResponseBody @RequestMapping("/getPng") public void getPng(HttpServletResponse response) throws IOException { pngService.getPng(response); }
}
2.创建service
@Service public class PngService { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Autowired private RepositoryService repositoryService; public void getPng(HttpServletResponse response) throws IOException { response.setContentType("image/png");//设置类型 DefaultProcessDiagramGenerator processDiagramGenerator = new DefaultProcessDiagramGenerator();//图片生成器, BpmnModel bpmnModel = repositoryService.getBpmnModel("myProcess:1:4"); String id = taskService.createTaskQuery().list().get(0).getId(); List<String> activeActivityIds = runtimeService.getActiveActivityIds("6"); InputStream png = processDiagramGenerator.generateDiagram(bpmnModel, "png", activeActivityIds); ServletOutputStream outputStream = response.getOutputStream(); int read; byte[] bytes = new byte[1024]; while ((read = png.read(bytes))!=-1){ outputStream.write(bytes); outputStream.flush(); } png.close();//关闭流 outputStream.close();//关闭流 } }
3.因为直接@ResponseBody,所以启动应用,访问直接会显示图片

此时流程已经到达这里,在service增加历史记录节点。
public void getPng(HttpServletResponse response) throws IOException { response.setContentType("image/png"); DefaultProcessDiagramGenerator processDiagramGenerator = new DefaultProcessDiagramGenerator(); BpmnModel bpmnModel = repositoryService.getBpmnModel("myProcess:1:4"); String id = taskService.createTaskQuery().list().get(0).getId(); List<String> activeActivityIds = runtimeService.getActiveActivityIds("6"); List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().list();//历史记录节点 for (HistoricActivityInstance h:list ) { activeActivityIds.add(h.getActivityId());//添加历史记录节点 } InputStream png = processDiagramGenerator.generateDiagram(bpmnModel, "png", activeActivityIds); ServletOutputStream outputStream = response.getOutputStream(); int read; byte[] bytes = new byte[1024]; while ((read = png.read(bytes))!=-1){ outputStream.write(bytes); outputStream.flush(); } png.close(); outputStream.close(); }
重新启动并访问,走过的历史节点也被染色了。


浙公网安备 33010602011771号