package com.norteksoft.wf.engine.web; import java.util.Map; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; import org.apache.struts2.convention.annotation.Results; import org.springframework.beans.factory.annotation.Autowired; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.web.struts2.CrudActionSupport; import com.norteksoft.product.web.struts2.Struts2Utils; import com.norteksoft.task.entity.WorkflowTask; import com.norteksoft.wf.engine.entity.WorkflowInstance; import com.norteksoft.wf.engine.service.TaskService; import com.norteksoft.wf.engine.service.WorkflowInstanceManager; import com.norteksoft.wf.engine.service.WorkflowRightsManager; /** * 处理自定义表单数据的保存,和提交 * <p>该action中没有任何属性的set方法,是为了避免和数据表单中字段冲突导致不可预知的类型转换异常</p> * @author wurong * */ @Namespace("/engine") @ParentPackage("default") @Results( { @Result(name = "workflowassign", location = "taskassign", type = "chain")}) public class DataAction extends CrudActionSupport<Object> { private static final long serialVersionUID = 1L; private String formHtml; private Boolean submit = false; private String fieldPermission; private Long taskId; private WorkflowRightsManager workflowRightsManager; @SuppressWarnings("unchecked") @Override public String save() throws Exception { WorkflowInstanceManager workflowInstanceManager = (WorkflowInstanceManager)ContextUtils.getBean("workflowInstanceManager"); TaskService taskService = (TaskService)ContextUtils.getBean("taskService"); Map<String,String> resultMap = workflowInstanceManager.save(Struts2Utils.getRequest().getParameterMap()); String workflowInstanceId = resultMap.get(WorkflowInstanceManager.INSTANCEID); WorkflowTask task = taskService.getTask(Long.valueOf(resultMap.get(WorkflowInstanceManager.TASKID))); taskId = task.getId(); WorkflowInstance workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowInstanceId); StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(resultMap.get(WorkflowInstanceManager.DATAID)).append("\"/>"); builder.append("<input type=\"hidden\" name=\"formId\" value=\"").append(workflowInstance.getFormId()).append("\"/>"); formHtml = workflowInstanceManager.getHtml(workflowInstance, task); formHtml = builder.toString() + formHtml; fieldPermission = workflowRightsManager.getFieldPermission(task); return "inputForm"; } @SuppressWarnings("unchecked") public String submit() throws Exception { WorkflowInstanceManager workflowInstanceManager = (WorkflowInstanceManager)ContextUtils.getBean("workflowInstanceManager"); TaskService taskService = (TaskService)ContextUtils.getBean("taskService"); String url = "http://" + Struts2Utils.getRequest().getHeader("Host") + Struts2Utils.getRequest().getContextPath() + "/engine/task!input.htm"; Map<String, String[]> parameterMap = Struts2Utils.getRequest().getParameterMap(); Map<String,Object> resultMap = workflowInstanceManager.submit(parameterMap,url); String workflowInstanceId = resultMap.get(WorkflowInstanceManager.INSTANCEID).toString(); WorkflowInstance workflowInstance = workflowInstanceManager.getWorkflowInstance(workflowInstanceId); WorkflowTask task = taskService.getTask(Long.valueOf(resultMap.get(WorkflowInstanceManager.TASKID).toString())); StringBuilder builder = new StringBuilder(); builder.append( "<input type=\"hidden\" name=\"dataId\" value=\"").append(resultMap.get(WorkflowInstanceManager.DATAID)).append("\"/>"); formHtml = workflowInstanceManager.getHtml(workflowInstance, task); formHtml = builder.toString() + formHtml; String to = null; Object result = resultMap.get(WorkflowInstanceManager.RESULT); // if(result.equalsIgnoreCase("true")){ // addActionMessage("任务已完成"); // submit = true; // to = "inputForm"; // }else if(result.equalsIgnoreCase("false")){//如果需要指定办理人 // to = "workflowassign"; // }else{ // to = null; // addActionMessage(result); // } return to; } @Override public String delete() throws Exception { // TODO Auto-generated method stub return null; } @Override public String input() throws Exception { // TODO Auto-generated method stub return null; } @Override public String list() throws Exception { // TODO Auto-generated method stub return null; } @Override protected void prepareModel() throws Exception { // TODO Auto-generated method stub } public Object getModel() { // TODO Auto-generated method stub return null; } public String getFieldPermission() { return fieldPermission; } public Boolean getSubmit() { return submit; } public String getFormHtml() { return formHtml; } public Long getTaskId() { return taskId; } @Autowired public void setWorkflowRightsManager(WorkflowRightsManager workflowRightsManager) { this.workflowRightsManager = workflowRightsManager; } }