0% found this document useful (0 votes)
483 views11 pages

SALV SAMPLE With Button

This document defines a local class called LCL_EASY_ALV that provides an easy way to implement ALV reports in ABAP. The class contains methods to set field properties, display the ALV, set sorting and layout, and add tooltips. It handles common ALV functionality to simplify report development.

Uploaded by

avijitkumaraich
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
483 views11 pages

SALV SAMPLE With Button

This document defines a local class called LCL_EASY_ALV that provides an easy way to implement ALV reports in ABAP. The class contains methods to set field properties, display the ALV, set sorting and layout, and add tooltips. It handles common ALV functionality to simplify report development.

Uploaded by

avijitkumaraich
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 11

* _______ _______ _______ _______ _______ _______ ______ _______ _______

______ _______
* | _ | _ | _ | | | _ | || _ | _ |
_ | | _ |
* | |_| | |_| | |_| | _ | | |_| | _ | |_| | |_| |
| || | |_| |
* | | | | |_| | | | | | | | |
|_||_| |
* | | _ || | ___| _| | |_| | | _ ||
__ | |
* | _ | |_| | _ | | | |_| _ | | _ | |_| |
| | | _ |
* |__| |__|_______|__| |__|___| |_______|__| |__|______||__| |__|_______|
___| |_|__| |__|
*
www.abapcadabra.com

*---------------------------------------------------------------------
* include : ZABAPCADABRA_EASY_ALV
* holding : Local LCL_EASY_ALV class definition & implementation
* title : Easy ALV through lcl_easy_alv
* functional area : Cross modules
* environment : 4.7
* program Function : This local class can be included in any ABAP report
* and supports easy access to the standard SAP ALV
* suite of functionality. It's a wrapper class that
* sweetens the implementation of ALV reports.
* Documentation : Search for "Easy ALV" on AbapcadabrA.com
* There are simple "to-go" examples on ALV matters such
* as Field colors, Icons, Respond to field clicks and
* much more - using this local class.
* Previous version : This is the initial version
* Developer name : Wim Maasdam
* Development date : 18/11/2015
* Version : 0.1
*---------------------------------------------------------------------

*---------------------------------------------------------------------
* C L A S S D E F I N I T I O N
*---------------------------------------------------------------------
CLASS lcl_easy_alv DEFINITION.

PUBLIC SECTION.
CLASS-DATA:
gw_colored_field type lvc_s_scol ##NEEDED.
DATA:
RF_SELECTIONS type ref to CL_SALV_SELECTIONS,
RF_DISPLAY_SETTINGS type ref to CL_SALV_DISPLAY_SETTINGS,
RF_COLUMNS_TABLE type ref to CL_SALV_COLUMNS_TABLE,
RF_COLUMN_TABLE type ref to CL_SALV_COLUMN_TABLE,
RF_FUNCTIONS_LIST type ref to CL_SALV_FUNCTIONS_LIST,
RF_FUNCTIONAL_SETTINGS type ref to CL_SALV_FUNCTIONAL_SETTINGS,
RF_SORTS type ref to CL_SALV_SORTS,
RF_LAYOUT type ref to CL_SALV_LAYOUT,
* Freely usable custom container: if your ALV lives in part of a screen
RF_custom_container type ref to cl_gui_custom_container.

