El ejemplo de este artículo muestra el método de implementación de la visualización del diagrama de flujo de Activiti. Los pasos específicos son los siguientes:
1. El caso de prueba para ver el código de imagen es el siguiente:
public void viewImage() throws Exception { // Crea un objeto de servicio de almacén RepositoryService repositoryService = ProcessEngine.getRepositoryService() // Encuentra los archivos que deben mostrarse desde el almacén String implementaciónId = "701"; repositoryService.getDeploymentResourceNames (deploymentId); String imageName = null para (String nombre: nombres) { if(name.indexOf(".png")>=0){ imageName = nombre; } if(imageName!=null){// System.out.println(imageName Archivo f = nuevo Archivo("e: /"+ imageName); // Obtenga el flujo de entrada del archivo a través del ID de implementación y el nombre del archivo InputStream in = repositoryService.getResourceAsStream(deploymentId, imageName); FileUtils.copyInputStreamToFile(en, f });
ilustrar:
1) implementaciónId es el ID de implementación del proceso
2) ResourceName es el valor de la columna NAME_ en la tabla act_ge_bytearray
3) Utilice el método getDeploymentResourceNames de repositoryService para obtener los nombres de todos los archivos en la implementación especificada.
4) Utilice el método getResourceAsStream de repositoryService para pasar el ID de implementación y el nombre del archivo para obtener el flujo de entrada del archivo con el nombre especificado en la implementación.
5) Para la operación final del flujo de IO, utilice el método copyInputStreamToFile de la herramienta FileUtils para completar la copia del flujo del proceso en el archivo.
2. Vea la imagen en la página de definición del proceso en el proyecto web:
public String viewImage(){InputStream in = repositoryService.getResourceAsStream.getImageStream(deploymentId,imageName);// El proyecto real del método aquí debe colocarse en el servicio HttpServletResponse resp = ServletActionContext.getResponse();try { OutputStream out = resp .getOutputStream( ); // Escribe el proceso de entrada de la imagen en el byte del flujo de salida resp[] b = nuevo byte[1024]; for (int len = -1; (len= in.read(b))!=-1; ) { out.write(b, 0, len } // Cerrar la transmisión); .close(); in.close();} captura (IOException e) { e.printStackTrace();}return null;}
ilustrar:
1) implementaciónId es el ID de implementación del proceso, imageName es el nombre de la imagen
2) Debido a que la imagen se ve desde la página de lista de definiciones de procesos, la identificación y el nombre de la imagen se pueden obtener de la definición del proceso (ProcessDefinition) (String getDeploymentId(); y String getDiagramResourceName();)
3) Etiqueta de página web <a target="_blank" href="viewImage?deploymentId=1&imageName=imageName.png" rel="external nofollow" >Ver diagrama de flujo</a>
3. Ver el diagrama de flujo actual del proyecto web.
public String viewCurrentImage(){ProcessDefinition pd = service.getProcessDefinitionByTaskId(taskId);// 1. Obtenga el ID de implementación del proceso putContext("deploymentId", pd.getDeploymentId());// 2. Obtenga el nombre de la imagen del proceso putContext ("nombreimagen", pd.getDiagramResourceName());// 3. Obtenga las coordenadas de la actividad actual Map<String,Object> currentActivityCoordinates =service.getCurrentActivityCoordinates(taskId);putContext("acs", currentActivityCoordinates);return "image";}
La implementación del código de service.getProcessDefinitionByTaskId(taskId);
public ProcessDefinition getProcessDefinitionByTaskId(String taskId) {// 1. Obtener taskTask task = taskService.createTaskQuery().taskId(taskId).singleResult();// 2. Obtener el objeto de definición de proceso ProcessDefinition a través del pdid del objeto de tarea pd = repositoryService.getProcessDefinition (task.getProcessDefinitionId());retorno pd;}
La implementación del código de service.getCurrentActivityCoordinates(taskId);
public Map<String, Object> getCurrentActivityCoordinates(String taskId) {Map<String, Object> coordina = new HashMap<String, Object>() // 1. Obtenga la tarea IDTask actualmente activa = taskService.createTaskQuery().taskId ( taskId).singleResult();ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();String currentActivitiId = pi.getActivityId();// 2. Obtenga la definición del proceso ProcessDefinitionEntity pd = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(task.getProcessDefinitionId( ));// 3. Utilice la definición del proceso para obtener el objeto de actividad ActivityImpl a través de currentActivitiId actividad = pd.findActivity(currentActivitiId);// 4. Obtenga las coordenadas de la actividad coordinadas.put("x", actividad.getX()); put("y" , actividad.getY());coordinates.put("ancho", actividad.getWidth());coordinates.put("alto", actividad.getHeight());coordenadas de retorno;}
parte de la página de la imagen:
Desde la página de la lista de tareas personales, haga clic en <a target="_blank" href="/viewCurrentImage?taskId=1" rel="external nofollow" >Ver diagrama de flujo actual</a> para ir a la siguiente página:
<body><!-- 1. Obtenga el diagrama de flujo de reglas. Aquí usamos la etiqueta strust2 para colocar el valor en la pila de valores de arriba--><img style="position: absoluta;top: 0px;left: 0px. " src="viewImage?deploymentId=<s:property value='#deploymentId'/>&imageName=<s:property; value='#imageName'/>"><!-- 2. Dibuje DIV dinámicamente según las coordenadas de la actividad actual --><div style="position: absoluta;border:1px solid red;top:<s: valor de propiedad ='#acs.y'/>px;izquierda: <s:valor de propiedad='#acs.x'/>px;ancho: <s:propiedad value='#acs.width'/>px;height:<s:property value='#acs.height'/>px "></div></body>