Build Range Table Using Functional Method Call
I saw this snippet in ABAP Development discussion. The code was given by Jānis B
I am posting it here as the original discussion is now rejected, probably because of being too basic.
This snippet uses a fancy combination of functional method call and singleton pattern to build range for DELETE..WHERE field IN <range> statement.
- *———————————————————————-*
- * CLASS zcl_pattern_range DEFINITION
- *———————————————————————-*
- *
- *———————————————————————-*
- CLASS zcl_pattern_range DEFINITION
- FINAL
- CREATE PRIVATE .
- PUBLIC SECTION.
- TYPES: rt_patterns TYPE RANGE OF string .
- TYPES: rs_pattern TYPE LINE OF rt_patterns .
- CLASS-METHODS get_instance
- RETURNING value(ro_instance) TYPE REF TO zcl_pattern_range.
- METHODS:
- get_exclude_rng
- RETURNING value(rt_exclude_patterns) TYPE rt_patterns ,
- get_include_rng
- RETURNING value(rt_include_patterns) TYPE rt_patterns .
- PROTECTED SECTION.
- PRIVATE SECTION.
- CLASS-DATA mo_instance TYPE REF TO zcl_pattern_range.
- METHODS get_range
- IMPORTING i_sign TYPE c
- RETURNING value(rt_patterns) TYPE rt_patterns .
- ENDCLASS. “zcl_pattern_range DEFINITION
- *———————————————————————-*
- * CLASS zcl_pattern_range IMPLEMENTATION
- *———————————————————————-*
- *
- *———————————————————————-*
- CLASS zcl_pattern_range IMPLEMENTATION.
- METHOD get_instance.
- IF mo_instance IS NOT BOUND .
- CREATE OBJECT mo_instance .
- ENDIF .
- ro_instance = mo_instance .
- ENDMETHOD. “get_instance
- METHOD get_range.
- DATA: ls_pattern TYPE rs_pattern .
- DATA: l_number TYPE i .
- REFRESH rt_patterns .
- ls_pattern–sign = i_sign .
- ls_pattern–option = ‘CP’ .
- WHILE l_number LE 9 .
- ls_pattern–low = l_number && ‘*’ .
- * ls_pattern-low = |{ l_number }| && ‘*’ .
- APPEND ls_pattern TO rt_patterns .
- ADD 1 TO l_number.
- ENDWHILE .
- ENDMETHOD. “get_range
- METHOD get_exclude_rng .
- REFRESH rt_exclude_patterns .
- rt_exclude_patterns = me->get_range( ‘E’ ).
- ENDMETHOD . “get_exclude_rng
- METHOD get_include_rng .
- REFRESH rt_include_patterns .
- rt_include_patterns = me->get_range( ‘I’ ).
- ENDMETHOD . “get_include_rng
- ENDCLASS. “zcl_pattern_range IMPLEMENTATION
- TYPES: BEGIN OF ts_string,
- string TYPE string,
- END OF ts_string .
- DATA: gs_string TYPE ts_string .
- DATA: gt_string TYPE STANDARD TABLE OF ts_string .
- START-OF-SELECTION .
- REFRESH gt_string .
- gs_string–string = ‘a12344’. APPEND gs_string TO gt_string.
- gs_string–string = ‘1234vb’. APPEND gs_string TO gt_string.
- gs_string–string = ‘c42456d44’. APPEND gs_string TO gt_string .
- DELETE gt_string WHERE
- string IN zcl_pattern_range=>get_instance( )->get_exclude_rng( ).
- BREAK-POINT .
- REFRESH gt_string .
- gs_string–string = ‘a12344’. APPEND gs_string TO gt_string.
- gs_string–string = ‘1234vb’. APPEND gs_string TO gt_string.
- gs_string–string = ‘c42456d44’. APPEND gs_string TO gt_string .
- DELETE gt_string WHERE
- string NOT IN zcl_pattern_range=>get_instance( )->get_include_rng( ).
/.
Be the first to leave a comment
You must be Logged on to comment or reply to a post.