37
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'

Genil Class Web UI Code

Embed Size (px)

Citation preview

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.