重新尝试执行已停止的活动

执行本任务的原因和时间

如果长期流程中的活动在外层作用域中遇到未捕获的故障,并且相关联的活动模块指定该活动在出错时应该停止,该活动就会进入“已停止”状态以便进行修复。您可以重新尝试执行该活动。

您可以设置该活动使用的变量。还可以在强制重试调用中传递参数,例如该活动所需的消息,但这不适用于脚本活动。

本任务的步骤

  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 input = 
            process.createMessage(aiid, activity.getOutputMessageTypeName());
      DataObject myMessage = null;
      if ( input.getObject()!= null && input.getObject() instanceof DataObject )
        {
          myMessage = (DataObject)input.getObject();
          //set the strings in your message, for example, chocolate is to be ordered
          myMessage.setString("OrderNo", "chocolate");
        }
    
       boolean continueOnError = true;
       process.forceRetry(aiid, input, continueOnError); 
    }

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

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

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

使用条款 |


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