首先增加兩個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、發起流程的“啟動”處理;
接下來解決。