ตัวอย่างในบทความนี้แสดงวิธีการนำไปใช้ในการดูแผนภูมิลำดับงานของ Activiti ขั้นตอนเฉพาะมีดังนี้:
1. รหัสรูปภาพการดูกรณีทดสอบมีดังนี้:
โมฆะสาธารณะ viewImage() พ่นข้อยกเว้น { // สร้างวัตถุบริการคลังสินค้า RepositoryService repositoryService = processEngine.getRepositoryService(); // ค้นหาไฟล์ที่ต้องแสดงจากคลังสินค้า String DeploymentId = "701"; List<String>names = repositoryService.getDeploymentResourceNames (deploymentId); สตริง imageName = null; สำหรับ (ชื่อสตริง : ชื่อ) { if(name.indexOf(".png")>=0){ imageName = name; } } if(imageName!=null){// System.out.println(imageName); ไฟล์ f = ไฟล์ใหม่ ("e: /"+ imageName); // รับอินพุตสตรีมของไฟล์ผ่าน ID การปรับใช้และชื่อไฟล์ InputStream ใน = repositoryService.getResourceAsStream(deploymentId, imageName); FileUtils.copyInputStreamToFile(ใน, f); }
แสดงให้เห็น:
1) DeploymentId คือ ID การปรับใช้กระบวนการ
2) resourcesName คือค่าของคอลัมน์ NAME_ ในตาราง act_ge_bytearray
3) ใช้เมธอด getDeploymentResourceNames ของ repositoryService เพื่อรับชื่อของไฟล์ทั้งหมดภายใต้การปรับใช้ที่ระบุ
4) ใช้เมธอด getResourceAsStream ของ repositoryService เพื่อส่ง ID การนำไปใช้งานและชื่อไฟล์เพื่อรับอินพุตสตรีมของไฟล์ด้วยชื่อที่ระบุภายใต้การปรับใช้
5) สำหรับการดำเนินการสตรีม IO สุดท้าย ให้ใช้วิธีการ copyInputStreamToFile ของเครื่องมือ FileUtils เพื่อคัดลอกโฟลว์กระบวนการไปยังไฟล์ให้เสร็จสมบูรณ์
2. ดูภาพบนหน้าคำจำกัดความกระบวนการในโครงการเว็บ:
สตริงสาธารณะ viewImage(){InputStream in = repositoryService.getResourceAsStream.getImageStream(deploymentId,imageName);//โครงการที่แท้จริงของวิธีการที่นี่ควรวางไว้ในบริการ HttpServletResponse resp = ServletActionContext.getResponse();ลอง { OutputStream out = resp .getOutputStream( ); // เขียนกระบวนการอินพุตรูปภาพลงในไบต์สตรีมเอาต์พุต resp[] b = new ไบต์ [1024]; for (int len = -1; (len= in.read(b))!=-1; ) { out.write(b, 0, len } // ปิดสตรีมออก .close( ); in.close();} catch (IOException e) { e.printStackTrace();} คืนค่า null;}
แสดงให้เห็น:
1) DeploymentId คือ ID การปรับใช้กระบวนการ imageName คือชื่อรูปภาพ
2) เนื่องจากรูปภาพถูกดูจากหน้ารายการคำจำกัดความของกระบวนการ จึงสามารถรับ id และ imageName ได้จากคำจำกัดความของกระบวนการ (ProcessDefinition) (String getDeploymentId(); และ String getDiagramResourceName();)
3) แท็กหน้าเว็บ <a target="_blank" href="viewImage?deploymentId=1&imageName=imageName.png" rel="external nofollow" >ดูแผนภูมิโฟลว์</a>
3. ดูผังงานปัจจุบันของโครงการเว็บ
สตริงสาธารณะ viewCurrentImage(){ProcessDefinition pd = service.getProcessDefinitionByTaskId(taskId);// 1. รับ ID การปรับใช้กระบวนการ putContext("deploymentId", pd.getDeploymentId());// 2. รับชื่อของอิมเมจกระบวนการ putContext ("ชื่อรูปภาพ" , pd.getDiagramResourceName());// 3. รับพิกัดของกิจกรรมปัจจุบัน Map<String,Object> currentActivityCoordinates =service.getCurrentActivityCoordinates(taskId);putContext("acs", currentActivityCoordinates);return "image";}
การใช้งานโค้ดของ service.getProcessDefinitionByTaskId(taskId); คือ:
สาธารณะ ProcessDefinition getProcessDefinitionByTaskId(String TaskId) {// 1. รับงาน TaskTask = TaskService.createTaskQuery().taskId(taskId).singleResult();// 2. รับอ็อบเจ็กต์คำจำกัดความกระบวนการ ProcessDefinition ผ่าน pdid ของอ็อบเจ็กต์งาน pd = repositoryService.getProcessDefinition (task.getProcessDefinitionId()); ส่งคืน พีดี;}
การใช้งานโค้ดของ service.getCurrentActivityCoordinates(taskId); คือ:
แผนที่สาธารณะ <String, Object> getCurrentActivityCoordinates(String taskId) {Map<String, Object> พิกัด = new HashMap<String, Object>(); // 1. รับงาน IDTask ที่ใช้งานอยู่ในปัจจุบัน = taskService.createTaskQuery().taskId ( TaskId).singleResult();ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();String currentActivitiId = pi.getActivityId();// 2. รับคำจำกัดความกระบวนการ ProcessDefinitionEntity pd = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(task.getProcessDefinitionId( ));// 3. ใช้คำจำกัดความของกระบวนการเพื่อรับวัตถุกิจกรรม ActivityImpl ผ่าน currentActivitiId กิจกรรม = pd.findActivity(currentActivitiId);// 4. รับพิกัดของพิกัดกิจกรรม.put("x", Activity.getX()); put("y" , Activity.getY());coordinates.put("width", Activity.getWidth());coordinates.put("ความสูง", กิจกรรม.getHeight());พิกัดส่งคืน;}
ส่วนของหน้ารูปภาพ:
จากหน้ารายการงานส่วนตัว คลิก <a target="_blank" href="/viewCurrentImage?taskId=1" rel="external nofollow">ดูผังงานปัจจุบัน</a> เพื่อข้ามไปยังหน้าต่อไปนี้:
<body><!-- 1. รับแผนภูมิโฟลว์กฎ ที่นี่เราใช้แท็ก strust2 เพื่อรับค่าที่ใส่ลงในสแต็กค่าด้านบน--><img style="position: Absolute;top: 0px;left: 0px ; " src="viewImage?deploymentId=<s:property value='#deploymentId'/>&imageName=<s:property value='#imageName'/>"><!-- 2. วาด DIV แบบไดนามิกตามพิกัดของกิจกรรมปัจจุบัน --><div style="position: Absolute;border:1px solid red;top:<s: ค่าคุณสมบัติ ='#acs.y'/>px;left: <s:property value='#acs.x'/>px;width: <s:property value='#acs.width'/>px;height:<s:property value='#acs.height'/>px; "></div></body>