package com.vci.client.uif.actions.client; import java.util.Map; import java.util.Map.Entry; import javax.swing.JFrame; import com.vci.client.common.objects.UserEntityObject; import com.vci.client.logon.base.TabPanelManage; import com.vci.client.ui.exception.VCIException; import com.vci.client.ui.process.QANProcessBar; import com.vci.client.ui.process.QANProcessBarFrame; import com.vci.client.uif.engine.common.IDataNode; import com.vci.client.workflow.delegate.ProcessCustomClientDelegate; import com.vci.client.workflow.task.TodoTaskByPlatformDialog; import com.vci.corba.common.VCIError; import com.vci.mw.ClientContextVariable; /** * 执行流程 Action *

执行流程

* @author liudi * */ public class ExecuteWorkFlowAction extends AbstractBusionessOperationAction { @Override public String getKey() { return "executetask"; } private Object[] objs = new Object[0]; private String outcome = ""; private String[] taskOids = new String[objs.length]; private String[] executionIds = new String[objs.length]; private String[] taskNames = new String[objs.length]; private String[] taskStatuss = new String[objs.length]; private ProcessCustomClientDelegate getProcessCustomClientDelegate(){ UserEntityObject userEntityObject = new UserEntityObject(); String ip = ClientContextVariable.getInvocationInfo().clientIPInfo; String loginUserName = ClientContextVariable.getInvocationInfo().userName; userEntityObject.setIp(ip); userEntityObject.setUserName(loginUserName); userEntityObject.setModules(""); ProcessCustomClientDelegate delegate = new ProcessCustomClientDelegate(userEntityObject); return delegate; } private void checkExecutable(){ taskOids = new String[objs.length]; executionIds = new String[objs.length]; taskNames = new String[objs.length]; taskStatuss = new String[objs.length]; for (int objectIndex = 0; objectIndex < objs.length; objectIndex++) { IDataNode idn = (IDataNode) objs[objectIndex]; Map valueMap = idn.getValueMap(); int i=0; int j=0; int k=0; int s=0; boolean subFlag = false; int subint =0; for(Entry entrySet : valueMap.entrySet()){ String value = entrySet.getValue(); if(entrySet.getKey()!=null&&entrySet.getKey().equals("TaskOID".toLowerCase())){ taskOids[i] = value; i++; } if(entrySet.getKey()!=null&&entrySet.getKey().equals("Executionid".toLowerCase())){ executionIds[j] = value; String replace = value.replace(".", ","); String[] split = replace.split(","); if(split.length>2){ subFlag = true; }else{ subFlag = false; } j++; } if(entrySet.getKey()!=null&&entrySet.getKey().equals("Name".toLowerCase())){ taskNames[k] = value; k++; } if(entrySet.getKey()!=null&&entrySet.getKey().equals("lcstatus".toLowerCase())){ taskStatuss[s] = value; s++; } } taskNames[0] = taskNames[0].substring(taskNames[0].lastIndexOf("-")+1); } } @Override public boolean doPost() { // 获取选择的数据 // 数据的实际类型一般为 IDataNode objs = getDataModel().getSelectObjects(); ProcessCustomClientDelegate delegate = getProcessCustomClientDelegate(); checkExecutable(); // 用户名 String[] userName = new String[] {}; if("Completed".toLowerCase().equals(taskStatuss[0].toLowerCase())){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "任务已经完成!"); return false; } TodoTaskByPlatformDialog dialog = new TodoTaskByPlatformDialog(executionIds[0],taskOids[0], taskNames[0],taskStatuss[0]); dialog.setTitle("执行任务"); dialog.setVisible(true); boolean b = false; if(dialog.isSaveFlag()){ outcome = dialog.getOutCome() == null ? "" : dialog.getOutCome(); String approvalNote = dialog.getDesc() == null ? "" : dialog.getDesc(); userName = !"".equals(dialog.getNextUser()) ? new String[]{dialog.getNextUser()} : new String[0]; b = completeTask(delegate, taskOids, outcome, approvalNote, userName); if(b){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "执行成功!"); } // 根据配置 close 决定,流程正常执行完毕,是否从顶级UI中关闭此窗口 // 默认行为:如果没有配置值,则执行关闭;如果配置了值,当且仅当值为true时,执行关闭;否则不关闭 // 即:默认关闭 String close = getParameterValue(ValueType.ButtonConfig, "close", -1); Boolean closeValue = (close != null && "false".equalsIgnoreCase(close))? false : true; if(closeValue){ TabPanelManage.getInstance().getTabPanel().remove(TabPanelManage.getInstance().getTabPanel().getSelectedIndex()); } } return b; } private boolean completeTask( final ProcessCustomClientDelegate delegate, final String[] taskOids, final String outcome, final String approvalNote, final String[] userName){ final boolean[] ress = {false}; final QANProcessBarFrame frame = new QANProcessBarFrame(); final QANProcessBar bar = new QANProcessBar(new Thread(new Runnable() { @Override public void run() { try{ frame.setContent("正在提交流程,请稍等..."); String jbpmDeploymentId = delegate.getDeploymentIdByExecutionId(executionIds[0]); String nextTaskName = delegate.getNextTaskNameByJbpmId(jbpmDeploymentId, taskNames[0], outcome); // String[][] properties = new String[][]{new String[]{"Oid","RevisionOid","NameOid","BTMName"}, // new String[]{}}; ress[0] = delegate.completeTaskByPlatform( taskOids[0], outcome, nextTaskName, approvalNote , userName); }catch(VCIError e){ frame.setProcessBarCancel(true); UIFUtils.showErrorMessage(ClientContextVariable.getFrame(), e); } catch (VCIException e) { e.printStackTrace(); UIFUtils.showErrorMessage(ClientContextVariable.getFrame(), e); } finally{ frame.setProcessBarCancel(true); } } }), (JFrame) ClientContextVariable.getFrame(), frame, "执行流程", false); bar.setVisible(true); return ress[0]; } }