Wednesday, March 21, 2018

Program to Create a Class dynamically by passing class name at run time

REPORT z_dyn_classname.
 
CLASS cl_abap_objectdescr DEFINITION LOAD.
DATA: container TYPE REF TO object,
      pic_container TYPE REF TO cl_gui_container,
      exc_ref TYPE REF TO cx_root,
      lo_cast_error TYPE REF TO cx_sy_move_cast_error,
      exc_text TYPE string.
* Picture Control
DATA picture TYPE REF TO cl_gui_picture.
 
DATA: class TYPE string VALUE 'CL_GUI_DIALOGBOX_CONTAINER',
      ptab TYPE abap_parmbind_tab,
      ptab_line TYPE abap_parmbind.
 
CALL SCREEN 100.
 
*----------------------------------------------------------------------*
*  MODULE STATUS_0100 OUTPUT
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
 
  ptab_line-name = 'WIDTH'.
  ptab_line-kind = cl_abap_objectdescr=>exporting.
  GET REFERENCE OF 1000 INTO ptab_line-value.
  INSERT ptab_line INTO TABLE ptab.
 
  ptab_line-name = 'PARENT'.
  ptab_line-kind = cl_abap_objectdescr=>exporting.
  GET REFERENCE OF cl_gui_container=>desktop
                INTO ptab_line-value.
  INSERT ptab_line INTO TABLE ptab.
 
  ptab_line-name = 'HEIGHT'.
  ptab_line-kind = cl_abap_objectdescr=>exporting.
  GET REFERENCE OF 300 INTO ptab_line-value.
  INSERT ptab_line INTO TABLE ptab.
 
  TRY.
      CREATE OBJECT container TYPE (class)
        PARAMETER-TABLE ptab.
    CATCH cx_sy_create_object_error INTO exc_ref.
      exc_text = exc_ref->get_text( ).
      MESSAGE exc_text TYPE 'I'.
  ENDTRY.
  TRY.
* Now, the Widening cast to move the reference from the
* generic object to dialogbox parent container class (more specific class).
      pic_container ?= container.
    CATCH cx_sy_move_cast_error INTO lo_cast_error.
      WRITE: / 'Widening cast failed'.
  ENDTRY.
 
  CREATE OBJECT picture
    EXPORTING
      parent = pic_container.
 
* Request an URL from the data provider by exporting the pic_data.
  DATA url(255).
  CLEAR url.
  PERFORM load_pic_from_db CHANGING url.
 
* load picture
  CALL METHOD picture->load_picture_from_url
    EXPORTING
      url = url.
 
  CALL METHOD cl_gui_cfw=>flush
    EXCEPTIONS
      cntl_system_error = 1
      cntl_error        = 2.
  IF sy-subrc <> 0.
* error handling
  ENDIF.
ENDMODULE.                    "STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&      Form  load_pic_from_db
*&---------------------------------------------------------------------*
FORM load_pic_from_db CHANGING url.
  DATA query_table LIKE w3query OCCURS 1 WITH HEADER LINE.
  DATA html_table LIKE w3html OCCURS 1.
  DATA return_code LIKE w3param-ret_code.
  DATA content_type LIKE  w3param-cont_type.
  DATA content_length LIKE  w3param-cont_len.
  DATA pic_data LIKE w3mime OCCURS 0.
  DATA pic_size TYPE i.
 
  REFRESH query_table.
  query_table-name = '_OBJECT_ID'.
  query_table-value = 'ENJOYSAP_LOGO'.
  APPEND query_table.
 
  CALL FUNCTION 'WWW_GET_MIME_OBJECT'
    TABLES
      query_string        = query_table
      html                = html_table
      mime                = pic_data
    CHANGING
      return_code         = return_code
      content_type        = content_type
      content_length      = content_length
    EXCEPTIONS
      object_not_found    = 1
      parameter_not_found = 2
      OTHERS              = 3.
  IF sy-subrc = 0.
    pic_size = content_length.
  ENDIF.
 
  CALL FUNCTION 'DP_CREATE_URL'
    EXPORTING
      type     = 'image'
      subtype  = cndp_sap_tab_unknown
      size     = pic_size
      lifetime = cndp_lifetime_transaction
    TABLES
      data     = pic_data
    CHANGING
      url      = url
    EXCEPTIONS
      OTHERS   = 1.
 
ENDFORM.                    "load_pic_from_db

No comments:

Post a Comment