用来生成function module的HTML格式的文档
摘自sdn
*&---------------------------------------------------------------------* *& Report ZABAPDOC *& *&---------------------------------------------------------------------* *& This report generate HTML files containing the API information about *& the selected function modules. *& SDN https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/u/251708914 *& This program has been developed via the ABAP Eclipse Editor *&---------------------------------------------------------------------* REPORT zabapdoc MESSAGE-ID eu. TYPE-POOLS: sscr. TABLES: tadir, tlibt, trdir. CLASS: lcl_source_scan DEFINITION DEFERRED. DATA: lo_sscan TYPE REF TO lcl_source_scan, lv_appl TYPE taplt-appl, tofolder_string TYPE string. SELECTION-SCREEN: BEGIN OF BLOCK a11 WITH FRAME TITLE a11. SELECT-OPTIONS: devclass FOR tadir-devclass, funcgrp FOR tlibt-area. SELECTION-SCREEN: END OF BLOCK a11, BEGIN OF BLOCK a20 WITH FRAME TITLE a20. PARAMETERS: funcmod TYPE xfeld AS CHECKBOX DEFAULT 'X' , tofolder TYPE char255 DEFAULT 'C:\TEMP'. SELECTION-SCREEN: END OF BLOCK a20. *----------------------------------------------------------------------* * CLASS lcx_scan_exceptions DEFINITION *----------------------------------------------------------------------* * Exceptions for source scanning *----------------------------------------------------------------------* CLASS lcx_scan_exceptions DEFINITION INHERITING FROM cx_static_check. ENDCLASS. "lcx_scan_exceptions DEFINITION *----------------------------------------------------------------------* * CLASS lcl_source_scan DEFINITION *----------------------------------------------------------------------* * ABAP source scanner *----------------------------------------------------------------------* CLASS lcl_source_scan DEFINITION. PUBLIC SECTION. METHODS: constructor, f4_class CHANGING cv_class_name TYPE clike, f4_function_group IMPORTING iv_group_name TYPE clike, f4_repname CHANGING cv_repname TYPE clike, start. PROTECTED SECTION. TYPES: BEGIN OF ty_ls_objname, report TYPE sy-repid, dynnr TYPE sy-dynnr, END OF ty_ls_objname. TYPES: BEGIN OF ts_comment_tab, report TYPE sy-repid, source TYPE abaptxt255, END OF ts_comment_tab. DATA: gv_hit_count TYPE i, gv_sstring TYPE string, gv_dynp_found TYPE xfeld, gv_vers_found TYPE xfeld, gt_object TYPE STANDARD TABLE OF tadir-obj_name, gt_vrsd TYPE HASHED TABLE OF vrsd WITH UNIQUE KEY objname versno, gt_results TYPE TABLE OF ts_comment_tab . CONSTANTS: gc_x TYPE xfeld VALUE 'X'. METHODS: display, get_version_numbers IMPORTING iv_report TYPE clike iv_dynpro TYPE clike OPTIONAL RETURNING value(rt_vrsd) LIKE gt_vrsd, get_source_names, get_source_by_version IMPORTING iv_report TYPE clike iv_dynpro TYPE clike OPTIONAL iv_versno TYPE vrsd-versno RETURNING value(rt_abap) TYPE abaptxt255_tab, get_report_names, get_function_names, get_includes, get_method_includes IMPORTING iv_class_name TYPE clike, search_abap_source RAISING lcx_scan_exceptions, search_source IMPORTING it_source TYPE abaptxt255_tab iv_report TYPE clike iv_dynpro TYPE clike OPTIONAL RAISING lcx_scan_exceptions, generateindex, generateinfopage IMPORTING iv_fm TYPE rs38l_fnam iv_report TYPE progname OPTIONAL, get_parametertype IMPORTING is_eparameter TYPE rsexp OPTIONAL is_iparameter TYPE rsimp OPTIONAL is_cparameter TYPE rscha OPTIONAL is_tparameter TYPE rstbl OPTIONAL RETURNING value(rl_type) TYPE string, get_parametertypename IMPORTING is_eparameter TYPE rsexp OPTIONAL is_iparameter TYPE rsimp OPTIONAL is_cparameter TYPE rscha OPTIONAL is_tparameter TYPE rstbl OPTIONAL RETURNING value(rl_type) TYPE string. ENDCLASS. "lcl_source_scan DEFINITION *----------------------------------------------------------------------* * CLASS lcl_source_scan IMPLEMENTATION *----------------------------------------------------------------------* * ABAP source scanner *----------------------------------------------------------------------* CLASS lcl_source_scan IMPLEMENTATION. METHOD constructor. DATA: ls_restrict TYPE sscr_restrict, ls_opt_list TYPE sscr_opt_list, ls_association TYPE sscr_ass. ls_opt_list-name = 'RESTRICT'. ls_opt_list-options-cp = gc_x. ls_opt_list-options-eq = gc_x. APPEND ls_opt_list TO ls_restrict-opt_list_tab. ls_association-kind = 'S'. ls_association-name = 'SSTRING'. ls_association-sg_main = 'I'. ls_association-op_main = ls_association-op_addy = 'RESTRICT'. APPEND ls_association TO ls_restrict-ass_tab. CALL FUNCTION 'SELECT_OPTIONS_RESTRICT' EXPORTING program = sy-repid restriction = ls_restrict EXCEPTIONS too_late = 1 repeated = 2 selopt_without_options = 3 selopt_without_signs = 4 invalid_sign = 5 empty_option_list = 6 invalid_kind = 7 repeated_kind_a = 8 OTHERS = 9. ENDMETHOD. "constructor METHOD f4_repname. CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' EXPORTING object_type = 'PROG' object_name = cv_repname suppress_selection = 'X' IMPORTING object_name_selected = cv_repname EXCEPTIONS cancel = 1. ENDMETHOD. "f4_repname METHOD f4_function_group. DATA: lv_fname TYPE dynfnam. lv_fname = iv_group_name. CALL FUNCTION 'RS_HELP_HANDLING' EXPORTING dynpfield = lv_fname dynpname = sy-dynnr object = 'FG ' progname = sy-repid suppress_selection_screen = 'X'. ENDMETHOD. "f4_function_group METHOD f4_class. CALL FUNCTION 'F4_DD_ALLTYPES' EXPORTING object = cv_class_name suppress_selection = gc_x display_only = space only_types_for_clifs = gc_x IMPORTING RESULT = cv_class_name. ENDMETHOD. "f4_class METHOD display. DATA lv_filename TYPE string. WRITE: / 'API information files have been generated.'. CONCATENATE tofolder '\abapdoc_index.html' INTO lv_filename. WRITE: / 'Open', lv_filename, 'in your browser to view the ABAPdoc.'. ENDMETHOD. "display METHOD get_source_by_version. DATA: lv_object_name TYPE versobjnam, ls_object_name TYPE ty_ls_objname, lt_trdir TYPE STANDARD TABLE OF trdir, lt_d022s TYPE STANDARD TABLE OF d022s. IF iv_dynpro IS INITIAL. lv_object_name = iv_report. CALL FUNCTION 'SVRS_GET_REPS_FROM_OBJECT' EXPORTING object_name = lv_object_name object_type = 'REPS' versno = iv_versno iv_no_release_transformation = 'X' TABLES repos_tab = rt_abap trdir_tab = lt_trdir EXCEPTIONS no_version = 1 OTHERS = 2. ELSE. ls_object_name-report = iv_report. ls_object_name-dynnr = iv_dynpro. lv_object_name = ls_object_name. CALL FUNCTION 'SVRS_GET_VERSION_DYNP_40' EXPORTING object_name = lv_object_name versno = iv_versno TABLES d022s_tab = lt_d022s EXCEPTIONS no_version = 01 OTHERS = 02. CHECK sy-subrc IS INITIAL AND lt_d022s IS NOT INITIAL. APPEND LINES OF lt_d022s TO rt_abap. ENDIF. ENDMETHOD. "get_source_by_version METHOD get_version_numbers. DATA: ls_objname TYPE ty_ls_objname, lv_objtype TYPE vrsd-objtype, lv_objname TYPE versobjnam, lv_versno TYPE versno, lt_vrsn TYPE STANDARD TABLE OF vrsn, lt_vrsd TYPE STANDARD TABLE OF vrsd. ls_objname-report = iv_report. ls_objname-dynnr = iv_dynpro. lv_objname = ls_objname. IF iv_dynpro IS INITIAL. lv_objtype = 'REPS'. ELSE. lv_objtype = 'DYNP'. ENDIF. CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46' EXPORTING objname = lv_objname objtype = lv_objtype TABLES lversno_list = lt_vrsn version_list = lt_vrsd EXCEPTIONS no_entry = 1 communication_failure_ = 2 system_failure = 3 OTHERS = 4. CHECK sy-subrc IS INITIAL . SORT lt_vrsd BY objname versno. DELETE ADJACENT DUPLICATES FROM lt_vrsd COMPARING objname versno. rt_vrsd = lt_vrsd. DELETE TABLE rt_vrsd WITH TABLE KEY objname = lv_objname versno = lv_versno. SORT rt_vrsd. CHECK iv_dynpro IS NOT INITIAL. * For dynpros we need to save the version information for the version display * this is not required for source code INSERT LINES OF rt_vrsd INTO TABLE gt_vrsd. ENDMETHOD. "get_version_Numbers METHOD search_abap_source. DATA: lt_abap TYPE abaptxt255_tab. FIELD-SYMBOLS: <lv_obj> TYPE tadir-obj_name. LOOP AT gt_object ASSIGNING <lv_obj>. READ REPORT <lv_obj> INTO lt_abap. IF sy-subrc IS NOT INITIAL. CONTINUE. ENDIF. search_source( it_source = lt_abap iv_report = <lv_obj> ). ENDLOOP. "FREE gt_object. ENDMETHOD. "search_abap_source METHOD search_source. DATA: lt_source TYPE abaptxt255_tab, lt_source_vers TYPE abaptxt255_tab, lt_vrsd TYPE STANDARD TABLE OF vrsd, ls_vrsd LIKE LINE OF lt_vrsd, lv_number TYPE i, lv_index TYPE i. lt_source = it_source. lv_number = 1. DO lv_number TIMES. IF sy-index = 1. CLEAR ls_vrsd. ELSE. lv_index = sy-index - 1. READ TABLE lt_vrsd INDEX lv_index INTO ls_vrsd. CHECK sy-subrc IS INITIAL. lt_source_vers = get_source_by_version( iv_report = iv_report iv_dynpro = iv_dynpro iv_versno = ls_vrsd-versno ). IF lt_source_vers IS NOT INITIAL. lt_source = lt_source_vers. ELSE. CONTINUE. ENDIF. ENDIF. DATA: tokens TYPE TABLE OF stokesx, token TYPE stokesx, tokenource TYPE stokesx, statement TYPE sstmnt, statements TYPE TABLE OF sstmnt, selectsource TYPE string, mat_res TYPE ts_comment_tab, lv_line TYPE abaptxt255. LOOP AT lt_source INTO lv_line. IF ( sy-tabix = 1 AND lv_line(8) = 'FUNCTION' ). CONTINUE. ELSEIF ( sy-tabix > 1 and lv_line(1) = '*' ). mat_res-source = lv_line. mat_res-report = iv_report. INSERT mat_res INTO TABLE gt_results. ELSE. RETURN. ENDIF. ENDLOOP. ENDDO. ENDMETHOD. "search_source METHOD get_includes. DATA: lt_inc TYPE STANDARD TABLE OF tadir-obj_name, lt_inc_tmp LIKE lt_inc, lv_program TYPE sy-repid, lv_old TYPE xfeld. FIELD-SYMBOLS: <lv_obj> TYPE tadir-obj_name. LOOP AT gt_object ASSIGNING <lv_obj> WHERE table_line(2) <> 'CL'. "for classes we already have the includes REFRESH lt_inc_tmp. IF lv_old IS NOT INITIAL. CALL FUNCTION 'GET_INCLUDES' EXPORTING progname = <lv_obj> TABLES incltab = lt_inc_tmp. ELSE. lv_program = <lv_obj>. CALL FUNCTION 'RS_GET_ALL_INCLUDES' EXPORTING program = lv_program TABLES includetab = lt_inc_tmp EXCEPTIONS not_existent = 1 no_program = 2 OTHERS = 3. CHECK sy-subrc IS INITIAL. ENDIF. APPEND LINES OF lt_inc_tmp TO lt_inc. ENDLOOP. SORT lt_inc. DELETE ADJACENT DUPLICATES FROM lt_inc. APPEND LINES OF lt_inc TO gt_object. ENDMETHOD. "get_includes METHOD get_method_includes. DATA: lo_name TYPE REF TO cl_oo_include_naming, lo_name_tmp TYPE REF TO if_oo_clif_incl_naming, lt_method TYPE seop_methods_w_include, lv_obj TYPE tadir-obj_name. FIELD-SYMBOLS: <ls_method> LIKE LINE OF lt_method. CALL METHOD cl_oo_include_naming=>get_instance_by_name EXPORTING name = iv_class_name RECEIVING cifref = lo_name_tmp EXCEPTIONS no_objecttype = 1 internal_error = 2 OTHERS = 3. CHECK sy-subrc IS INITIAL. lo_name ?= lo_name_tmp. CALL METHOD lo_name->if_oo_class_incl_naming~get_all_method_includes RECEIVING methods_w_include = lt_method EXCEPTIONS internal_class_not_existing = 1 OTHERS = 2. LOOP AT lt_method ASSIGNING <ls_method>. lv_obj = <ls_method>-incname. APPEND lv_obj TO gt_object. ENDLOOP. ENDMETHOD. "get_method_includes METHOD get_report_names. SELECT obj_name INTO TABLE gt_object FROM tadir WHERE pgmid = 'R3TR' AND object = 'PROG' AND devclass IN devclass. "#EC CI_SGLSELECT ENDMETHOD. "get_report_names METHOD get_function_names. DATA: lt_obj TYPE STANDARD TABLE OF tadir-obj_name, lv_obj TYPE tadir-obj_name, lv_fgroup TYPE rs38l-area, lv_program TYPE progname. FIELD-SYMBOLS: <lv_obj> LIKE LINE OF lt_obj. SELECT obj_name INTO TABLE lt_obj FROM tadir WHERE pgmid = 'R3TR' AND object = 'FUGR' AND devclass IN devclass AND obj_name IN funcgrp. "#EC CI_SGLSELECT LOOP AT lt_obj ASSIGNING <lv_obj>. lv_fgroup = <lv_obj>. CLEAR lv_program. CALL FUNCTION 'FUNCTION_INCLUDE_CONCATENATE' CHANGING program = lv_program group = lv_fgroup EXCEPTIONS not_enough_input = 1 no_function_pool = 2 delimiter_wrong_position = 3 OTHERS = 4. CHECK sy-subrc IS INITIAL AND lv_program IS NOT INITIAL. lv_obj = lv_program. APPEND lv_obj TO gt_object. ENDLOOP. ENDMETHOD. "get_function_names METHOD get_source_names. IF devclass[] IS NOT INITIAL. "get_report_names( ). get_function_names( ). ENDIF. IF funcgrp[] IS NOT INITIAL. get_function_names( ). ENDIF. ENDMETHOD. "get_source_names METHOD start. get_source_names( ). get_includes( ). TRY. search_abap_source( ). CATCH lcx_scan_exceptions. RETURN. ENDTRY. IF funcmod = 'X'. " Generate HTML files for function modules API generateindex( ). ENDIF. display( ). ENDMETHOD. "start METHOD generateindex. DATA: lv_string TYPE string, lt_string TYPE TABLE OF string, lv_funcname TYPE rs38l_fnam, lv_include TYPE progname, lv_filename TYPE string. * Generate HTML index file. APPEND '<HTML><HEAD><TITLE>ABAPdoc</TITLE></HEAD>' TO lt_string. APPEND '<FRAMESET cols="20%,80%">' TO lt_string. APPEND '<FRAME src="abapdoc_all-frame.html" name="packageFrame">' TO lt_string. APPEND '<FRAME src="abapdoc_main.html" name="classFrame">' TO lt_string. APPEND '</FRAMESET></HTML>' TO lt_string. CONCATENATE tofolder '\abapdoc_index.html' INTO lv_filename. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = lv_filename filetype = 'ASC' TABLES data_tab = lt_string. IF sy-subrc <> 0. ENDIF. CLEAR lt_string. * Generate HTML index file. APPEND '<HTML><HEAD><TITLE>ABAPdoc</TITLE></HEAD><BODY><br/><CENTER><B>' TO lt_string. APPEND 'ABAPdoc has been created via the <a href="http://www.ceon.nl/abapeclipse">ABAP Eclipse Editor</a>' TO lt_string. APPEND '</B></CENTER></BODY></HTML>' TO lt_string. CONCATENATE tofolder '\abapdoc_main.html' INTO lv_filename. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = lv_filename filetype = 'ASC' TABLES data_tab = lt_string. IF sy-subrc <> 0. ENDIF. CLEAR lt_string. APPEND '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd"><HTML><HEAD>' TO lt_string. IF NOT funcgrp IS INITIAL. APPEND '<TITLE>All Function Modules of ' TO lt_string. APPEND funcgrp TO lt_string. APPEND '</TITLE>' TO lt_string. ENDIF. "append '<TITLE>All Function Modules of ' to lt_string. APPEND '<STYLE>body.allclasses { background-color: #4C4C4C; font-family: arial, sans-serif; font-size: 9pt; letter-spacing: 1px; font-weight: 500; color: white; }' TO lt_string. APPEND 'a { font-family: arial, sans-serif; font-size: 9pt; letter-spacing: 1px; font-weight: 500; color: white; }</STYLE>' TO lt_string. APPEND '</HEAD><BODY CLASS="allclasses">' TO lt_string. APPEND '<FONT CLASS="FrameHeadingFont"><B>' TO lt_string. IF NOT funcgrp IS INITIAL. APPEND 'All Function Modules of ' TO lt_string. APPEND funcgrp+3 TO lt_string. ENDIF. IF NOT devclass IS INITIAL. APPEND 'All Function Modules of package ' TO lt_string. APPEND devclass+3 TO lt_string. ENDIF. APPEND '</B></FONT><BR/><BR/><BR/>' TO lt_string. FIELD-SYMBOLS: <lv_obj> TYPE tadir-obj_name. LOOP AT gt_object ASSIGNING <lv_obj>. lv_include = <lv_obj>. CLEAR lv_funcname. CALL FUNCTION 'FUNCTION_INCLUDE_INFO' CHANGING funcname = lv_funcname include = lv_include EXCEPTIONS function_not_exists = 1 include_not_exists = 2 group_not_exists = 3 no_selections = 4 no_function_include = 5 OTHERS = 6. IF sy-subrc = 0 AND lv_funcname IS NOT INITIAL. CONCATENATE '<A HREF="abapdoc_' lv_funcname '.html" TARGET="classFrame">' lv_funcname '</A><br/>' INTO lv_string. APPEND lv_string TO lt_string. generateinfopage( iv_fm = lv_funcname iv_report = lv_include ). ENDIF. ENDLOOP. APPEND '</BODY></HTML>' TO lt_string. CONCATENATE tofolder '\abapdoc_all-frame.html' INTO lv_filename. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = lv_filename filetype = 'ASC' TABLES data_tab = lt_string. IF sy-subrc <> 0. ENDIF. ENDMETHOD. "generateindex METHOD generateinfopage. DATA: filename TYPE string, lv_string TYPE string, lt_string TYPE TABLE OF string, lv_funcname TYPE rs38l_fnam, lv_include TYPE progname, lv_remote_call TYPE rs38l-remote, lv_update_task TYPE rs38l-utask, lv_exception_list TYPE rsexc, lv_export_parameter TYPE rsexp, lv_import_parameter TYPE rsimp, lv_changing_parameter TYPE rscha, lv_tables_parameter TYPE rstbl, lv_p_docu TYPE funct, lt_exception_list TYPE TABLE OF rsexc, lt_export_parameter TYPE TABLE OF rsexp, lt_import_parameter TYPE TABLE OF rsimp, lt_changing_parameter TYPE TABLE OF rscha, lt_tables_parameter TYPE TABLE OF rstbl, lt_p_docu TYPE TABLE OF funct, lv_stext TYPE rs38l_ftxt. lv_funcname = iv_fm. CALL FUNCTION 'FUNCTION_IMPORT_DOKU' EXPORTING funcname = lv_funcname language = sy-langu IMPORTING * GLOBAL_FLAG = remote_call = lv_remote_call update_task = lv_update_task short_text = lv_stext * FREEDATE = * EXCEPTION_CLASS = TABLES dokumentation = lt_p_docu exception_list = lt_exception_list export_parameter = lt_export_parameter import_parameter = lt_import_parameter changing_parameter = lt_changing_parameter tables_parameter = lt_tables_parameter EXCEPTIONS error_message = 1 function_not_found = 2 invalid_name = 3 OTHERS = 4 . IF sy-subrc <> 0. RETURN. ENDIF. APPEND '<HTML><HEAD><TITLE>ABAPdoc</TITLE></HEAD>' TO lt_string. APPEND '<STYLE> body {font-family: arial, sans-serif; font-size: 9pt;} table{ border-collapse: collapse; } td, th{ border: 1px solid #CCCCCC; font-family: arial, sans-serif; font-size: 9pt; } tr.top { background-color: #EAFDFF; } </STYLE>' TO lt_string. CONCATENATE '<BODY><table width="100%" bgcolor="#EEEEFF"><tr><td>Function Module: <B>' iv_fm '</B></td></tr></table><BR/>' INTO lv_string. APPEND lv_string TO lt_string. CONCATENATE 'Description:' lv_stext '</B><BR/>' INTO lv_string SEPARATED BY space. APPEND lv_string TO lt_string. IF lv_remote_call = 'R'. APPEND 'This is a remote function module<BR/>' TO lt_string. ENDIF. IF lv_update_task = 'X'. APPEND 'This is a update task<BR/>' TO lt_string. ENDIF. APPEND '<BR/><B>Import Parameters:</B><BR/>' TO lt_string. APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="20%">Parameter Name</TD><td>Typing</td><TD width="20%">Associated Type</TD><TD>Default value</TD><TD width="5%">Optional</TD>' TO lt_string. APPEND '<TD width="5%">Pass Value</TD><TD width="20%">Short text</TD></TR>' TO lt_string. LOOP AT lt_import_parameter INTO lv_import_parameter. APPEND '<TR><TD>' TO lt_string. APPEND lv_import_parameter-parameter TO lt_string. APPEND '</TD><TD>' TO lt_string. lv_string = get_parametertype( is_iparameter = lv_import_parameter ). APPEND lv_string TO lt_string. APPEND '</TD><TD>' TO lt_string. lv_string = get_parametertypename( is_iparameter = lv_import_parameter ). APPEND lv_string TO lt_string. APPEND '</TD><TD>' TO lt_string. APPEND lv_import_parameter-default TO lt_string. APPEND '</TD><TD>' TO lt_string. APPEND lv_import_parameter-optional TO lt_string. APPEND '</TD><TD>' TO lt_string. IF lv_import_parameter-reference = ''. APPEND 'Yes' TO lt_string. ENDIF. APPEND '</TD><TD>' TO lt_string. READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_import_parameter-parameter. IF sy-subrc = 0. APPEND lv_p_docu-stext TO lt_string. ENDIF. APPEND '</TD></TR>' TO lt_string. ENDLOOP. APPEND '</TABLE>' TO lt_string. * Export Parameters APPEND '<BR/><B>Export Parameters:</B><BR/>' TO lt_string. APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="30%">Parameter Name</TD><TD width="10%">Typing</TD><TD width="30%">Associated Type</TD><TD width="10%">Pass Value</TD><TD width="20%">Short text</TD></TR>' TO lt_string. LOOP AT lt_export_parameter INTO lv_export_parameter. APPEND '<TR><TD>' TO lt_string. APPEND lv_export_parameter-parameter TO lt_string. APPEND '</TD><TD>' TO lt_string. lv_string = get_parametertype( is_eparameter = lv_export_parameter ). APPEND lv_string TO lt_string. APPEND '</TD><TD>' TO lt_string. lv_string = get_parametertypename( is_eparameter = lv_export_parameter ). APPEND lv_string TO lt_string. APPEND '</TD><TD>' TO lt_string. IF lv_export_parameter-reference = ''. APPEND 'Yes' TO lt_string. ENDIF. APPEND '</TD><TD>' TO lt_string. READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_export_parameter-parameter. IF sy-subrc = 0. APPEND lv_p_docu-stext TO lt_string. ENDIF. APPEND '</TD></TR>' TO lt_string. ENDLOOP. APPEND '</TABLE>' TO lt_string. * Changing Parameters APPEND '<BR/><B>Changing Parameters:</B><BR/>' TO lt_string. APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="30%">Parameter Name</TD><TD width="10%">Typing</TD><TD width="30%">Associated Type</TD><TD>Default value</TD><TD>Optional</TD><TD>Pass Value</TD><TD width="20%">Short text</TD></TR>' TO lt_string. LOOP AT lt_changing_parameter INTO lv_changing_parameter. APPEND '<TR><TD>' TO lt_string. APPEND lv_changing_parameter-parameter TO lt_string. APPEND '</TD><TD>' TO lt_string. lv_string = get_parametertype( is_cparameter = lv_changing_parameter ). APPEND lv_string TO lt_string. APPEND '</TD><TD>' TO lt_string. lv_string = get_parametertypename( is_cparameter = lv_changing_parameter ). APPEND lv_string TO lt_string. APPEND '</TD><TD>' TO lt_string. APPEND lv_changing_parameter-default TO lt_string. APPEND '</TD><TD>' TO lt_string. APPEND lv_changing_parameter-optional TO lt_string. APPEND '</TD><TD>' TO lt_string. IF lv_changing_parameter-reference = ''. APPEND 'Yes' TO lt_string. ENDIF. APPEND '</TD><TD>' TO lt_string. READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_changing_parameter-parameter. IF sy-subrc = 0. APPEND lv_p_docu-stext TO lt_string. ENDIF. APPEND '</TD></TR>' TO lt_string. ENDLOOP. APPEND '</TABLE>' TO lt_string. * Tables APPEND '<BR/><B>Table Parameters:</B><BR/>' TO lt_string. APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="30%">Parameter Name</TD><TD width="10%">Typing</TD><TD width="30%">Associated Type</TD><TD>Optional</TD><TD width="20%">Short text</TD></TR>' TO lt_string. LOOP AT lt_tables_parameter INTO lv_tables_parameter. APPEND '<TR><TD>' TO lt_string. APPEND lv_tables_parameter-parameter TO lt_string. APPEND '</TD><TD>' TO lt_string. lv_string = get_parametertype( is_tparameter = lv_tables_parameter ). APPEND lv_string TO lt_string. APPEND '</TD><TD>' TO lt_string. lv_string = get_parametertypename( is_tparameter = lv_tables_parameter ). APPEND lv_string TO lt_string. APPEND '</TD><TD>' TO lt_string. APPEND lv_tables_parameter-optional TO lt_string. APPEND '</TD><TD>' TO lt_string. READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_tables_parameter-parameter. IF sy-subrc = 0. APPEND lv_p_docu-stext TO lt_string. ENDIF. APPEND '</TD></TR>' TO lt_string. ENDLOOP. APPEND '</TABLE>' TO lt_string. * Tables APPEND '<BR/><B>Exceptions:</B><BR/>' TO lt_string. APPEND '<TABLE width="100%" border=0><TR class="top"><TD width="30%">Exception</TD><TD width="20%">Short text</TD></TR>' TO lt_string. LOOP AT lt_exception_list INTO lv_exception_list. APPEND '<TR><TD>' TO lt_string. APPEND lv_exception_list-exception TO lt_string. APPEND '</TD><TD>' TO lt_string. READ TABLE lt_p_docu INTO lv_p_docu WITH KEY parameter = lv_exception_list-exception. IF sy-subrc = 0. APPEND lv_p_docu-stext TO lt_string. ENDIF. APPEND '</TD></TR>' TO lt_string. ENDLOOP. APPEND '</TABLE>' TO lt_string. * Report top comment DATA: lv_com_results TYPE ts_comment_tab. APPEND '<BR/><B>Function module comment header:</B><BR/>' TO lt_string. LOOP AT gt_results INTO lv_com_results WHERE report = iv_report. APPEND lv_com_results-source TO lt_string. APPEND '<BR/>' TO lt_string. ENDLOOP. APPEND '</TABLE>' TO lt_string. APPEND '</HTML>' TO lt_string. CONCATENATE tofolder '\abapdoc_' iv_fm '.html' INTO filename. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING filename = filename filetype = 'ASC' TABLES data_tab = lt_string. IF sy-subrc <> 0. ENDIF. ENDMETHOD. "generateindex METHOD get_parametertype. DATA ls_iparameter TYPE rsimp. IF NOT is_eparameter IS INITIAL. MOVE-CORRESPONDING is_eparameter TO ls_iparameter. ELSEIF NOT is_iparameter IS INITIAL. MOVE-CORRESPONDING is_iparameter TO ls_iparameter. ELSEIF NOT is_cparameter IS INITIAL. MOVE-CORRESPONDING is_cparameter TO ls_iparameter. ELSEIF NOT is_tparameter IS INITIAL. MOVE-CORRESPONDING is_tparameter TO ls_iparameter. ENDIF. IF ls_iparameter-types = 'X' OR ls_iparameter-reference = 'X'. rl_type = 'TYPE'. RETURN. ENDIF. IF NOT ls_iparameter-dbfield IS INITIAL. rl_type = 'LIKE'. RETURN. ENDIF. rl_type = 'TYPE'. ENDMETHOD. "get_parametertype METHOD get_parametertypename. DATA ls_iparameter TYPE rsimp. IF NOT is_eparameter IS INITIAL. MOVE-CORRESPONDING is_eparameter TO ls_iparameter. ELSEIF NOT is_iparameter IS INITIAL. MOVE-CORRESPONDING is_iparameter TO ls_iparameter. ELSEIF NOT is_cparameter IS INITIAL. MOVE-CORRESPONDING is_cparameter TO ls_iparameter. ELSEIF NOT is_tparameter IS INITIAL. rl_type = is_tparameter-dbstruct. RETURN. ENDIF. IF NOT ls_iparameter-typ IS INITIAL. rl_type = ls_iparameter-typ. ELSEIF NOT ls_iparameter-dbfield IS INITIAL. rl_type = ls_iparameter-dbfield. ENDIF. ENDMETHOD. "get_parametertype ENDCLASS. "lcl_source_scan IMPLEMENTATION INITIALIZATION. CREATE OBJECT lo_sscan. a11 = 'Function Module Selection'(a11). a20 = 'Generate ABAPdoc settings'(a20). AT SELECTION-SCREEN ON VALUE-REQUEST FOR funcgrp-low. lo_sscan->f4_function_group( 'FUNCGRP-LOW' ). AT SELECTION-SCREEN ON VALUE-REQUEST FOR funcgrp-high. lo_sscan->f4_function_group( 'FUNCGRP-HIGH' ). AT SELECTION-SCREEN ON VALUE-REQUEST FOR tofolder. tofolder_string = tofolder. CALL METHOD cl_gui_frontend_services=>directory_browse EXPORTING window_title = 'Select a folder' initial_folder = tofolder_string CHANGING selected_folder = tofolder_string EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4. IF sy-subrc = 0. tofolder = tofolder_string. ENDIF. START-OF-SELECTION. lo_sscan->start( ).
摘自sdn
相关推荐
3. 报表生成:在ABAP中,有专门的函数模块用于生成报表,如FUNCTION GROUP 'SMARTFORMS'中的函数模块,可以创建复杂的打印输出和电子文档。此外,FUNCTION MODULE 'WRITE_TO_OUTPUT_AREA'可以将数据写入屏幕输出,...
3. **程序结构**:讲解ABAP程序的基本结构,包括REPORT、FUNCTION、MODULE等程序类型的创建和调用。 4. **内部表处理**:介绍如何使用内部表存储和处理数据,包括定义、填充、遍历、排序和筛选操作。 5. **选择...
- 创建WSDL:使用SE80事务码,选择Function Module并生成WSDL文档,这将定义服务的接口和消息结构。 - 注册Web服务:在SICF服务管理器中,注册和激活Web服务,使其可被外部系统访问。 2. C#项目中的Web服务调用:...
在SAP ABAP开发中,Smart Forms是一种强大的工具,用于设计和打印业务单据。它提供了可视化的设计界面,使得开发者可以方便地构建出符合企业需求的打印格式。本章主要介绍如何通过Smart Forms来创建一个包含公司LOGO...
- **知识点**:ABAPDOCU是SAP系统中用于示例和文档的一部分,包含了大量示例代码来帮助开发者理解和学习ABAP语言的基础用法。 - **要求**:运行并理解所有ABAPDOCU中的例程,这有助于加深对ABAP语法的理解。 - **...
- ABAP支持子程序(SUBROUTINE)、函数模块(FUNCTION MODULE)和方法(METHOD)等编程结构。 4. **表处理** - ABAP提供了强大且灵活的表处理能力,如LOOP AT、SELECT-OPTIONS等,用于查询和操作数据库表。 - ...
ABAP程序中的元素包括源代码、数据定义、变式(用于存储用户屏幕选择的条件)、属性、文本元素(如文本、选择字符和列表标题)、文档、屏幕和语句。屏幕分为普通屏幕、选择屏幕和传统列表屏幕,其中ALV表格控件是...
3. 过程和函数:ABAP中的程序由过程(PROGAM)组成,可以包含多个函数模块(FUNCTION MODULE)。 4. 内部表操作:内部表是ABAP中的动态数组,用于存储和处理大量数据。 5. 选择屏幕:用于用户输入的交互界面,可以...
3. **Smartform**: Smartform是ABAP中用于创建复杂打印文档的工具,如发票或报告,支持多页和复杂的布局设计。 4. **BDC (Batch Data Conversion)**: BDC用于大量数据的导入,它可以模拟用户在屏幕上的输入,从而...
在SAP ABAP开发领域,...以上函数涵盖了从数据读取、格式转换、用户界面构建到网络通信等多个方面,是SAP ABAP开发中不可或缺的重要工具。掌握这些函数的使用,能够显著提升开发效率,优化应用程序的性能和用户体验。
- SAP 4.6c 版本之后,Smart Forms 开始逐渐取代 SAP Script,作为首选的文档生成工具。 2. **Smart Forms 与 SAP Script 架构差异**: - Smart Forms 的输出完全由预生成的 Function Module 控制,而 SAP Script...
- **ABAP 工作台**: ABAP 开发的核心环境,提供了丰富的工具和功能,如代码编辑器、调试器、性能分析器等。 #### 四、实战篇 **1. MM 模块开发实例** - **物料管理**: MM 模块负责物料的采购、库存管理和发票...
首先,调用'SSF_FUNCTION_MODULE_NAME'函数模块,传入表单名称,它会返回实际要调用的函数模块名。然后,使用这个返回的函数模块名称进行调用,将数据传递给表单。在Form Builder中,也可以方便地获取并复制该函数...
它们在创建自定义文本界面或处理大量文本数据时特别有用,例如在报告或文档生成过程中。 #### 3. VIEW_MAINTENANCE_CALL 该函数主要应用于视图维护场景,即在ABAP中对数据库视图进行更新操作。它提供了修改视图...
19. **SSF_FUNCTION_MODULE_NAME**: 根据SmartForm的名称生成对应的函数模块名,便于调用SmartForm。 20. **DATE_CHECK_PLAUSIBILITY**: 验证日期的有效性,确保输入的日期符合SAP系统的规定格式。 21. **cl_gui_...
在ABAP编程中,SMARTFORMS是一种强大的工具,用于创建复杂的打印输出和文档。SMARTFORMS提供了一个图形化的用户界面,使得开发人员可以方便地设计和布局报告、信件和其他形式。以下是对SMARTFORMS调用方法的详细总结...
5. **Function Module**:函数模块是ABAP中预定义的、可复用的代码块。学习如何调用和编写函数模块,可以实现模块化编程,提高代码的可维护性。 6. **Class and Objects**:随着ABAP的发展,面向对象编程(OOP)...
总之,Smartforms在ABAP开发中扮演着重要角色,提供了丰富的功能来满足各种打印需求,使得开发者能够以更直观的方式处理复杂的文档生成任务。通过熟练掌握Smartforms的使用,可以显著提高工作效率和文档质量。
19. SSF_FUNCTION_MODULE_NAME:根据SmartForm的名称生成对应的函数模块名,用于调用SmartForms进行报表输出。 20. DATE_CHECK_PLAUSIBILITY:检查日期是否有效,遵循SAP系统日期规则。 21. cl_gui_frontend_...
11. SSF_FUNCTION_MODULE_NAME:在SMARTFORMS中,此函数用于根据SmartForm的名称生成对应的函数模块名,便于调用和生成报表。 12. ABAP_DOCU_DOWNLOAD、ARFC_GET_TID、BAL_*等函数涉及文档下载、终端IP地址获取、...