pi.setPtUid(pt.getObjUid());
String ptName = pt.getPtName();
BOInstance bi = pt.getDoBO().getCorrInstance();
if (bi == null) {
t.rollback();
throw new WFException("启动工作流失败:没有与业务表关联!");
}
pi.setInstanceUid(bi.getUid());
if (bi.getName() != null && !bi.getName().equals("N/A")) {
ptName = bi.getName();
}
if (pt.getDoBO2() != null) {
BOInstance bi2 = DOGlobals.getInstance().getSessoinContext()
.get(pt.getDoBO2());
if (bi2 != null) {
pi.setInstanceUid2(bi2.getUid());
}
}
if (pt.getDoBO3() != null) {
BOInstance bi3 = DOGlobals.getInstance().getSessoinContext()
.get(pt.getDoBO3());
if (bi3 != null) {
pi.setInstanceUid3(bi3.getUid());
}
}
pi.setWfiName(ptName);
pi.setStartTime(new java.sql.Timestamp(System.currentTimeMillis()));
SessionContext us = DOGlobals.getInstance().getSessoinContext();
if(us.getUser()!=null){
pi.setStartUser(us.getUser().getUid());
}
if (isRun) {
pi.setExeStatus(Integer.valueOf(ProcessInstance.STATUS_RUN));
}
DAOUtil.BUSI().store(pi); // /////保存工作流实例
PTNode startNode = pt.getStartNode();
niStart = NodeInstance.initNodeInstance(pi, startNode,
NodeInstance.STATUS_FREE);
DAOUtil.BUSI().store(niStart);
// // /////////如果模板存在节点
// if (pt.getNodes() != null && pt.getNodes().size() > 0) {
//
// // ///存储Node 和 NodeInstance 的对应关系
// // /////原因是要找到开始Node才能建立关联,要两次遍历
// // //否则没必要用Map 保持他们的联系
// PTNode start = null; // ////定义开始节点
// HashMap mapNode = new HashMap();
// // ///////////// 保存节点实例及下面的Actions,并返回开始节点
// start = copyToNodeInstances(dao, pi, mapNode);
// // ////////////建立该模板下的节点实例之间的关系。
// buildInstanceRelation(pt, mapNode, dao);
//
// niStart = (NodeInstance) mapNode.get(start);
// } else {
// throw new WFException("启动工作流失败:没有为工作流模板定义节点");
// }
// /////end copy nodes
// /////////copy vars
if (pt.retrievePtVars() != null && pt.retrievePtVars().size() > 0) {
copyToVarInstances(pi);
}
// ///////////end copy vars
// ////////////把控制权交给 Start NodeInstance.
niStart.setExeStatus(Integer.valueOf(NodeInstance.STATUS_INIT));
// niStart.perform();
} catch (Exception ex) {
t.rollback();
throw new WFException("启动工作流失败", ex);
} finally {
t.end();
}
System.out.println("Start::" + niStart);