最近一个项目是在移动端做maximo系统的待办处理,对于普通的工作流节点使用mbo远程调用的方式基本都没有问题,很容易都可以处理了。可是有几个工作流程由于使用了输入节点,调用方式就发生了改变,经过反编译、跟踪、详细查看代码等一系列环节,最终终于解决了问题,其实也很简单---结果就是顺序调用两遍!
如图:maximo 7.5工作流设计器中的输入节点
其实我们在获取到运行值长那个节点的assignment后,有两个action,一个就是转到输入节点的,另一个是交工作负责人执行。
贴出部分代码如下:
首先远程连接maximo rmi服务,如果在maximo内部,这一步就省略了。MXSession mxsession = MXSession.getSession();
mxsession.setHost("IP地址:13571/MXMUI7001");
mxsession.setUserName(“yonghuming”);
mxsession.setPassword(“mima”);
mxsession.connect();
获取到工作流待办节点信息:其中assignID=数字,这个自己根据需要最终能够获得WFInstance即可,不一定非要按照这个获取。UserInfo userInfo = mxsession.getUserInfo();
WorkFlowServiceRemote workFlowServiceRemote = (WorkFlowServiceRemote)mxsession.lookup("WORKFLOW");
MboSetRemote mboSetRemote = workFlowServiceRemote.getMboSet("WFASSIGNMENT", userInfo);
mboSetRemote.setWhere("assignID='4908342'");
WFAssignmentRemote assignment = (WFAssignmentRemote)mboSetRemote.getMbo(0);
WFInstanceRemote instance = assignment.getWFInstance();instance.completeWorkflowAssignment(assignID, 值长节点的actionID, "yes");
instance.completeWorkflowAssignment(assignID, 手动输入节点的actionID, "");
重点就是获取那两个actionID,可以用instance获取子action的mbo,然后通过action的mbo获取到actionID,例如:WFActionSetRemote wfasr=instance.getActions();
System.out.println(wfasr.count());
WFActionRemote action=(WFActionRemote) wfasr.getMbo(0);
System.out.println(action.getString("actionid"));