After you determine the business process to support (for example, sales quotes or sales orders), and determine the preferred event detection mechanism, implement the mechanism for your business process.
The following sections describe the implementation process for the four event detection mechanisms implemented by the . Whenever applicable, an example is provided along with sample code.
Code enhancement requires encapsulating a portion of ABAP code in a custom function module. The event detection code is written as a function module to ensure that the processing remains separate from the transaction. Any tables or variables used from the transaction need to be passed to the function module by value and not by reference.
To minimize the effects of locking a business object when retrieving an event, the function module typically executes in an update-task mode. To avoid inconsistencies, do not use update task if the function module is already being called within a process that is in an update -task mode.
To minimize the impact in the transaction, place the function module within another include program. Using an include program allows you to make changes to custom code rather than to SAP code.
The event detection code contains logic that identifies the object for the event. For example, the sales order transaction handles many types of orders, but only one order type is required. This logic is in the event detection code. The general strategy for placing this event detection code is to insert it just before the data is committed to the database. The function module containing the event detection code is typically created as a part of the function group for the business object.
To implement Code enhancement for event detection:
If you are implementing the future events capability, in addition to adding the event detection code for future events, contact your BASIS administrator to schedule the adapter-delivered batch program /CWLD/SUBMIT_IN_FUTURE to run once every day.
The following steps describe the process of creating an example SAP sales quote using the code enhancement event detection mechanism. The code that follows it is a result of this process.
The following code fragment illustrates the function call to the /CWLD/ADD_TO_QUEUE event trigger (using a single key value).
If VBAK-VBTYP = 'B'. C_OBJ_ORDER = 'SAP4_SalesQuote'. TMP_OBJKEY = XVBAK-VBELN. TMP_EVENT = 'Create'. CALL FUNCTION '/CWLD/ADD_TO_QUEUE' EXPORTING OBJ_NAME = 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.
The following code fragment illustrates the function call to the /CWLD/ADD_TO_QUEUE_IN_FUTURE event trigger (single key value).
DATA: DATE_IN_FUTURE LIKE SY_DATUM. DATE_IN_FUTURE = VBAK-VDATU. If VBAK-VBTYP = 'B'. C_OBJ_ORDER = 'SAP4_SalesQuote'. TMP_OBJKEY = XVBAK-VBELN. TMP_EVENT = 'Create'. CALL FUNCTION '/CWLD/ADD_TO_QUEUE_IN_FUTURE' EXPORTING OBJ_NAME = C_OBJ_ORDER OBJKEY = TMP_OBJKEY EVENT = TMP_EVENT VALID_DATE = DATE_IN_FUTURE IMPORTING RECTYPE = TMP_RECTYPE TABLES EVENT_CONTAINER = TMP_EVENT_CONTAINER EXCEPTIONS OTHERS = 1. Endif.
If an event's key is composed of multiple fields rather than a single key field, you can specify the name of each key attribute and its corresponding value. Because you specify the attribute's name, the attribute need not be marked as IsKey for the connector to populate it and use it for retrieval.
If you specify more than one name-value pair, the connector sets the value of multiple attributes in the business object it creates to retrieve the full object from the application. If you specify a single name-value pair, the connector sets the value of the specified attribute rather than the first attribute that is marked IsKey.
Because IDoc handlers do not use name-value pairs, it is important that you not specify name-value pairs when using /CWLD/IDOC_HANDLER. For more information, see IDoc handlers and the retrieve verbs.
The following steps describe the process of creating an example SAP sales quote that uses three fields in its composite key. The code that follows it is a result of this process.
attribute1=value1|Cx|attribute2=value2|Cx|[attributeN=valueN|Cx|]
where:
The order in which you specify name-value pairs in your code need not match the order of the attributes in the business object. However, the event fails if you specify an attribute that does not exist in the business object.
The following code fragment specifies, at the time of triggering, the customer number, sales organization, and distribution channel in table KNVV as name-value pairs. Two lines are highlighted in the code for the function module /CWLD/ADD_TO_QUEUE:
DATA: name_value_pairs LIKE /cwld/name_value_pairs OCCURS 5 with header line. MOVE 'CustomerId' TO name_value_pairs-attr_name. MOVE knvv-kunnr TO name_value_pairs-attr_value. APPEND name_value_pairs. MOVE 'SalesOrg' TO name_value_pairs-attr_name. MOVE knvv-vkorg TO name_value_pairs-attr_value. APPEND name_value_pairs. MOVE 'DistributionChannel' TO name_value_pairs-attr_name. MOVE knvv-vtweg TO name_value_pairs-attr_value. APPEND name_value_pairs. If VBAK-VBTYP = 'B'. C_OBJ_ORDER = 'SAP4_SalesQuote'. TMP_OBJKEY = XVBAK-VBELN. TMP_EVENT = 'Create'. CALL FUNCTION '/CWLD/ADD_TO_QUEUE' EXPORTING OBJ_NAME = C_OBJ_ORDER * OBJKEY = TMP_OBJKEY EVENT = TMP_EVENT GENERIC_RECTYPE = '' IMPORTING RECTYPE = TMP_RECTYPE TABLES NAME_VALUE_PAIRS = name_value_pairs EVENT_CONTAINER = TMP_EVENT_CONTAINER EXCEPTIONS OTHERS = 1. Endif.
To implement batch program as an event detection mechanism, you must write an ABAP program that evaluates database information. If the criteria in the ABAP program is fulfilled when the program executes, then an event is triggered.
To implement batch program for event detection:
See /CWLD/ADD_TO_QUEUE_IN_FUTURE: single key value example for example code that implements the future events capability.
The following steps describe the process of creating a batch program that detects events for all sales quotes created on today's date. The code that follows it is a result of this process.
The following sample code supports the SAP sales quote as a batch program:
REPORT ZSALESORDERBATCH. tables: vbak. parameter: d_date like sy-datum default sy-datum. data: tmp_key like /CWLD/LOG_HEADER-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. CALL FUNCTION '/CWLD/ADD_TO_QUEUE' EXPORTING OBJ_NAME = 'SAP4_SalesQuote' OBJKEY = tmp_key EVENT = 'Create' GENERIC_RECTYPE = '' IMPORTING RECTYPE = r_rectype TABLES EVENT_CONTAINER = tmp_event_container. write: / vbak-vbeln. endselect.
Business workflow is a set or sequence of logically related business operations. The processing logic within a workflow detects events. The business workflow event detection mechanism relies on the SAP Business Object Repository (BOR), which contains the directory of objects along with their related attributes, methods, and events.
To implement business workflow for event detection:
The following example of SAP sales quote can be used to implement an event trigger using business workflow:
Object type--ZMYQUOTE
Event--SAP4_SalesQuote
Name--SAP4 Sales Quote
Description--Example of an SAP 4 Sales Quote Subtype
Program--ZMYSALESQUOTE
Application--V
Object type--ZMYQUOTE
Event--SAP4_SalesQuote
Receiver FM--/CWLD/ADD_TO_QUEUE_DUMMY
Receiver type FM--/CWLD/ADD_TO_QUEUE_WF
The business workflow event detection mechanism is created and active. It is set up to detect all SAP Customer Quotes that are created.
Change pointer uses change documents and is one of the more challenging event detection mechanisms to implement. SAP's Business Object Repository (BOR) is used as well as Application Link Enabled (ALE) technology. A change document always refers to a business document object having at least one database table assigned to it. If the data element in a table is marked as requiring a change document and the table is assigned to a business document object, then a change in value of the field defined by the data element generates a change document. The changes are captured in tables CDHDR and CDPOS and are used for event detection.
To implement change pointer for event detection:
If the answer is Yes to any of these questions, the transaction uses change documents.
The following example of an SAP sales quote can be used to implement an event trigger using change pointer:
The following sample code is added to /CWLD/EVENT_FROM_CHANGE_POINTR:
when 'VERKBELEG'. data: skey like /cwld/log_header-obj_key, s_event like swetypecou-event, r_genrectype like swetypecou-rectype, r_rectype like swetypecou-rectype, t_event_container like swcont occurs 1 with header line. " Quick check. Should check document category (VBTYP) in VBAK. check header-tcode = 'VA22'. " Event detection has started perform log_create using c_log_normal c_blank c_event_from_change_pointer c_blank. " Set the primary key skey = header-objectid. " Set the verb s_event = c_update_event. " Log adding the event to the queue perform log_update using c_information_log text-i44 'SAP4_SalesQuote' s_event skey. " Event detection has finished. perform log_update using c_finished_log c_blank c_blank c_blank c_blank. call function '/CWLD/ADD_TO_QUEUE' exporting obj_name = 'SAP4_SalesQuote' objkey = skey event = s_event generic_rectype = r_genrectype importing rectype = r_rectype tables event_container = t_event_container exceptions others = 1.