Top Banner
Genil Class: Attributes: DESIGNTIME_MODE Constant Public Type CHAR1 Single-Character Indicator 'D' RUNTIME_MODE Constant Public Type CHAR1 Single-Character Indicator 'R' SHM_MODEL_LOAD_MODE Constant Public Type CHAR1 Single-Character Indicator 'S' GC_HEADER Constant Public Type CRMT_EXT_OBJ_NAME External Name of Object 'RAJA_CAT_H' GC_ITEM Constant Public Type CRMT_EXT_OBJ_NAME External Name of Object 'RAJA_CAT_ITEM' GC_SEARCH Constant Public Type CRMT_EXT_OBJ_NAME External Name of Object 'RAJA_SEARCH' GC_HEADER_ITEM_R Constant Public Type CRMT_RELATION_NAME External Name of Object 'RAJA_HEADER_ITEM' GC_SEARCH_R Constant Public Type CRMT_RELATION_NAME External Name of Object 'RAJA_SEARCH_H' GT_HEADER Instance Attribute Public Type TT_HEADER GT_ITEM Instance Attribute Public Type TT_ITEM GC_DELTA_CHANGED Constant Public Type CRMT_DELTA Delta Flag 'M' GC_DELTA_CREATED Constant Public Type CRMT_DELTA Delta Flag 'N' GC_DELTA_DELETED Constant Public Type CRMT_DELTA Delta Flag 'D'
37

Genil Class Web UI Code

Apr 27, 2015

Download

Documents

rajhears143
Welcome message from author
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
Page 1: Genil Class Web UI Code

Genil Class:

Attributes:

DESIGNTIME_MODE Constant Public Type CHAR1 Single-Character Indicator 'D'

RUNTIME_MODE Constant Public Type CHAR1 Single-Character Indicator 'R'

SHM_MODEL_LOAD_MODE Constant Public Type CHAR1 Single-Character Indicator 'S'

GC_HEADER Constant Public Type CRMT_EXT_OBJ_NAME External Name of Object 'RAJA_CAT_H'

GC_ITEM Constant Public Type CRMT_EXT_OBJ_NAME External Name of Object 'RAJA_CAT_ITEM'

GC_SEARCH Constant Public Type CRMT_EXT_OBJ_NAME External Name of Object 'RAJA_SEARCH'

GC_HEADER_ITEM_R Constant Public Type CRMT_RELATION_NAMEExternal Name of Object 'RAJA_HEADER_ITEM'

GC_SEARCH_R Constant Public Type CRMT_RELATION_NAME External Name of Object 'RAJA_SEARCH_H'

GT_HEADER Instance Attribute Public Type TT_HEADER

GT_ITEM Instance Attribute Public Type TT_ITEM

GC_DELTA_CHANGED Constant Public Type CRMT_DELTA Delta Flag 'M'

GC_DELTA_CREATED Constant Public Type CRMT_DELTA Delta Flag 'N'

GC_DELTA_DELETED Constant Public Type CRMT_DELTA Delta Flag 'D'

Methods:

Page 2: Genil Class Web UI Code

1.

IF_GENIL_APPL_MODEL~GET_OBJECT_PROPS:-

Returning@ VALUE( RT_OBJ_PROPS ) TYPE CRMT_OBJ_PROPERTIES_TAB Table of Business Object Attributes

method IF_GENIL_APPL_MODEL~GET_OBJECT_PROPS.

  select * FROM zraja_obj into CORRESPONDING FIELDS OF TABLE rt_obj_props.

endmethod.

2.IF_GENIL_APPL_MODEL~GET_MODEL:-

VALUE( RT_RELATION_DET ) TYPE CRMT_RELATION_DETAIL_TAB

method IF_GENIL_APPL_MODEL~GET_MODEL.

    select * FROM zraja_model into CORRESPONDING FIELDS OF TABLE rt_relation_det.

endmethod.

3.

IF_GENIL_APPL_INTLAY~GET_DYNAMIC_QUERY_RESULT:-

@78\QImporting@ IV_QUERY_NAME TYPE CRMT_EXT_OBJ_NAME External Name of Object

IS_QUERY_PARAMETERS TYPE GENILT_QUERY_PARAMETERS

IT_SELECTION_PARAMETERS TYPE GENILT_SELECTION_PARAMETER_TAB Complex Search Condition

Page 3: Genil Class Web UI Code

IV_ROOT_LIST TYPE REF TO IF_GENIL_CONT_ROOT_OBJECTLIST Data Container - Root Object List Interface

method IF_GENIL_APPL_INTLAY~GET_DYNAMIC_QUERY_RESULT.

  DATA:   lt_request_obj TYPE crmt_request_obj_tab,          ls_selection_parameters  TYPE crmt_genil_order_search,          lr_selection_parameters  TYPE REF TO crmt_genil_order_search.

  DATA lv_str TYPE string.  data lv_and TYPE string VALUE ' '.  DATA ls_param LIKE LINE OF IT_SELECTION_PARAMETERS.  DATA lt_header TYPE TABLE OF ZST_PC_HEADER.  DATA ls_header TYPE ZST_PC_HEADER.

  DATA LT_PRODUCT_CAT_ID TYPE RANGE OF ZST_PC_HEADER-CATALOGUE_ID.  data ls_PRODUCT_CAT_ID like line of LT_PRODUCT_CAT_ID.

  DATA LT_PRODUCT_CAT_DESC TYPE RANGE OF ZST_PC_HEADER-DESCRIPTION.  data ls_PRODUCT_CAT_DESC like line of LT_PRODUCT_CAT_DESC.

  DATA LT_CATEGORY TYPE RANGE OF ZST_PC_HEADER-category_id.  data ls_CATEGORY like line of LT_CATEGORY.

  DATA LT_SUB_CATEGORY TYPE RANGE OF ZST_PC_HEADER-subcategory_id.  data ls_SUB_CATEGORY like line of LT_SUB_CATEGORY.

  DATA LT_STATUS TYPE RANGE OF ZST_PC_HEADER-status.  data ls_STATUS like line of LT_STATUS.

  DATA LT_CREATED_ON TYPE RANGE OF ZST_PC_HEADER-created_on.  data ls_CREATED_ON like line of LT_CREATED_ON.

  DATA LT_CREATED_BY TYPE RANGE OF ZST_PC_HEADER-created_by.  data ls_CREATED_BY like line of LT_CREATED_BY.

  DATA LR_OBJECT TYPE REF TO IF_GENIL_CONT_ROOT_OBJECT.

  CASE iv_query_name.

    WHEN gc_search.

      loop at it_selection_parameters into ls_param.

        case ls_param-ATTR_NAME.          when 'PRODUCT_CAT_ID'.

Page 4: Genil Class Web UI Code

            MOVE-CORRESPONDING LS_PARAM TO ls_PRODUCT_CAT_ID.            APPEND ls_PRODUCT_CAT_ID TO lt_PRODUCT_CAT_ID.

          when 'DESCRIPTION'.            MOVE-CORRESPONDING ls_param to LS_PRODUCT_CAT_DESC.            append LS_PRODUCT_CAT_DESC to LT_PRODUCT_CAT_DESC.

          when 'CATEGORY_ID'.            MOVE-CORRESPONDING ls_param to ls_CATEGORY.            append ls_CATEGORY to lT_CATEGORY.

          when 'SUBCATEGORY_ID'.            MOVE-CORRESPONDING ls_param to ls_SUB_CATEGORY.            append ls_SUB_CATEGORY to lt_SUB_CATEGORY.

          when 'STATUS'.            MOVE-CORRESPONDING ls_param to ls_status.            append ls_status to lt_status.

          when 'CREATED_ON'.            MOVE-CORRESPONDING LS_PARAM TO LS_created_on.            APPEND LS_created_on TO LT_created_on.

          when 'CREATED_BY'.            MOVE-CORRESPONDING LS_PARAM TO ls_created_by.            APPEND ls_created_by TO Lt_created_by.        endcase.

      endloop.

      IF LT_product_cat_id IS NOT INITIAL.        CONCATENATE LV_STR ' ZRAJA_CAT_H~CATALOGUE_ID IN LT_PRODUCT_CAT_ID' INTO LV_STR SEPARATED BY SPACE.        lv_and = ' AND '.      ENDIF.

      IF LT_PRODUCT_CAT_DESC IS NOT INITIAL.        CONCATENATE LV_STR lv_and ' ZRAJA_CAT_H~DESCRIPTION IN LT_PRODUCT_CAT_DESC' INTO LV_STR SEPARATED BY SPACE.        lv_and = ' AND '.      ENDIF.

      IF LT_category IS NOT INITIAL.        CONCATENATE LV_STR lv_and ' ZRAJA_CAT_H~CATEGORY_ID IN LT_CATEGORY' INTO LV_STR SEPARATED BY SPACE.        lv_and = ' AND '.      ENDIF.

Page 5: Genil Class Web UI Code

      IF LT_sub_category IS NOT INITIAL.        CONCATENATE LV_STR lv_and ' ZRAJA_CAT_H~SUB_CATEGORY_ID IN LT_SUB_CATEGORY' INTO LV_STR SEPARATED BY SPACE.        lv_and = ' AND '.      ENDIF.

      IF LT_status IS NOT INITIAL.        CONCATENATE LV_STR lv_and ' ZRAJA_CAT_H~STATUS IN LT_STATUS' INTO LV_STR SEPARATED BY SPACE.        lv_and = ' AND '.      ENDIF.

      IF LT_created_on IS NOT INITIAL.        CONCATENATE LV_STR lv_and ' ZRAJA_CAT_H~CREATED_ON IN LT_CREATED_ON' INTO LV_STR SEPARATED BY SPACE.        lv_and = ' AND '.      ENDIF.

      IF LT_created_BY IS NOT INITIAL.        CONCATENATE LV_STR lv_and ' ZRAJA_CAT_H~CREATED_BY IN LT_CREATED_BY' INTO LV_STR SEPARATED BY SPACE.        lv_and = ' AND '.      ENDIF.

      SELECT * from ZRAJA_CAT_H INTO CORRESPONDING FIELDS OF TABLE gt_header WHERE (lv_str).

      if gt_header is not initial.

        loop at gt_header into ls_header.          try.

              CALL METHOD IV_ROOT_LIST->ADD_OBJECT                EXPORTING                  IV_OBJECT_NAME = gc_header                  IS_OBJECT_KEY  = ls_header-CATALOGUE_ID                RECEIVING                  RV_RESULT      = lr_object.

              CALL METHOD me->SET_ATTR_PROPS                  EXPORTING                  IV_ROOT   = lr_object*            IS_HEADER = ls_header*            IS_ITEM   =                 .

              lr_object->set_attributes( ls_header ).

Page 6: Genil Class Web UI Code

              lr_object->set_key( ls_header-CATALOGUE_ID ).

            catch CX_CRM_GENIL_DUPLICATE_REL CX_CRM_GENIL_MODEL_ERROR.

          endtry.        endloop.

      ENDIF.

    WHEN OTHERS.      RETURN.  ENDCASE.

endmethod.

4.

IF_GENIL_APPL_ALTERNATIVE_DSIL~LOCK_OBJECTS:-

@78\QImporting@ IV_MSG_SERVICE_ACCESS TYPE REF TO IF_GENIL_MSG_SERVICE_ACCESS Interface for Simple Access to Generic IL Message Service

CT_OBJECT_LIST TYPE CRMT_GENIL_OBJ_INST_LINE_TAB

method IF_GENIL_APPL_ALTERNATIVE_DSIL~LOCK_OBJECTS.

  FIELD-SYMBOLS <ls_object> LIKE LINE OF ct_object_list.

  LOOP AT ct_object_list ASSIGNING <ls_object>.    <ls_object>-success = abap_true.  ENDLOOP.endmethod.

5.

Page 7: Genil Class Web UI Code

IF_GENIL_APPL_INTLAY~CREATE_OBJECTS:-

@78\QImporting@ IV_OBJECT_NAME TYPE CRMT_EXT_OBJ_NAME Type of Object to Be Created

IV_NUMBER TYPE INT4 DEFAULT 1 Number of Objects to Be Created

IT_PARAMETERS TYPE CRMT_NAME_VALUE_PAIR_TAB Parameter Table of Name-Value Pairs

IV_ROOT_LIST TYPE REF TO IF_GENIL_CONT_ROOT_OBJECTLIST Data Container - Root Object List Interface

method IF_GENIL_APPL_INTLAY~CREATE_OBJECTS.

  data LS_PARAMETERS  LIKE LINE OF gt_header.  data  LT_REQUEST_OBJ type CRMT_REQUEST_OBJ_TAB.  data lr_object TYPE REF TO if_genil_cont_root_object.  data: LV_GUID type CRMT_GENIL_OBJECT_GUID.

  field-symbols <LINE>  type CRMT_NAME_VALUE_PAIR.  field-symbols   <VALUE> type DATA.

  case IV_OBJECT_NAME.    when gc_header.                                         "#EC NOTEXT*     fill parameter structure from name value pair table      call method FILL_STRUCT_FROM_NVP_TAB        EXPORTING          IT_PARAMETERS = IT_PARAMETERS        CHANGING          CS_PARAMETER  = LS_PARAMETERS.

* create IV_NUMBER orders      do IV_NUMBER times.

        call function 'GUID_CREATE'          IMPORTING            EV_GUID_16 = LV_GUID.

        LS_PARAMETERS-CATALOGUE_ID = LV_GUID.        LS_PARAMETERS-CREATED_ON = sy-datum.        LS_PARAMETERS-CREATED_BY = sy-uname.

Page 8: Genil Class Web UI Code

        insert LS_PARAMETERS into table gt_header.

