处理人员活动

执行本任务的原因和时间

业务流程中的人员活动通过工作项被指定到企业中的各个人员。当流程启动时,就会为潜在所有者创建工作项。在这些所有者中,有一个所有者声明活动。此人员负责提供相关信息并完成该活动。

本任务的步骤

  1. 列示已登录人员能够处理的活动:
    QueryResultSet result = 
         process.query("ACTIVITY.AIID", 
                       "ACTIVITY.STATE = ACTIVITY.STATE.STATE_READY AND
                        ACTIVITY.KIND = ACTIVITY.KIND.KIND_STAFF AND
                        WORK_ITEM.REASON = 
                             WORK_ITEM.REASON.REASON_POTENTIAL_OWNER",
                        null, null, null); 
    此操作返回一个查询结果集,该结果集包含已登录人员能够处理的活动。
  2. 声明要处理的活动:
    if (result.size() > 0)
    {
    	result.first();
    	AIID aiid = (AIID) result.getOID(1);
    	ClientObjectWrapper input = process.claim(aiid);
    	DataObject activityInput = null ;
      if ( input.getObject()!= null && input.getObject() instanceof DataObject )
      {
        activityInput = (DataObject)input.getObject();
        // read the values
        ...
      }  
    }
    声明活动时,将返回该活动的输入消息。
  3. 处理活动完成后,请完成该活动。 可以成功地完成该活动,也可以通过故障消息来完成该活动。如果该活动成功,则将传递输出消息。如果该活动不成功,则将使该活动处于“已失败”或“已停止”状态,并且将传递故障消息。必须为这些操作创建适当的消息。创建消息时,必须指定消息类型名,以便包含消息定义。
    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);
      }
      
      //complete the activity
      process.complete(aiid, output);
      此操作将设置包含序号的输出消息。
    2. 要在发生故障时完成活动,请创建故障消息。
      //retrieve the faults modeled for the staff activity
      List faultNames = process.getFaultNames(aiid);
      
      //create a message of the appropriate type
      ClientObjectWrapper myFault = 
            process.createMessage(aiid, faultNames.get(0));
      
      // set the parts in your fault message, for example, an error number
      DataObject myMessage = null ;
      if ( myFault.getObject()!= null && input.getObject() instanceof DataObject )
      {
        myMessage = (DataObject)myFault.getObject();
        //set the parts in the message, for example, a customer name
        myMessage.setInt("error",1304);
      }
      
      process.complete(aiid, (String)faultNames.get(0), myFault);
      此操作设置处于“已失败”或“已停止”状态的活动。如果流程模型中该活动的 continueOnError 参数设置为 true,就会使该活动处于“已失败”状态,并且导航将继续进行。如果 continueOnError 参数设置为 false,就会使该活动处于“已停止”状态。在此状态下,可以通过强制终止或强制重试来修复该活动。

使用条款 |


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