实现事件检测机制

一旦确定了要支持的业务流程(例如,销售报价或销售订单)并确定了首选事件检测机制,则为您的业务流程实现该机制。

注:
当实现事件检测机制时,最好是在一个机制中支持业务流程的所有功能。这限制了对 SAP 应用程序的影响,并使事件检测更容易管理。

下列各节描述由 IBM WebSphere Business Integration mySAP.com 适配器实现的四种事件检测机制的实现过程。在适用的任何时候,均将提供示例以及样本代码。

代码增强

代码增强要求将一部分 ABAP 代码包括在定制功能模块中。事件检测代码将作为功能模块编写,以确保处理与事务保持分离。从事务中使用的任何表或变量都需要按值而不是按引用传递至功能模块。

要在检索事件时使锁定业务对象的影响最小,功能模块通常以更新任务方式执行。要避免不一致,当在处于更新任务方式下的进程内已调用功能模块时,不要使用更新任务。

要使事务中的影响最小,将功能模块放置在另一个包含程序内。使用包含程序将允许您对定制代码而不是 SAP 代码进行更改。

事件检测代码包含标识事件对象的逻辑。例如,销售订单事务处理许多类型的订单,但只有一种订单类型是必需的。此逻辑在事件检测代码中。放置此事件检测代码的一般策略是恰好在将数据提交至数据库之前插入它。包含事件检测代码的功能模块通常将作为业务对象功能组的一部分创建。

要实现代码增强以进行事件检测:

以下步骤描述使用“代码增强”事件检测机制来创建示例 SAP 销售报价的过程。步骤后面的代码是此过程的结果。

  1. 在调查 SAP 销售报价事务时,找到事务 VA21 以支持期望的销售报价创建业务流程。
  2. 销售报价号被确定为唯一键。销售报价号存储在表/字段 VBAK-VBELN 中。
  3. 事务 VA21 在事务流中使用用户出口作为文档保存过程的一部分(Form Userexit_save_document)。在事务的此时刻,当执行用户出口时可获得报价号。
  4. 用户出口属于其它业务流程,因此需要进行额外的编码才能将销售报价与其它类别的文档区分开来。VBAK-VBTYP 可用来确定文档类别。销售报价将以文档类别 B 保存在 SAP 数据库中。
  5. 将包含语句添加至指向包含程序的用户出口。
  6. 此时,需要创建包含程序和功能模块。

新的功能模块包含以下代码:

If VBAK-VBTYP = 'B'.
      C_OBJ_ORDER = 'SAP_SalesQuote'.
         TMP_OBJKEY = XVBAK-VBELN.
  TMP_EVENT = 'Create'.
  TMP_OBJTYPE = Space.
  
      CALL FUNCTION 'Y_XR_ADD_TO_QUEUE'
              EXPORTING
 OBJTYPE = TMP_OBJTYPE
 OBJNAME = C_OBJ_ORDER
 OBJKEY = TMP_OBJKEY
 EVENT = TMP_EVENT
 GENERIC_RECTYPE = ''
 IMPORTING
 RECTYPE = TMP_RECTYPE
              TABLES
                   EVENT_CONTAINER = TMP_EVENT_CONTAINER
              EXCEPTIONS
                   OTHERS          = 1.
  
 Endif.
 

批处理程序

要实现批处理程序作为事件检测机制,您必须编写评估数据库信息的 ABAP 程序。如果当 ABAP 程序执行时达到该程序中的条件,则将触发一个事件。

要实现批处理程序以进行事件检测:

以下步骤描述创建批处理程序的过程,该批处理程序检测当天创建的所有销售报价的事件。步骤后面的代码是此过程的结果。

  1. “创建”被确定为受支持的查询描述。
  2. 报价号被确定为用来检索事件的唯一键。
  3. 创建日期(VBAK-ERDAT)和文档类别(VBAK-VBTYP)需要检查。

以下样本代码支持“SAP 销售报价”作为批处理程序:

REPORT ZSALESORDERBATCH.
  
 tables: vbak.
  
 parameter: d_date like sy-datum default sy-datum.
  
 data: tmp_key like YXR_EVENT-OBJ_KEY,
       tmp_event_container like swcont occurs 0.
  
 " retrieve all sales quotes for today's date
 " sales quotes have vbtyp = B
 select * from vbak where erdat = d_date
                      and vbtyp = 'B'.
  
 tmp_key = vbak-vbeln.
 TMP_OBJTYPE = space.
  
   CALL FUNCTION 'Y_XR_ADD_TO_QUEUE'
        EXPORTING
 OBJTYPE = TMP_OBJTYPE
 OBJNAME = 'SAP_SalesQuote'
 OBJKEY = tmp_key
 EVENT = 'Create'
 GENERIC_RECTYPE = ''
 IMPORTING
 RECTYPE = r_rectype
 TABLES
             EVENT_CONTAINER = tmp_event_container.
  
   write: / vbak-vbeln.
 endselect.
 

业务工作流

业务工作流是一组或一系列在逻辑上相关的业务操作。工作流内的处理逻辑检测事件。业务工作流事件检测机制依靠 SAP 业务对象资源库(BOR),该资源库包含对象及其相关属性、方法和事件的目录。

要实现业务工作流以进行事件检测:

SAP 销售报价的以下示例可以用来实现使用业务工作流的事件触发器:

  1. 搜索 BOR 以获取适当的销售报价业务对象。可以使用简短描述字段和字符串“*quot*”来执行搜索。BUS2031(客户报价)是返回的一个业务对象。
  2. 进一步研究 BUS2031 后,确定键字段为 CustomerQuotation.SalesDocument(VBAK-VBELN)。
  3. 将使用以下条目创建 BUS2031 的子类型:

    对象类型 - ZMYQUOTE

    事件 - SAP_SalesQuote

    名称 - SAP 销售报价

    描述 - SAP 销售报价子类型的示例

    程序 - ZMYSALESQUOTE

    应用程序 - V

  4. 将通过把条目添加至“事件链接”表(事务 SWE3)来激活事件检测机制。将使用以下条目来激活创建事件:

    对象类型 - ZMYQUOTE

    事件 - SAP_SalesQuote

    接收器 FM - Y_XR_ADD_TO_QUEUE_DUMMY

    接收器类型 FM - Y_XR_ADD_TO_QUEUE_WF

注:
接收器和接收器类型功能模块(FM)都指向 Y_XR_ADD_TO_QUEUE。因为 SAP 应用程序有时要求两个字段都要填充,所以仅使用了 DUMMY 功能模块。WF 功能模块将 SAP 标准接口转换为由 Y_XR_ADD_TO_QUEUE 使用的那个接口。

业务工作流事件检测机制已创建且是活动的。已设置它来检测已创建的所有 SAP 客户报价。

Copyright IBM Corp. 1997, 2004