
**-Get the Filter
lo_filter = io_tech_request_context->get_filter( ).
*--Build the Filters
mr_fc_helper->get_filters( it_filter = io_tech_request_context->get_filter( )->get_filter_select_options( )
io_filter = lo_filter ).
METHOD build_filters.
*--ANLZ
APPEND VALUE #( field = 'BUKRS' table = mc_anlz group = 1 ) TO mt_filter_grp.
APPEND VALUE #( field = 'ANLN1' table = mc_anlz group = 1 ) TO mt_filter_grp.
APPEND VALUE #( field = 'ANLN2' table = mc_anlz group = 1 ) TO mt_filter_grp.
*-- ANLA
APPEND VALUE #( field = 'ANLKL' table = mc_anla group = 1 ) TO mt_filter_grp.
..
.......
...
*--Proj
APPEND VALUE #( field = 'POSID' table = mc_prps group = 2 ) TO mt_filter_grp.
ENDMETHOD.
METHOD get_filters.
DATA : ls_so TYPE /iwbep/s_cod_select_option,
lt_so TYPE /iwbep/t_cod_select_options,
ls_convert TYPE /iwbep/s_mgw_select_option.
*-- Build Dyanamic Filters
build_filters( ).
LOOP AT it_filter ASSIGNING FIELD-SYMBOL(<fs_filters>).
REFRESH lt_so .
*-- Select Filter groups
READ TABLE mt_filter_grp ASSIGNING FIELD-SYMBOL(<fs_flt_grp>)
WITH KEY field = <fs_filters>-property.
IF sy-subrc IS INITIAL.
REFRESH lt_so .
CLEAR ls_convert.
ls_convert = <fs_filters>.
*-- Dyanamic Conversion Exits
CALL METHOD me->convert_select_options
EXPORTING
io_filter = io_filter
CHANGING
ct_select_option = ls_convert.
*-- Convert the Select Option
lt_so = ls_convert-select_options.
IF <fs_flt_grp>-group EQ 1.
CALL METHOD me->build_where_statement_range
EXPORTING
is_field = <fs_flt_grp>-field
it_range = lt_so
is_table = <fs_flt_grp>-table
CHANGING
cs_where = ms_assets_all.
ELSEIF <fs_flt_grp>-group EQ 2.
CALL METHOD me->build_where_statement_range
EXPORTING
is_field = <fs_flt_grp>-field
it_range = lt_so
is_table = <fs_flt_grp>-table
CHANGING
cs_where = ms_proj_where.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
*-- Get Entity properties for Conversion Exit
lo_facade ?= /iwbep/if_mgw_conv_srv_runtime~get_dp_facade( ).
lo_read_model ?= lo_facade->/iwbep/if_mgw_dp_int_facade~get_model( ).
lr_entity_type ?= lo_read_model->/iwbep/if_mgw_odata_re_model~get_entity_type( mr_fc_helper->mc_ent_type_ast ).
mr_fc_helper->mt_properties = lr_entity_type->/iwbep/if_mgw_odata_fw_etype~get_properties( ).
METHOD convert_select_options.
DATA: lv_no_conversion TYPE abap_bool,
ls_source_option TYPE /iwbep/s_cod_select_option,
ls_odata_property TYPE /iwbep/if_mgw_odata_fw_prop=>ty_s_mgw_odata_property.
DATA: lv_conv_exit TYPE /iwbep/if_mgw_med_odata_types=>ty_e_med_conv_exit,
lv_function TYPE string,
lv_round_sign TYPE char1,
lr_data TYPE REF TO data.
FIELD-SYMBOLS: <value> TYPE any.
*-- Simple Type Odata Property lesen
IF lv_max_level = 1.
lv_abap_name = iv_property_name.
READ TABLE mt_properties INTO ls_odata_property
WITH KEY technical_name = lv_abap_name.
EXIT.
ENDIF.
IF ls_odata_property IS INITIAL. EXIT. ENDIF.
*-- No conversion prüfen
lv_no_conversion = ls_odata_property-property->get_no_conversion( ).
* Convert LOW and HIGH Values
LOOP AT ct_select_option-select_options ASSIGNING FIELD-SYMBOL(<fs_source_option>).
IF lv_no_conversion IS INITIAL.
lv_conv_exit = ls_odata_property-property->get_conversion_exit( ).
IF lv_conv_exit IS NOT INITIAL AND <fs_source_option>-low IS NOT INITIAL.
*-- Dynamic Output
CREATE DATA lr_data TYPE (ct_select_option-property).
ASSIGN lr_data->* TO <value>.
lv_round_sign = ls_odata_property-property->get_round_sign( ).
*-- Exit Aufrufen
CONCATENATE 'CONVERSION_EXIT_' lv_conv_exit '_INPUT' INTO lv_function.
CALL FUNCTION lv_function
EXPORTING
input = <fs_source_option>-low
* unit = ls_unit_code-value_iso
round_sign = lv_round_sign
IMPORTING
output = <value>.
<fs_source_option>-low = <value>.
ENDIF.
IF lv_conv_exit IS NOT INITIAL AND <fs_source_option>-high IS NOT INITIAL.
lv_round_sign = ls_odata_property-property->get_round_sign( ).
*-- Exit Aufrufen
CONCATENATE 'CONVERSION_EXIT_' lv_conv_exit '_INPUT' INTO lv_function.
CALL FUNCTION lv_function
EXPORTING
input = <fs_source_option>-high
round_sign = lv_round_sign
IMPORTING
output = <value>.
<fs_source_option>-high = <value>.
ENDIF.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD build_where_statement_range.
*----------------------------------------------------------------------*
CONSTANTS : lc_and(3) TYPE c VALUE 'AND'.
DATA: lr_tab_descr TYPE REF TO cl_abap_tabledescr,
lr_str_descr TYPE REF TO cl_abap_structdescr,
lt_f4_selopt TYPE STANDARD TABLE OF ddshselopt.
DATA: lref_rt_tab TYPE REF TO data,
lref_rt_struc TYPE REF TO data.
DATA: ls_where TYPE string,
ls_where_f4 TYPE string,
lt_range TYPE rs_t_rscedst,
ls_range TYPE rscedst.
FIELD-SYMBOLS: <fst_data> TYPE STANDARD TABLE,
<fs_data> TYPE any.
*--------------------------------------------------------------------*
lr_tab_descr ?= cl_abap_tabledescr=>describe_by_data( it_range ).
lr_str_descr ?= lr_tab_descr->get_table_line_type( ).
CREATE DATA lref_rt_tab TYPE HANDLE lr_tab_descr.
CREATE DATA lref_rt_struc TYPE HANDLE lr_str_descr.
ASSIGN lref_rt_tab->* TO <fst_data>.
ASSIGN lref_rt_struc->* TO <fs_data>.
<fst_data>[] = it_range[].
LOOP AT <fst_data> ASSIGNING <fs_data>.
ls_range-fnam = is_field.
MOVE-CORRESPONDING <fs_data> TO ls_range.
APPEND ls_range TO lt_range.
ENDLOOP.
CLEAR : ls_where_f4,ls_where_f4.
*__ Pattern _________________________________________________________
LOOP AT lt_range ASSIGNING FIELD-SYMBOL(<ls_range>).
APPEND VALUE #( shlpname = is_table
shlpfield = is_field
sign = <ls_range>-sign
option = <ls_range>-option
low = <ls_range>-low
high = <ls_range>-high )
TO lt_f4_selopt.
IF is_table IS NOT INITIAL.
CALL FUNCTION 'F4_CONV_SELOPT_TO_WHERECLAUSE'
EXPORTING
gen_alias_names = abap_true
IMPORTING
where_clause = ls_where
TABLES
selopt_tab = lt_f4_selopt.
ELSE.
CALL FUNCTION 'F4_CONV_SELOPT_TO_WHERECLAUSE'
EXPORTING
gen_alias_names = abap_false
IMPORTING
where_clause = ls_where
TABLES
selopt_tab = lt_f4_selopt.
ENDIF.
ENDLOOP.
IF cs_where IS NOT INITIAL.
CONCATENATE cs_where lc_and ls_where INTO cs_where SEPARATED BY space.
ELSE.
cs_where = ls_where.
ENDIF.
ENDMETHOD.
*--ANLZ,ANLA,ANLU Inner Join
SELECT anlz~bukrs anlz~anln1 anlz~anln2
*-- ANLA anla~anlkl anla~erdat
FROM anlz AS anlz
INNER JOIN anla AS anla
ON anla~bukrs = anlz~bukrs
AND anla~anln1 = anlz~anln1
AND anla~anln2 = anlz~anln2
INTO TABLE mt_Asset
WHERE (ms_assets_all).
REPLACE ALL OCCURRENCES OF 'LIKE' IN ms_change_hist WITH 'CP'.
REPLACE ALL OCCURRENCES OF REGEX '[[%punct%]' IN ms_change_hist WITH '*'.
LOOP AT lt_table ASSIGNING FIELD-SYMBOL(<ls_table>) WHERE (ms_change_hist).
ENDLOOP.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
9 | |
7 | |
7 | |
7 | |
6 | |
5 | |
5 | |
5 | |
5 | |
5 |