zoukankan      html  css  js  c++  java
  • ABAP数据库表的元数据

    For project reason I need to fill some excel.

    The content of each column comes from content in SE11:

    In order to avoid such boring task, I write a small ABAP class to automate it.

    This class will first read corresponding database table name based on CRM settype id, then call function module DDIF_NAMETAB_GET to get all metadata of each table field, and then send the data to clipboard.

    Once done, put the focus on the first cell of content row, press Ctrl+V, all the data from clipboard will be copied into excel automatically.

    The source code could be found below:

    class ZCL_EXCEL_TOOL definition
      public
      final
      create public .
    
    public section.
    
      methods GET_SETTYPE_FIELDS
        importing
          !IV_SETTYPE_ID type COMT_FRGTYPE_ID default 'COMM_PR_SHTEXT' .
      PROTECTED SECTION.
    private section.
    
      types:
        BEGIN OF ty_column,
            a_index       TYPE char3,
            b_table       TYPE dd03l-tabname,
            c_fieldname   TYPE dd03l-fieldname,
            d_element     TYPE dd03l-rollname,
            e_datatype    TYPE x031l-dtyp,
            f_length      TYPE char4,
            g_description TYPE char40,
          END OF ty_column .
      types:
        tt_column TYPE STANDARD TABLE OF ty_column WITH KEY a_index b_table c_fieldname .
      types:
        BEGIN OF ty_clipdata,
            data TYPE c LENGTH 500,
          END   OF ty_clipdata .
      types:
        tt_formatted TYPE STANDARD TABLE OF ty_clipdata .
    
      data MT_COLUMN type TT_COLUMN .
      data MT_FORMATTED type TT_FORMATTED .
      constants C_TAB type CHAR1 value CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB ##NO_TEXT.
    
      methods CONVERT .
      methods GET_FIELD_LABEL
        importing
          !IV_TAB_NAME type DDOBJNAME
          !IV_FIELD_NAME type DFIES-FIELDNAME
        returning
          value(RV_LABEL) type STRING .
    ENDCLASS.
    
    
    
    CLASS ZCL_EXCEL_TOOL IMPLEMENTATION.
    
    
    * <SIGNATURE>---------------------------------------------------------------------------------------+
    * | Instance Private Method ZCL_EXCEL_TOOL->CONVERT
    * +-------------------------------------------------------------------------------------------------+
    * +--------------------------------------------------------------------------------------</SIGNATURE>
      METHOD convert.
    
        LOOP AT mt_column ASSIGNING FIELD-SYMBOL(<raw>).
          APPEND INITIAL LINE TO mt_formatted ASSIGNING FIELD-SYMBOL(<converted>).
          CONCATENATE <raw>-a_index <raw>-b_table <raw>-c_fieldname <raw>-d_element <raw>-e_datatype
          <raw>-f_length <raw>-g_description INTO <converted> SEPARATED BY c_tab.
        ENDLOOP.
      ENDMETHOD.
    
    
    * <SIGNATURE>---------------------------------------------------------------------------------------+
    * | Instance Private Method ZCL_EXCEL_TOOL->GET_FIELD_LABEL
    * +-------------------------------------------------------------------------------------------------+
    * | [--->] IV_TAB_NAME                    TYPE        DDOBJNAME
    * | [--->] IV_FIELD_NAME                  TYPE        DFIES-FIELDNAME
    * | [<-()] RV_LABEL                       TYPE        STRING
    * +--------------------------------------------------------------------------------------</SIGNATURE>
      METHOD get_field_label.
        CALL FUNCTION 'DDIF_FIELDLABEL_GET'
          EXPORTING
            tabname   = iv_tab_name
            fieldname = iv_field_name
            langu     = sy-langu
          IMPORTING
            label     = rv_label.
      ENDMETHOD.
    
    
    * <SIGNATURE>---------------------------------------------------------------------------------------+
    * | Instance Public Method ZCL_EXCEL_TOOL->GET_SETTYPE_FIELDS
    * +-------------------------------------------------------------------------------------------------+
    * | [--->] IV_SETTYPE_ID                  TYPE        COMT_FRGTYPE_ID (default ='COMM_PR_SHTEXT')
    * +--------------------------------------------------------------------------------------</SIGNATURE>
      METHOD get_settype_fields.
        DATA: lv_tab  TYPE comc_settype-frgtype_tab,
              lv_ret  TYPE int4,
              lt_list TYPE STANDARD TABLE OF x031l.
    
        SELECT SINGLE frgtype_tab INTO lv_tab FROM comc_settype WHERE frgtype_id = iv_settype_id.
        IF sy-subrc <> 0.
          WRITE: / 'no database table maintained for settype: ', iv_settype_id.
          RETURN.
        ENDIF.
    
        CALL FUNCTION 'DDIF_NAMETAB_GET'
          EXPORTING
            tabname   = CONV ddobjname( lv_tab )
            status    = 'A'
          TABLES
            x031l_tab = lt_list
          EXCEPTIONS
            not_found = 1
            OTHERS    = 2.
        IF sy-subrc <> 0.
          WRITE:/ 'table metadata parse error'.
          RETURN.
        ENDIF.
    
        LOOP AT lt_list ASSIGNING FIELD-SYMBOL(<list>).
          APPEND INITIAL LINE TO mt_column ASSIGNING FIELD-SYMBOL(<insert>).
          <insert>-a_index = sy-tabix.
          <insert>-b_table = lv_tab.
          <insert>-c_fieldname = <list>-fieldname.
          <insert>-d_element = <list>-rollname.
          <insert>-e_datatype = <list>-dtyp.
          <insert>-f_length = CONV i( <list>-exlength ). "cast CL_ABAP_ELEMDESCR( CL_ABAP_ELEMDESCR=>describe_by_name( <list>-rollname ) )->output_length.
          <insert>-g_description = get_field_label( EXPORTING iv_tab_name = CONV #( lv_tab ) iv_field_name = <list>-fieldname ).
        ENDLOOP.
    
        convert( ).
        cl_gui_frontend_services=>clipboard_export(
        EXPORTING
            no_auth_check        = abap_true
            IMPORTING
              data                 = mt_formatted
            CHANGING
              rc                   = lv_ret
            EXCEPTIONS
              cntl_error           = 1
              error_no_gui         = 2
              not_supported_by_gui = 3
          ).
    
      ENDMETHOD.
    ENDCLASS.
    
  • 相关阅读:
    Matlab绘图基础——colormap在数字图像处理及三维图形展示上的应用(分层设色)
    [参考]C的scanf 和 C++的fscanf 的用法
    [转][修]C清空输入缓冲区
    在Windows下使用Navicat连接Linux下的MySql
    管理账号密码的工具-KeePass使用方法
    [转][修]利用matlab绘制地图上的点、线、面
    (Matlab)GPU计算所需的配置
    Matlab绘图基础——给图像配文字说明(text对象)
    Matlab绘图基础——图形修饰处理(入门)
    Matlab绘图基础——绘制向量图,二维三维(绘制参数曲线图)
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/13570632.html
Copyright © 2011-2022 走看看