工作流程引擎回滚的应用背景:
场景1:一件流程在完成后,发现这个流程有问题,需要退回到流程指定的节点上与当时该节点的处理人身上,让他重做。
场景2:一个主流程启动了n个子流程,他在监控子流程时发现子流程问题,需要重新去做。
这两种场景下,都是在流程完全处理完后,并且流程引擎已经把该流程归档后要求重新回滚到指定的节点与该节点的处理人身上去,让其在重新去处理。
ccflow工作流程引擎回滚流程对应的API:
/// <summary>
/// 恢复已完成的流程数据到指定的节点,如果节点为0就恢复到最后一个完成的节点上去.
/// 恢复失败抛出异常
/// </summary>
/// <param name="flowNo">要恢复的流程编号</param>
/// <param name="workid">要恢复的workid</param>
/// <param name="backToNodeID">恢复到的节点编号,如果是0,标示回复到流程最后一个节点上去.</param>
/// <param name="note">恢复的原因,此原因会记录到日志</param>
public static string Flow_DoRebackWorkFlow(string flowNo, Int64 workid, int backToNodeID, string note)
{
BP.WF.Ext.FlowSheet fs = new Ext.FlowSheet(flowNo);
return fs.DoRebackFlowData(workid, backToNodeID, note);
}
ccflow 工作流程引擎回滚流程的设计需求:
1, 回滚人接受到的信息是退回状态,而非流程的运行状态。
2, 回滚后流程数据表的状态由完成恢复到退回,最后结束节点恢复到回滚的点。
3, 恢复流程引擎注册表数据,当前表状态标示为退回。
4, 恢复流程工作人员表,把所有参与该流程上的工作人员都恢复里面去。
5, 写入一条退回信息,让接受人员能够看到退回的原因。
6, 写入到流程日志 ,保证它的完整可读。
来源:oschina
链接:https://my.oschina.net/u/10897/blog/112680