ABAP-RFC接口文档导出程序
*&---------------------------------------------------------------------* *& Report ZTEST_RFC *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ztest_rfc LINE-SIZE 255.. *&---------------------------------------------------------------------* *& Report YLB011 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* INCLUDE yfunc_excel. TYPE-POOLS : rmdi. ********************************************************************** *Define Types ********************************************************************** TYPES: BEGIN OF ts_func, parameter TYPE fupararef-parameter, "参数名称 paramtype TYPE fupararef-paramtype, "参数类型 structure TYPE fupararef-structure, "接口参数的参考类型 defaultval TYPE fupararef-defaultval, "输入参数的缺省值 optional TYPE fupararef-optional, "可选参数 pposition TYPE fupararef-pposition, "表格行 stext TYPE funct-stext, "短文本 END OF ts_func, tt_func TYPE TABLE OF ts_func. ********************************************************************** *Global Data ********************************************************************** DATA: gt_func TYPE tt_func, gt_imp TYPE tt_func, gt_exp TYPE tt_func, gt_cha TYPE tt_func, gt_tab TYPE tt_func, gt_struc TYPE tt_func. DATA: gt_dd07v TYPE TABLE OF dd07v. DATA: go_excel TYPE REF TO lcl_excel. ********************************************************************** * SELECTION-SCREEN ********************************************************************** PARAMETERS: p_fname LIKE fupararef-funcname. SELECTION-SCREEN SKIP 1. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. PARAMETER p_xls AS CHECKBOX. PARAMETER p_dir TYPE string. SELECTION-SCREEN SKIP 1. PARAMETER p_yh AS CHECKBOX. SELECTION-SCREEN END OF BLOCK b1. INITIALIZATION. p_xls = 'X'. CALL METHOD cl_gui_frontend_services=>get_desktop_directory CHANGING desktop_directory = p_dir EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. CALL METHOD cl_gui_cfw=>update_view. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_dir. CALL METHOD cl_gui_frontend_services=>directory_browse * EXPORTING * window_title = * initial_folder = CHANGING selected_folder = p_dir EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. START-OF-SELECTION. PERFORM get_ddic_datatype. PERFORM get_func_para USING p_fname gt_func. PERFORM classify_func USING gt_func gt_imp gt_exp gt_cha gt_tab. PERFORM write_list. IF p_xls = 'X'. PERFORM download_template. LEAVE LIST-PROCESSING. ENDIF. *&---------------------------------------------------------------------* *& Form write_list *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM write_list. PERFORM write_head. PERFORM write_para USING '输入' gt_imp gt_struc. PERFORM write_para USING '输出' gt_exp gt_struc. PERFORM write_para USING '修改' gt_cha gt_struc. PERFORM write_para USING '表' gt_tab gt_struc. PERFORM write_sturc USING gt_struc. ENDFORM. "write_list *&---------------------------------------------------------------------* *& Form download_template *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM download_template. DATA: ld_row TYPE i. DATA: ld_xls_file TYPE string. CONCATENATE p_dir '\' p_fname '_' sy-datum '.xls' INTO ld_xls_file. CREATE OBJECT go_excel EXPORTING id_xlsfile = ld_xls_file. PERFORM write_head_xls. ld_row = 2. PERFORM write_para_xls USING '输入' ld_row gt_imp. PERFORM write_para_xls USING '输出' ld_row gt_exp. PERFORM write_para_xls USING '修改' ld_row gt_cha. PERFORM write_para_xls USING '表 ' ld_row gt_tab. PERFORM write_sturc_xls USING ld_row gt_struc. DO 8 TIMES. go_excel->set_col_width( id_col_no = sy-index ). ENDDO. IF p_yh = 'X'. go_excel->select_range( id_range = 'A:H' ). go_excel->set_range_format( id_font_name = '微软雅黑' ). ENDIF. go_excel->frozen_window( id_row_no = 3 ). go_excel->save( ). ENDFORM. "download_template *&---------------------------------------------------------------------* *& Form write_head_xls *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM write_head_xls. go_excel->rename_sheet( id_pos = 1 id_sheetname = p_fname ). go_excel->set_cell_data( id_col = 1 id_row = 1 id_value = '函数名' ). go_excel->set_cell_format( id_col = 1 id_row = 1 id_bold = 1 id_bg_color = 37 ). go_excel->set_cell_data( id_col = 2 id_row = 1 id_value = p_fname ). DATA: ld_stext TYPE tftit-stext. SELECT SINGLE stext INTO ld_stext FROM tftit WHERE funcname = p_fname. IF sy-subrc = 0. go_excel->set_cell_data( id_col = 5 id_row = 1 id_value = ld_stext ). ENDIF. DATA: ld_date TYPE char20, ld_time TYPE char20. WRITE sy-datum TO ld_date. WRITE sy-uzeit TO ld_time. CONCATENATE ld_date ld_time INTO ld_date SEPARATED BY space. go_excel->set_cell_data( id_col = 8 id_row = 1 id_value = ld_date ). go_excel->set_cell_data( id_col = 1 id_row = 2 id_value = '参数名' ). go_excel->set_cell_data( id_col = 2 id_row = 2 id_value = '类型' ). go_excel->set_cell_data( id_col = 3 id_row = 2 id_value = '长度' ). go_excel->set_cell_data( id_col = 4 id_row = 2 id_value = '小数' ). go_excel->set_cell_data( id_col = 5 id_row = 2 id_value = '描述文本' ). go_excel->set_cell_data( id_col = 6 id_row = 2 id_value = '可选' ). go_excel->set_cell_data( id_col = 7 id_row = 2 id_value = '默认值' ). go_excel->set_cell_data( id_col = 8 id_row = 2 id_value = '备注' ). go_excel->select_range( id_range = 'A2:H2' ). go_excel->set_range_format( id_bg_color = 37 ). ENDFORM. "write_head_xls *&---------------------------------------------------------------------* *& Form write_para_xls *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_PTYPE text * -->CD_ROW text * -->IT_PARA text *----------------------------------------------------------------------* FORM write_para_xls USING id_ptype cd_row it_para TYPE tt_func. CHECK it_para IS NOT INITIAL. cd_row = cd_row + 2. go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = id_ptype ). go_excel->set_cell_format( id_col = 1 id_row = cd_row id_bold = 1 id_bg_color = 37 ). DATA: ls_para TYPE ts_func. LOOP AT it_para INTO ls_para. cd_row = cd_row + 1. go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = ls_para-parameter ). PERFORM write_ddic_info_xls USING cd_row ls_para-structure. go_excel->set_cell_data( id_col = 5 id_row = cd_row id_value = ls_para-stext ). go_excel->set_cell_data( id_col = 6 id_row = cd_row id_value = ls_para-optional ). go_excel->set_cell_data( id_col = 7 id_row = cd_row id_value = ls_para-defaultval ). ENDLOOP. ENDFORM. "write_para_xls *&---------------------------------------------------------------------* *& Form get_ddic_datatype *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM get_ddic_datatype. CALL FUNCTION 'DDUT_DOMVALUES_GET' EXPORTING name = 'DATATYPE' * LANGU = SY-LANGU * TEXTS_ONLY = ' ' TABLES dd07v_tab = gt_dd07v EXCEPTIONS illegal_input = 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. SORT gt_dd07v BY domvalue_l. ENDFORM. "get_ddic_datatype *&---------------------------------------------------------------------* *& Form get_func_para *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_FUNCNAME text * -->ET_FUNC text *----------------------------------------------------------------------* FORM get_func_para USING id_funcname et_func TYPE tt_func. SELECT fupararef~parameter "参数名称 fupararef~paramtype "参数类型 fupararef~structure "接口参数的参考类型 fupararef~defaultval "输入参数的缺省值 fupararef~optional "可选参数 fupararef~pposition funct~stext "短文本 FROM fupararef INNER JOIN funct ON funct~funcname = fupararef~funcname AND funct~parameter = fupararef~parameter AND funct~spras = sy-langu INTO TABLE et_func WHERE fupararef~funcname = id_funcname AND r3state = 'A'. IF sy-subrc <> 0. MESSAGE '无法识别的函数名' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. ENDFORM. "get_func_para *&---------------------------------------------------------------------* *& Form classify_func *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->IT_FUNC text * -->ET_IMP text * -->ET_EXP text * -->ET_CHA text * -->ET_TAB text *----------------------------------------------------------------------* FORM classify_func USING it_func TYPE tt_func et_imp TYPE tt_func et_exp TYPE tt_func et_cha TYPE tt_func et_tab TYPE tt_func. DATA: ls_func TYPE ts_func. LOOP AT it_func INTO ls_func. CASE ls_func-paramtype . WHEN 'I'. APPEND ls_func TO et_imp. WHEN 'E'. APPEND ls_func TO et_exp. WHEN 'C'. APPEND ls_func TO et_cha. WHEN 'T'. APPEND ls_func TO et_tab. ENDCASE. ENDLOOP. SORT et_imp BY pposition. SORT et_exp BY pposition. SORT et_cha BY pposition. SORT et_tab BY pposition. ENDFORM. "classify_func *&---------------------------------------------------------------------* *& Form write_head *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_PTYPE text * -->IT_PARA text * -->CT_STRUC text *----------------------------------------------------------------------* FORM write_head . WRITE: /(30) '函数名', (40) p_fname , (10) '' , (10) '', (40) '', (5) '', (20) '', (20) ''. SKIP 1. WRITE: /(30) '参数名', (20) '类型' , (10) '长度' , (10) '小数' , (40) '描述文本', (5) '可选', (20) '默认值', (20) '备注'. WRITE sy-uline. ENDFORM. "write_head *&---------------------------------------------------------------------* *& Form write_para *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_PTYPE text * -->IT_PARA text * -->CT_STRUC text *----------------------------------------------------------------------* FORM write_para USING id_ptype it_para TYPE tt_func ct_struc TYPE tt_func. CHECK it_para IS NOT INITIAL. FORMAT INTENSIFIED COLOR = 5. WRITE :/(30) id_ptype. FORMAT INTENSIFIED COLOR = 0. DATA: ls_para TYPE ts_func, ld_x_struc(1). LOOP AT it_para INTO ls_para. WRITE: /(30) ls_para-parameter . CLEAR ld_x_struc. PERFORM write_ddic_info USING ls_para-structure ld_x_struc. IF ld_x_struc = 'X'. APPEND ls_para TO ct_struc. ENDIF. WRITE : (40) ls_para-stext , (5) ls_para-optional , (20) ls_para-defaultval . ENDLOOP. SKIP 2 . ENDFORM. "write_para *&---------------------------------------------------------------------* *& Form write_ddic_info *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_DATA text * -->ED_X_STRUC text *----------------------------------------------------------------------* FORM write_ddic_info USING id_data ed_x_struc. DATA: ld_match(1). CHECK id_data IS NOT INITIAL. IF id_data CS '-'. "参考字段 PERFORM get_ddic_ref_field USING id_data. ELSE. "按照数据元素处理 PERFORM get_ddic_data_element USING id_data ld_match. "不是field 默认按照structure 处理 CHECK ld_match = ''. ed_x_struc = 'X'. WRITE: (20) id_data, (10) '', (10) ''. ENDIF. ENDFORM. "write_ddic_info *&---------------------------------------------------------------------* *& Form write_ddic_info_xls *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_ROW text * -->ID_DATA text *----------------------------------------------------------------------* FORM write_ddic_info_xls USING id_row TYPE i id_data. DATA: ld_match(1). CHECK id_data IS NOT INITIAL. IF id_data CS '-'. "参考字段 PERFORM get_ddic_ref_field_xls USING id_row id_data. ELSE. "按照数据元素处理 PERFORM get_ddic_data_element_xls USING id_row id_data ld_match. "不是field 默认按照structure 处理 CHECK ld_match = ''. go_excel->set_cell_data( id_col = 2 id_row = id_row id_value = id_data ). ENDIF. ENDFORM. "write_ddic_info_xls *&---------------------------------------------------------------------* *& Form get_ddic_ref_field *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_DATA text *----------------------------------------------------------------------* FORM get_ddic_ref_field USING id_data. DATA: ld_tabname TYPE rmdi_name, ld_fieldname TYPE rmdi_fienm, ls_field TYPE rmdi_tabfld. SPLIT id_data AT '-' INTO ld_tabname ld_fieldname. CALL FUNCTION 'RM_TABLE_INFO_GET' EXPORTING i_tabname = ld_tabname i_fieldname = ld_fieldname i_langu = sy-langu i_read_texts = 'X' IMPORTING * E_TABHEADER = e_tabfield_w = ls_field * E_TABFIELDS_T = EXCEPTIONS not_found = 1 ddic_error = 2 OTHERS = 3. IF sy-subrc = 0. WRITE: (20) ls_field-datatype, (10) ls_field-leng. IF ls_field-decimals IS INITIAL. WRITE (10) ''. ELSE. WRITE (10) ls_field-decimals. ENDIF. ENDIF. ENDFORM. "get_ddic_ref_field *&---------------------------------------------------------------------* *& Form get_ddic_ref_field_xls *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_ROW text * -->ID_DATA text *----------------------------------------------------------------------* FORM get_ddic_ref_field_xls USING id_row id_data. DATA: ld_tabname TYPE rmdi_name, ld_fieldname TYPE rmdi_fienm, ls_field TYPE rmdi_tabfld. SPLIT id_data AT '-' INTO ld_tabname ld_fieldname. CALL FUNCTION 'RM_TABLE_INFO_GET' EXPORTING i_tabname = ld_tabname i_fieldname = ld_fieldname i_langu = sy-langu i_read_texts = 'X' IMPORTING * E_TABHEADER = e_tabfield_w = ls_field * E_TABFIELDS_T = EXCEPTIONS not_found = 1 ddic_error = 2 OTHERS = 3. IF sy-subrc = 0. go_excel->set_cell_data( id_col = 2 id_row = id_row id_value = ls_field-datatype ). go_excel->set_cell_data( id_col = 3 id_row = id_row id_value = ls_field-leng ). IF ls_field-decimals IS NOT INITIAL. go_excel->set_cell_data( id_col = 4 id_row = id_row id_value = ls_field-decimals ). ENDIF. ENDIF. ENDFORM. "get_ddic_ref_field_xls *&---------------------------------------------------------------------* *& Form get_ddic_data_element *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_DATA text * -->ED_MATCH text *----------------------------------------------------------------------* FORM get_ddic_data_element USING id_data ed_match. DATA: ls_dd04v TYPE dd04v. DATA: ld_name TYPE ddobjname. ld_name = id_data. CALL FUNCTION 'DDIF_DTEL_GET' EXPORTING name = ld_name * STATE = 'A' * LANGU = ' ' IMPORTING * GOTSTATE = dd04v_wa = ls_dd04v * TPARA_WA = EXCEPTIONS illegal_input = 1 OTHERS = 2. IF ls_dd04v-datatype IS NOT INITIAL. WRITE: (20) ls_dd04v-datatype, (10) ls_dd04v-leng. IF ls_dd04v-decimals IS INITIAL. WRITE (10) ''. ELSE. WRITE (10) ls_dd04v-decimals. ENDIF. ed_match = 'X'. ELSE. READ TABLE gt_dd07v TRANSPORTING NO FIELDS WITH KEY domvalue_l = id_data BINARY SEARCH. IF sy-subrc = 0. ed_match = 'X'. ENDIF. ENDIF. ENDFORM. "get_ddic_data_element *&---------------------------------------------------------------------* *& Form get_ddic_data_element_xls *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->ID_ROW text * -->ID_DATA text * -->ED_MATCH text *----------------------------------------------------------------------* FORM get_ddic_data_element_xls USING id_row TYPE i id_data ed_match. DATA: ls_dd04v TYPE dd04v. DATA: ld_name TYPE ddobjname. ld_name = id_data. CALL FUNCTION 'DDIF_DTEL_GET' EXPORTING name = ld_name * STATE = 'A' * LANGU = ' ' IMPORTING * GOTSTATE = dd04v_wa = ls_dd04v * TPARA_WA = EXCEPTIONS illegal_input = 1 OTHERS = 2. IF ls_dd04v-datatype IS NOT INITIAL. go_excel->set_cell_data( id_col = 2 id_row = id_row id_value = ls_dd04v-datatype ). go_excel->set_cell_data( id_col = 3 id_row = id_row id_value = ls_dd04v-leng ). IF ls_dd04v-decimals IS NOT INITIAL. go_excel->set_cell_data( id_col = 4 id_row = id_row id_value = ls_dd04v-decimals ). ENDIF. ed_match = 'X'. ELSE. READ TABLE gt_dd07v TRANSPORTING NO FIELDS WITH KEY domvalue_l = id_data BINARY SEARCH. IF sy-subrc = 0. ed_match = 'X'. ENDIF. ENDIF. ENDFORM. "get_ddic_data_element_xls *&---------------------------------------------------------------------* *& Form write_sturc *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->IT_STRUC text *----------------------------------------------------------------------* FORM write_sturc USING it_struc TYPE tt_func. DATA: ls_struc TYPE ts_func, ld_tabname TYPE rmdi_name, lt_field TYPE rmdi_tabfld_t, ls_field TYPE rmdi_tabfld. CHECK it_struc IS NOT INITIAL. SORT it_struc BY structure. DELETE ADJACENT DUPLICATES FROM it_struc COMPARING structure. WRITE /(30) '数据结构定义'. SKIP 1. LOOP AT it_struc INTO ls_struc. * 校验是否是表类型 DATA: ls_dd40l TYPE dd40l. SELECT SINGLE * FROM dd40l INTO ls_dd40l WHERE typename = ls_struc-structure. IF sy-subrc = 0. ld_tabname = ls_dd40l-rowtype. ELSE. ld_tabname = ls_struc-structure. ENDIF. FORMAT INTENSIFIED COLOR = 4. WRITE :/(30) ls_struc-structure. "获取描述 DATA: ld_ddtext TYPE dd02t-ddtext. SELECT SINGLE ddtext FROM dd02t INTO ld_ddtext WHERE tabname = ld_tabname. IF sy-subrc = 0. WRITE (40) ld_ddtext. ENDIF. FORMAT INTENSIFIED COLOR = 0. * WRITE sy-uline. CALL FUNCTION 'RM_TABLE_INFO_GET' EXPORTING i_tabname = ld_tabname * I_FIELDNAME = * I_LANGU = i_read_texts = 'X' IMPORTING * E_TABHEADER = * E_TABFIELD_W = e_tabfields_t = lt_field EXCEPTIONS not_found = 1 ddic_error = 2 OTHERS = 3. IF sy-subrc = 0. LOOP AT lt_field INTO ls_field. WRITE: /(30) ls_field-fieldname , (20) ls_field-datatype, (10) ls_field-leng. IF ls_field-decimals IS INITIAL. WRITE (10) ''. ELSE. WRITE (10) ls_field-decimals. ENDIF. WRITE : (40) ls_field-fieldtext. ENDLOOP. ENDIF. SKIP 2. ENDLOOP. ENDFORM. "write_sturc *&---------------------------------------------------------------------* *& Form write_sturc_xls *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->CD_ROW text * -->IT_STRUC text *----------------------------------------------------------------------* FORM write_sturc_xls USING cd_row TYPE i it_struc TYPE tt_func. DATA: ls_struc TYPE ts_func, ld_tabname TYPE rmdi_name, lt_field TYPE rmdi_tabfld_t, ls_field TYPE rmdi_tabfld. CHECK it_struc IS NOT INITIAL. SORT it_struc BY structure. DELETE ADJACENT DUPLICATES FROM it_struc COMPARING structure. cd_row = cd_row + 2. go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = '数据结构定义' ). go_excel->set_cell_format( id_col = 1 id_row = cd_row id_bold = 1 id_bg_color = 36 ). LOOP AT it_struc INTO ls_struc. cd_row = cd_row + 2. * 校验是否是表类型 DATA: ls_dd40l TYPE dd40l. SELECT SINGLE * FROM dd40l INTO ls_dd40l WHERE typename = ls_struc-structure. IF sy-subrc = 0. ld_tabname = ls_dd40l-rowtype. ELSE. ld_tabname = ls_struc-structure. ENDIF. go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = ls_struc-structure ). go_excel->set_cell_format( id_col = 1 id_row = cd_row id_bold = 1 id_bg_color = 36 ). "获取描述 DATA: ld_ddtext TYPE dd02t-ddtext. SELECT SINGLE ddtext FROM dd02t INTO ld_ddtext WHERE tabname = ld_tabname. IF sy-subrc = 0. go_excel->set_cell_data( id_col = 5 id_row = cd_row id_value = ld_ddtext ). ENDIF. CALL FUNCTION 'RM_TABLE_INFO_GET' EXPORTING i_tabname = ld_tabname * I_FIELDNAME = * I_LANGU = i_read_texts = 'X' IMPORTING * E_TABHEADER = * E_TABFIELD_W = e_tabfields_t = lt_field EXCEPTIONS not_found = 1 ddic_error = 2 OTHERS = 3. IF sy-subrc = 0. LOOP AT lt_field INTO ls_field. cd_row = cd_row + 1. go_excel->set_cell_data( id_col = 1 id_row = cd_row id_value = ls_field-fieldname ). go_excel->set_cell_data( id_col = 2 id_row = cd_row id_value = ls_field-datatype ). go_excel->set_cell_data( id_col = 3 id_row = cd_row id_value = ls_field-leng ). IF ls_field-decimals IS NOT INITIAL. go_excel->set_cell_data( id_col = 4 id_row = cd_row id_value = ls_field-decimals ). ENDIF. go_excel->set_cell_data( id_col = 5 id_row = cd_row id_value = ls_field-fieldtext ). ENDLOOP. ENDIF. ENDLOOP. ENDFORM. "write_sturc_xls
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示