Spend Management Blogs by Members
Check out community member blog posts about spend management and SAP Ariba, SAP Fieldglass, and SAP Concur solutions. Post or comment about your experiences.
cancel
Showing results for 
Search instead for 
Did you mean: 
former_member184741
Active Contributor

This is the second part of the blog series. In this blog I am going to go through the business object mapper and dependent object mapper classes (second layer I had mentioned in SRM architecture diagram in first blog). I am assuming that reader has good knowledge of configuration controller, component usage, application configuration and component configuration concepts in webdynpro  ABAP. Also reader should have fair amount of knowledge about  FPM ( especially GAF component)


The SC application is build based on FPM GAF application. There are 3 steps configured in it. To start with go to FPM_GAF_COMPONENT in SE80 and open application configuration /SAPSRM/WDAC_FPM_GAF_SC of  webdynpro application /SAPSRM/WDA_L_FPM_GAF and application configuration /SAPSRM/WDAC_FPM_GAF_SC. This in turn refers to component configuration /SAPSRM/WDCC_FPM_GAF_SC.


The component configuration has below three active steps configured in it.


Step description

WD Component

Interface view

Component configuration name

Select Goods/Services

/SAPSRM/WDC_DODC_SC_GAF_C

IV_L_FPC_GAF_CA

/SAPSRM/WDCC_FPM_SC_GAF_C

Shopping cart(Empty)

/SAPSRM/WDC_SC_WZ_GAF_2ST

IV_L_FPC_GAF_CA

/SAPSRM/WDCC_FPM_SC_GAF_2ST

Complete Order

/SAPSRM/WDC_SC_WZ_GAF_3ST

IV_L_FPC_GAF_CA

/SAPSRM/WDCC_FPM_SC_GAF_3ST

Application configuration controller(Appcc) for this application is WD component /SAPSRM/WDC_FPM_GAF_CONF with component configuration /SAPSRM/WDCC_FPM_APPCC_SC .In this component configuration, in the tab ‘Component defined’ for  ‘GAF_CONFIG’ node you see a class with name  /SAPSRM/CL_FPM_OVRIDE_GAF_SC attached to attribute OVRIDE_GAF_CLASSNAME.


When we start the shop application control goes to method OVERRIDE_EVENT_START of class /SAPSRM/CL_FPM_OVRIDE_GAF_SC (Actually in class /SAPSRM/CL_FPM_OVRIDE_HDLR, this is a super->super class of /SAPSRM/CL_FPM_OVRIDE_GAF_SC), message handler class (/SAPSRM/CL_CH_WD_MAP_MSG_HDLR ) and task container classes(/SAPSRM/CL_CH_WD_TASKCONTAINER) are instantiated for the first time.

The task container class is very important. This is where all the business object mapper (BOM) and dependent object mapper (DOM) classes are instantiated. It has separate method for generating each one of them. For example to instantiate the BOM for shopping cart there is a method called /SAPSRM/IF_CLL_TASK_CONTAINER~GET_BOM_SC. If you go inside this method, there is a call to mapper factory class /SAPSRM/CL_CH_WD_MAP_FACTORY and method CREATE_SC_MAPPER. Inside this method you will find the exact name of the BO mapper class for shopping cart, i.e. /SAPSRM/CL_CH_WD_BOM_SC.


Inside the constructor of the BOM class, BOM class instance is registered / added in a global attribute the class /SAPSRM/CL_CH_WD_TASKCONTAINER for future use, as we don’t want to instantiate it every time. Also there is a call to method CREATE_NEW_INSTANCE of class /SAPSRM/CL_PDO_FACTORY_SC_ADV (if you already read the first blog, you will identify this class.  We have successfully tracked the control starting from UI to BOM to BO to PROCDOC FM. Hurrayyyyyyyyy :smile: )

Let us explore the component /SAPSRM/WDC_DODC_SC_GAF_C that is used in first step of GAF. it has one view V_DODC_SC_GAF_FSCA


It has a custom controller, which acts as configuration controller with node USAGE_DEFINIITION with three attributes COMPONENT_NAME, COMPONENT_NAME and COMPONENT_NAME.


In the component configuration /SAPSRM/WDCC_FPM_SC_GAF_C, the configuration context USAGE_DEFINITION has seven elements added to it as shown below. These elements basically give us the different WD components that can be used inside the main component and their usage name.

Usage name

WD Component name

Component configuration

CATALOG_LIST

/SAPSRM/WDC_UI_SC_DODC_CC

CROSS_CATALOG_SEARCH

/SAPSRM/CH_WD_UI_SO_CCS

/SAPSRM/WDCC_SO_CCS_SC

DEFAULT_SETTINGS

/SAPSRM/WD_SC_UI_SO_DEFV

/SAPSRM/WDCC_SOFC_SC_DV_NORMAL

DESCRIBE_ITEM

/SAPSRM/WDC_DODC_SC_I_DES

/SAPSRM/WDCC_SC_I_DES_WIZARD

INTERNAL_GOODS

/SAPSRM/WDC_DODC_SC_I_IGS

/SAPSRM/WDCC_SC_I_IGS_PROF

LIMIT_ITEM

/SAPSRM/WDC_DODC_SC_I_LIM

/SAPSRM/WDCC_SC_I_LIM_PROF

SC_SEARCH_TEMPLATE

/SAPSRM/WDC_UI_SO_SC_TMPL

/SAPSRM/WDCC_UI_SO_SC_TEMPLATE

If we go to the component controller properties tab, you will find same component usage names as we have seen in the component configuration. Please note that usage names should exactly match with those mentioned in the component configuration.


In the WDDOINIT method of component controller, first we get instance of task container and from that get the instance of SC BOM class. Then get the reference of node USAGE_DEFINITION and create instance of component manager class /SAPSRM/CH_WD_FPM_COMP_MANAGER by passing  reference of task container, BOM  and USAGE_DEFINITION node. Inside the constructor of this class we read the elements of node USAGE_DEFINITION and store them in a global attribute.


Next there is a call to INIT_COMPONENT_USAGE method of same class where component usages are created for component usage CATALOG_LIST and CROSS_CAtALOG_SEARCH. Whenever component usage is created for a component, WDDOINIT method of that component gets called in runtime.


In the WDODINIT of the view we instantiate the DOM class for the content area of view i.e. /SAPSRM/CL_CH_WD_DOM_SCW_CA


When we lick on other links available in view like ‘limit item’ or ‘Describe what you need’, then the corresponding component usage is created and then related DOM methods are called.  For example for limit item there is a method called LIMIT_ITEM in DOM class /SAPSRM/CL_CH_WD_DOM_SCW_CA.


We will examine here the WD component related to CAtALOG_LIST usage (/SAPSRM/WDC_UI_SC_DODC_CC). In the WDDOINIT method we instantiate DOM class for catalog list i.e /SAPSRM/CL_CH_WD_DODM_CATLIST .The important method to understand is WDDOMODIFY method of this component. If you look at the layout of view V_CATALOGLIST_CA, there is nothing created under ROOTUIELEMENTCONTAIER, which means UI elements are created dynamically at runtime.


Method DISPLAY_CATALOG_LINKS of DOM class has the logic to add the UI elements directly to the root ui element based on the catalogs maintained for user in PPOSA_BBP. While creating the ui elements ( linktoaction type ui element), there is an action with name ‘OPEN_CATALOG’. The action handler for this action is created in view with name ONACTIONOPEN_CATALOG. Inside this action handler there is a call to method OPEN_CATALOG of same DOM class. Inside this method is the logic to get the webservice link of the catalog from the SPRO and navigate to the catalog page.


I have just covered the important parts of the entire call stack starting from clicking of ‘Shop’ link to the opening of catalog window. I hope the information that I have provided here will help reader to explore more into the intricacies of the application.


In the next blog I am planning to cover the second step of the GAF i.e. ‘Shopping Cart(Empty).


link to part3 Understanding Shopping cart creation in SRM7 - Part 3


Have a nice day :smile:

1 Comment