METHODS:
SET_FIELD
IMPORTING
FIELDNAME type string
IS_KEY type boolean OPTIONAL
IS_HIDDEN type boolean OPTIONAL
IS_UNAVAILABLE type boolean OPTIONAL
IS_ICON type boolean OPTIONAL
IS_HOTSPOT type boolean OPTIONAL
IS_CHECKBOX type boolean OPTIONAL
IS_BUTTON type boolean OPTIONAL
IS_EXCEPTION type boolean OPTIONAL
TOOLTIP type any OPTIONAL
DESCRIPTION_OVERALL type any OPTIONAL
DESCRIPTION_SHORT type any OPTIONAL
DESCRIPTION_MEDIUM type any OPTIONAL
DESCRIPTION_LONG type any OPTIONAL
LEADING_ZERO type boolean OPTIONAL
ZERO_VALUES type boolean OPTIONAL
DDIC_REFERENCE type string OPTIONAL
OUTPUT_LENGTH type LVC_OUTLEN OPTIONAL
POSITION type I OPTIONAL
ALIGNMENT type I OPTIONAL
QUANTITY_COLUMN type LVC_QFNAME OPTIONAL
CURRENCY_COLUMN type LVC_QFNAME OPTIONAL
DECIMAL_PLACES type LVC_DECMLS OPTIONAL,
SET_ALV_FROM_TEMPLATE
IMPORTING
CONTAINER type ref to CL_GUI_CUSTOM_CONTAINER OPTIONAL
TITLE type LVC_TITLE OPTIONAL
MENU_REPORT type SYREPID OPTIONAL
MENU_PFSTATUS type SYPFKEY OPTIONAL
SKIP_VARIANT_SUPPORT type BOOLEAN DEFAULT abap_false
CHANGING
CONTENT type TABLE
SALV_TABLE type ref to CL_SALV_TABLE OPTIONAL,
DISPLAY
IMPORTING
TITLE type ANY OPTIONAL
REFRESH type BOOLEAN DEFAULT abap_false,
SET_SORT
IMPORTING
FIELDNAME type string
DESCENDING type boolean DEFAULT abap_false
SUBTOTAL type boolean DEFAULT abap_false,
SET_LAYOUT_PROTECTION
IMPORTING
VALUE type BOOLEAN DEFAULT abap_true,
SET_NO_BUTTONS,
SET_HEADER_LINE
IMPORTING
COL1 type any OPTIONAL
COL2 type any OPTIONAL
COL3 type any OPTIONAL
COL4 type any OPTIONAL
COL5 type any OPTIONAL
COL6 type any OPTIONAL
RESET_HEADER type boolean DEFAULT ABAP_FALSE
PREFERRED PARAMETER COL1
RETURNING VALUE(HEADER) TYPE REF TO CL_SALV_FORM_LAYOUT_GRID,
SET_FOOTER_LINE
IMPORTING
COL1 type any OPTIONAL
COL2 type any OPTIONAL
COL3 type any OPTIONAL
COL4 type any OPTIONAL
COL5 type any OPTIONAL
COL6 type any OPTIONAL
RESET_FOOTER type boolean DEFAULT ABAP_FALSE
WITH_GRID_LINES type boolean DEFAULT ABAP_FALSE
PREFERRED PARAMETER COL1
RETURNING VALUE(FOOTER) TYPE REF TO CL_SALV_FORM_LAYOUT_GRID,
ADD_GENERAL_TOOLTIP
IMPORTING
TYPE type SALV_DE_CONSTANT DEFAULT CL_SALV_TOOLTIP=>C_TYPE_ICON
VALUE type ANY
TOOLTIP type ANY OPTIONAL,
SET_SELECTION_MODE
IMPORTING
VALUE type I DEFAULT 0.

PROTECTED SECTION.
DATA: RF_ALV_TABLE type ref to CL_SALV_TABLE.

PRIVATE SECTION.
DATA:
RF_ALV_HEADER type ref to CL_SALV_FORM_LAYOUT_GRID,
VA_ALV_HEADER_LINE type SYINDEX,
RF_ALV_FOOTER type ref to CL_SALV_FORM_LAYOUT_GRID,
VA_ALV_FOOTER_LINE type SYINDEX,
RF_TABLE_CONTENT type ref to DATA ##NEEDED.

ENDCLASS.

*---------------------------------------------------------------------
* C L A S S I M P L E M E N T A T I O N
*---------------------------------------------------------------------
CLASS lcl_easy_alv IMPLEMENTATION.

METHOD SET_FIELD .
* This method allows changes to the columns on the ALV report. An overview:
* IS_KEY - determines whether the field is a key field (placed up front)
* IS_HIDDEN - the field is not on the initial display, but the end user can
* add it to the report
* IS_UNAVAILABLE - the field is a technical field, not on display and can
* also not be added to the report
* TOOLTIP - bit of information that shows up when the mouse is hovering
over
* the column header name
* DESCRIPTION_OVERALL - the description that will be used for the short,
* medium as well as the long description. Please note: these descriptions
* are defaulted from the data dictionary, thus the description should
only
* be changed if it does not show correctly on the ALV report.
* DESCRIPTION_SHORT / _MEDIUM / _LONG - individual descriptions
* LEADING_ZERO - to make the report show leading zero's for the column
* ZERO_VALUES - for numeric columns: indicate that 0 should not be
displayed
* DDIC_REFERENCE - change the description and other properties of a field
* by setting the DDIC_REFERENCE to e.g. 'MARA-MATNR' (tablename hyphen
* fieldname).
* IS_ICON - the field holds an ICON code such as @AB@ which is recognized
* by the ALV. This setting allows usage of tooltip functionality on
* the level of reported lines.
* IS_HOTSPOT - the field (whole column) value is underlined and the report
* will respond to a a single click
* IS_EXCEPTION - the field holds a code for the exception or status setup
* which is defaulted to group 1 (traffic light icons, value 0 to 3).
Tooltip
* texts can also be made available for this.
* POSITION - when a column is not in the right location it can be
* relocated by setting the column position.
DATA: lva_scrtext_s TYPE scrtext_s,
lva_scrtext_m TYPE scrtext_m,
lva_scrtext_l TYPE scrtext_l,
lva_fieldname TYPE lvc_fname,
lva_tooltip TYPE lvc_tip,
lwa_ddic_reference TYPE salv_s_ddic_reference,
lva_hidden_flag TYPE sap_bool.

CHECK me->rf_alv_table IS BOUND.

TRY.
lva_fieldname = fieldname.
SET LOCALE LANGUAGE sy-langu.
TRANSLATE lva_fieldname TO UPPER CASE.

IF position IS SUPPLIED.
rf_columns_table->set_column_position( columnname = lva_fieldname
position = position ).
ENDIF.
rf_column_table ?= rf_columns_table->get_column( lva_fieldname ).
IF is_hidden IS SUPPLIED.
IF ( is_hidden = abap_true ).
lva_hidden_flag = abap_false.
ELSE.
lva_hidden_flag = abap_true.
ENDIF.
rf_column_table->set_visible( lva_hidden_flag ).
ENDIF.
IF is_key IS SUPPLIED.
rf_column_table->set_key( is_key ).
ENDIF.
IF is_icon IS SUPPLIED.
rf_column_table->set_icon( is_icon ).
ENDIF.
IF is_hotspot IS SUPPLIED.
IF is_hotspot = abap_true.
rf_column_table->set_cell_type( if_salv_c_cell_type=>hotspot ).
ELSE.
rf_column_table->set_cell_type( if_salv_c_cell_type=>text ).
ENDIF.
ENDIF.
IF is_checkbox IS SUPPLIED.
IF is_checkbox = abap_true.
rf_column_table->set_cell_type( if_salv_c_cell_type=>checkbox ).
ELSE.
rf_column_table->set_cell_type( if_salv_c_cell_type=>text ).
ENDIF.
ENDIF.
IF is_button IS SUPPLIED.
IF is_button = abap_true.
rf_column_table->set_cell_type( if_salv_c_cell_type=>button ).
ENDIF.
ENDIF.
IF is_exception IS SUPPLIED.
rf_columns_table->set_exception_column( value = lva_fieldname group
= '1' ).
ENDIF.

CLEAR: lva_scrtext_s, lva_scrtext_m, lva_scrtext_l.


IF description_overall IS SUPPLIED.
lva_scrtext_s = description_overall.
lva_scrtext_m = description_overall.
lva_scrtext_l = description_overall.
ENDIF.
IF description_short IS SUPPLIED.
lva_scrtext_s = description_short.
ENDIF.
IF description_medium IS SUPPLIED.
lva_scrtext_m = description_medium.
ENDIF.
IF description_long IS SUPPLIED.
lva_scrtext_l = description_long.
ENDIF.
IF NOT lva_scrtext_s IS INITIAL.
rf_column_table->set_short_text( lva_scrtext_s ).
ENDIF.
IF NOT lva_scrtext_m IS INITIAL.
rf_column_table->set_medium_text( lva_scrtext_m ).
ENDIF.
IF NOT lva_scrtext_l IS INITIAL.
rf_column_table->set_long_text( lva_scrtext_l ).
ENDIF.
IF tooltip <> space.
lva_tooltip = tooltip.
rf_column_table->set_tooltip( lva_tooltip ).
ENDIF.
IF leading_zero <> space.
rf_column_table->set_leading_zero( abap_true ).
ENDIF.
IF zero_values is supplied.
rf_column_table->set_zero( zero_values ).
ENDIF.
IF ddic_reference IS SUPPLIED.
SPLIT ddic_reference AT '-' INTO
lwa_ddic_reference-table lwa_ddic_reference-field.
rf_column_table->set_ddic_reference( lwa_ddic_reference ).
ENDIF.
IF quantity_column IS SUPPLIED.
rf_column_table->set_quantity_column( quantity_column ).

ENDIF.

IF currency_column IS SUPPLIED.
rf_column_table->set_currency_column( currency_column ).

ENDIF.

IF is_unavailable IS SUPPLIED.
rf_column_table->set_technical( is_unavailable ).
ELSE.
* Default setting: the field should be marked as non technical
rf_column_table->set_technical( abap_false ).
ENDIF.
IF alignment IS SUPPLIED.
rf_column_table->set_alignment( alignment ).
ENDIF.
IF output_length IS SUPPLIED.
rf_column_table->set_output_length( output_length ).
ENDIF.
if decimal_places IS SUPPLIED.
rf_column_table->set_decimals( decimal_places ).
endif.

CATCH cx_salv_not_found
cx_salv_data_error.
ENDTRY.

ENDMETHOD.

method SET_ALV_FROM_TEMPLATE .
* The ALV report is linked to a (single) internal table with data
* which is linked to the ALV class via this method. When the data
* table is altered after linking it to the class, the changes are
* picked up automatically (the display( ) method has a refresh
* option).
data: lrf_exception type ref to cx_salv_msg ##NEEDED,
lva_container_name type string,
lva_layout_key type salv_s_layout_key.

* Creates an instance of the ALV table object


try.
if container is bound.
lva_container_name = container->get_name( ).
cl_salv_table=>factory( exporting r_container = container
container_name =
lva_container_name
importing r_salv_table = rf_alv_table
changing t_table = content ).
else.
cl_salv_table=>factory( importing r_salv_table = rf_alv_table
changing t_table = content ).
endif.
* Hang on to a reference of the data, used in method DOWNLOAD.
get reference of content into me->RF_TABLE_CONTENT.

catch cx_salv_msg into lrf_exception.


* The wrapper class does not raise the exception, to avoid having to
* catch it.
endtry.

* Set up General Display settings - striped display


rf_display_settings = rf_alv_table->get_display_settings( ).
rf_display_settings->set_striped_pattern( abap_true ).
if not title is initial.
rf_display_settings->set_list_header( title ).
endif.

* Set columns settings, - optimize width - remove column MANDT


rf_columns_table = rf_alv_table->get_columns( ).
rf_columns_table->set_optimize( abap_true ).

* Remove the MANDT field from the ALV reporting output


try.
rf_column_table ?= rf_columns_table->get_column( 'MANDT' ).
rf_column_table->set_technical( abap_true ).
catch cx_salv_not_found.
endtry.

* Set the (fullscreen mode only) menu


if not menu_report is initial and not menu_pfstatus is initial.
* Note - the user interface MAIN_MENU on this program was copied from
* SAPLSLVC_FULLSCREEN / STANDARD_FULLSCREEN. If you are using the class
* in non full-screen mode, a function can be added to the toolbar with
* ADD_FUNCTION (class CL_SALV_FUNCTIONS).
rf_alv_table->set_screen_status( report = menu_report pfstatus =
menu_pfstatus ).
endif.

* Set the functions


rf_functions_list = rf_alv_table->get_functions( ).
rf_functions_list->set_all( ).

* Layout's are available for the end user to control


if skip_variant_support = abap_false.
rf_layout = rf_alv_table->get_layout( ).
lva_layout_key-report = sy-cprog.
lva_layout_key-logical_group = 'BREZ'.
* The key for layouts needs to be set to enable it's functionality.
rf_layout->set_key( lva_layout_key ).
rf_layout->set_default( abap_true ).
rf_layout-
>set_save_restriction( if_salv_c_layout=>RESTRICT_USER_DEPENDANT ).
endif.

salv_table = rf_alv_table.

endmethod.

method DISPLAY .
data: lv_title type LVC_TITLE.
* When the ALV report is ready to be displayed, this method will
* compose the ALV and display it full screen.
check me->rf_alv_table is bound.

if rf_alv_header is bound.
rf_alv_table->set_top_of_list( rf_alv_header ).
rf_alv_table->set_top_of_list_print( rf_alv_header ).
endif.
if rf_alv_footer is bound.
rf_alv_table->set_end_of_list( rf_alv_footer ).
rf_alv_table->set_end_of_list_print( rf_alv_footer ).
endif.

