Created
October 17, 2016 22:19
-
-
Save thalesvb/1bf1d4c642d1f35fd86794785dfed7cc to your computer and use it in GitHub Desktop.
ZZ_UML_CLASS_DIAG_XMI_EXPORT downported to ABAP 7.31
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
*------------------------------- | |
* Original Program on https://blogs.sap.com/2015/02/13/uml-class-diagram-export-to-xmi-format-with-abap-standard-classes/ | |
* Downport working on NetWeaver AS 7.31, | |
*------------------------------- | |
*"! Adjusted version of SAP standard program UML_CLASS_DIAGRAM. | |
*"! This version just exports an XMI file which than can be imported into an UML tool. | |
*"! There is no need to have JNET installed. | |
report zz_uml_class_diag_xmi_export. | |
tables tadir. | |
" ----------------------------------------------------------------------------------------------------------------------------------- * | |
" selection screen definition | |
selection-screen: begin of tabbed block mytab for 18 lines, | |
tab (40) button1 user-command push1 default screen 510, | |
tab (40) button2 user-command push2 default screen 520, | |
tab (40) button3 user-command push3 default screen 530, | |
end of block mytab. | |
" primary selection criteria | |
selection-screen begin of screen 510 as subscreen. | |
selection-screen begin of block s1 with frame title text-sc1. | |
select-options: so_root for tadir-obj_name, " root objects | |
so_devc for tadir-devclass. " root objects dev-class | |
selection-screen end of block s1. | |
selection-screen end of screen 510. | |
" UML scanner parameters | |
selection-screen begin of screen 520 as subscreen. | |
selection-screen begin of block b0 with frame title text-sc7. | |
parameters: x_prog type c as checkbox default ' ', | |
x_fugr type c as checkbox default ' ', | |
x_struct type c as checkbox default ' '. | |
selection-screen end of block b0. | |
selection-screen end of screen 520. | |
" diagram option parameters | |
selection-screen begin of screen 530 as subscreen. | |
selection-screen begin of block b1 with frame title text-sc2. | |
parameters: x_priv type c as checkbox default 'X', | |
x_prot type c as checkbox default 'X', | |
x_packs type c as checkbox default 'X', | |
x_attr type c as checkbox default 'X', | |
x_cons type c as checkbox default 'X', | |
x_meth type c as checkbox default 'X', | |
x_uses type c as checkbox default ' ', | |
x_excep type c as checkbox default ' ', | |
x_asos type c as checkbox default ' ', | |
x_aggr type c as checkbox default ' '. | |
selection-screen end of block b1. | |
selection-screen end of screen 530. | |
" ----------------------------------------------------------------------------------------------------------------------------------- * | |
" classes/interfaces | |
*"! Parameter Interface | |
interface lif_parameter. | |
types: | |
* "! select option line type | |
begin of mst_so, | |
sign type char1, | |
option type char2, | |
low type text30, | |
high type text30, | |
end of mst_so, | |
* "! select option table type | |
mtt_so type table of mst_so with default key. | |
* "! get single parameter | |
* "! @parameter iv_sel_name | parameter name | |
* "! @parameter rv_value | value | |
methods get_parameter | |
importing iv_parameter_name type selname | |
returning value(rv_value) type string. | |
* "! get select option table parameter | |
* "! @parameter rt_so_value | selection option values | |
methods get_parameter_so_tab | |
importing iv_parameter_name type selname | |
returning value(rt_so_value) type lif_parameter=>mtt_so. | |
endinterface. | |
*"! Parameter Class | |
class lcl_parameter definition. | |
public section. | |
interfaces lif_parameter. | |
* "! constructor | |
* "! @parameter iv_progname | program name | |
methods constructor | |
importing iv_progname type progname. | |
private section. | |
* "! program name | |
data mv_progname type progname. | |
* "! selection screen parameters | |
data mt_parameters type sorted table of rsparamsl_255 with non-unique key selname. | |
* "! fill parameter table | |
methods fill_parameter_table. | |
endclass. | |
class lcl_parameter implementation. | |
method constructor. | |
mv_progname = iv_progname. | |
fill_parameter_table( ). | |
endmethod. | |
method fill_parameter_table. | |
data lt_parameters type table of rsparams ##needed. | |
data lt_parameters_255 type table of rsparamsl_255. | |
call function 'RS_REFRESH_FROM_SELECTOPTIONS' | |
exporting | |
curr_report = mv_progname | |
tables | |
selection_table = lt_parameters | |
selection_table_255 = lt_parameters_255 | |
exceptions | |
not_found = 1 | |
no_report = 2 | |
others = 3. | |
if sy-subrc <> 0. | |
clear mt_parameters. | |
else. | |
insert lines of lt_parameters_255 into table mt_parameters. | |
endif. | |
endmethod. | |
method lif_parameter~get_parameter. | |
field-symbols: | |
<param> like line of mt_parameters. | |
read table mt_parameters assigning <param> | |
with key selname = iv_parameter_name. | |
if sy-subrc eq 0. | |
rv_value = <param>-low. | |
endif. | |
endmethod. | |
method lif_parameter~get_parameter_so_tab. | |
data: | |
lt_parameter_flt like mt_parameters. | |
field-symbols: | |
<param> like line of lt_parameter_flt, | |
<so_value> like line of rt_so_value. | |
loop at mt_parameters assigning <param> | |
where selname eq iv_parameter_name and | |
low is not initial or | |
high is not initial. | |
* INSERT <param> into table lt_parameter_flt. | |
append initial line to rt_so_value assigning <so_value>. | |
move-corresponding <param> to <so_value>. | |
endloop. | |
endmethod. | |
endclass. | |
*"! exporter interface | |
interface lif_exporter. | |
* "! export data | |
* "! @parameter io_uml_class_scanner | UML class scanner instance | |
methods export importing io_uml_class_scanner type ref to cl_uml_class_scanner. | |
endinterface. | |
*"! XMI exporter class | |
class lcl_xmi_exporter definition. | |
public section. | |
interfaces lif_exporter. | |
* "! constructor | |
* "! @parameter io_parameter | parameters | |
methods constructor importing io_parameter type ref to lif_parameter. | |
private section. | |
* "! parameters | |
data mo_parameter type ref to lif_parameter. | |
endclass. | |
class lcl_xmi_exporter implementation. | |
method constructor. | |
mo_parameter = io_parameter. | |
endmethod. | |
method lif_exporter~export. | |
data: | |
lo_xmi type ref to cl_uml_class_decor_xmi, | |
lr_ref_data type ref to data, | |
lr_ref_xstr type ref to xstring, | |
lv_file type string, | |
lv_fullpath type string, | |
lv_kind type c, | |
lv_path type string, | |
lv_user_action type i. | |
field-symbols: | |
<lv_data> type xstring. | |
create object lo_xmi | |
exporting | |
decorator = io_uml_class_scanner. | |
lo_xmi->set_decorator_configuration( attributes = boolc( mo_parameter->get_parameter( 'X_ATTR') eq abap_true ) | |
methods = boolc( mo_parameter->get_parameter( 'X_METH') eq abap_true ) | |
constants = boolc( mo_parameter->get_parameter( 'X_CONS') eq abap_true ) | |
private_member = boolc( mo_parameter->get_parameter( 'X_PRIV') eq abap_true ) | |
protected_member = boolc( mo_parameter->get_parameter( 'X_PROT') eq abap_true ) | |
packaged_member = boolc( mo_parameter->get_parameter( 'X_PACKS') eq abap_true ) ). | |
lo_xmi->set_xmi_configuration( aggregations = boolc( mo_parameter->get_parameter( 'X_AGGR') eq abap_true ) | |
associations = boolc( mo_parameter->get_parameter( 'X_ASOS') eq abap_true ) | |
uses = abap_false " Display Dependencies | |
friends = abap_true " Display Friend Relationship | |
show_exceptions = boolc( mo_parameter->get_parameter( 'X_EXCEP') eq abap_true ) ). | |
lo_xmi->get_diagram( importing e_kind = lv_kind changing c_data = lr_ref_data ). | |
cl_gui_frontend_services=>file_save_dialog( | |
exporting | |
default_extension = |XMI| | |
default_file_name = |export.xmi| | |
file_filter = |(*.xmi)\|*.xmi| | |
changing | |
filename = lv_file | |
path = lv_path | |
fullpath = lv_fullpath | |
user_action = lv_user_action | |
exceptions | |
others = 0 ). | |
if lv_user_action = cl_gui_frontend_services=>action_cancel. | |
return. | |
endif. | |
lr_ref_xstr ?= lr_ref_data. | |
assign lr_ref_xstr->* to <lv_data>. | |
if <lv_data> is assigned. | |
cl_uml_utilities=>save_xml_local( | |
exporting | |
xml = <lv_data> | |
filename = lv_fullpath ). | |
endif. | |
endmethod. | |
endclass. | |
*"! export - app | |
class lcl_app definition. | |
public section. | |
class-methods new | |
returning value(ro_app) type ref to lcl_app. | |
* "! execute app | |
* "! @parameter iv_progname | program name | |
methods execute importing iv_progname type progname. | |
private section. | |
* "! program name | |
data mv_progname type progname. | |
* "! selection screen parameter | |
data mo_parameter type ref to lif_parameter. | |
* "! affected packages | |
data mt_so_packages type cl_uml_class_scanner=>uml_range_packages. | |
* "! objects | |
data mt_so_objects type cl_uml_class_scanner=>uml_range_types. | |
* "! UML class scanner | |
data mo_uml_class_scanner type ref to cl_uml_class_scanner. | |
* "! get selection screen parameter | |
methods get_selection_screen_parameter. | |
* "! prepare parameter | |
methods prepare_parameter. | |
* "! clear uml cache | |
methods clear_uml_cache. | |
* "! prepare UML class canner | |
methods prepare_uml_class_scanner. | |
* "! export | |
methods export. | |
endclass. | |
class lcl_app implementation. | |
method new. | |
create object ro_app. | |
endmethod. | |
method execute. | |
mv_progname = iv_progname. | |
get_selection_screen_parameter( ). | |
prepare_parameter( ). | |
clear_uml_cache( ). | |
prepare_uml_class_scanner( ). | |
export( ). | |
endmethod. | |
method get_selection_screen_parameter. | |
* mo_parameter = NEW lcl_parameter( iv_progname = mv_progname ). | |
create object mo_parameter | |
type lcl_parameter | |
exporting | |
iv_progname = mv_progname. | |
endmethod. | |
method prepare_parameter. | |
data: | |
lt_packages type table of devclass, | |
lt_so_packages type lif_parameter=>mtt_so, | |
lt_so_objects like lt_so_packages. | |
field-symbols: | |
<package> like line of lt_packages, | |
<so_package> like line of mt_so_packages. | |
" packages | |
lt_so_packages = mo_parameter->get_parameter_so_tab( 'SO_DEVC' ). | |
lt_so_objects = mo_parameter->get_parameter_so_tab( 'SO_ROOT' ). | |
if lt_so_packages is not initial. | |
mt_so_packages = lt_so_packages. | |
elseif lt_so_objects is not initial. | |
select distinct devclass | |
from tadir | |
into table lt_packages | |
where obj_name in lt_so_objects. | |
if lt_packages is initial. | |
return. | |
endif. | |
clear mt_so_packages. | |
loop at lt_packages assigning <package>. | |
append initial line to mt_so_packages assigning <so_package>. | |
<so_package>-sign = 'I'. | |
<so_package>-option = 'EQ'. | |
<so_package>-low = <package>. | |
endloop. | |
endif. | |
" others | |
mt_so_objects = mo_parameter->get_parameter_so_tab( 'SO_ROOT' ). | |
endmethod. | |
method clear_uml_cache. | |
cl_uml_cache=>get_singleton( )->clear_type_cache( ). | |
endmethod. | |
method prepare_uml_class_scanner. | |
create object mo_uml_class_scanner. | |
mo_uml_class_scanner->set_scanner_configuration( scan_local_types = abap_false | |
scan_programs = boolc( mo_parameter->get_parameter( 'X_PROG' ) eq abap_true ) | |
scan_function_groups = boolc( mo_parameter->get_parameter( 'X_FUGR' ) eq abap_true ) | |
add_structures = boolc( mo_parameter->get_parameter( 'X_STRUCT' ) eq abap_true ) | |
scan_used_types = boolc( mo_parameter->get_parameter( 'X_USES' ) eq abap_true ) ). | |
if mt_so_packages is initial | |
and mt_so_objects is initial. | |
return. | |
endif. | |
mo_uml_class_scanner->execute( scan_packages = mt_so_packages | |
scan_types = mt_so_objects ). | |
endmethod. | |
method export. | |
data: | |
lo_exporter type ref to lif_exporter. | |
create object lo_exporter | |
type lcl_xmi_exporter | |
exporting | |
io_parameter = mo_parameter. | |
lo_exporter->export( io_uml_class_scanner = mo_uml_class_scanner ). | |
endmethod. | |
endclass. | |
" ----------------------------------------------------------------------------------------------------------------------------------- * | |
" program events | |
initialization. | |
button1 = text-007. | |
button2 = text-008. | |
button3 = text-009. | |
start-of-selection. | |
data: | |
exception type ref to cx_root. | |
try. | |
lcl_app=>new( )->execute( iv_progname = sy-repid ). | |
catch cx_root into exception. | |
break-point. | |
message exception type 'E'. | |
endtry. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment