执行本任务的原因和时间
有时,具有流程管理员权限的用户需要终止已知处于不可恢复状态的顶级流程实例。例如,如果应用程序被调用并失败,并且未返回到休止状态,就需要终止流程实例。
由于流程实例将立即终止,而不会等待任何未完成的子流程或活动完成,所以,只有在异常情况下才应该终止流程实例。
本任务的步骤
- 检索要终止的流程实例。
ProcessInstanceData processInstance =
process.getProcessInstance("CustomerOrder");
- 终止该流程实例。
如果要终止流程实例,可以在进行补偿或不进行补偿的情况下终止该流程实例。
要在进行补偿的情况下终止该流程实例:
PIID piid = processInstance.getID();
process.forceTerminate(piid, CompensationBehaviour.INVOKE_COMPENSATION);
要在不进行补偿的情况下终止该流程实例:
PIID piid = processInstance.getID();
process.forceTerminate(piid);
如果在进行补偿的情况下终止流程实例,就会调用为流程模板定义的补偿处理程序。如果流程模板未定义补偿处理程序,则将调用缺省补偿处理程序。如果在未进行补偿的情况下终止流程实例,该流程实例将立即终止,而不会等待活动正常完成。
强制终止请求不会影响该流程启动的应用程序。如果要终止这些应用程序,则必须在流程应用程序中添加语句以显式地终止该流程启动的应用程序。