if not title is initial.


lv_title = title.
rf_display_settings->set_list_header( lv_title ).
endif.

if refresh = abap_true.
rf_alv_table->refresh( ).
else.
rf_alv_table->display( ).
endif.

endmethod.

method SET_SORT .
* Set a sort field, also allows subtotalling to be switched on. The
* latter will only have effect when set_aggregate( ) is also used.
* Add several sort fields by calling this method several times.
data: lva_fieldname type lvc_fname,
lva_sort_sequence TYPE SALV_DE_SORT_SEQUENCE.

check me->rf_alv_table is bound.


lva_fieldname = fieldname.
if rf_sorts is not bound.
rf_sorts = rf_alv_table->get_sorts( ).
endif.
try.
if descending = abap_false.
lva_sort_sequence = IF_SALV_C_SORT=>SORT_UP.
else.
lva_sort_sequence = IF_SALV_C_SORT=>SORT_DOWN.
endif.

rf_sorts->add_sort(
columnname = lva_fieldname
subtotal = subtotal
sequence = lva_sort_sequence ).
set_field( fieldname ).
catch cx_salv_not_found
cx_salv_existing
cx_salv_data_error.
endtry.

endmethod.

method SET_LAYOUT_PROTECTION .
* In some reports the sequence in which the records are displayed should
* not be changed. This method can be used to remove the sort and filter
* buttons from available ALV functions.
data: lva_not_value type sap_bool.

check me->rf_alv_table is bound.


if value = abap_true.
lva_not_value = abap_false.
else.
lva_not_value = abap_true.
endif.
rf_functions_list->set_group_sort( lva_not_value ).
rf_functions_list->set_group_filter( lva_not_value ).

endmethod.

method SET_NO_BUTTONS .

data: lrf_functions_list type ref to cl_salv_functions_list.


* Remove menu from the detail ALV only =>
lrf_functions_list = me->RF_ALV_TABLE->get_functions( ).
lrf_functions_list->set_all( abap_false ).

endmethod.

method SET_HEADER_LINE .
* The ALV report supports headers, a block of text that is presented on
* every ALV screen. The block consists of several lines and each line
* has up to 6 columns. This method add's a line to the header.
* NOTE: headers and footers do not work in custom controls (dynpro)
data: lrf_flow type ref to cl_salv_form_layout_flow.

check me->rf_alv_table is bound.


if reset_header = abap_true.
clear rf_alv_header.
clear va_alv_header_line.
endif.
if rf_alv_header is not bound.
create object rf_alv_header.
endif.
add 1 to va_alv_header_line.
if col1 is supplied.
lrf_flow = rf_alv_header->create_flow( row = va_alv_header_line column
= 1 ).
lrf_flow->create_text( text = col1 ).
endif.
if col2 is supplied.
lrf_flow = rf_alv_header->create_flow( row = va_alv_header_line column
= 2 ).
lrf_flow->create_text( text = col2 ).
endif.
if col3 is supplied.
lrf_flow = rf_alv_header->create_flow( row = va_alv_header_line column
= 3 ).
lrf_flow->create_text( text = col3 ).
endif.
if col4 is supplied.
lrf_flow = rf_alv_header->create_flow( row = va_alv_header_line column
= 4 ).
lrf_flow->create_text( text = col4 ).
endif.
if col5 is supplied.
lrf_flow = rf_alv_header->create_flow( row = va_alv_header_line column
= 5 ).
lrf_flow->create_text( text = col5 ).
endif.
if col6 is supplied.
lrf_flow = rf_alv_header->create_flow( row = va_alv_header_line column
= 6 ).
lrf_flow->create_text( text = col6 ).
endif.

header = rf_alv_header.

endmethod.

method SET_FOOTER_LINE .
* As with the header - this method adds a line to the footer of the ALV
* Please note: if the value is numeric, it will be displayed right-aligned.
data: lrf_text type ref to cl_salv_form_text,
lrf_layout_data type ref to cl_salv_form_layout_data_grid,
lrf_str type string.

check me->rf_alv_table is bound.