*       add the new object to the container        try.            lr_object = IV_ROOT_LIST->ADD_OBJECT( IV_OBJECT_NAME = gc_header "#EC NOTEXT                                       IS_OBJECT_KEY  = LV_GUID ).

            lr_object->set_attributes( LS_PARAMETERS ).            lr_object->set_key( LV_GUID ).

          catch CX_CRM_GENIL_DUPLICATE_REL CX_CRM_GENIL_MODEL_ERROR.

        endtry.      enddo.

  endcase.endmethod.

6.

IF_GENIL_APPL_ALTERNATIVE_DSIL~DELETE_OBJECTS:-

@78\QImporting@ IV_MSG_SERVICE_ACCESS TYPE REF TO IF_GENIL_MSG_SERVICE_ACCESS Interface for Simple Access to Generic IL Message Service

CT_OBJECT_LIST TYPE CRMT_GENIL_OBJ_INST_LINE_TAB

method IF_GENIL_APPL_ALTERNATIVE_DSIL~DELETE_OBJECTS.

  field-symbols: <ls_OBJect> like LINE OF CT_OBJECT_LIST.  data lv_key_h type ZCATELOUGE_ID.  DATA ls_header LIKE LINE OF gt_header.*  loop at CT_OBJECT_LIST assigning <ls_OBJect>.    case <ls_OBJect>-OBJECT_NAME.      when gc_header.

        CLEAR lv_key_h.

Page 9: Genil Class Web UI Code

        CALL METHOD cl_crm_genil_container_tools=>get_key_from_object_id          EXPORTING            iv_object_name = <ls_object>-object_name            iv_object_id   = <ls_object>-object_id          IMPORTING            es_key         = lv_key_h.

        IF lv_key_h IS NOT INITIAL.

          delete gt_header WHERE catalogue_id = lv_key_h.          delete gt_item WHERE catalogue_id = lv_key_h.

          DELETE FROM  zraja_cat_h  where CATALOGUE_ID = lv_key_h .          if sy-subrc = 0.            DELETE FROM zraja_item WHERE CATALOGUE_ID = lv_key_h.

              <ls_object>-success = ABAP_TRUE.            ENDIF.          endif.

    endcase.  endloop.endmethod.

7.

IF_GENIL_APPL_INTLAY~GET_OBJECTS:-

IT_REQUEST_OBJECTS TYPE CRMT_REQUEST_OBJ_TAB Table of Object Request Specifications

IV_ROOT_LIST TYPE REF TO IF_GENIL_CONT_ROOT_OBJECTLIST Data Container - Root Object List Interface

method IF_GENIL_APPL_INTLAY~GET_OBJECTS.  "Root Declarations

Page 10: Genil Class Web UI Code

  data   LR_ROOT   type ref to IF_GENIL_CONTAINER_OBJECT.

  data   LV_ROOT_NAME   type CRMT_EXT_OBJ_NAME.  data   LV_cat_id      type ZCATELOUGE_ID.  data  LV_ATTRIBUTES   type ZST_PC_HEADER.  data  ls_header   like LINE OF gt_header.

  field-symbols: <REQ_OBJ> type CRMT_REQUEST_OBJ.

  "Child Declarations

  data  LR_CHILDREN  type ref to IF_GENIL_CONTAINER_OBJECTLIST.  data  LR_CHILD     type ref to IF_GENIL_CONTAINER_OBJECT.

  data  LV_CHILD_NAME     type CRMT_EXT_OBJ_NAME.  data  LV_KEY_ITEM       type ZDE_ITEM_GUID.  data  LS_REQUEST_OBJECT type CRMT_REQUEST_OBJ.  data  ls_item like LINE OF gt_item.

  field-symbols: <REL> type CRMT_RELATION_NAME.

  LR_ROOT = IV_ROOT_LIST->GET_FIRST( ).

  check LR_ROOT is bound.

  LV_ROOT_NAME = LR_ROOT->GET_NAME( ).

  case LV_ROOT_NAME.

    when GC_HEADER.

      call method LR_ROOT->GET_KEY        IMPORTING          ES_KEY = LV_cat_id.

      while LR_ROOT is bound.

        if LR_ROOT->CHECK_ATTR_REQUESTED( ) = ABAP_TRUE.

          read table IT_REQUEST_OBJECTS assigning <REQ_OBJ> with key OBJECT_NAME = gc_header.

          read table gt_header with  key CATALOGUE_ID = lv_cat_id into ls_header.

          if SY-SUBRC ne 0.            SELECT * FROM ZRAJA_CAT_H INTO CORRESPONDING FIELDS OF  ls_header 

Page 11: Genil Class Web UI Code

WHERE CATALOGUE_ID = lv_cat_id.            ENDSELECT.            if SY-SUBRC = 0.              insert ls_header into table gt_header.            endif.          endif.

          LR_ROOT->SET_ATTRIBUTES( Ls_header ).          LR_ROOT->SET_KEY( Ls_header-CATALOGUE_ID ).          SET_ATTR_PROPs(  IV_ROOT = LR_ROOT ).

        endif.

        "  check if dependent objects (items) should be read

        if LR_ROOT->CHECK_RELS_REQUESTED( ) = ABAP_TRUE.

          LR_CHILDREN = LR_ROOT->GET_CHILDREN( IV_AS_COPY = ABAP_FALSE ).

          LR_CHILD = LR_CHILDREN->GET_FIRST( ).

          while LR_CHILD is bound.

            LV_CHILD_NAME  = LR_CHILD->GET_NAME( ).

            case  LV_CHILD_NAME .              when gc_item.

                if LR_CHILD->CHECK_ATTR_REQUESTED( ) = ABAP_TRUE.

                  READ TABLE gt_item WITH key CATALOGUE_ID = LV_cat_id INTO ls_item .

                  if SY-SUBRC ne 0.                    SELECT * FROM ZRAJA_ITEM INTO CORRESPONDING FIELDS OF TABLE gt_item where CATALOGUE_ID = LV_cat_id.                  endif.

                  LOOP AT gt_item INTO ls_item WHERE CATALOGUE_ID = LV_cat_id .                    TRY.                        CALL METHOD LR_ROOT->add_child                          EXPORTING                            iv_relation_name = GC_HEADER_ITEM_R                            is_child_key     = ls_item-ITEM_GUID                          RECEIVING                            rv_result        = lr_child.**                        SET_ATTR_PROPS(  IV_ROOT = lr_child ).

Page 12: Genil Class Web UI Code

                        lr_child->set_attributes( ls_item  ).                        lr_child->set_key( ls_item-ITEM_GUID ).

                      CATCH cx_crm_genil_duplicate_rel .                      CATCH cx_crm_genil_model_error .

                    ENDTRY.                  ENDLOOP.                endif.            endcase.            LR_CHILD = LR_CHILDREN->GET_NEXT( ).          endwhile.        endif.

        LR_ROOT = IV_ROOT_LIST->GET_NEXT( ).      endwhile.  endcase.endmethod.

8.

IF_GENIL_APPL_INTLAY~MODIFY_OBJECTS:-

@78\QImporting@ IV_ROOT_LIST TYPE REF TO IF_GENIL_CONT_ROOT_OBJECTLIST Data Container - Root Object List Interface

IV_RETURN_ROOT_LIST TYPE REF TO IF_GENIL_CONT_ROOT_OBJECTLIST Data Container - Root Object List Interface

ET_CHANGED_OBJECTS TYPE CRMT_GENIL_OBJ_INSTANCE_TABObject Table with Object Type and ID

method IF_GENIL_APPL_INTLAY~MODIFY_OBJECTS.

  "Root/Header Declarations  data: lr_root type ref to IF_GENIL_CONTAINER_OBJECT,        lv_root_name   type CRMT_EXT_OBJ_NAME.

Page 13: Genil Class Web UI Code

  data lv_cat_id TYPE ZCATELOUGE_ID.

  data: LR_PROPS_OBJ    type ref to IF_GENIL_OBJ_ATTR_PROPERTIES,        LT_CHANGED_ATTR type CRMT_ATTR_NAME_TAB,        LS_ATTRIBUTES   type STR_HEADER,        LV_GUID         type CRMT_GENIL_OBJECT_GUID,        LV_HEADER       type ref to IF_GENIL_CONT_ROOT_OBJECT,        ls_changed_object   LIKE LINE OF ET_CHANGED_OBJECTS.

  field-symbols: <HEADER_LINE> like LINE OF  gt_header,       <HEADER_OLD>  type SIMPLE,       <HEADER_NEW>  type SIMPLE,       <HEADER_NAME> type NAME_KOMP.

  clear ET_CHANGED_OBJECTS.

  lr_header = IV_ROOT_LIST->GET_FIRST( ).

  check lr_header is bound.

  lv_header_name = lr_header->GET_NAME( ).

  case lv_header_name.

    when GC_HEADER.

      LV_HEADER = IV_ROOT_LIST->GET_FIRST( ).

      while LV_HEADER is bound.

        if LV_HEADER->GET_DELTA_FLAG( ) = GC_DELTA_CHANGED.

          LV_PROPS_OBJ = LV_HEADER->GET_ATTR_PROPS_OBJ( ).

          call method LV_PROPS_OBJ->GET_NAME_TAB_4_PROPERTY            EXPORTING              IV_PROPERTY = IF_GENIL_OBJ_ATTR_PROPERTIES=>MODIFIED            IMPORTING              ET_NAMES    = LT_CHANGED_ATTR.

          call method LV_HEADER->GET_KEY            IMPORTING              ES_KEY = lv_cat_id.

          call method LV_HEADER->GET_ATTRIBUTES            IMPORTING              ES_ATTRIBUTES = LS_ATTRIBUTES.

Page 14: Genil Class Web UI Code

          read table gt_header assigning <HEADER_LINE> with  key CATALOGUE_ID = lv_cat_id .          if SY-SUBRC = 0.            loop at LT_CHANGED_ATTR assigning <HEADER_NAME>.              assign component <HEADER_NAME> of structure <HEADER_LINE> to <HEADER_OLD>.              check SY-SUBRC = 0.              assign component <HEADER_NAME> of structure LS_ATTRIBUTES to <HEADER_NEW>.              check SY-SUBRC = 0.              <HEADER_OLD> = <HEADER_NEW>.            endloop.          endif.          ls_changed_object-OBJECT_NAME = GC_HEADER.          ls_changed_object-OBJECT_ID = CL_CRM_GENIL_CONTAINER_TOOLS=>BUILD_OBJECT_ID( lv_cat_id ).

          APPEND ls_changed_object to ET_CHANGED_OBJECTS.        endif.

        """""""""""""""""""""""""""""""""""""'children""""""""""""""""""""""""""""""""""""""

        data: LV_CHILDREN_LIST type ref to IF_GENIL_CONTAINER_OBJECTLIST,              LV_CHILD    type ref to IF_GENIL_CONTAINER_OBJECT,             LV_CHILD_NAME     type CRMT_EXT_OBJ_NAME.

        data:                   "LV_PROPS_OBJ    type ref to IF_GENIL_OBJ_ATTR_PROPERTIES,             LT_CHANGED_ATTR_ITEM type CRMT_ATTR_NAME_TAB,             LS_ATTRIBUTES_ITEM   type CRMT_GENIL_PARTNER_ATTR,             Lv_KEY_CHILD         type ZDE_ITEM_GUID,             LT_RETURN       type BAPIRET2_T,             LV_MSG_CONT     type ref to CL_CRM_GENIL_BAPI_MESS_CONT,             LS_CHILD_OBJ_INST     type CRMT_GENIL_OBJ_INSTANCE,             LV_DELTA        type CRMT_DELTA,             "LV_CAT_ID   type ZCATELOUGE_ID,             ls_item_attr TYPE str_item,             LV_HEADER1        type ref to IF_GENIL_CONTAINER_OBJECT,             ls_item like LINE OF gt_item.

        field-symbols: <ITEM_LINE> like LINE OF  gt_item,      <ITEM_OLD>  type SIMPLE,      <ITEM_NEW>  type SIMPLE,      <ITEM_NAME> type NAME_KOMP.

        LV_CHILDREN_LIST = LV_HEADER->GET_CHILDREN( IV_AS_COPY  = ABAP_TRUE ).

Page 15: Genil Class Web UI Code

        LV_CHILD = LV_CHILDREN_LIST->GET_FIRST( ).

        while LV_CHILD is bound.*   branch according the object name          LV_CHILD_NAME = LV_CHILD->GET_NAME( ).          case LV_CHILD_NAME.

            when gc_item.

              LV_HEADER1 = LV_CHILD->GET_PARENT( ).

              call method LV_HEADER1->GET_KEY                IMPORTING                  ES_KEY = LV_CAT_ID.

              LV_DELTA = LV_CHILD->GET_DELTA_FLAG( ).

              case LV_DELTA.

                when GC_DELTA_CHANGED.

                  LV_PROPS_OBJ = LV_CHILD->GET_ATTR_PROPS_OBJ( ).

                  call method LV_PROPS_OBJ->GET_NAME_TAB_4_PROPERTY                    EXPORTING                      IV_PROPERTY = IF_GENIL_OBJ_ATTR_PROPERTIES=>MODIFIED                    IMPORTING                      ET_NAMES    = LT_CHANGED_ATTR_ITEM.

                  call method LV_CHILD->GET_KEY                    IMPORTING                      ES_KEY = Lv_KEY_CHILD.

                  call method LV_CHILD->GET_ATTRIBUTES                    IMPORTING                      ES_ATTRIBUTES = ls_item_attr.

                  read table gt_item assigning <ITEM_LINE> with  key CATALOGUE_ID = lv_cat_id .                  if SY-SUBRC = 0.                    loop at LT_CHANGED_ATTR_ITEM assigning <ITEM_NAME>.                      assign component <ITEM_NAME> of structure <ITEM_LINE> to <ITEM_OLD>.                      check SY-SUBRC = 0.                      assign component <ITEM_NAME> of structure ls_item_attr to <ITEM_NEW>.                      check SY-SUBRC = 0.

Page 16: Genil Class Web UI Code

                      <ITEM_OLD> = <ITEM_NEW>.                    endloop.                  endif.

                  LS_CHILD_OBJ_INST-OBJECT_NAME = gc_item.

                  LS_CHILD_OBJ_INST-OBJECT_ID = CL_CRM_GENIL_CONTAINER_TOOLS=>BUILD_OBJECT_ID( Lv_KEY_CHILD ).

                  append ls_changed_object to eT_CHANGED_OBJECTS.

                when GC_DELTA_CREATED.

                  call method lv_child->GET_ATTRIBUTES                    IMPORTING                      ES_ATTRIBUTES = ls_item_attr.

                  call function 'GUID_CREATE'                    IMPORTING                      EV_GUID_16 = ls_item_attr-ITEM_GUID.

                  ls_item_attr-CATALOGUE_ID = LV_CAT_ID.

                  ls_item_attr-CREATED_BY = sy-uname.                  ls_item_attr-CREATED_ON = sy-datum.                  ls_item_attr-mode = 'N'.

                  APPEND ls_item_attr to gt_item.

                  try.                      LV_CHILD->SET_KEY( Lv_KEY_CHILD ).                    catch CX_CRM_GENIL_DUPLICATE_KEY.

                  endtry.                   LS_CHILD_OBJ_INST-OBJECT_NAME = gc_item.                  ls_changed_object-OBJECT_ID = CL_CRM_GENIL_CONTAINER_TOOLS=>BUILD_OBJECT_ID( ls_item_attr-ITEM_GUID ).                  append ls_changed_object to eT_CHANGED_OBJECTS.

                when GC_DELTA_DELETED.*     get the partner key                  call method lv_child->GET_KEY                    IMPORTING                      ES_KEY = Lv_KEY_CHILD.

Page 17: Genil Class Web UI Code

                  READ TABLE gt_item INTO ls_item WITH KEY ITEM_GUID = Lv_KEY_CHILD.

                  ls_item-mode = 'D'.                  MODIFY gt_item FROM ls_item.

              endcase.          ENDCASE.          LV_CHILD = LV_CHILDREN_LIST->GET_NEXT( ).        endwhile.***        LV_Header = IV_ROOT_LIST->GET_NEXT( ).      endwhile.  endcase.endmethod.

9.

IF_GENIL_APPL_ALTERNATIVE_DSIL~SAVE_OBJECTS:-

@7A\QChanging@ CT_OBJECT_LIST TYPE CRMT_GENIL_OBJ_INST_LINE_TAB

ET_ID_MAPPING TYPE CRMT_GENIL_ID_MAPPING_TAB Table of ID Mapping Entries in Generic Interaction Layer

IV_MSG_SERVICE_ACCESS TYPE REF TO IF_GENIL_MSG_SERVICE_ACCESSInterface for Simple Access to Generic IL Message Service

method IF_GENIL_APPL_ALTERNATIVE_DSIL~SAVE_OBJECTS.*CALL METHOD SUPER->IF_GENIL_APPL_ALTERNATIVE_DSIL~SAVE_OBJECTS*  EXPORTING*    IV_MSG_SERVICE_ACCESS =**  IMPORTING**    ET_ID_MAPPING         =*  CHANGING*    CT_OBJECT_LIST        =*    .

Page 18: Genil Class Web UI Code

  FIELD-SYMBOLS <ls_object> like line of ct_object_list.  DATA lv_cat_id TYPE ZCATELOUGE_ID.  DATA ls_header LIKE LINE OF gt_header.  DATA ls_item LIKE LINE OF gt_item.

  loop at ct_object_list ASSIGNING <ls_object>.

    case <ls_OBJect>-OBJECT_NAME.      when gc_header.        CLEAR lv_cat_id.        CALL METHOD cl_crm_genil_container_tools=>get_key_from_object_id          EXPORTING            iv_object_name = <ls_object>-object_name            iv_object_id   = <ls_object>-object_id          IMPORTING            es_key         = lv_cat_id.

        LOOP AT gt_header INTO ls_header WHERE CATALOGUE_ID = lv_cat_id .

          MODIFY ZRAJA_CAT_H FROM ls_header.

            LOOP AT gt_item INTO ls_item WHERE CATALOGUE_ID = lv_cat_id .                 MODIFY ZRAJA_ITEM FROM ls_item.

            ENDLOOP.              <ls_object>-success  = 'X'.        ENDLOOP.    ENDCASE.

  ENDLOOP.

endmethod.

10.

Page 19: Genil Class Web UI Code

SET_ATTR_PROPS:-

@78\QImporting@ IV_ROOT TYPE REF TO IF_GENIL_CONTAINER_OBJECT OPTIONALData Container - Object Interface

IS_HEADER TYPE STR_HEADER OPTIONAL

IS_ITEM TYPE STR_ITEM OPTIONAL

method SET_ATTR_PROPS.

  DATA: lr_attr_props TYPE REF TO if_genil_obj_attr_properties.

  lr_attr_props = iv_root->get_attr_props_obj( ).

  lr_attr_props->set_all_properties( if_genil_obj_attr_properties=>read_only ).

 lR_attr_props->set_property_by_name( iv_name  = 'DESCRIPTION'                                          iv_value = if_genil_obj_attr_properties=>changeable ). lR_attr_props->set_property_by_name( iv_name  = 'CATEGORY_ID'                                           iv_value = if_genil_obj_attr_properties=>changeable ). lR_attr_props->set_property_by_name( iv_name  = 'SUBCATEGORY_ID'                                          iv_value = if_genil_obj_attr_properties=>changeable ). lR_attr_props->set_property_by_name( iv_name  = 'STATUS'                                          iv_value = if_genil_obj_attr_properties=>changeable ). lR_attr_props->set_property_by_name( iv_name  = 'VALID_FROM'                                           iv_value = if_genil_obj_attr_properties=>changeable ). lR_attr_props->set_property_by_name( iv_name  = 'VALID_TO'                                           iv_value = if_genil_obj_attr_properties=>changeable ).

endmethod.

11.

Page 20: Genil Class Web UI Code

IF_GENIL_APPL_MODEL~GET_OBJECT_PROPS:-

@7B\QReturning@ VALUE( RT_OBJ_PROPS ) TYPE CRMT_OBJ_PROPERTIES_TAB Table of Business Object Attributes

method IF_GENIL_APPL_MODEL~GET_OBJECT_PROPS.

  select * FROM zraja_obj into CORRESPONDING FIELDS OF TABLE rt_obj_props.

endmethod.

Web Ui Part:1.

Page 21: Genil Class Web UI Code

For Linking Product Id :

Under Attributes:-

@78\QImporting@ IV_PROPERTY TYPE STRING Feldeigenschaft -> Siehe Interfacekonstanten

IV_INDEX TYPE I OPTIONAL Zeilenindex bei Tabelle

IV_DISPLAY_MODE TYPE ABAP_BOOL DEFAULT ABAP_FALSE Display Mode?

VALUE( RV_VALUE ) TYPE STRING Wert

method GET_P_CATLOG_ID.   CASE iv_property.    WHEN if_bsp_wd_model_setter_getter=>fp_fieldtype.      rv_value = cl_bsp_dlc_view_descriptor=>field_type_event_link.    WHEN if_bsp_wd_model_setter_getter=>fp_onclick.      rv_value = 'PROCATINFO'.  ENDCASE.endmethod.

Then Under Event Method:

@78\QImporting@ HTMLB_EVENT TYP

E REF TO CL_HTMLB_EVENT OPTIONAL

HTMLB_EVENT_EX TYPE REF TO IF_HTMLB_DATA OPTIONAL

method EH_ONPROCATINFO.

DATA: lv_index TYPE int4.  DATA: lr_current TYPE REF TO if_bol_bo_property_access.  DATA: lr_col type ref to cl_crm_bol_entity_col.  DATA: lv_guid type crmt_object_guid.  data: lr_core TYPE REF TO cl_crm_bol_core.  data: lr_ent type ref to cl_crm_bol_entity,  lr_property TYPE REF TO if_bol_bo_property_access.  DATA: lr_data_collection TYPE REF TO if_bol_bo_col.  DATA: lr_nav_srv TYPE REF TO if_crm_ui_navigation_service.

Page 22: Genil Class Web UI Code

  cl_thtmlb_util=>get_event_info(  exporting  iv_event = htmlb_event_ex  importing  ev_index = lv_index ).

* get current entity and pass it to outbound plug.  lr_current = me->typed_context->SEARCHRESULT->collection_wrapper->find( iv_index = lv_index ).

  CHECK lr_current is BOUND.

  CREATE OBJECT lr_data_collection TYPE cl_crm_bol_bo_col.

  lr_ent ?= lr_current.  lr_data_collection->add( lr_ent ).

 OP_TOSEARCHMAINWINDOW( lr_data_collection ).endmethod.

2.

For Dynamic Drop Down:

IV_PROPERTY TYPE STRING Feldeigenschaft -> Siehe Interfacekonstanten

IV_INDEX TYPE I OPTIONAL Zeilenindex bei Tabelle

IV_DISPLAY_MODE TYPE ABAP_BOOL DEFAULT ABAP_FALSE Display Mode?

VALUE( RV_VALUE ) TYPE STRING Wert

method GET_P_CATEGORY.  CASE iv_property.    WHEN if_bsp_wd_model_setter_getter=>FP_FIELDTYPE.      rv_value = if_bsp_dlc_view_descriptor=>FIELD_TYPE_PICKLIST.*    WHEN if_bsp_wd_model_setter_getter=>FP_SERVER_EVENT.

Page 23: Genil Class Web UI Code

*      rv_value = 'FILL_SUBCATAGORY_DDL'.  ENDCASE.endmethod.

Then Under GET_V_CATEGORY:

@78\QImporting@ IV_MODE TYPE CHAR1 DEFAULT IF_BSP_WD_MODEL_SETTER_GETTER=>RUNTIME_MODE Aufrufmodus

IV_INDEX TYPE I OPTIONAL Zeilenindex bei Tabelle

VALUE( RV_VALUEHELP_DESCRIPTOR ) TYPE REF TO IF_BSP_WD_VALUEHELP_DESCRIPTOR

method GET_V_CATEGORY.  data lr_ddlb type ref to cl_crm_uiu_ddlb.  data lt_select_table type  BSP_WD_DROPDOWN_TABLE.  data ls_select_table like line of  lt_select_table.  data lt_category type table of ZG1P_CATEGORY.  data ls_category like line of  lt_category.  refresh lt_select_table.  CREATE OBJECT LR_DDLB    EXPORTING      IV_SOURCE_TYPE = iv_mode.  select CATEGORYID CATEGORYNAME from ZG1P_CATEGORY    into CORRESPONDING FIELDS OF TABLE lt_category.

  if lt_category is not INITIAL.    insert INITIAL LINE INTO lt_select_table index 1.    loop at lt_category into ls_category.      ls_select_table-key = ls_category-CATEGORYID.      ls_select_table-value = ls_category-CATEGORYNAME.      append ls_select_table to lt_select_table.    endloop.

    CALL METHOD LR_DDLB->SET_SELECTION_TABLE      EXPORTING        IT_SELECTION_TABLE = lt_select_table.    rv_valuehelp_descriptor = lr_ddlb.  endif.endmethod.

Then Under Method

Page 24: Genil Class Web UI Code

ZL_ZG1_PCAT_SEARCHREQUEST_IMPL -> GET_DQUERY_DEFINITIONS :

@7B\QReturning@ VALUE( RT_RESULT ) TYPE CRMT_THTMLB_SEARCH_FIELD_INFO

method GET_DQUERY_DEFINITIONS.*CALL METHOD SUPER->GET_DQUERY_DEFINITIONS*  RECEIVING*    RT_RESULT =*    .

  FIELD-SYMBOLS: <rt_result> TYPE crms_thtmlb_search_field_info.

* data : lt_ddl TYPE CRMS_THTMLB_SEARCH_DDLB_NVP.

  DATA lr_sq TYPE REF TO cl_crm_bol_dquery_service.  DATA lr_sel TYPE REF TO if_bol_bo_col.  DATA ls_sel TYPE genilt_selection_parameter.  DATA lr_prop TYPE REF TO if_bol_bo_property_access.

  data : catagory type string.

  data lr_ddlb type ref to cl_crm_uiu_ddlb.  data lt_select_table type  CRMT_THTMLB_SEARCH_DDLB_NVP.  data ls_select_table like line of  lt_select_table.  data lt_SUBcategory type table of ZG1P_SUB_CAT.  data ls_SUBcategory like line of  lt_SUBcategory.  refresh lt_select_table.

  CALL METHOD super->get_dquery_definitions    RECEIVING      rt_result = rt_result.

  lr_sq ?= me->typed_context->SEARCHREQUEST->collection_wrapper->get_current( ).  if lr_sq is bound.    CALL METHOD lr_sq->get_selection_params      RECEIVING        rv_result = lr_sel.

    IF lr_sel IS BOUND.      lr_prop = lr_sel->get_first( ).      WHILE lr_prop IS BOUND.

Page 25: Genil Class Web UI Code

        CALL METHOD lr_prop->get_properties          IMPORTING            es_attributes = ls_sel.

        CASE ls_sel-attr_name.          WHEN 'CATEGORY'.            catagory =  ls_sel-low.        endcase.        lr_prop = lr_sel->get_next( ).      endwhile.    endif.  endif.

  select SUB_CATID SUB_DESC from ZG1P_SUB_CAT    into CORRESPONDING FIELDS OF TABLE lt_SUBcategory where CATEGORYID = catagory.

  if lt_subcategory is not INITIAL .    insert INITIAL LINE INTO lt_select_table index 1.    loop at lt_subcategory into ls_subcategory.      ls_select_table-key = ls_subcategory-SUB_CATID.      ls_select_table-value = ls_subcategory-SUB_DESC.      append ls_select_table to lt_select_table.    endloop.  elseif lt_subcategory is  INITIAL and catagory is NOT INITIAL.      insert INITIAL LINE INTO lt_select_table index 1.  endif.

  loop at rt_result assigning <rt_result>.    CASE <rt_result>-FIELD.      when 'CATEGORY'.        <rt_result>-server_event = 'DUMMY_EVENT'.      WHEN 'SUBCATEGORY'.        if lt_select_table is not initial.          REFRESH <rt_result>-ddlb_options.          <rt_result>-ddlb_options = lt_select_table.        endif.    ENDCASE.  endloop.endmethod.

Then Under Sub CatId

Page 26: Genil Class Web UI Code

method GET_P_SUBCATEGORY.  CASE iv_property.    WHEN if_bsp_wd_model_setter_getter=>FP_FIELDTYPE.      rv_value = if_bsp_dlc_view_descriptor=>FIELD_TYPE_PICKLIST.  ENDCASE.endmethod.

And

method GET_V_SUBCATEGORY.

   data lr_ddlb type ref to cl_crm_uiu_ddlb.  data lt_select_table type  BSP_WD_DROPDOWN_TABLE.  data ls_select_table like line of  lt_select_table.  data lt_category type table of ZG1P_SUB_CAT.  data ls_category like line of  lt_category.  refresh lt_select_table.  CREATE OBJECT LR_DDLB    EXPORTING      IV_SOURCE_TYPE = iv_mode.  select SUB_CATID SUB_DESC from ZG1P_SUB_CAT    into CORRESPONDING FIELDS OF TABLE lt_category.

  if lt_category is not INITIAL.    insert INITIAL LINE INTO lt_select_table index 1.    loop at lt_category into ls_category.      ls_select_table-key = ls_category-SUB_CATID.      ls_select_table-value = ls_category-SUB_DESC.      append ls_select_table to lt_select_table.    endloop.

    CALL METHOD LR_DDLB->SET_SELECTION_TABLE      EXPORTING        IT_SELECTION_TABLE = lt_select_table.    rv_valuehelp_descriptor = lr_ddlb.

  endif.

endmethod.

In Overview Page:

Page 27: Genil Class Web UI Code

Event Methods:

1. EH_ONNEW:

@78\QImporting@ HTMLB_EVENT TYPE REF TO CL_HTMLB_EVENT OPTIONAL

HTMLB_EVENT_EX TYPE REF TO IF_HTMLB_DATA OPTIONAL

method EH_ONNEW.

    DATA LR_CORE TYPE REF TO CL_CRM_BOL_CORE.  data lt_param type CRMT_NAME_VALUE_PAIR_TAB.  DATA LR_ENTITY_COL TYPE REF TO IF_BOL_BO_COL.  DATA LR_CONTROLLER TYPE REF TO  ZL_ZG1_PCAT_BSPWDCOMPONE0_IMPL .  DATA LR_ROOT TYPE REF TO CL_CRM_BOL_ENTITY.

  LR_CORE = CL_CRM_BOL_CORE=>GET_INSTANCE( ).

  CALL METHOD LR_CORE->ROOT_CREATE    EXPORTING      IV_OBJECT_NAME  = ZCL_G1SEARCH=>GC_PRODUCT_RESULT_G1      IV_CREATE_PARAM = lt_param      IV_NUMBER       = 1    RECEIVING      RV_RESULT       = lr_entity_col.

  LR_CONTROLLER ?= COMP_CONTROLLER.

  LR_CONTROLLER->TYPED_CONTEXT->PCATH->COLLECTION_WRAPPER->CLEAR( ).  LR_CONTROLLER->TYPED_CONTEXT->PCATH->COLLECTION_WRAPPER->ADD_COLLECTION( LR_ENTITY_COL ).

  LR_ROOT ?= LR_ENTITY_COL->GET_CURRENT( ).

  IF LR_ROOT->LOCK( ) EQ ABAP_TRUE.

    VIEW_GROUP_CONTEXT->SET_ALL_EDITABLE( ).  ENDIF.endmethod.

Page 28: Genil Class Web UI Code

2. EH_ONEDIT:

method EH_ONEDIT.

  data : lo_comp type ref to ZL_ZG1_PCAT_BSPWDCOMPONE0_IMPL ,        lr_ent type ref to cl_crm_bol_entity,        lr_vgc type ref to if_bsp_wd_view_group_context.

  DATA LR_MSG_CONT TYPE REF TO CL_CRM_GENIL_GLOBAL_MESS_CONT.  data lr_core type ref to cl_Crm_bol_core.

gv_button_flag = 'EDIT'.

  lo_comp ?= me->comp_controller.  check lo_comp  is bound.  lr_ent ?= lo_comp->typed_context->PCATH->collection_wrapper->get_current( ).

  CHECK lr_ent IS BOUND.

  if lr_ent->is_locked( ) = abap_true.  else.    lr_ent->lock( ).    if lr_ent->is_locked( ) = abap_true.      me->view_group_context->set_all_editable(  ).

    else.      lr_Core = cl_crm_bol_core=>get_instance( ).      lr_msg_cont = lr_core->get_global_message_cont( ).

      CALL METHOD lr_msg_cont->ADD_MESSAGE        EXPORTING          IV_MSG_TYPE       = 'E'          IV_MSG_ID         = 'ZMC_G1_PCAT'          IV_MSG_NUMBER     = '000'*       IV_MSG_TEXT       =          IV_MSG_V1         = sy-uname*       IV_MSG_V2         =*       IV_MSG_V3         =*       IV_MSG_V4         =          IV_SHOW_ONLY_ONCE = abap_true*       IV_MSG_LEVEL      = '1'          .

Page 29: Genil Class Web UI Code

    endif.  endif.

endmethod.

3. EH_ONDELETE:

method EH_ONDELETE.    DATA: lr_ent    TYPE REF TO cl_crm_bol_entity,        lr_core   TYPE REF TO cl_crm_bol_core,        lr_coco   TYPE REF TO ZL_ZG1_PCAT_BSPWDCOMPONE0_IMPL.

  TRY.

      lr_ent ?= me->typed_context->PCATH->collection_wrapper->get_current( ).      IF lr_ent->is_locked( ) = abap_true OR lr_ent->lock( ) = abap_true.        lr_ent->delete( ).

        lr_core = cl_crm_bol_core=>get_instance( ).        IF lr_core IS BOUND.          lr_core->modify( ).        ENDIF.

* refresh the item list  of the component controller        lr_coco ?= me->comp_controller.        IF lr_coco IS BOUND.           lr_coco->typed_context->PCATH->collection_wrapper->publish_current( ).       me->op_default_back( ).

        ENDIF.      ENDIF.

    CATCH cx_sy_move_cast_error cx_sy_ref_is_initial.      RETURN.  ENDTRY.endmethod.

Page 30: Genil Class Web UI Code

4. EH_ONCANCEL:

method EH_ONCANCEL. data lr_core type ref to cl_Crm_bol_core.  DATA LR_TX TYPE REF TO IF_BOl_TRANSACTION_CONTEXT.

  lr_Core = cl_crm_bol_core=>get_instance( ).

  lr_tx ?= lr_core->get_transaction( ).

   LR_TX->REVERT( ).***   me->op_default_back( ).

endmethod.

5.

EH_ONSAVE:

Importing@ HTMLB_EVENT TYPE REF TO CL_HTMLB_EVENT OPTIONAL

HTMLB_EVENT_EX TYPE REF TO IF_HTMLB_DATA OPTIONAL

method EH_ONSAVE.

  DATA LR_ENTITY TYPE REF TO CL_CRM_BOL_ENTITY.  DATA LR_CONTROLLER TYPE REF TO ZL_ZG1_PCAT_BSPWDCOMPONE0_IMPL .  DATA LR_TX TYPE REF TO IF_BOl_TRANSACTION_CONTEXT.  data lr_core type ref to cl_Crm_bol_core.  DATA LS_ATTR TYPE ZST_G1_CATLOG_RESULT.  DATA LR_MSG_CONT TYPE REF TO CL_CRM_GENIL_GLOBAL_MESS_CONT.*  data lr_core type ref to cl_Crm_bol_core.

Page 31: Genil Class Web UI Code

  lr_Core = cl_crm_bol_core=>get_instance( ).  lr_tx ?= lr_core->get_transaction( ).

  LR_CONTROLLER ?= COMP_CONTROLLER.

  """""""""""""""""""""""""""""""""""""""""""""

  IF LR_TX->CHECK_SAVE_NEEDED( ) EQ ABAP_TRUE.

    if lr_tx->save( ) eq abap_true.

      lr_tx->commit( ).

      lr_Core = cl_crm_bol_core=>get_instance( ).      lr_msg_cont = lr_core->get_global_message_cont( ).

      CALL METHOD lr_msg_cont->ADD_MESSAGE        EXPORTING          IV_MSG_TYPE       = 'S'          IV_MSG_ID         = 'ZMC_G1_PCAT'          IV_MSG_NUMBER     = '001'*       IV_MSG_TEXT       =*          IV_MSG_V1         = sy-uname*       IV_MSG_V2         =*       IV_MSG_V3         =*       IV_MSG_V4         =          IV_SHOW_ONLY_ONCE = abap_true*       IV_MSG_LEVEL      = '1'          .

      clear gv_button_flag.

    endif.  ENDIF.endmethod.