يوضح المثال الموجود في هذه المقالة طريقة تنفيذ عرض مخطط تدفق Activiti، والخطوات المحددة هي كما يلي:
1. رمز صورة عرض حالة الاختبار هو كما يلي:
public void viewImage() throws Exception { // إنشاء كائن خدمة مستودع RepositoryService repositoryService =processEngine.getRepositoryService(); // ابحث عن الملفات التي يجب عرضها من المستودع StringDPId = "701"; repositoryService.getDeploymentResourceNames (deploymentId); String imageName = null; if(name.indexOf(".png")>=0){ imageName = name } } if(imageName!=null){// System.out.println(imageName); /"+ imageName); // احصل على دفق إدخال الملف من خلال معرف النشر واسم الملف InputStream in = repositoryService.getResourceAsStream(deploymentId, imageName); FileUtils.copyInputStreamToFile(in, f });
يوضح:
1) معرف النشر هو معرف نشر العملية
2) اسم المورد هو قيمة عمود NAME_ في جدول act_ge_bytearray
3) استخدم طريقة getDeploymentResourceNames الخاصة بـ repositoryService للحصول على أسماء جميع الملفات ضمن النشر المحدد
4) استخدم طريقة getResourceAsStream الخاصة بـ repositoryService لتمرير معرف النشر واسم الملف للحصول على دفق إدخال الملف بالاسم المحدد ضمن النشر.
5) بالنسبة لعملية دفق الإدخال والإخراج النهائية، استخدم طريقة CopyInputStreamToFile الخاصة بأداة FileUtils لإكمال نسخة تدفق العملية إلى الملف.
2. اعرض الصورة في صفحة تعريف العملية في مشروع الويب:
public String viewImage(){InputStream in = repositoryService.getResourceAsStream.getImageStream(deploymentId,imageName);// يجب وضع المشروع الفعلي للطريقة هنا في الخدمة HttpServletResponse resp = ServletActionContext.getResponse();try { OutputStream out = resp .getOutputStream( ); // اكتب عملية إدخال الصورة في دفق إخراج resp byte[] b = new byte[1024]; for (int len = -1; (len= in.read(b))!=-1; ) { out.write(b, 0, len } // أغلق الدفق .Close( ); in.Close();} Catch (IOException e) { e.printStackTrace();}return null;}
يوضح:
1) معرف النشر هو معرف نشر العملية، واسم الصورة هو اسم الصورة
2) نظرًا لأنه يتم عرض الصورة من صفحة قائمة تعريف العملية، يمكن الحصول على المعرف واسم الصورة من تعريف العملية (ProcessDefinition) (String getDeploymentId(); وString getDiagramResourceName();)
3) علامة صفحة الويب <a target="_blank" href="viewImage?deploymentId=1&imageName=imageName.png" rel="external nofollow" >عرض المخطط الانسيابي</a>
3. عرض المخطط التدفقي الحالي لمشروع الويب
public String viewCurrentImage(){ProcessDefinition pd =service.getProcessDefinitionByTaskId(taskId);// 1. احصل على معرف نشر العملية putContext("deploymentId", pd.getDeploymentId());// 2. احصل على اسم صورة العملية putContext ("imageName"، pd.getDiagramResourceName())؛// 3. احصل على إحداثيات النشاط الحالي Map<String,Object>currentActivityCoerates =service.getCurrentActivityCoerates(taskId);putContext("acs",currentActivityCoerates);return "image";}
تنفيذ التعليمات البرمجية لـservice.getProcessDefinitionByTaskId(taskId);
public ProcessDefinition getProcessDefinitionByTaskId(String TaskId) {// 1. احصل على مهمة TaskTask = TaskService.createTaskQuery().taskId(taskId).singleResult();// 2. احصل على كائن تعريف العملية ProcessDefinition من خلال pdid لكائن المهمة pd = repositoryService.getProcessDefinition (task.getProcessDefinitionId());return المشتري؛}
تنفيذ التعليمات البرمجية لـservice.getCurrentActivityCoerates(taskId);
public Map<String, Object> getCurrentActivityCostrates(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 من خلال currentActivitiIdactivity = pd.findActivity(currentActivitiId);// 4. احصل على إحداثيات النشاطحداثيات.put("x",activity.getX()); put("y" ,activity.getY());cooperatives.put("width",activity.getWidth());coerates.put("height", activity.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>