if reset_footer = abap_true.
clear rf_alv_footer.
clear va_alv_footer_line.
endif.
if rf_alv_footer is not bound.
create object rf_alv_footer.
if with_grid_lines = abap_true.
rf_alv_footer->set_grid_lines( value =
if_salv_form_c_grid_lines=>lines ).
endif.
endif.
add 1 to va_alv_footer_line.
if col1 is supplied.
* lrf_grid = rf_alv_footer->create_grid( row = va_alv_footer_line
column = 1 ).
lrf_text = rf_alv_footer->create_text( text = col1 row =
va_alv_footer_line column = 1 ).
move col1 to lrf_str.
if ( lrf_str co '01234567890., ' ).
lrf_layout_data ?= lrf_text->get_layout_data( ).
lrf_layout_data->set_h_align( if_salv_form_c_h_align=>right ).
endif.
endif.
if col2 is supplied.
lrf_text = rf_alv_footer->create_text( text = col2 row =
va_alv_footer_line column = 2 ).
move col2 to lrf_str.
if ( lrf_str co '01234567890., ' ).
lrf_layout_data ?= lrf_text->get_layout_data( ).
lrf_layout_data->set_h_align( if_salv_form_c_h_align=>right ).
endif.
endif.
if col3 is supplied.
rf_alv_footer->create_text( text = col3 row = va_alv_footer_line
column = 3 ).
move col3 to lrf_str.
if ( lrf_str co '01234567890., ' ).
lrf_layout_data ?= lrf_text->get_layout_data( ).
lrf_layout_data->set_h_align( if_salv_form_c_h_align=>right ).
endif.
endif.
if col4 is supplied.
rf_alv_footer->create_text( text = col4 row = va_alv_footer_line
column = 4 ).
move col4 to lrf_str.
if ( lrf_str co '01234567890., ' ).
lrf_layout_data ?= lrf_text->get_layout_data( ).
lrf_layout_data->set_h_align( if_salv_form_c_h_align=>right ).
endif.
endif.
if col5 is supplied.
rf_alv_footer->create_text( text = col5 row = va_alv_footer_line
column = 5 ).
move col5 to lrf_str.
if ( lrf_str co '01234567890., ' ).
lrf_layout_data ?= lrf_text->get_layout_data( ).
lrf_layout_data->set_h_align( if_salv_form_c_h_align=>right ).
endif.
endif.
if col6 is supplied.
rf_alv_footer->create_text( text = col6 row = va_alv_footer_line
column = 6 ).
move col6 to lrf_str.
if ( lrf_str co '01234567890., ' ).
lrf_layout_data ?= lrf_text->get_layout_data( ).
lrf_layout_data->set_h_align( if_salv_form_c_h_align=>right ).
endif.
endif.
footer = rf_alv_footer.

endmethod.

method ADD_GENERAL_TOOLTIP .
data: lrf_tooltips type ref to cl_salv_tooltips,
lva_value type lvc_value,
lva_tooltip type lvc_tip.

if rf_functional_settings is not bound.


rf_functional_settings = rf_alv_table->get_functional_settings( ).
endif.
lrf_tooltips = rf_functional_settings->get_tooltips( ).
lva_value = value.
lva_tooltip = tooltip.
try.
lrf_tooltips->add_tooltip( type = type value = lva_value tooltip =
lva_tooltip ).
catch cx_salv_existing.
endtry.

endmethod.

method SET_SELECTION_MODE .
* Protected method: call from local class to use. This method
* can be used to control how line/column selections should work.
* Check interface IF_SALV_C_SELECTION_MODE for possible values:
* 0=No selection, 1=Individual selection, 2=Mult.selection
* 3= Cell selection and 4=Line and Column Selection
check me->rf_alv_table is bound.
if rf_selections is not bound.
rf_selections = rf_alv_table->get_selections( ).
endif.
rf_selections->set_selection_mode( value ).

endmethod.

ENDCLASS.

* _______ _______ _______ _______ _______ _______ ______ _______ _______


______ _______
* | _ | _ | _ | | | _ | || _ | _ |
_ | | _ |
* | |_| | |_| | |_| | _ | | |_| | _ | |_| | |_| |
| || | |_| |
* | | | | |_| | | | | | | | |
|_||_| |
* | | _ || | ___| _| | |_| | | _ ||
__ | |
* | _ | |_| | _ | | | |_| _ | | _ | |_| |
| | | _ |
* |__| |__|_______|__| |__|___| |_______|__| |__|______||__| |__|_______|
___| |_|__| |__|
*
www.abapcadabra.com

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy