Liferay7 BPM門戶開發之47: 集成Activiti待辦已辦任務清單和流程啟動


 

首先增加兩個Portlet,分別用於待辦處理、流程啟動。待辦是別人發起的流程,流到自己這里的流程;流程啟動用於發起新的流程。

程序文件放置於

 

在ACtivit中待辦概念分兩種,1是指派給你的,專門的指派流程節點;2是在候選組中,符合搶簽權限的人。在代碼中進行了合並:

package com.lifiti.portlet;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipInputStream;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.task.Task;
import org.osgi.service.component.annotations.Component;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.servlet.ServletResponseUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.upload.UploadPortletRequest;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.WebKeys;
import com.lifiti.model.ToDo;
import com.lifiti.util.ActivitiUtils;
import com.lifiti.util.FilenameUtils;
import com.lifiti.util.IdentifyHelper;
import com.lifiti.util.ProcessHelper;

@Component(immediate = true, property = { "com.liferay.portlet.display-category=category.sample",
        "com.liferay.portlet.instanceable=true", "javax.portlet.display-name=Process ToDo",
        "javax.portlet.init-param.template-path=/", "javax.portlet.init-param.view-template=/process/processToDo.jsp",
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user" }, service = Portlet.class)

public class ProcessToDoPortlet extends BpmBasePortlet {
    @Override
    public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException {

        ThemeDisplay td =(ThemeDisplay)request.getAttribute(WebKeys.THEME_DISPLAY);
        String candidateUser= td.getUser().getEmailAddress(); //IdentifyHelper.getUserFromSession(session).getId();
        System.out.println("candidateUser:"+candidateUser);
        try {
            System.out.println("getLogin:"+td.getUser().getLogin());
        } catch (PortalException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("getUserId:"+td.getUser().getUserId());
        System.out.println("getUserUuid:"+td.getUser().getUserUuid());
        System.out.println("getScreenName:"+td.getUser().getScreenName());
        // 執行查詢
        List<Task> tasksCandidate = taskService.createTaskQuery()
                .taskCandidateUser(candidateUser)
                .orderByTaskCreateTime().desc().list();
        List<Task> tasksAssignee = taskService.createTaskQuery()
                .taskAssignee(candidateUser)
                .orderByTaskCreateTime().desc().list();
        
        List<ToDo> todoList = new ArrayList<ToDo>();

        //指定簽收人
        for (Task task : tasksAssignee){
            ProcessDefinition pd = ProcessHelper.findProcessDefinitionByPid(task.getProcessInstanceId());
            todoList.add(new ToDo(task.getId(),task.getName(),task.getCreateTime().toString(),task.getExecutionId(),
                    task.getProcessInstanceId(),task.getTaskDefinitionKey(),task.getProcessDefinitionId(),pd.getName(),
                    pd.getKey()));
        }
        //符合候選人名單的搶簽權限的人
        for (Task task : tasksCandidate){
            ProcessDefinition pd = ProcessHelper.findProcessDefinitionByPid(task.getProcessInstanceId());
            todoList.add(new ToDo(task.getId(),task.getName(),task.getCreateTime().toString(),task.getExecutionId(),
                    task.getProcessInstanceId(),task.getTaskDefinitionKey(),task.getProcessDefinitionId(),pd.getName(),
                    pd.getKey()));
        }
        request.setAttribute("tasks", todoList);

    }

}

 

jsp頁面

<%@ include file="/init.jsp" %>

<h2><liferay-ui:message key="Todo"/></h2>

<table width="100%" class="table table-bordered table-hover table-condensed">
        <thead>
            <tr>
                <th><liferay-ui:message key="ProcessInstanceId"/></th>
                <th><liferay-ui:message key="ProcessName"/></th>
                <th><liferay-ui:message key="NodeNow"/></th>
                <th><liferay-ui:message key="CreateTime"/></th>
                <th width="80"><liferay-ui:message key="Operation"/></th>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${tasks }" var="ta">
                <tr>
                    <td>${ta.processInstanceId }</td>
                    <td>${ta.processName }</td>
                    <td>${ta.name }</td>
                    <td>${ta.createTime }</td>
                    <td><a target="_blank" href='${ctx }/process/taskTodo?key=${ta.processKey }&procInstId=${ta.processInstanceId }&taskId=${ta.id }&activityId=${ta.taskDefinitionKey }'></a><liferay-ui:message key="Sign"/></td>
                    
                </tr>
            </c:forEach>
        </tbody>
    </table>
    

這部分的任務完成了一半,還要處理2個邏輯

1、簽收待辦任務的“簽收”處理;

2、發起流程的“啟動”處理;

接下來解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM