阅读:2225
回复:4
|
请教大家,流程修改后,正在走的流程如何按新的流程执行
java10.5版本,oracle数据库,windows系统
客户的需求如题,就是想在流程修改后,已经启动了的流程按新的流程执行。 我给客户的答复是可以修改数据库里流程里的版本号,但如果有添加字段、删除字段之类的可能会导致错误,都要手工修改。 客户表示如果手工修改也可以接受。 请问大家,,如果要手工修改,修改什么表,那些字段,运行的错误在哪里能看到,告诉我方法就行 客户也做过开发,能力很强。 |
1楼#
发布于:2018-10-26 14:49
.net版本下 改ot_instancecontext、ot_workitem及补充该流程的业务数据。最后还要重启引擎清除缓存或者将该流程实例先取消,再重新激活也可清除缓存。
|
|
3楼#
发布于:2018-10-28 17:18
Java我以前写过一个webservice接口,发出来参考一下
public String UpdateVersions(String WorkflowSelector, String CurrentVersion, String ToUpdateVersion, String CreatedTime) throws Exception { // TODO Auto-generated method stub try { String Msg = ""; String sql = String.format( "select ObjectID,SequenceNo from OT_InstanceContext where WorkflowCode='%s' and WorkflowVersion='%s' and CreatedTime > to_date('%s','yyyy-MM-dd')", WorkflowSelector, CurrentVersion, CreatedTime); DataTable dt = getEngine().getPortalQuery().QueryTable(sql); if (dt != null && dt.getRows().size() > 0) { for (int i = 0; i < dt.getRows().size(); i++) { DataRow dr = dt.getRows().get(i); String ObjectID = dr.getString("ObjectID"); String sql1 = String.format("update OT_InstanceContext set WorkflowVersion='%s' where ObjectID='%s'", ToUpdateVersion, ObjectID); int result1 = getEngine().getPortalQuery().ExcuteNoQuery(sql1); if (result1 > 0) { getEngine().getInstanceManager().ReloadInstance(ObjectID); getEngine().getBizObjectManager().ReloadBizObject(WorkflowSelector, ObjectID); continue; } Msg += "流水号[" + dr.getString("SequenceNo") + "]:更新失败\n"; } if (Msg.length() > 0) { return Msg; } return "更新成功!"; }else { return "没有该流程模板、流程版本的实例!"; } }catch(Exception e) { return "系统异常,请联系技术人员!"; } } |
|