您的位置:首页 > 其它

ABAP--一个不错的函数模块的文档生成程序

2011-08-30 10:00 489 查看

ABAP--一个不错的函数模块的文档生成程序

*&---------------------------------------------------------------------*

*& 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( ).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: