强制完成活动

执行本任务的原因和时间

长期流程中的活动有时会遇到故障。如果外层作用域中的故障处理程序未捕获这些故障,并且相关联的活动模块指定该活动在出错时应该停止,该活动就会进入“已停止”状态以便进行修复。在此状态下,可以强制完成该活动。

对于处于“正在运行”状态的活动来说,如果该活动未响应,也可以强制使其完成。

某些类型的活动有一些其他要求。
人员活动
可以在强制完成调用中传递参数,例如应该已发送的消息或者应该已发生的故障。
脚本活动
不能在强制完成调用中传递参数。但是,必须设置需要修复的变量。
调用活动
如果调用活动调用了不是子流程的异步服务,并且这些活动处于“正在运行”状态,则也可以强制完成这些活动。例如,如果该异步服务被调用并且未响应,您就会希望强制完成调用活动。

本任务的步骤

  1. 列示处于“已停止”状态的活动。
    QueryResultSet result = 
         process.query("DISTINCT ACTIVITY.AIID",
                       "ACTIVITY.STATE = ACTIVITY.STATE.STATE_STOPPED AND 
                        PROCESS_INSTANCE.NAME='CustomerOrder'",
                        null, null, null);

    此操作将返回 CustomerOrder 流程实例的已停止活动。

  2. 完成活动,例如,完成已停止的人员活动。

    在本示例中,传递了输出消息。

    if (result.size() > 0)
    {
      	result.first();
    	  AIID aiid = (AIID) result.getOID(1);
    	  ActivityInstanceData activity = process.getActivityInstance(aiid);
      ClientObjectWrapper output = 
            process.createMessage(aiid, activity.getOutputMessageTypeName());
      DataObject myMessage = null;
      if ( output.getObject()!= null && output.getObject() instanceof DataObject )
       {
         myMessage = (DataObject)output.getObject();
         //set the parts in your message, for example, an order number
         myMessage.setInt("OrderNo", 4711);
       }
    
       boolean continueOnError = true;
       process.forceComplete(aiid, output, continueOnError);
    }

    此操作将完成该活动。continueOnError 参数确定了 forceComplete 请求处理期间出错时执行的操作。

    在本示例中,continueOnError 值是 true。此值表示如果 forceComplete 请求处理期间出错,该活动就会进入“已失败”状态。此故障将传播到该活动的外层作用域,直到它被处理或者到达流程作用域为止。如果该故障到达流程作用域,该流程就会进入“正在失败”状态并最终进入“已失败”状态。

相关概念
对业务流程以及与任务相关的对象执行的查询

使用条款 |


(c) Copyright IBM Corporation 2005, 2006.
本信息中心基于 Eclipse 技术(http://www.eclipse.org)。