[转http://www.cnblogs.com/byfhd/archive/2007/08/17/859829.html]
********************************************************************
* Report for generating class from XML-file
* Author: Sergey Korolev (slkorolev@mail.ru)
* Does not work with interfaces and exception classes
********************************************************************
REPORT yrs_class_upload_xml .
PARAMETERS:
xmlfile TYPE localfile.
TYPE-POOLS: seok, seop.
INCLUDE yrs_class_xml_const.
DATA:
corr_mode,
* Extracted structures (from XML file)
gt_locals_src TYPE seop_source_string,
gt_locals_def TYPE seop_source_string,
gt_locals_imp TYPE seop_source_string,
gt_locals_mac TYPE seop_source_string,
gs_class TYPE vseoclass,
gt_attributes TYPE seoo_attributes_r,
gt_methods TYPE seoo_methods_r,
gt_events TYPE seoo_events_r,
gt_types TYPE seoo_types_r,
gt_parameters TYPE seos_parameters_r,
gt_exceps TYPE seos_exceptions_r,
gt_implementings TYPE seor_implementings_r,
gs_inheritance TYPE vseoextend,
gt_redefinitions TYPE seor_redefinitions_r,
gt_impl_details TYPE seor_redefinitions_r,
gt_friendships TYPE seof_friendships_r,
gt_typepusages TYPE seot_typepusages_r,
gt_clsdeferrds TYPE seot_clsdeferrds_r,
gt_intdeferrds TYPE seot_intdeferrds_r,
gt_aliases TYPE seoo_aliases_r,
gt_interfaces TYPE seok_int_typeinfos,
gs_includes TYPE seop_methods_w_include,
gt_texts TYPE TABLE OF textpool,
gt_source TYPE seop_source,
gt_type_source TYPE seop_source,
gt_mtd_source TYPE seo_method_source_table,
wa_mtd_source TYPE seo_method_source.
CLASS lcx_xml_error DEFINITION DEFERRED.
DATA:
ex TYPE REF TO lcx_xml_error.
*----------------------------------------------------------------------*
* CLASS lCX_xml_error DEFINITIO
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcx_xml_error DEFINITION
INHERITING FROM cx_static_check.
PUBLIC SECTION.
DATA: error TYPE string.
METHODS: constructor IMPORTING value(i_error) TYPE string OPTIONAL.
ENDCLASS. "lCX_xml_error DEFINITIO
*----------------------------------------------------------------------*
* CLASS lcx_xml_section_error DEFINITIO
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcx_xml_section_error DEFINITION
INHERITING FROM lcx_xml_error.
PUBLIC SECTION.
METHODS: constructor IMPORTING value(i_section) TYPE string OPTIONAL
.
ENDCLASS. "lCX_xml_error DEFINITIO
*----------------------------------------------------------------------*
* CLASS lcx_xml_error IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcx_xml_error IMPLEMENTATION.
METHOD constructor.
CALL METHOD super->constructor.
error = i_error.
ENDMETHOD. "constructor
ENDCLASS. "lcx_xml_error IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS lcx_xml__section_error IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcx_xml_section_error IMPLEMENTATION.
METHOD constructor.
DATA:
msg TYPE string.
CONCATENATE 'File does not contain obligatory section'
i_section
INTO msg
SEPARATED BY space.
CALL METHOD super->constructor
EXPORTING
i_error = msg.
ENDMETHOD. "constructor
ENDCLASS. "lcx_xml__section_error IMPLEMENTATION
AT SELECTION-SCREEN ON VALUE-REQUEST FOR xmlfile.
DATA:
file_table TYPE filetable,
action TYPE i,
rc TYPE sysubrc.
FIELD-SYMBOLS:
<file> TYPE file_table.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
default_extension = 'xml'
file_filter = cl_gui_frontend_services=>filetype_xml
CHANGING
file_table = file_table
rc = rc
user_action = action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CHECK action = cl_gui_frontend_services=>action_ok.
READ TABLE file_table INDEX 1 ASSIGNING <file>.
xmlfile = <file>.
START-OF-SELECTION.
DATA:
retcode TYPE sysubrc,
source_node TYPE REF TO if_ixml_node,
xml TYPE REF TO cl_xml_document.
CREATE OBJECT xml.
TRY.
CALL METHOD xml->import_from_file
EXPORTING
filename = xmlfile
RECEIVING
retcode = retcode.
IF retcode NE xml->c_ok.
DATA:
msg TYPE string.
CASE retcode.
WHEN xml->c_no_ixml.
msg = 'This is not XML file'.
WHEN xml->c_failed.
msg = 'Failed to parse the XML file'.
WHEN xml->c_not_found.
msg = 'XML file not found'.
ENDCASE.
RAISE EXCEPTION TYPE lcx_xml_error
EXPORTING i_error = msg.
ENDIF.
DEFINE load_section.
call method xml->get_data
exporting
name = &1
importing
retcode = retcode
changing
dataobject = &2.
if retcode ne xml->c_ok.
raise exception type lcx_xml_section_error
exporting i_section = &1.
endif.
END-OF-DEFINITION.
load_section:
c_xml_root gs_class,
c_xml_attributes gt_attributes,
c_xml_methods gt_methods,
c_xml_events gt_events,
c_xml_types gt_types,
c_xml_parameters gt_parameters,
c_xml_exceps gt_exceps,
c_xml_implementings gt_implementings,
c_xml_impl_details gt_impl_details,
c_xml_friendships gt_friendships,
c_xml_typepusages gt_typepusages,
c_xml_clsdeferrds gt_clsdeferrds,
c_xml_intdeferrds gt_intdeferrds,
c_xml_aliases gt_aliases,
c_xml_inheritance gs_inheritance,
c_xml_interfaces gt_interfaces,
c_xml_redefinitions gt_redefinitions,
c_xml_typesource gt_type_source,
* c_xml_text_pool gt_texts,
c_xml_locals_src gt_locals_src,
c_xml_locals_def gt_locals_def,
c_xml_locals_mac gt_locals_mac,
c_xml_locals_imp gt_locals_imp.
* Now find method implementation node containing sources
* for each method as a subnode
CALL METHOD xml->find_node
EXPORTING
name = c_xml_method_src
RECEIVING
node = source_node.
IF source_node IS INITIAL.
RAISE EXCEPTION TYPE lcx_xml_section_error
EXPORTING i_section = c_xml_methods.
ENDIF.
source_node = source_node->get_first_child( ).
DATA:
name1 TYPE string,
name2 TYPE string,
xml_sep(5) VALUE '_--7E'.
WHILE NOT source_node IS INITIAL.
CLEAR wa_mtd_source.
name1 = source_node->get_name( ).
SPLIT name1 AT xml_sep INTO name1 name2.
IF name2 IS INITIAL.
wa_mtd_source-cpdname = name1.
ELSE.
CONCATENATE name1 name2 INTO wa_mtd_source-cpdname
SEPARATED BY '~'.
ENDIF.
CALL METHOD xml->get_node_data
EXPORTING
node = source_node
IMPORTING
dataobject = wa_mtd_source-source
retcode = retcode.
IF retcode = xml->c_ok.
APPEND wa_mtd_source TO gt_mtd_source.
ENDIF.
source_node = source_node->get_next( ).
ENDWHILE.
CATCH lcx_xml_error INTO ex.
MESSAGE ex->error TYPE 'E'.
ENDTRY.
DATA:
answer,
fields TYPE TABLE OF sval WITH HEADER LINE,
parameter TYPE TABLE OF spar WITH HEADER LINE,
clskey TYPE seoclskey.
clskey-clsname = gs_class-clsname.
corr_mode = 'I'.
DO.
CALL FUNCTION 'SEO_CLASS_GET'
EXPORTING
clskey = clskey
EXCEPTIONS
not_existing = 1
deleted = 2
is_interface = 3
model_only = 4
OTHERS = 5.
IF sy-subrc NE 0.
EXIT.
ENDIF.
REFRESH parameter.
parameter-param = 'CLASS'.
parameter-value = clskey-clsname.
APPEND parameter.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Class already exists'
text_question =
'Class &CLASS& already exists. Overwrite?'
default_button = '2'
IMPORTING
answer = answer
TABLES
parameter = parameter
EXCEPTIONS
text_not_found = 0
OTHERS = 0.
CASE answer.
WHEN '1'.
corr_mode = 'U'.
EXIT.
WHEN 'A'.
RETURN.
ENDCASE.
REFRESH fields.
fields-tabname = 'SEOCLSKEY'.
fields-fieldname = 'CLSNAME'.
fields-value = clskey-clsname.
APPEND fields.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = 'Enter new class name'
IMPORTING
returncode = answer
TABLES
fields = fields
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
IF answer = 'A'.
RETURN.
ENDIF.
READ TABLE fields INDEX 1.
clskey-clsname = fields-value.
ENDDO.
IF clskey-clsname NE gs_class-clsname.
gs_class-clsname = clskey-clsname.
gs_class-author = sy-uname.
gs_class-changedby = sy-uname.
gs_class-changedon = sy-datum.
gs_inheritance-clsname = clskey-clsname.
PERFORM rename_class TABLES gt_implementings USING clskey-clsname.
PERFORM rename_class TABLES gt_attributes USING clskey-clsname.
PERFORM rename_class TABLES gt_methods USING clskey-clsname.
PERFORM rename_class TABLES gt_events USING clskey-clsname.
PERFORM rename_class TABLES gt_types USING clskey-clsname.
PERFORM rename_class TABLES gt_parameters USING clskey-clsname.
PERFORM rename_class TABLES gt_exceps USING clskey-clsname.
PERFORM rename_class TABLES gt_aliases USING clskey-clsname.
PERFORM rename_class TABLES gt_typepusages USING clskey-clsname.
PERFORM rename_class TABLES gt_clsdeferrds USING clskey-clsname.
PERFORM rename_class TABLES gt_intdeferrds USING clskey-clsname.
PERFORM rename_class TABLES gt_redefinitions USING clskey-clsname.
PERFORM rename_class TABLES gt_impl_details USING clskey-clsname.
PERFORM rename_class TABLES gt_friendships USING clskey-clsname.
ENDIF.
DATA:
devclass LIKE tadir-devclass,
korrnum LIKE e070-trkorr.
CALL FUNCTION 'RS_CORR_INSERT'
EXPORTING
object = gs_class-clsname
object_class = 'CLAS'
mode = corr_mode
global_lock = 'X'
master_language = gs_class-langu
IMPORTING
devclass = devclass
korrnum = korrnum
EXCEPTIONS
cancelled = 1
permission_failure = 2
unknown_objectclass = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
DATA:
overwrite TYPE seox_boolean.
IF corr_mode = 'U'.
overwrite = seox_true.
ENDIF.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Generating class definition'.
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
EXPORTING
corrnr = korrnum
devclass = devclass
version = seoc_version_inactive
overwrite = overwrite
IMPORTING
korrnr = korrnum
CHANGING
class = gs_class
inheritance = gs_inheritance
redefinitions = gt_redefinitions
implementings = gt_implementings
impl_details = gt_impl_details
attributes = gt_attributes
methods = gt_methods
events = gt_events
types = gt_types
type_source = gt_type_source
PARAMETERS = gt_parameters
exceps = gt_exceps
aliases = gt_aliases
typepusages = gt_typepusages
clsdeferrds = gt_clsdeferrds
intdeferrds = gt_intdeferrds
friendships = gt_friendships
EXCEPTIONS
existing = 1
is_interface = 2
db_error = 3
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
IF sy-subrc <> 0.
MESSAGE 'Error generating class' TYPE 'E'.
ENDIF.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = 'Generating local class definitions'.
CALL FUNCTION 'SEO_CLASS_GENERATE_LOCALS'
EXPORTING
clskey = clskey
force = seox_true
corrnr = korrnum
implementation = gt_locals_src
locals_def = gt_locals_def
locals_imp = gt_locals_imp
locals_mac = gt_locals_mac
EXCEPTIONS
not_existing = 1
model_only = 2
locals_not_generated = 3
locals_not_initialised = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE 'Error generating local class definitions' TYPE 'E'.
ENDIF.
FIELD-SYMBOLS:
<mtd_source> TYPE seo_method_source.
DATA:
status_line(128),
mtdkey TYPE seocpdkey.
LOOP AT gt_mtd_source ASSIGNING <mtd_source>.
CONCATENATE 'Generating implementation of the method'
<mtd_source>-cpdname
INTO status_line
SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = status_line.
mtdkey-clsname = clskey-clsname.
mtdkey-cpdname = <mtd_source>-cpdname.
CALL FUNCTION 'SEO_METHOD_GENERATE_INCLUDE'
EXPORTING
mtdkey = mtdkey
force = seox_true
suppress_corr = seox_true
implementation_expanded = <mtd_source>-source
corrnr = korrnum
without_method_frame = seox_true
EXCEPTIONS
not_existing = 1
model_only = 2
include_existing = 3
method_imp_not_generated = 4
method_imp_not_initialised = 5
_internal_class_not_existing = 6
_internal_method_overflow = 7
cancelled = 8
method_is_abstract_implemented = 9
method_is_final_implemented = 10
internal_error_insert_report = 11
OTHERS = 12.
* IF sy-subrc <> 0.
* MESSAGE 'Error generating class' TYPE 'E'.
* ENDIF.
ENDLOOP.
* Now find text pool node containing textpools for
* different languages as subnodes
DATA:
langu TYPE sy-langu,
include_name TYPE programm.
TRY.
CALL FUNCTION 'SEO_CLASS_GET_INCLUDE_BY_NAME'
EXPORTING
clskey = clskey
IMPORTING
progname = include_name.
CALL METHOD xml->find_node
EXPORTING
name = c_xml_text_pool
RECEIVING
node = source_node.
IF source_node IS INITIAL.
RAISE EXCEPTION TYPE lcx_xml_section_error
EXPORTING i_section = c_xml_text_pool.
ENDIF.
source_node = source_node->get_first_child( ).
WHILE NOT source_node IS INITIAL.
langu = source_node->get_name( ).
REFRESH gt_texts.
CALL METHOD xml->get_node_data
EXPORTING
node = source_node
IMPORTING
dataobject = gt_texts
retcode = retcode.
source_node = source_node->get_next( ).
CHECK retcode = xml->c_ok
AND NOT gt_texts IS INITIAL.
CONCATENATE 'Generating class text pool for language'
langu
INTO msg
SEPARATED BY space.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
text = msg.
INSERT textpool include_name
FROM gt_texts
LANGUAGE langu.
ENDWHILE.
CATCH lcx_xml_section_error.
MESSAGE 'XML-file does not contain Text pool data' TYPE 'S'.
ENDTRY.
SET PARAMETER ID 'CLASS' FIELD clskey-clsname.
CALL TRANSACTION 'SE24'.
*&---------------------------------------------------------------------*
*& Form rename_class
*&---------------------------------------------------------------------*
* Renames class references in arbitrary table
*----------------------------------------------------------------------*
* -->P_TABLE some generation structure
* -->P_NAME new class name
*----------------------------------------------------------------------*
FORM rename_class TABLES p_table
USING p_name.
FIELD-SYMBOLS:
<field> TYPE ANY,
<line> TYPE ANY.
DEFINE set_field.
assign component &1 of structure <line> to <field>.
if sy-subrc = 0.
<field> = &2.
endif.
END-OF-DEFINITION.
LOOP AT p_table ASSIGNING <line>.
set_field 'CLSNAME' p_name.
set_field 'AUTHOR' sy-uname.
set_field 'CHANGEDBY' sy-uname.
ENDLOOP.
ENDFORM. " rename_class

[Edit section] Report YRS_CLASS_DOWNLOAD_XML

********************************************************************
* Report for generating XML-file from class
* Author: Sergey Korolev (slkorolev@mail.ru)
* Does not work with interfaces and exception classes
********************************************************************
REPORT yrs_class_download.
PARAMETERS: class TYPE seoclskey OBLIGATORY.
SELECTION-SCREEN SKIP.
PARAMETERS: p_show AS CHECKBOX.
TYPE-POOLS: seok, seop, srext.
INCLUDE yrs_class_xml_const.
INCLUDE lseopm01.
DATA:
g_xml TYPE REF TO cl_xml_document,
gs_class TYPE vseoclass,
gt_attributes TYPE seoo_attributes_r,
gt_methods TYPE seoo_methods_r,
gt_events TYPE seoo_events_r,
gt_types TYPE seoo_types_r,
gt_parameters TYPE seos_parameters_r,
gt_exceps TYPE seos_exceptions_r,
gt_implementings TYPE seor_implementings_r,
gs_inheritance TYPE vseoextend,
gt_redefinitions TYPE seor_redefinitions_r,
gt_impl_details TYPE seor_redefinitions_r,
gt_friendships TYPE seof_friendships_r,
gt_typepusages TYPE seot_typepusages_r,
gt_clsdeferrds TYPE seot_clsdeferrds_r,
gt_intdeferrds TYPE seot_intdeferrds_r,
gt_aliases TYPE seoo_aliases_r,
gt_interfaces TYPE seok_int_typeinfos,
gs_includes TYPE seop_methods_w_include,
gt_source TYPE seop_source_string.
DATA:
typkey TYPE seocmpkey,
single_source TYPE seop_source,
type_source TYPE seop_source_string.
FIELD-SYMBOLS:
<type> TYPE seoo_type_r,
<source_line> TYPE LINE OF seop_source.
FIELD-SYMBOLS:
<include> TYPE LINE OF seop_methods_w_include.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR class.
DATA:
clsname TYPE seoclass-clsname.
clsname = class.
CALL FUNCTION 'F4_OBJECTS_CLASS'
EXPORTING
object = clsname
IMPORTING
RESULT = clsname.
class = clsname.
AT SELECTION-SCREEN ON class.
DATA:
clskey TYPE seoclskey.
clskey-clsname = class.
* Check if active version of class exists
CALL FUNCTION 'SEO_CLASS_GET'
EXPORTING
clskey = clskey
version = '1'
state = '1'
EXCEPTIONS
not_existing = 1
deleted = 2
is_interface = 3
model_only = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
START-OF-SELECTION.
CALL FUNCTION 'SEO_CLASS_TYPEINFO_GET'
EXPORTING
clskey = class
version = seoc_version_active
IMPORTING
class = gs_class
attributes = gt_attributes
methods = gt_methods
events = gt_events
types = gt_types
PARAMETERS = gt_parameters
exceps = gt_exceps
implementings = gt_implementings
inheritance = gs_inheritance
redefinitions = gt_redefinitions
impl_details = gt_impl_details
friendships = gt_friendships
typepusages = gt_typepusages
clsdeferrds = gt_clsdeferrds
intdeferrds = gt_intdeferrds
aliases = gt_aliases
EXCEPTIONS
not_existing = 1
is_interface = 2
model_only = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Load all method include names
CALL FUNCTION 'SEO_CLASS_GET_METHOD_INCLUDES'
EXPORTING
clskey = class
IMPORTING
includes = gs_includes
EXCEPTIONS
_internal_class_not_existing = 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.
* Gathering together internal type source
LOOP AT gt_types ASSIGNING <type>.
typkey-clsname = <type>-clsname.
typkey-cmpname = <type>-cmpname.
REFRESH single_source.
PERFORM get_type_source USING typkey
CHANGING single_source.
* CALL FUNCTION 'SEO_CLASS_GET_TYPE_SOURCE'
* EXPORTING
* typkey = typkey
* IMPORTING
* SOURCE = single_source
* EXCEPTIONS
* _internal_class_not_existing = 1
* not_existing = 2
* not_edited = 3
* OTHERS = 4.
CHECK NOT single_source[] IS INITIAL.
<type>-srcrow1 = LINES( type_source ) + 1.
<type>-srccolumn1 = 0.
LOOP AT single_source ASSIGNING <source_line>.
CONDENSE <source_line>.
<type>-srccolumn2 = STRLEN( <source_line> ).
APPEND <source_line> TO type_source.
ENDLOOP.
<type>-srcrow2 = LINES( type_source ).
ENDLOOP.
END-OF-SELECTION.
DATA:
mtd_name TYPE string,
class_root TYPE REF TO if_ixml_node,
section TYPE REF TO if_ixml_node,
l_description TYPE sdok_descr.
l_description = gs_class-descript.
CREATE OBJECT g_xml
EXPORTING
description = l_description
object_type = cl_xml_document=>c_bor_classtype
object_name = gs_class-clsname.
* Simply generate sections of XML document
* First create root section
g_xml->set_data( name = c_xml_root
dataobject = gs_class ).
class_root = g_xml->find_node( name = c_xml_root ).
* All other sections will be under the root (see parent_node)
g_xml->set_data( name = c_xml_attributes
parent_node = class_root
dataobject = gt_attributes ).
g_xml->set_data( name = c_xml_methods
parent_node = class_root
dataobject = gt_methods ).
g_xml->set_data( name = c_xml_events
parent_node = class_root
dataobject = gt_events ).
g_xml->set_data( name = c_xml_types
parent_node = class_root
dataobject = gt_types ).
g_xml->set_data( name = c_xml_parameters
parent_node = class_root
dataobject = gt_parameters ).
g_xml->set_data( name = c_xml_exceps
parent_node = class_root
dataobject = gt_exceps ).
g_xml->set_data( name = c_xml_implementings
parent_node = class_root
dataobject = gt_implementings ).
g_xml->set_data( name = c_xml_impl_details
parent_node = class_root
dataobject = gt_impl_details ).
g_xml->set_data( name = c_xml_friendships
parent_node = class_root
dataobject = gt_friendships ).
g_xml->set_data( name = c_xml_typepusages
parent_node = class_root
dataobject = gt_typepusages ).
g_xml->set_data( name = c_xml_clsdeferrds
parent_node = class_root
dataobject = gt_clsdeferrds ).
g_xml->set_data( name = c_xml_intdeferrds
parent_node = class_root
dataobject = gt_intdeferrds ).
g_xml->set_data( name = c_xml_aliases
parent_node = class_root
dataobject = gt_aliases ).
g_xml->set_data( name = c_xml_inheritance
parent_node = class_root
dataobject = gs_inheritance ).
g_xml->set_data( name = c_xml_interfaces
parent_node = class_root
dataobject = gt_interfaces ).
g_xml->set_data( name = c_xml_redefinitions
parent_node = class_root
dataobject = gt_redefinitions ).
g_xml->set_data( name = c_xml_typesource
parent_node = class_root
dataobject = type_source ).
* Extract local definitions (classes, macros)
DEFINE set_locals.
refresh gt_source.
call function 'SEO_CLASS_GET_INCLUDE_SOURCE'
exporting
clskey = class
inctype = &1
importing
source_expanded = gt_source
exceptions
_internal_class_not_existing = 0
not_existing = 0
others = 0.
g_xml->set_data( name = &2
parent_node = class_root
dataobject = gt_source ).
END-OF-DEFINITION.
DATA:
include_name TYPE programm.
CALL FUNCTION 'SEO_CLASS_GET_INCLUDE_BY_NAME'
EXPORTING
clskey = class
limu = seok_limu_locals
IMPORTING
progname = include_name.
set_locals:
include_name c_xml_locals_src,
seop_ext_class_locals_def c_xml_locals_def,
seop_ext_class_locals_imp c_xml_locals_imp,
seop_ext_class_macros c_xml_locals_mac.
* Extract text pool
DATA:
gt_texts TYPE TABLE OF textpool.
CALL FUNCTION 'SEO_CLASS_GET_INCLUDE_BY_NAME'
EXPORTING
clskey = class
IMPORTING
progname = include_name.
READ TEXTPOOL include_name INTO gt_texts LANGUAGE sy-langu.
g_xml->set_data( name = c_xml_text_pool
parent_node = class_root
dataobject = gt_texts ).
* Create section for method source.
* Then each metod as a single node under the common section
section = g_xml->create_simple_element( name = c_xml_method_src
parent = class_root ).
LOOP AT gs_includes ASSIGNING <include>.
REFRESH gt_source.
CALL FUNCTION 'SEO_METHOD_GET_SOURCE'
EXPORTING
mtdkey = <include>-cpdkey
state = 'A'
IMPORTING
source_expanded = gt_source
EXCEPTIONS
_internal_method_not_existing = 1
_internal_class_not_existing = 2
version_not_existing = 3
inactive_new = 4
inactive_deleted = 5
OTHERS = 6.
CHECK sy-subrc = 0.
mtd_name = <include>-cpdkey-cpdname.
g_xml->set_data( name = mtd_name
parent_node = section
dataobject = gt_source[] ).
ENDLOOP.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Now display resulting XML-file or export it into workstation file
mtd_name = class.
IF p_show = 'X'.
g_xml->display( ).
EXIT.
ENDIF.
DATA:
user_action TYPE i,
path TYPE string,
full_path TYPE string,
file_name TYPE string.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
default_extension = 'xml'
default_file_name = mtd_name
file_filter = cl_gui_frontend_services=>filetype_xml
CHANGING
filename = file_name
path = path
fullpath = full_path
user_action = user_action
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CHECK user_action = cl_gui_frontend_services=>action_ok.
DATA:
localfile TYPE localfile.
localfile = full_path.
g_xml->export_to_file( filename = localfile ).
*&---------------------------------------------------------------------*
*& Form get_type_source
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(P_TYPKEY) text
* -->P_SOURCE text
*----------------------------------------------------------------------*
FORM get_type_source USING value(p_typkey) TYPE seocmpkey
CHANGING p_source TYPE seop_source.
STATICS:
loaded,
private_section TYPE seop_source,
protected_section TYPE seop_source.
DATA:
filename TYPE progstruc,
expanded_srouce TYPE seop_source_string,
type TYPE vseotype.
FIELD-SYMBOLS:
<dest> TYPE seop_source.
IF loaded IS INITIAL.
class_include p_typkey srext_ext_class_protected filename.
READ REPORT filename INTO expanded_srouce.
protected_section[] = expanded_srouce[].
class_include p_typkey srext_ext_class_private filename.
READ REPORT filename INTO expanded_srouce.
private_section[] = expanded_srouce[].
loaded = 'X'.
ENDIF.
CALL FUNCTION 'SEO_TYPE_GET'
EXPORTING
typkey = typkey
version = seoc_version_inactive
IMPORTING
type = type
EXCEPTIONS
OTHERS = 0.
IF type-exposure = seoc_exposure_protected.
ASSIGN protected_section TO <dest>.
ELSE.
ASSIGN private_section TO <dest>.
ENDIF.
PERFORM extract_type_source(saplseop)
USING <dest> type-srcrow1 type-srccolumn1
type-srcrow2 type-srccolumn2
CHANGING p_source.
* CALL FUNCTION 'SEO_CLASS_GET_TYPE_SOURCE'.
ENDFORM. " GET_TYPE_SOURCE

[Edit section] Include YRS_CLASS_XML_CONST

*&---------------------------------------------------------------------*
*& Include YRS_CLASS_XML_CONST
*&---------------------------------------------------------------------*
CONSTANTS:
c_xml_root TYPE string VALUE 'CLASS_ROOT',
c_xml_public TYPE string VALUE 'PUBLIC_SECTION',
c_xml_protected TYPE string VALUE 'PROTECTED_SECTION',
c_xml_private TYPE string VALUE 'PRIVATE_SECTION',
c_xml_inheritance TYPE string VALUE 'INHERITANCE',
c_xml_friends TYPE string VALUE 'FRIENDS',
c_xml_interfaces TYPE string VALUE 'INTERFACES',
c_xml_redefinitions TYPE string VALUE 'REDEFINITIONS',
c_xml_typesource TYPE string VALUE 'TYPE_SOURCE',
c_xml_locals_src TYPE string VALUE 'LOCALS_SRC',
c_xml_locals_def TYPE string VALUE 'LOCALS_DEF',
c_xml_locals_imp TYPE string VALUE 'LOCALS_IMP',
c_xml_locals_mac TYPE string VALUE 'LOCALS_MAC',
c_xml_method_src TYPE string VALUE 'METHOD_SOURCE'.
CONSTANTS:
c_xml_attributes TYPE string VALUE 'ATTRIBUTES',
c_xml_methods TYPE string VALUE 'METHODS',
c_xml_events TYPE string VALUE 'EVENTS',
c_xml_types TYPE string VALUE 'TYPES',
c_xml_parameters TYPE string VALUE 'PARAMETERS',
c_xml_exceps TYPE string VALUE 'EXCEPTIONS',
c_xml_implementings TYPE string VALUE 'IMPLEMENTINGS',
c_xml_impl_details TYPE string VALUE 'IMPL_DETAILS',
c_xml_friendships TYPE string VALUE 'FRIENDSHIPS',
c_xml_typepusages TYPE string VALUE 'TYPEPUSAGES',
c_xml_clsdeferrds TYPE string VALUE 'CLSDEFERRDS',
c_xml_intdeferrds TYPE string VALUE 'INTDEFERRDS',
c_xml_aliases TYPE string VALUE 'ALIASES',
c_xml_text_pool TYPE string VALUE 'TEXT_POOL'.

[Edit section] Sample class

This is tiny yet useful ABAP class, implementing progress indicator functionality by utilizing SAPGUI_PROGRESS_INDICATOR function module. Sometimes you need to show a progress of some process. For example, you can process quite large internal table in a loop. Also it should be better to show progress only when it really changes and not very often or else a user can see blinking watch-icon in the GUI status line. Also it would be nice not to bother with percent calculation. All this can be done with ZCL_PROGRESS_INDICATOR class. First, call its START method to define total amount of process steps (say internal table line count) and status line text. Also you can set percent threshold which defines frequency of progress indicator updates. If you set threshold to 5 then the progress indicator will be updated less often than 5% of step count. Next, call ADVANCE method on every countable process step (say on every loop step). It will show progress when needed and increment internal progress counts. Also you can call SET method to set current progress absolutely. Finally, call FINISH method to clear GUI status line.

Save the contents of this page starting with <?xml version="1.0"?> tag and ending with </CLASS_ROOT> tag, then save it as XML file and finally upload with YRS_UPLOAD_CLASS_XML report.

<?xml version="1.0" encoding="utf-16"?> <CLASS_ROOT>

 <CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Progress indicator</DESCRIPT>
<UUID>CHTdPkI0GECU1I4g7Jzm4A==</UUID>
<CATEGORY>00</CATEGORY>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<RELEASE>0</RELEASE>
<AUTHOR>SKOROLEV</AUTHOR>
<CREATEDON>2005-10-19</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<CHGDANYON>0000-00-00</CHGDANYON>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<R3RELEASE>700</R3RELEASE>
<CLSBCCAT>00</CLSBCCAT>
<DURATION_TYPE>0</DURATION_TYPE>
<RISK_LEVEL>0</RISK_LEVEL>
<ATTRIBUTES>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>PROGRESS_TEXT</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Progress text</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>1</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>STRING</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>HIGH_BOUND</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>High bound</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>2</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>TIME_LIMIT</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>System time out limit</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>3</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTRDONLY>X</ATTRDONLY>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>F</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>CURRENT_PROGRESS</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Current indicator value (absolute)</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>4</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTRDONLY>X</ATTRDONLY>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>LAST_SHOWN_PROGRESS</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Last shown indicator value (absolute)</DESCRIPT>
<EXPOSURE>0</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>1</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>TRESHOLD</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Percent treshold</DESCRIPT>
<EXPOSURE>0</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>2</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>START_TIME_STAMP</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Start time</DESCRIPT>
<EXPOSURE>0</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>3</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>TIMESTAMP</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>TRESHOLD_SEC</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Treshold in seconds</DESCRIPT>
<EXPOSURE>0</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>4</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>STEP_TIME_STAMP</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>step timestamp</DESCRIPT>
<EXPOSURE>0</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>5</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<ATTDECLTYP>0</ATTDECLTYP>
<ATTEXPVIRT>0</ATTEXPVIRT>
<TYPTYPE>1</TYPTYPE>
<TYPE>TIMESTAMP</TYPE>
<SRCROW1>0</SRCROW1>
<SRCCOLUMN1>0</SRCCOLUMN1>
<SRCROW2>0</SRCROW2>
<SRCCOLUMN2>0</SRCCOLUMN2>
<R3RELEASE>700</R3RELEASE>
<TYPESRC_LENG>0</TYPESRC_LENG>
</item>
</ATTRIBUTES>
<METHODS>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>START</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Start progress</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>1</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<MTDTYPE>0</MTDTYPE>
<MTDDECLTYP>0</MTDDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCMTDCAT>00</BCMTDCAT>
<BCMTDSYN>0</BCMTDSYN>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>FINISH</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Finish progress, clear status line</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>2</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<MTDTYPE>0</MTDTYPE>
<MTDDECLTYP>0</MTDDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCMTDCAT>00</BCMTDCAT>
<BCMTDSYN>0</BCMTDSYN>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>ADVANCE</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Advance indicator relatively</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>3</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<MTDTYPE>0</MTDTYPE>
<MTDDECLTYP>0</MTDDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCMTDCAT>00</BCMTDCAT>
<BCMTDSYN>0</BCMTDSYN>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>SET</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Set indicator absolutely</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>4</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<MTDTYPE>0</MTDTYPE>
<MTDDECLTYP>0</MTDDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCMTDCAT>00</BCMTDCAT>
<BCMTDSYN>0</BCMTDSYN>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>START_TIME</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Start Time checking</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>5</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<MTDTYPE>0</MTDTYPE>
<MTDDECLTYP>0</MTDDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCMTDCAT>00</BCMTDCAT>
<BCMTDSYN>0</BCMTDSYN>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>SET_STATUS_TEXT</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Set Status Text</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>6</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<MTDTYPE>0</MTDTYPE>
<MTDDECLTYP>0</MTDDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCMTDCAT>00</BCMTDCAT>
<BCMTDSYN>0</BCMTDSYN>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>RESET_TIME</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>reset times</DESCRIPT>
<EXPOSURE>0</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>1</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<MTDTYPE>0</MTDTYPE>
<MTDDECLTYP>0</MTDDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCMTDCAT>00</BCMTDCAT>
<BCMTDSYN>0</BCMTDSYN>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>CHECK_TIME</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>check elapsed time</DESCRIPT>
<EXPOSURE>0</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>2</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<MTDTYPE>0</MTDTYPE>
<MTDDECLTYP>0</MTDDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCMTDCAT>00</BCMTDCAT>
<BCMTDSYN>0</BCMTDSYN>
</item>
</METHODS>
<EVENTS>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>ON_TIMEOUT</CMPNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Fired when system timeout treshold exceeded</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<EDITORDER>1</EDITORDER>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<EVTDECLTYP>0</EVTDECLTYP>
<R3RELEASE>700</R3RELEASE>
<BCEVTCAT>00</BCEVTCAT>
</item>
</EVENTS>
<TYPES/>
<PARAMETERS>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>ADVANCE</CMPNAME>
<SCONAME>I_STATUS_TEXT</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Status line text</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>1</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>ANY</TYPE>
<PAROPTIONL>X</PAROPTIONL>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>ADVANCE</CMPNAME>
<SCONAME>I_STEP</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Advance step</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>2</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<PARVALUE>1</PARVALUE>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>ON_TIMEOUT</CMPNAME>
<SCONAME>I_PERCENT_REMAINING</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Number of percent remaining in curr process</DESCRIPT>
<CMPTYPE>2</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>1</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>1</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<PAROPTIONL>X</PAROPTIONL>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>SET</CMPNAME>
<SCONAME>I_STATUS_TEXT</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Status line text</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>1</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>ANY</TYPE>
<PAROPTIONL>X</PAROPTIONL>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>SET</CMPNAME>
<SCONAME>I_PROGRESS</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>New indicator value (absolute)</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>2</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>SET_STATUS_TEXT</CMPNAME>
<SCONAME>I_STATUS_TEXT</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Status line text</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>1</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>ANY</TYPE>
<PAROPTIONL>X</PAROPTIONL>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>START</CMPNAME>
<SCONAME>I_STATUS_TEXT</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Status line text</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>1</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>ANY</TYPE>
<PAROPTIONL>X</PAROPTIONL>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>START</CMPNAME>
<SCONAME>I_HIGH_BOUND</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Maximum step count</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>2</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<PARVALUE>100</PARVALUE>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>START</CMPNAME>
<SCONAME>I_PERCENT_TRESHOLD</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Percent treshold to update indicator and status

line</DESCRIPT>

     <CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>3</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<PARVALUE>5</PARVALUE>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>START</CMPNAME>
<SCONAME>I_ANY_TAB</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Data table to count the high bound</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>4</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>1</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>ANY TABLE</TYPE>
<PAROPTIONL>X</PAROPTIONL>
</item>
<item>
<CLSNAME>ZCL_PROGRESS_INDICATOR</CLSNAME>
<CMPNAME>START</CMPNAME>
<SCONAME>I_SEC_TRESHOLD</SCONAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Seconds treshold</DESCRIPT>
<CMPTYPE>1</CMPTYPE>
<MTDTYPE>0</MTDTYPE>
<EDITORDER>5</EDITORDER>
<DISPID>0</DISPID>
<AUTHOR>KOROLESE</AUTHOR>
<CREATEDON>2006-07-31</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
<PARDECLTYP>0</PARDECLTYP>
<PARPASSTYP>0</PARPASSTYP>
<TYPTYPE>1</TYPTYPE>
<TYPE>I</TYPE>
<PAROPTIONL>X</PAROPTIONL>
</item>
</PARAMETERS>
<EXCEPTIONS/>
<IMPLEMENTINGS/>
<IMPL_DETAILS/>
<FRIENDSHIPS/>
<TYPEPUSAGES/>
<CLSDEFERRDS/>
<INTDEFERRDS/>
<ALIASES/>
<INHERITANCE>
<VERSION>0</VERSION>
<STATE>0</STATE>
<CREATEDON>0000-00-00</CREATEDON>
<CHANGEDON>0000-00-00</CHANGEDON>
</INHERITANCE>
<INTERFACES/>
<REDEFINITIONS/>
<TYPE_SOURCE/>
<LOCALS_SRC/>
<LOCALS_DEF/>
<LOCALS_IMP/>
<LOCALS_MAC/>
<TEXT_POOL>
<E/>
</TEXT_POOL>
<METHOD_SOURCE>
<ADVANCE>
<item>METHOD advance.</item>
<item> DATA:</item>
<item> l_progress TYPE i.</item>
<item/>
<item> l_progress = current_progress + i_step.</item>
<item> CALL METHOD set( i_status_text = i_status_text</item>
<item> i_progress = l_progress ).</item>
<item>ENDMETHOD.</item>
</ADVANCE>
<FINISH>
<item>METHOD finish.</item>
<item> CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'.</item>
<item>ENDMETHOD.</item>
</FINISH>
<SET>
<item>METHOD set.</item>
<item> DATA:</item>
<item> text TYPE string,</item>
<item> delta TYPE i,</item>
<item> timestamp TYPE timestamp,</item>
<item> last_percent TYPE i,</item>
<item> need_show,</item>
<item> l_new_progress TYPE i.</item>
<item/>
<item> current_progress = i_progress.</item>
<item> IF current_progress > high_bound.</item>
<item> current_progress = high_bound.</item>
<item> ENDIF.</item>
<item/>
<item> l_new_progress = 100 * current_progress / high_bound.</item>
<item> CHECK last_shown_progress NE l_new_progress.</item>
<item/>
<item> last_percent = 100 - treshold.</item>
<item/>
<item> CALL METHOD check_time.</item>
<item/>
<item> IF treshold_sec > 0</item>
<item> AND l_new_progress < last_percent.</item>
<item> GET TIME STAMP FIELD timestamp.</item>
<item> IF timestamp > step_time_stamp.</item>
<item> CALL FUNCTION 'SRET_TIME_DIFF_GET'</item>
<item> EXPORTING</item>
<item> utc_start = step_time_stamp</item>
<item> utc_end = timestamp</item>
<item> IMPORTING</item>
<item> second = delta</item>
<item> EXCEPTIONS</item>
<item> paramerr = 0</item>
<item> OTHERS = 0.</item>
<item/>
<item> IF delta > treshold_sec.</item>
<item> need_show = 'X'.</item>
<item> step_time_stamp = timestamp.</item>
<item> ENDIF.</item>
<item> ENDIF.</item>
<item> ELSE.</item>
<item> delta = abs( l_new_progress - last_shown_progress ).</item>
     <item>    IF delta >= treshold.</item>
<item> need_show = 'X'.</item>
<item> ENDIF.</item>
<item> ENDIF.</item>
<item/>
<item> IF need_show = 'X'.</item>
<item/>
<item> last_shown_progress = l_new_progress.</item>
<item/>
<item> IF i_status_text IS INITIAL.</item>
<item> text = progress_text.</item>
<item> ELSE.</item>
<item> text = i_status_text.</item>
<item> ENDIF.</item>
<item/>
<item> CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'</item>
<item> EXPORTING</item>
<item> percentage = last_shown_progress</item>
<item> text = text.</item>
<item> ENDIF.</item>
<item/>
<item>ENDMETHOD.</item>
</SET>
<START>
<item>METHOD start.</item>
<item> CLEAR:</item>
<item> current_progress,</item>
<item> last_shown_progress.</item>
<item/>
<item> treshold = i_percent_treshold.</item>
<item> progress_text = i_status_text.</item>
<item/>
<item> GET TIME STAMP FIELD step_time_stamp.</item>
<item/>
<item> IF i_any_tab[] IS INITIAL.</item>
<item> high_bound = i_high_bound.</item>
<item> ELSE.</item>
<item> DESCRIBE TABLE i_any_tab LINES high_bound.</item>
<item> ENDIF.</item>
<item/>
<item> IF high_bound > 0.</item>
<item> last_shown_progress = 1.</item>
<item> ENDIF.</item>
<item/>
<item> IF i_sec_treshold > 0.</item>
<item> treshold_sec = i_sec_treshold.</item>
<item> ENDIF.</item>
<item/>
<item> CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'</item>
<item> EXPORTING</item>
<item> percentage = last_shown_progress</item>
<item> text = i_status_text.</item>
<item/>
<item/>
<item>ENDMETHOD.</item>
</START>
<RESET_TIME>
<item>METHOD reset_time.</item>
<item> DATA:</item>
<item> e_value TYPE spfpflpar-pvalue.</item>
<item/>
<item> GET TIME STAMP FIELD start_time_stamp.</item>
<item/>
<item> CALL FUNCTION 'RSAN_SYSTEM_PARAMETER_READ'</item>
<item> EXPORTING</item>
<item> i_name = 'rdisp/max_wprun_time'</item>
<item> IMPORTING</item>
<item> e_value = e_value</item>
<item> EXCEPTIONS</item>
<item> read_error = 0</item>
<item> OTHERS = 0.</item>
<item/>
<item> time_limit = e_value + e_value / 2.</item>
<item/>
<item>ENDMETHOD.</item>
</RESET_TIME>
<CHECK_TIME>
<item>METHOD check_time.</item>
<item> DATA:</item>
<item> diff TYPE i,</item>
<item> l_remaining_percent TYPE i,</item>
<item> current_time TYPE timestamp.</item>
<item/>
<item> CHECK NOT start_time_stamp IS INITIAL</item>
<item> AND NOT time_limit IS INITIAL.</item>
<item/>
<item> GET TIME STAMP FIELD current_time.</item>
<item> CHECK current_time > start_time_stamp.</item>
<item/>
<item> CALL FUNCTION 'SRET_TIME_DIFF_GET'</item>
<item> EXPORTING</item>
<item> utc_start = start_time_stamp</item>
<item> utc_end = current_time</item>
<item> IMPORTING</item>
<item> second = diff</item>
<item> EXCEPTIONS</item>
<item> paramerr = 0</item>
<item> OTHERS = 0.</item>
<item/>
<item> IF diff > time_limit.</item>
<item> CALL METHOD reset_time.</item>
<item/>
<item> l_remaining_percent = 100 - 100 * current_progress /

high_bound.</item>

     <item>    RAISE EVENT on_timeout</item>
<item> EXPORTING i_percent_remaining =

l_remaining_percent.</item>

     <item>  ENDIF.</item>
<item>ENDMETHOD.</item>
</CHECK_TIME>
<START_TIME>
<item>METHOD start_time.</item>
<item> CALL METHOD reset_time.</item>
<item>ENDMETHOD.</item>
</START_TIME>
<SET_STATUS_TEXT>
<item>METHOD set_status_text .</item>
<item> CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'</item>
<item> EXPORTING</item>
<item> text = i_status_text.</item>
<item>ENDMETHOD.</item>
</SET_STATUS_TEXT>
</METHOD_SOURCE>

</CLASS_ROOT>

最新文章

  1. 构建 Android 应用程序一定要绕过的 30 个坑
  2. DTD总结
  3. ArcEngine 栅格数据
  4. 浅谈javascript中事件冒泡与事件捕获
  5. jquery 监听input输入值事件
  6. Think PHP项目在阿里云的虚拟主机上部署
  7. 关于浏览器cookie的那些事儿
  8. SQL2008的数据更新跟踪测试 (监控数据表变化,可用于同步)
  9. C# mvc--ORM框架中EF的作用和特点
  10. Hadoop WritableComparable接口
  11. Android组件系列----BroadcastReceiver广播接收器
  12. hdoj 2546 饭卡(0-1背包)
  13. Best MVC Practices(最优的MVC布局)
  14. 【mp3】洗脑循环了!龙珠超 自在极意功 【究极の圣戦】串田アキラ 背景纯音乐
  15. Bellman-Ford 求含负权最短路
  16. eclipse 使 用Ctrl+鼠标左键进入mapper.xml文件的方法
  17. 无需密码通过scp命令+key的方式实现文件传输
  18. CentOS 7 rpm -i 时 警告warning: /var/tmp/rpm-tmp.z7O820: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY 解决方法
  19. 关于c++深拷贝与浅拷贝
  20. poi实现百万级数据导出

热门文章

  1. Transform.eulerAngles 欧拉角
  2. Android 软键盘的监听(监听高度,是否显示)
  3. 你真的了解装箱(Boxing)和拆箱(Unboxing)吗?
  4. sql server内置函数
  5. SQL中拆分字符串substr及统计字符出现频数replace用法实例讲解
  6. java检测http请求的ip地址 Java问题通用解决代码
  7. 转:使用rsync在linux(服务端)与windows(客户端)之间同步
  8. 将Latex tex文档转换成 word文档(下)
  9. Atitit.go语言golang语言的新的特性&#160;&#160;attilax总结
  10. 浅谈C/C++堆栈指引——C/C++堆栈