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.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2723179/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Salesforce和SAP Netweaver裡資料庫表的後設資料設計Salesforce資料庫
- SAP ABAP資料表的操作
- 如何建立最簡單的 ABAP 資料庫表,以及編碼從資料庫表中讀取資料 (上)資料庫
- 利用BSP call ABAP程式更新資料庫表資料庫
- ABAP資料庫操作(轉)資料庫
- 資料庫表設計資料庫
- 如何自行查詢出 SAP ABAP 標準的 OData 服務返回資料的後臺資料庫表和表欄位名稱資料庫
- ABAP 資料庫表 Size Category 欄位的準確含義資料庫Go
- 【資料庫設計】資料庫的設計資料庫
- SAP ABAP裡資料庫表的Storage Parameters從哪裡來的資料庫
- 設計HBase資料庫資料表有關的建議資料庫
- 資料治理--後設資料
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- ORACLE資料庫中刪除表資料後,資料庫表空間已使用不會自動減少Oracle資料庫
- mysql 5.7後使用sys資料庫下的表查詢資料庫效能狀況MySql資料庫
- 使用特殊的技術更新資料庫(ABAP)資料庫
- (2) 電商資料庫表設計資料庫
- hive的安裝(後設資料庫: MySQL)Hive資料庫MySql
- 客快物流大資料專案(五十一):資料庫表分析 物流專案 資料庫表設計大資料資料庫
- 資料庫索引背後的資料結構資料庫索引資料結構
- GreatSQL資料庫DROP表後無法重建SQL資料庫
- MySQL(一) 資料表資料庫的基本操作MySql資料庫
- 清空資料庫中所有表資料的方法資料庫
- hive後設資料和mysql表的對應HiveMySql
- 將ABAP透明表的定義(後設資料)解析出來匯入到剪下板(clipboard)裡
- MySQL資料庫表損壞後的修復方法MySql資料庫
- 設定EXCLUDE後STANDBY資料庫只讀表空間的恢復資料庫
- 建立資料庫表資料庫
- ZBlog的資料庫表是可以設定字首-修改ZBlog資料庫字首資料庫
- 選擇那個資料庫後 要設定 資料庫所用編碼資料庫
- 值得白嫖的資料庫常用操作語句彙總(資料庫、資料表、資料操作)資料庫
- 巢狀評論的資料庫表設計巢狀資料庫
- 關於資料庫表的設計步驟資料庫
- 在ABAP裡取得一個資料庫表記錄數的兩種方法資料庫
- 利用ABAP除錯模式修改SE16裡資料庫表的內容除錯模式資料庫
- 資料倉儲和後設資料
- 資料治理之後設資料管理
- oracle資料庫兩表資料比較Oracle資料庫