8/31/12 SAP CRM Technical Tutorials by Naval Bhatt. 1/27 sapcrmtutorial.blogspot.in SAP CRM tutorials for all : Please feel free to contact me on [email protected]. SAP CRM Technical Tutorials by Naval Bhatt. SAP CRM Technical Tutorials by Naval Bhatt. Sunday, August 26, 2012 Sunday, August 26, 2012 Extend BOL Model BT with custom table type relationship http://wiki.sdn.sap.com/wiki/display/CRM/CRM+Web+Client+UI+Framework SAP CRM 6.0/7.0 Extend the standard BOL model BT with a custom relationship to accomodate your z-table. There's been a few discussions in the forums about finding a way to add a custom table to the standard BOL models. It's a bit tricky, but possible. In this WIKI, I will show you how to enhance the BOl model BT with a new 1..n relationship. The advantages are obvious. Any change in your custom data will register in the BOl layer, you will be abl to capture the BOl Core Reset and Order Init(revert) events, use the BOL model node wizards etc., Enhancing a few standard classes are in order. So, knowing how to enhance the methods using the implicit enhancement points is necessary. In this example, we will create the relationship under the administration header(BTAdminH). Actually, two relationships. One will be a read only relationship(similiar to BTItems) that is linked and the other will be the 1..n relation that corresponds to your database. My custom database ZORD has the following fields. CLIENT type MANDT "Client GUID type CRMT_OBJECT_GUID "guid of table entry(key) REF_GUID type CRMT_OBJECT_GUID "guid of order object EXTERN_CASE_NO type CRMT_OBJECT_ID "end-user usable NOTE type CHAR120 "e nd-us e r us able A structure 'ZORD_STRUCT' that corresponds to the table structure and a table type 'ZORD_STRUCT_TAB' is available. In transaction CRMC_OBJECTS, maintain the API object name of our custom object. In our case, the name is ZORD. This information will be used further below. This will allo us to define our own transaction events. This step is to ensure that the transaction events which we will be defining later on, will be called only when necessary. This step is optional and you should be able to figure out if your scenario needs this or not. For example, if you are extending only the opportunity transaction type, declare ZORD as a sub-object of Opportunity(BUS2000111). Maintain this information in view maintenance CRMV_OBJECT_ASSI We will have to define three basic events in the transaction event model that will take care of our custom objects. These are 1. Initialization -> When the order is being initialized say, during lock/revert scenarios, we want our object to be initialized too. 2. Save -> When the order is being saved, save our data too. 3. Delete -> When the order is deleted, we need to delete corresponding data from our custom table For this, you must identify the correct places to insert our event callback function modules. If not already done, set your user parameterCRM_EVENT_TRACE to "X". Next, do something say, create transactions, modify it, save it and delete it. After each action, look at the events raised in transaction CRMD_EVENT_TRACE. Study this data carefully and decide on the points in which to insert your event callback function modules. For creating the FMs(the signature part), look at the standard FMs (they end with *_EC) defined for the same event in the trace data. Create empty FMs for each of the three events mentioned and study the trace again. We will be calling our custom API class' methods inside these FMs. We will cover this later. For now, create entries in the transaction event handler table and ensure that the FMs are getting called in the correct Link to Content's target Space : Applies to: Summary Intro Step 1 : Studying the event handler model Maintain API Object Name Maintain Object dependency Identify positions for defining custom events for transactions Search Search This Blog Search This Blog babudeep junjuri Options Members (11) Invite your friends Followers:Join to get regular Followers:Join to get regular update update SAP BPM & Workflow tutorials My travel experiences Me & my pursuit of happiness Wandering hermit Photography My other blogs My other blogs Join me on my photography Join me on my photography journey journey
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.
1/27sapcrmtutorial.blogspot.in
SAP CRM tutorials for all : Please feel free to contact me on [email protected].
SAP CRM Technical Tutorials by Naval Bhatt.SAP CRM Technical Tutorials by Naval Bhatt.
Sunday, August 26, 2012Sunday, August 26, 2012
Extend BOL Model BT with custom table typerelationship
Extend the standard BOL model BT with a custom relationship to accomodate your z-table.
There's been a few discussions in the forums about finding a way to add a custom table to the standard BOL models. It's a bit tricky, but possible. In this WIKI, I w ill show
you how to enhance the BOl model BT with a new 1..n relationship. The advantages are obvious. Any change in your custom data w ill register in the BOl layer, you will be able
to capture the BOl Core Reset and Order Init(revert) events, use the BOL model node wizards etc., Enhancing a few standard classes are in order. So, knowing how to
enhance the methods using the implicit enhancement points is necessary.
In this example, we will create the relationship under the administration header(BTAdminH). Actually, two relationships. One will be a read only relationship(similiar to
BTItems) that is linked and the other w ill be the 1..n relation that corresponds to your database.
My custom database ZORD has the following fields.
CLIENT type MANDT "Client
GUID type CRMT_OBJECT_GUID "guid of table entry(key)
REF_GUID type CRMT_OBJECT_GUID "guid of order object
EXTERN_CASE_NO type CRMT_OBJECT_ID "end-user usable
NOTE type CHAR120 "end-user usable
A structure 'ZORD_STRUCT' that corresponds to the table structure and a table type 'ZORD_STRUCT_TAB' is available.
In transaction CRMC_OBJECTS, maintain the API object name of our custom object. In our case, the name is ZORD. This information w ill be used further below. This w ill allow
us to define our own transaction events.
This step is to ensure that the transaction events which we will be defining later on, w ill be called only when necessary. This step is optional and you should be able to
figure out if your scenario needs this or not. For example, if you are extending only the opportunity transaction type, declare ZORD as a sub-object of
Opportunity(BUS2000111). Maintain this information in view maintenance CRMV_OBJECT_ASSI
We will have to define three basic events in the transaction event model that w ill take care of our custom objects. These are
1. Initialization -> When the order is being initialized say, during lock/revert scenarios, we want our object to be initialized too.
2. Save -> When the order is being saved, save our data too.
3. Delete -> When the order is deleted, we need to delete corresponding data from our custom table
For this, you must identify the correct places to insert our event callback function modules. If not already done, set your user parameterCRM_EVENT_TRACE to "X". Next, do
something say, create transactions, modify it, save it and delete it. After each action, look at the events raised in transaction CRMD_EVENT_TRACE. Study this data carefully
and decide on the points in which to insert your event callback function modules. For creating the FMs(the signature part), look at the standard FMs (they end with *_EC)
defined for the same event in the trace data. Create empty FMs for each of the three events mentioned and study the trace again. We will be calling our custom API class'
methods inside these FMs. We will cover this later. For now, create entries in the transaction event handler table and ensure that the FMs are getting called in the correct
Link to Content's target Space :
Applies to:
Summary
Intro
Step 1 : Studying the event handler model
Maintain API Object Name
Maintain Object dependency
Identify positions for defining custom events for transactions
Search
Search This BlogSearch This Blog
babudeep junjuriOptions
Members (11)
Invite your friends
Followers:Join to get regularFollowers:Join to get regularupdateupdate
SAP BPM & Workflow tutorials
My travel experiences
Me & my pursuit of happiness
Wandering hermit Photography
My other blogsMy other blogs
Join me on my photographyJoin me on my photographyjourneyjourney
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.
2/27sapcrmtutorial.blogspot.in
places for various scenarios.
For example, if I'm extending the Opportunity model, I w ill create these entries - In SPRO, go to CRM->Transactions->Basic Settings->Edit event handler table
Choosing transaction category is opportunity w ill ensure that this FM will be called only for Opportunities
Transaction Category BUS2000111 (Opportunity)
Execution Time 88 (Initialize Document)
Priority 99
Object ZORD (Z Order Extension)
Event INIT
Attribute <*>
Function ZORD_INIT_EC
Perform Function for Document Header X
Perform Function for Document Item blank
Do Not Process Function if Event Error Occurs blank
Call Callback Call Just Once Per Transaction
2. Save
Unlike above, we cannot choose transaction category as Opportunity here! This is because an opportunity save event w ill be raised only when you make changes in the
opportunity relevant fields(eg OPPORT_H), even though you are editing an opportunity. For the below FM to trigger, we w ill have to "remind" the system to do it when
changes are made to our custom objects. So, you will not see this FM in the event trace right now till the coding part is complete. We will cover this further down(Look
further down at the last part of the coding part for the method implementation for METHOD ZORD_RUN_BTIL->if_crm_runtime_btil~maintain_attributes).
Transaction Category BUS20001 (CRM Bus Transactions)
Execution Time 80 (Save Document)
Priority 99
Object ZORD (Z Order Extension)
Event SAVE
Attribute <*>
Function ZORD_SAVE_EC
Perform Function for Document Header X
Perform Function for Document Item blank
Do Not Process Function if Event Error Occurs blank
Call Callback Call Just Once Per Transaction
3. Delete
For deletion also, only generic order delete event can be chosen. Inside this Fm, you should make sure that the scenario is right. For example, make sure that the order
being deleted is an opportunity before making API calls! We will cover this below.
Transaction Category BUS20001 (CRM Bus Transactions)
Execution Time 1 (Immediately)
Priority 90
Object ORDER (General order processing)
Event AFTER_DELETE
Attribute <*>
Function ZORD_DEL_EC
Perform Function for Document Header X
Perform Function for Document Item blank
Do Not Process Function if Event Error Occurs blank
Call Callback Call Just Once Per Transaction
First, we have some customizing work to do. Navigate to the node shown in the picture.Note that the node text may show up as 'Business Transactions' in your case. Or you
may go to SM30 and put 'CRMC_OBJ_BTIL' and choose customizing. You must do each of the three activities shown.
1. Initialization
Step 2 : Customizing - Extend Model BT
Maintain Z-objects
Naval Bhatt Photography .. on Facebook
Pratik Peey ush Dearest Deepak
Shankar Tarun Shahril Nur
Naval Bhatt Photography.. on Facebook
460 people like Naval Bhatt Photography ..
Like
Show More
Naval Bhatt
Photography .. added
a new photo.
August 10 at 8:11pm
▼ 2012 (129)
▼ August (14)
Extend BOL Model BTwith custom table typerelatio...
Extend BOL Model for BPwith Custom Table andImpl...
How to use your customBOL Object forwebclient wi...
Difference betweencustom and componentcontroller...
Transaction launcher
One order framework
ABOUT ONE-CLICKACTIONS.
Post ProcessingFramework
ACTIONS
BTE - BusinessTransaction Event
wande mataram .... :mother country ..
Sales order scenario :CRM -ERP
Sales order Distribution:Required Customizingin ...
SAP CRM Sales :Creating a quotationdirectly in E...
Blog ArchiveBlog Archive
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.
3/27sapcrmtutorial.blogspot.in
Maintain Z-Relations
Maintain handler classes for Z-objects
► July (26)
► June (18)
► May (11)
► April (9)
► March (28)
► February (13)
► January (10)
pow ered by
Video BarVideo Bar
Getter - Setter methods in Web UI
Using Get and Setter methods you canretrieve data to field and set specificdata to field. Using Get_I method youcan make your field ...
Concepts of BOL programming :Get_current
Get_current and get_iterator how does it works? The data you enter on theWeb UI gets saved in the databasetables via BOL Entities ...
Create a Tree view display in CRMweb UI
This blog gives the steps to create aTree view display in CRM web UI.Below is a screen shot of the sampleimplementation. ...
Scope of the design layer
Scope of the design layer In the UIUframework some UI/Design relevantsettings can be made. These settingshave to be made per view...
CRM – Tables and Transaction Codes
TABLE NAME DESCRIPTIONBUSINESS PARTNERS BUT000 BP:General data Contains BusinessPartner Number, Partner Category,Partne...
Popular PostsPopular Posts
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.
4/27sapcrmtutorial.blogspot.in
Note:
If you are not w illing to implement the classes, you may skip maintaining the handler classes. You can even directly specify a single 1..n relationship directly under
BTAdminH. The relationships w ill be available, but not usable in the real sense. Then, you can follow this w iki to make do with value nodes.
Moving forward, here's a screenshot of the model w ith the new relationships expanded.
We will begin w ith the API class which w ill be responsible for all operations related to our table.
ZL_ZORD_BTIL_API -> Super class: None
Class Attributes
GT_ZORD Static Attribute Private Type ZORD_STRUCT_TAB API Buffer
GT_ZORD_DEL Static Attribute Private Type ZORD_STRUCT_TAB API Buffer for deleted entities
Note: The GT_ZORD table w ill act as a unified buffer for read and change. GT_ZORD_DEL will hold entries to be deleted on save. Due to this unified buffer nature, it is very
important to refresh this table on Order INIT events.
Methods:
ZORD_CREATE Static Method Public Create
ZORD_MODIFY Static Method Public Modify API data
ZORD_DELETE Static Method Public Delete from API data
ZORD_SAVE Static Method Public Save to DB
ZORD_READ Static Method Public Initial relations reading
ZORD_READ_SINGLE Static Method Public Read single entry
ZORD_INIT Static Method Public Reset buffers
ZORD_DELETE_WITH_ORDER Static Method Public Delete from DB when order is deleted
Step 3: Implementing Handler classes
API Class for our custom Object
Do_prepare_output andOn_new_focus
DO_PREPARE_OUTPUTDO_PREPARE_OUTPUT method istriggered each time the view isprepared after each event. Normallywe redefine this meth...
SAP CRM Cross-applicationAuthorization Objects
OBJECT CLASS Definition /GC1/AUTHAAAB Authorization for GarbageCollector /SAPCND/CC AAABCondition Technique: Authorizatio...
Sample code forDO_CONFIG_DETERMINATIONmethod
This example is to set the visibility of ascreen field based on another field ...METHOD do_config_determination. DATA: lr_btadmin...
How to create POP-UP window in UI
Open the component and then viewwhere the pop up is to be raised. Youmust be raising the popup on someevent... You will need to crea...
Important abap function modules
Useful ABAP Function Modules Thispage is intended to maintaindocumentation of useful functionmodules. This is needed becauseinde...
Total PageviewsTotal Pageviews
2 4 6 4 2
Follow by EmailFollow by Email
Email address... Submit
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.
5/27sapcrmtutorial.blogspot.in
Method Signatures:
*"* public components of class ZL_ZORD_BTIL_API
*"* do not include other source files here!!!
public section.
class-methods ZORD_CREATE
importing
!IS_KEY type CRMT_OBJECT_GUID
!IS_ATTRIBUTES type ZORD_STRUCT .
class-methods ZORD_MODIFY
importing
!IS_KEY type CRMT_OBJECT_GUID
!IV_HEADER_GUID type CRMT_OBJECT_GUID
!IS_ATTRIBUTES type ZORD_STRUCT
!IT_CHANGED_FIELDS type CRMT_ATTR_NAME_TAB
exporting
!ET_RETURN type BAPIRET2_T
!ET_CHANGED_OBJECTS type CRMT_GENIL_OBJ_INSTANCE_TAB .
class-methods ZORD_DELETE
importing
!IS_KEY type CRMT_OBJECT_GUID
!IV_HEADER_GUID type CRMT_OBJECT_GUID
exporting
!ET_RETURN type BAPIRET2_T
!ET_CHANGED_OBJECTS type CRMT_GENIL_OBJ_INSTANCE_TAB .
class-methods ZORD_SAVE
importing
!IV_HEADER_GUID type CRMT_OBJECT_GUID .
class-methods ZORD_READ
importing
!IV_HEADER_GUID type CRMT_OBJECT_GUID
exporting
!ET_ZORD type ZORD_STRUCT_TAB .
class-methods ZORD_READ_SINGLE
importing
!IV_GUID type CRMT_OBJECT_GUID
exporting
!ET_ZORD type ZORD_STRUCT_TAB .
class-methods ZORD_INIT
importing
!IV_HEADER_GUID type CRMT_OBJECT_GUID optional .
class-methods ZORD_DELETE_WITH_ORDER
importing
!IV_HEADER_GUID type CRMT_OBJECT_GUID optional .
METHOD zord_create.
DATA: ls_zord TYPE zord_struct.
ls_zord = is_attributes.
ls_zord-guid = is_key.
INSERT ls_zord INTO TABLE gt_zord.
ENDMETHOD.
METHOD zord_modify.
FIELD-SYMBOLS: <fs_zord> LIKE LINE OF gt_zord,
<old> TYPE simple,
<new> TYPE simple,
<name> TYPE name_komp.
READ TABLE gt_zord WITH KEY guid = is_key ASSIGNING <fs_zord>.
IF sy-subrc EQ 0.
LOOP AT it_changed_fields ASSIGNING <name>.
ASSIGN COMPONENT <name> OF STRUCTURE <fs_zord> TO <old>.
CHECK sy-subrc = 0.
ASSIGN COMPONENT <name> OF STRUCTURE is_attributes TO <new>.
CHECK sy-subrc = 0.
<old> = <new>.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD zord_delete.
DATA: ls_zord LIKE LINE OF gt_zord.
READ TABLE gt_zord WITH KEY guid = is_key INTO ls_zord.
IF sy-subrc EQ 0.
INSERT ls_zord INTO TABLE gt_zord_del.
DELETE gt_zord WHERE guid = is_key.
ENDIF.
ENDMETHOD.
METHOD zord_save.
Method Implementations
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.
6/27sapcrmtutorial.blogspot.in
DATA: lt_zord TYPE zord_struct_tab,
ls_zord LIKE LINE OF lt_zord.
LOOP AT gt_zord INTO ls_zord WHERE ref_guid = iv_header_guid.
INSERT ls_zord INTO TABLE lt_zord.
ENDLOOP.
IF lt_zord[] IS NOT INITIAL.
MODIFY zord FROM TABLE lt_zord.
ENDIF.
REFRESH lt_zord.
LOOP AT gt_zord_del INTO ls_zord WHERE ref_guid = iv_header_guid.
INSERT ls_zord INTO TABLE lt_zord.
ENDLOOP.
IF lt_zord[] IS NOT INITIAL.
DELETE zord FROM TABLE lt_zord.
ENDIF.
ENDMETHOD.
METHOD zord_read.
DATA: lt_zord TYPE zord_struct_tab,
ls_zord LIKE LINE OF lt_zord.
*Check buffer first
*If entries are found in buffer, no need to check DB as whole buffer is used.
*no special provisions for deleted items
READ TABLE gt_zord WITH KEY ref_guid = iv_header_guid TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
et_zord[] = gt_zord[].
DELETE et_zord WHERE ref_guid NE iv_header_guid.
ELSE.
READ TABLE gt_zord_del WITH KEY ref_guid = iv_header_guid TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
*deleted entries exist in buffer!! => Table has already been buffered => No DB Read
EXIT.
ELSE.
REFRESH et_zord.
SELECT * FROM zord INTO TABLE et_zord WHERE ref_guid = iv_header_guid.
INSERT LINES OF et_zord INTO TABLE gt_zord.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD zord_read_single.
DATA: lt_zord TYPE zord_struct_tab,
ls_zord LIKE LINE OF lt_zord.
*Check buffer first
*If entries are found in buffer, no need to check DB as whole buffer is used.
*no special provisions for deleted items
READ TABLE gt_zord WITH KEY guid = iv_guid INTO ls_zord.
IF sy-subrc EQ 0.
INSERT ls_zord INTO table et_zord.
ELSE.
SELECT * FROM zord INTO TABLE et_zord WHERE guid = iv_guid.
INSERT LINES OF et_zord INTO TABLE gt_zord.
ENDIF.
ENDMETHOD.
METHOD zord_init.
DATA: lt_zord TYPE zord_struct_tab,
ls_zord LIKE LINE OF lt_zord.
IF iv_header_guid IS NOT INITIAL.
DELETE gt_zord WHERE ref_guid = iv_header_guid.
DELETE gt_zord_del WHERE ref_guid = iv_header_guid.
ELSE.
REFRESH gt_zord.
REFRESH gt_zord_del.
ENDIF.
ENDMETHOD.
METHOD ZORD_DELETE_WITH_ORDER.
DELETE FROM zord WHERE ref_guid = iv_header_guid.
ENDMETHOD.
The names of the classes w ill be derived at runtime following some conventions. Essentially a _RUN_BTIL and a _DESIGN_BTIL is appended to what you have specified in
customizing. So, go ahead and create the classes.
ZORD_SET_DESIGN_BTIL -> Super class: CL_CRM_DESIGNTIME_BTIL
ZORD_DESIGN_BTIL -> Super class: CL_CRM_DESIGNTIME_BTIL
For the design classes, no further changes are required. You may want to redefine the constructor if you wish to validate the
object name.
ZORD_SET_RUN_BTIL -> Super class: CL_CRM_RUNTIME_BTIL
ZORD_RUN_BTIL -> Super class: CL_CRM_RUNTIME_BTIL
Handler classes for our objects
ZORD_SET_RUN_BTIL - Redefined Methods
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.
7/27sapcrmtutorial.blogspot.in
METHOD if_crm_runtime_btil~read_attributes.
DATA: ls_guid TYPE crmst_guid_btil.
*This is a static read-only relation.
*Inherit GUID from order
TRY.
ir_cont_obj->set_key( iv_ref_guid ).
CATCH cx_crm_cic_duplicate_entry.
ENDTRY.
IF ir_cont_obj->check_attr_requested( ) EQ true.
ls_guid-crm_guid = iv_ref_guid.
me->set_attributes( ir_cont_obj = ir_cont_obj
is_attributes = ls_guid
iv_ref_kind = iv_ref_kind
iv_log_key = iv_ref_guid ).
ENDIF.
*Read underlying relations
IF ir_cont_obj->check_rels_requested( ) EQ true.
me->access_children( ir_cont_obj = ir_cont_obj
ir_data = ir_api_data
iv_ref_guid = iv_ref_guid
iv_ref_kind = iv_ref_kind ).
ENDIF.
*
ENDMETHOD.
METHOD IF_CRM_RUNTIME_BTIL~MAINTAIN_ATTRIBUTES.
DATA: lv_delta TYPE crmt_delta.
***
*This is a read-only relation, nothing much to do here except inherit GUID from Order object
lv_delta = ir_cont_obj->get_delta_flag( ).
IF lv_delta EQ ir_cont_obj->delta_created.
TRY.
ir_cont_obj->set_key( iv_ref_guid ).
CATCH cx_crm_cic_duplicate_entry.
ENDTRY.
ENDIF.
*Take care of underlying relations
me->modify_children( ir_cont_obj = ir_cont_obj
ir_data = ir_api_data
ir_input_fields = ir_input_fields
iv_ref_kind = iv_ref_kind
iv_ref_guid = iv_ref_guid ).
ENDMETHOD.
METHOD MODIFY_CHILDREN .
*Do not redefine this method! Super class will take care of this
ENDMETHOD.
METHOD fieldcheck.
*redefined to prevent system looking for unimplemented FM
*empty, create your own implementation
endmethod.
METHOD if_crm_runtime_btil~read_attributes.
DATA: lr_root_container TYPE REF TO if_genil_container_object,
lv_guid TYPE crmt_object_guid,
lv_first TYPE crmt_boolean VALUE true,
lv_relation TYPE crmt_relation_name.
DATA: lr_zord_i TYPE REF TO zord_struct_tab,
lt_zord_i TYPE zord_struct_tab,
lr_attr_props TYPE REF TO if_genil_obj_attr_properties,
lr_cont_obj TYPE REF TO if_genil_container_object.
FIELD-SYMBOLS: <ls_zord_i> TYPE zord_struct,
<ls_api_data> TYPE crmt_intlay_get,
<lt_api_data> TYPE crmt_intlay_get_tab.
***
CALL METHOD zl_zord_btil_api=>zord_read
ZORD_RUN_BTIL - Redefined methods
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.
INSERT ls_obj_inst INTO TABLE gr_intlay->gt_changed_objects.
ENDCASE.
*Tell the Order API that a change has happened
*This will register our object for save (The FM we registered for SAVE event in event handler table)
CALL FUNCTION 'CRM_EVENT_PUBLISH_OW'
EXPORTING
iv_obj_name = 'ZORD'
iv_guid_hi = lv_header_guid
iv_kind_hi = gc_object_kind-orderadm_h
iv_event = gc_event-after_change.
ENDMETHOD.
Remember the three event callback function modules that we registered in the transaction event handler table? Call the correct API methods inside each FM.
Step 4 - Implement Event callback Function Modules
8/31/12 SAP CRM Technical Tutorials by Naval Bhatt.