供稿人:刁隆
流程版本升级后,由于一些特殊原因,可能需要修改老版本的流程定义,以避免老版流程执行异常,如修改了环节名称、而代码中硬编码了新版本的环节名等。目前来说,有两种解决方案。
方案1:
- 从版本库(如 SVN、本地历史记录)中找出老版的流程定义,并进行修改
- 部署(替换)服务器上的新版流程定义文件
- 管理员通过流程定义的重新加载功能,重载老版流程定义
- 恢复新版流程定义文件,并重新加载新版流程定义
- 重启应用(建议)
方案2:
直接修改数据库中的老版流程定义,如下例所示,在 console 中修改环节名称:
import bropen.bpm.definition.*
def pd = ProcessDefinition.executeQuery("from bropen.bpm.definition.ProcessDefinition where revision=? and dataController=?",
[ProcessDefinition.formatRevision("2.0.0"),"cmfpFinancePlanWorkflow"])[0]
pd.xml = pd.xml.replaceAll("计划合同", "计划经营")
pd.signavioXml = pd.signavioXml.replaceAll("计划合同", "计划经营")
pd.save(flush:true)
注意:
1、hql 的参数 ProcessDefinition.formatRevision("2.0.0") 其中2.0.0为老流程版本号(即异常的流程实例 ProcessInstance 对象的 revision 属性),参数"cmfpFinancePlanWorkflow"为控制器名称(同流程实例对象的 dataController 属性)。
2、执行后需重启项目;如果是开发环节,需要在重启前删除 /tmp 文件夹下所有以工程名前缀开头的文件,如 /tmp/Foobar*