- 接口
- ProcessEngine 工作流引擎 可以通過spring和 Configuration.getProcessEngine();
- ExecutionService 執行
- ProcessInstance 流程實例
- ProcessDefinition 流程定義
- TaskService 任務
- IdentityService 自動增長
- HistoryService 歷史記錄
- ManagementService 管理
- RepositoryService 倉庫
- 方法:
- 1.ProcessEngine
- processEngine.setAuthenticatedUserId(String );
- processEngine.setHibernateSession(Object);
- processEngine.setJdbcConnection(Connection);
- Object get(String);
- ExecutionService getExecutionService();
- HistoryService getHistoryService();
- IdentityService getIdentityService();
- ManagementService getManagementService();
- RepositoryService getRepositoryService();
- TaskService getTaskService();
- 1.查詢流程實例:new Instance
- List<ProcessInstance> instances = executionService.createProcessInstanceQuery().list();
- 2.查詢流程進度
- 1)得到當前流程中相匹配的活動 (可以得到活動的長高寬..)
- <%String id = request.getParameter("id");
- ProcessEngine processEngine = Configuration.getProcessEngine();
- RepositoryService repositoryService = processEngine.getRepositoryService();
- ExecutionService executionService = processEngine.getExecutionService();
- ProcessInstance processInstance = executionService.findProcessInstanceById(id);
- Set<String> activityNames = processInstance.findActiveActivityNames();
- ActivityCoordinates ac = repositoryService.getActivityCoordinates(processInstance.getProcessDefinitionId(),activityNames.iterator().next());%>
- <div style="position:absolute;border:1px solid red;left:<%=ac.getX()%>px;top:<%=ac.getY()%>px;width:<%=ac.getWidth()%>px;height:<%=ac.getHeight()%>px;"></div>
- 2)生成圖片
- <img src="Definition_definitionImage.action?id=<%=id %>" style="position:absolute;left:0px;top:0px;" align="middle">
- RepositoryService repositoryService = this.getProcessEngine().getRepositoryService();
- ExecutionService executionService = this.getProcessEngine().getExecutionService();
- String id = this.getRequest().getParameter("id");
- ProcessInstance processInstance = executionService.findProcessInstanceById(id);
- String processDefinitionId = processInstance .getProcessDefinitionId();
- // processDefinitionId 方法表示去 JBPM4_DEPLOYPROP 中按 processDefinitionId和 STRINGVAL_ 字段去找 DEPLOYMENT
- // 簡單說就是通過 流程部署的小項id 去找 流程對象
- ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
- .processDefinitionId(processDefinitionId).uniqueResult();
- System.out.println(processDefinition.getImageResourceName()+"-----"+processDefinition.getDeploymentId());
- // 圖片輸入流
- InputStream inputStream = null;
- // 如果是上傳的是 xml 文件 , processDefinition.getImageResourceName() 就會是null .
- if(processDefinition.getImageResourceName()==null){
- String did = processDefinition.getDeploymentId();
- DefinitionImage definitionImage = this.getJbpmService().findImageByDefinitionId(did); //自己寫的Service不是JBPM的API
- if(definitionImage!=null){
- // 通過 這個 xml 的 流程id 找到它在數據庫 definitionImage表中的記錄 ,中間也有他的 圖片名稱
- // 從而構造出 inputStream 對象
- String uploadRoot = super.getRequest().getRealPath("/upload/jpdl/"+definitionImage.getImageName());
- try {
- inputStream = new FileInputStream(uploadRoot);
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }else{
- // 從數據庫讀到的輸入流 .
- inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),processDefinition.getImageResourceName());
- }
- byte[] b = new byte[1024];
- int len = -1;
- try {
- ServletOutputStream sos = this.getResponse().getOutputStream();
- while ((len = inputStream.read(b, 0, 1024)) != -1) {
- sos.write(b, 0, len);
- }
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- 3.查詢流程定義 (相當於Class,流程實例相當於new 的類)
- List<ProcessDefinition> definitionList = this.getProcessEngine().getRepositoryService().createProcessDefinitionQuery().list();
- 4.開啓流程,已經有動態表單了。
- String id=reuqest.getParameter("id"); //得到流程定義ID
- // 得到當前用戶
- UserInfo userInfo = super.getLoginUser();
- //爲了方便測試 , 先寫死
- Map<String, Object> map = new HashMap<String, Object>();
- map.put(Definition_Action.USER_INFO, userInfo.getUserId());
- // 爲什麼這裏不能有多個參數
- map.put(Definition_Action.FORM_ID, formId); // form 表單 id
- // 得到專門操作流程實例的 執行對象
- System.out.println(map);
- ExecutionService executionService = this.getProcessEngine()
- .getExecutionService();
- // 開啓實例 , ProcessInstance 對象好像對應的就是 ExecutionService 的表
- ProcessInstance pi = executionService.startProcessInstanceById(id,map);
- 5.上傳流程定義
- /*
- * 上傳方法 (non-Javadoc) , 方法名寫錯了 , 應該是 uploadDefinition
- * 難點
- * 1. 上傳的 zip 格式就很好處理
- * 2. 上傳的是 xml , 要複雜一點 , 因爲 xml 文件是不帶 png 流程圖的 , 這樣的話就實現不了流程跟蹤了 ,
- * 所有要去網上找了個 根據 xml 生成流程圖 png 的工具 (這個方法中沒實現 ) ,
- * 3. 把 xml的 流程id 和 生成的流程圖名寫到數據庫中,當然前提是,把 xml要上傳到 tomcat 先.
- */
- File src = this.getUpload();
- // 得到 "知識庫" service
- RepositoryService rService = this.getProcessEngine().getRepositoryService();
- String fileName = this.getUploadFileName();
- String ext = fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
- if(ext.equals("zip")){
- try {
- ZipInputStream zis = new ZipInputStream(new FileInputStream(src));
- rService.createDeployment().addResourcesFromZipInputStream(zis)
- .deploy();
- } catch (Exception e) {
- // TODO: handle exception
- e.printStackTrace();
- }
- }else if(ext.equals("xml")){
- //如果上傳成功後就要放到自己的表中保存起來。
- //流程定義對象 id
- String definitionId = rService.createDeployment().addResourceFromInputStream(this.getUploadFileName(),new FileInputStream(src)).deploy();
- }
- 6.刪除流程定義
- RepositoryService repositoryService = this.getProcessEngine().getRepositoryService();
- //刪除要流程部署ID
- repositoryService.deleteDeploymentCascade("depolymentId");
- 7.查詢我的任務
- TaskService taskService = this.getProcessEngine().getTaskService();
- //得到用戶任務
- List<Task> taskList = taskService.findPersonalTasks(userInfo.getUserId());
- //SQL:select * from JBPM4_TASK where assignee=?;
- // 得到任務變量 formId ?? var這裏是不是在上面(開啓流程)已經定義好了的。
- Object formId = taskService.getVariable(task.getId(), Definition_Action.FORM_ID);
JBPM 工作流 一些接口及方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.