列出Sell in application所有可以传输的application object

151 阅读3分钟

Created by Jerry Wang, last modified on Jun 19, 2014

输出所有可供传输的application object 列表:
clipboard1

REPORT zsi_get_app_transportable.
DATA: lv_application TYPE  cmst_application VALUE 'SI'.
DATA :  ls_app_prf       TYPE cmst_lo_app_prf,
        lt_e071          TYPE tr_objects,
        ls_e071          TYPE e071,
        ls_request       TYPE trwbo_request_header,
        lv_pos           TYPE ddposition VALUE 0,
        lv_program       TYPE progname,
        lv_function_pool
          TYPE rs38l_area,
        lt_selscr        TYPE cmst_lo_scr_map_tab,
        ls_selscr        TYPE cmst_lo_scr_map.
CONSTANTS : lc_cust_namespace TYPE namespace VALUE '/0CUST/',
            lc_sap_namespace  TYPE namespace VALUE '/0SAP/'.
CONSTANTS:
  gc_pgmid_r3tr  TYPE pgmid      VALUE 'R3TR',
  gc_object_prog TYPE cmst_param_value VALUE 'PROG',
  gc_object_fugr TYPE trobjtype  VALUE 'FUGR',
  gc_object_ttyp TYPE trobjtype  VALUE 'TTYP',
  gc_object_enqu TYPE trobjtype  VALUE 'ENQU',
  gc_object_tabl TYPE trobjtype  VALUE 'TABL',
  gc_object_doma TYPE trobjtype  VALUE 'DOMA',
  gc_object_dtel TYPE trobjtype  VALUE 'DTEL',
  gc_object_devc TYPE trobjtype  VALUE 'DEVC',
  gc_type        TYPE e071-object VALUE 'Type',
  gc_name        TYPE e071-obj_name VALUE 'Name'.
DATA : lv_repname     TYPE progname,
       lv_namespace   TYPE namespace,
       lv_flag        TYPE trparflag,
       lv_change_devc TYPE boolean VALUE space.
CLEAR ls_app_prf.
CALL FUNCTION 'CMS_LO_APPL_ATTRIBUTES_GET'
  EXPORTING
    iv_application     = lv_application
  IMPORTING
    es_appl_attributes = ls_app_prf.
IF ls_app_prf IS NOT INITIAL.
  CALL FUNCTION 'CMS_LO_COLLECT_APP_PRF_OBJECTS'
    EXPORTING
      is_app_prf       = ls_app_prf
    CHANGING
      ct_e071          = lt_e071
      cv_no_of_objects = lv_pos.
* Profile qualifier objects
  CALL FUNCTION 'CMS_LO_COLLECT_APP_QUAL_OBJ'
    EXPORTING
      iv_application   = lv_application
    CHANGING
      ct_e071          = lt_e071
      cv_no_of_objects = lv_pos.
* Status objects
  CALL FUNCTION 'CMS_LO_COLLECT_APP_STATUS_OBJ'
    EXPORTING
      iv_application   = lv_application
    CHANGING
      ct_e071          = lt_e071
      cv_no_of_objects = lv_pos.
ENDIF.
* Application objects
* TABL types
ls_e071-pgmid    = gc_pgmid_r3tr.
ls_e071-object   = gc_object_tabl.
* Header intf str
IF ls_app_prf-intf_str_h IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-intf_str_h.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* Item intf str
IF ls_app_prf-intf_str_i IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-intf_str_i.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* Exec str
IF ls_app_prf-exec_str IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-exec_str.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* Index str
IF ls_app_prf-indx_str IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-indx_str.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* BSP Index str
IF ls_app_prf-bsp_indx_str IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-bsp_indx_str.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* Index table
IF ls_app_prf-indx_table IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-indx_table.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* BSP Header str
IF ls_app_prf-bsp_str_h IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-bsp_str_h.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* BSP Item str
IF ls_app_prf-bsp_str_i IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-bsp_str_i.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* Enq str
IF ls_app_prf-enq_str IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-enq_str.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* BW str
IF ls_app_prf-bw_str IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-bw_str.
  INSERT ls_e071 INTO TABLE lt_e071.
* BW_C str
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  CONCATENATE ls_app_prf-bw_str
              '_C'
              INTO ls_e071-obj_name.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* TTYP types
CLEAR ls_e071.
ls_e071-pgmid    = gc_pgmid_r3tr.
ls_e071-object   = gc_object_ttyp.
IF ls_app_prf-intf_tty_h IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-intf_tty_h.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
IF ls_app_prf-intf_tty_i IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-intf_tty_i.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
IF ls_app_prf-indx_tty IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-indx_tty.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* BSP Index str
IF ls_app_prf-bsp_indx_tty IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-bsp_indx_tty.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
IF ls_app_prf-exec_tty IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-exec_tty.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
IF ls_app_prf-bsp_tty_h IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-bsp_tty_h.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
IF ls_app_prf-bsp_tty_i IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-bsp_tty_i.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
IF ls_app_prf-bw_tty IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-bw_tty.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
IF ls_app_prf-enq_str IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  CONCATENATE ls_app_prf-enq_str'_TAB' INTO ls_e071-obj_name.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* ENQU types
CLEAR ls_e071.
ls_e071-pgmid    = gc_pgmid_r3tr.
ls_e071-object   = gc_object_enqu.
IF ls_app_prf-enq_obj IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = ls_app_prf-enq_obj.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* Generated routines
CLEAR ls_e071.
ls_e071-pgmid    = gc_pgmid_r3tr.
ls_e071-object   = gc_object_prog.
CALL FUNCTION 'CMS_LO_MAPPING_PROGRAM_GET'
  EXPORTING
    iv_application = lv_application
  IMPORTING
    ev_program     = lv_program.
IF lv_program IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = lv_program.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* Function groups
CLEAR ls_e071.
ls_e071-pgmid    = gc_pgmid_r3tr.
ls_e071-object   = gc_object_fugr.
CALL FUNCTION 'CMS_LO_APPL_FUNCPOOL_NAME_GET'
  EXPORTING
    iv_application     = lv_application
    iv_appl_package    = ls_app_prf-appl_package
  IMPORTING
    ev_functionpool    = lv_function_pool
  EXCEPTIONS
    namespace_mismatch = 1
    OTHERS             = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF lv_function_pool IS NOT INITIAL.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-obj_name = lv_function_pool.
  INSERT ls_e071 INTO TABLE lt_e071.
ENDIF.
* Selection Screens
CALL FUNCTION 'CMS_LO_APPL_SELSCR_GET_CB'
  EXPORTING
    iv_application = lv_application
  IMPORTING
    et_selscr      = lt_selscr.
LOOP AT lt_selscr INTO ls_selscr.
  CALL FUNCTION 'CMS_LO_SELECTION_REP_NAME_GET'
    EXPORTING
      iv_application = lv_application
      iv_screen_id   = ls_selscr-screen_id
    IMPORTING
      ev_repname     = lv_repname
      ev_namespace   = lv_namespace.
  lv_pos = lv_pos + 1.
  ls_e071-as4pos = lv_pos.
  ls_e071-pgmid  = gc_pgmid_r3tr.
  ls_e071-object = gc_object_prog.
  ls_e071-obj_name = lv_repname.
  INSERT ls_e071 INTO TABLE lt_e071.
  CLEAR : lv_flag, lv_change_devc.
  CALL FUNCTION 'TR_CHECK_OBJECT_LOCAL'
    EXPORTING
      iv_e071_pgmid         = ls_e071-pgmid
      iv_e071_object        = ls_e071-object
      iv_e071_obj_name      = ls_e071-obj_name
    IMPORTING
      ev_object_local       = lv_flag
    EXCEPTIONS
      tadir_entry_not_found = 1
      OTHERS                = 2.
  IF sy-subrc <> 0.
    lv_change_devc = 'X'.
  ELSE.
    IF sy-subrc EQ 0 AND
      lv_flag NE space.
      lv_change_devc = 'X'.
    ENDIF.
  ENDIF.
ENDLOOP.
WRITE: / gc_type, gc_name COLOR COL_NEGATIVE.
LOOP AT lt_e071 ASSIGNING FIELD-SYMBOL(<item>).
  WRITE: / <item>-object UNDER gc_type COLOR COL_TOTAL, <item>-obj_name UNDER gc_name COLOR COL_GROUP.
ENDLOOP.