一旦确定了要支持的业务流程(例如,销售报价或销售订单)并确定了首选事件检测机制,则为您的业务流程实现该机制。
下列各节描述由 IBM WebSphere Business Integration mySAP.com 适配器实现的四种事件检测机制的实现过程。在适用的任何时候,均将提供示例以及样本代码。
代码增强要求将一部分 ABAP 代码包括在定制功能模块中。事件检测代码将作为功能模块编写,以确保处理与事务保持分离。从事务中使用的任何表或变量都需要按值而不是按引用传递至功能模块。
要在检索事件时使锁定业务对象的影响最小,功能模块通常以更新任务方式执行。要避免不一致,当在处于更新任务方式下的进程内已调用功能模块时,不要使用更新任务。
要使事务中的影响最小,将功能模块放置在另一个包含程序内。使用包含程序将允许您对定制代码而不是 SAP 代码进行更改。
事件检测代码包含标识事件对象的逻辑。例如,销售订单事务处理许多类型的订单,但只有一种订单类型是必需的。此逻辑在事件检测代码中。放置此事件检测代码的一般策略是恰好在将数据提交至数据库之前插入它。包含事件检测代码的功能模块通常将作为业务对象功能组的一部分创建。
要实现代码增强以进行事件检测:
通过在业务流程的事务所执行的代码中查找“commit work statement”来调查业务流程。您可以使用 ABAP 调试器在此时调查不同属性的值。
以下步骤描述使用“代码增强”事件检测机制来创建示例 SAP 销售报价的过程。步骤后面的代码是此过程的结果。
新的功能模块包含以下代码:
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 程序执行时达到该程序中的条件,则将触发一个事件。
要实现批处理程序以进行事件检测:
以下步骤描述创建批处理程序的过程,该批处理程序检测当天创建的所有销售报价的事件。步骤后面的代码是此过程的结果。
以下样本代码支持“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 销售报价的以下示例可以用来实现使用业务工作流的事件触发器:
对象类型 - ZMYQUOTE
事件 - SAP_SalesQuote
名称 - SAP 销售报价
描述 - SAP 销售报价子类型的示例
程序 - ZMYSALESQUOTE
应用程序 - V
对象类型 - ZMYQUOTE
事件 - SAP_SalesQuote
接收器 FM - Y_XR_ADD_TO_QUEUE_DUMMY
接收器类型 FM - Y_XR_ADD_TO_QUEUE_WF