Skip to content

Fix for issue #8 #9

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Mar 13, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 19 additions & 18 deletions src/cross/zif_dbbr_ty_global.intf.abap
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,24 @@ INTERFACE zif_dbbr_ty_global

TYPES:
BEGIN OF ty_sel_ctrl_serialized,
entity_id TYPE zsat_entity_id,
entity_id_raw TYPE zsat_entity_id_raw,
entity_type TYPE zsat_entity_type,
navigation_breadcrumbs TYPE string_table,
navigation_count TYPE int1,
selection_fields TYPE zdbbr_selfield_itab,
selection_fields_multi TYPE zdbbr_selfield_itab,
selection_fields_or TYPE zdbbr_or_seltab_itab,
technical_info TYPE zdbbr_tech_info,
tabfields_data TYPE zdbbr_tabfield_list_data,
tabfields_all_data TYPE zdbbr_tabfield_list_data,
table_to_alias_map TYPE zsat_table_to_alias_map_itab,
join_definition TYPE zdbbr_join_data,
join_def TYPE zdbbr_join_def,
navigation_info TYPE zsat_cds_association,
source_entity_id TYPE zsat_entity_id,
source_entity_where_cond TYPE string_table,
source_entity_param_values type zif_sat_ty_global=>ty_t_cds_param_value,
entity_id TYPE zsat_entity_id,
entity_id_raw TYPE zsat_entity_id_raw,
entity_type TYPE zsat_entity_type,
navigation_breadcrumbs TYPE string_table,
navigation_count TYPE int1,
selection_fields TYPE zdbbr_selfield_itab,
selection_fields_multi TYPE zdbbr_selfield_itab,
selection_fields_or TYPE zdbbr_or_seltab_itab,
technical_info TYPE zdbbr_tech_info,
tabfields_data TYPE zdbbr_tabfield_list_data,
tabfields_all_data TYPE zdbbr_tabfield_list_data,
table_to_alias_map TYPE zsat_table_to_alias_map_itab,
join_definition TYPE zdbbr_join_data,
join_def TYPE zdbbr_join_def,
navigation_info TYPE zsat_cds_association,
source_entity_id TYPE zsat_entity_id,
source_entity_where_cond TYPE string_table,
source_entity_params TYPE string,
entity_params TYPE string,
END OF ty_sel_ctrl_serialized.
ENDINTERFACE.
83 changes: 77 additions & 6 deletions src/ui/util/zcl_dbbr_cds_navigator.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ CLASS zcl_dbbr_cds_navigator DEFINITION
DATA mr_t_for_all_data TYPE REF TO data .
DATA mt_nav_breadcrumbs TYPE string_table .
DATA mv_nav_count TYPE i .
DATA mt_param_values TYPE zif_sat_ty_global=>ty_t_cds_param_value.
DATA: mt_where TYPE string_table.
DATA mv_source_params TYPE string.
DATA mv_params TYPE string.
DATA mt_where TYPE string_table.

METHODS create_output_fields .
METHODS export_data_to_memory .
Expand All @@ -39,7 +40,32 @@ CLASS zcl_dbbr_cds_navigator DEFINITION
!it_nav_breadcrumbs TYPE string_table
it_param_values TYPE zif_sat_ty_global=>ty_t_cds_param_value OPTIONAL
!iv_nav_count TYPE i .
METHODS handle_messages .
METHODS handle_messages.

"! <p class="shorttext synchronized" lang="en">Determine Parameter String</p>
"!
"! @parameter it_params | <p class="shorttext synchronized" lang="en">List of CDS parameters</p>
"! @parameter iv_cds_view_name | <p class="shorttext synchronized" lang="en">CDS view name</p>
"! @parameter io_tabfields | <p class="shorttext synchronized" lang="en">Table fields</p>
METHODS determine_param_string
IMPORTING
it_params TYPE zif_sat_ty_global=>ty_t_cds_parameter
iv_cds_view_name TYPE zsat_cds_view_name
io_tabfields TYPE REF TO zcl_dbbr_tabfield_list.

"! <p class="shorttext synchronized" lang="en">Request parameter value input</p>
"!
"! @parameter it_params | <p class="shorttext synchronized" lang="en">List of parameters</p>
"! @parameter iv_cds_view_name | <p class="shorttext synchronized" lang="en">CDS view name</p>
"! @parameter io_tabfields | <p class="shorttext synchronized" lang="en">Table fields</p>
"! @parameter rt_param_values | <p class="shorttext synchronized" lang="en">List of parameter/value</p>
METHODS request_param_values
IMPORTING
it_params TYPE zif_sat_ty_global=>ty_t_cds_parameter
iv_cds_view_name TYPE zsat_cds_view_name
io_tabfields TYPE REF TO zcl_dbbr_tabfield_list
RETURNING
VALUE(rt_param_values) TYPE zif_sat_ty_global=>ty_t_cds_param_value.
ENDCLASS.


Expand All @@ -54,7 +80,9 @@ CLASS zcl_dbbr_cds_navigator IMPLEMENTATION.
mr_source_cds_view = ir_source_cds_view.
mr_source_tabfields = ir_source_tabfields.
mt_nav_breadcrumbs = it_nav_breadcrumbs.
mt_param_values = it_param_values.
mv_source_params = zcl_dbbr_cds_param_util=>build_param_string(
iv_param_indentation = strlen( ir_source_cds_view->mv_view_name )
it_param_values = it_param_values ).
ms_tech_info = is_tech_info.
mv_nav_count = iv_nav_count.
ENDMETHOD.
Expand Down Expand Up @@ -85,6 +113,12 @@ CLASS zcl_dbbr_cds_navigator IMPLEMENTATION.
if_is_primary = abap_true
).

IF lr_target_cds->has_parameters( ).
determine_param_string( iv_cds_view_name = ms_association-ref_cds_view
io_tabfields = mr_tabfields
it_params = lr_target_cds->get_parameters( ) ).
ENDIF.

WHEN zif_sat_c_cds_assoc_type=>table OR
zif_sat_c_cds_assoc_type=>view.

Expand Down Expand Up @@ -120,6 +154,7 @@ CLASS zcl_dbbr_cds_navigator IMPLEMENTATION.
DATA(ls_controller_data) = VALUE zif_dbbr_ty_global=>ty_sel_ctrl_serialized(
entity_id = ms_association-ref_cds_view
entity_type = mv_entity_type
entity_params = mv_params
technical_info = ms_tech_info
tabfields_data = ls_tabfield_data
tabfields_all_data = ls_tabfield_data
Expand All @@ -128,7 +163,8 @@ CLASS zcl_dbbr_cds_navigator IMPLEMENTATION.
navigation_count = mv_nav_count + 1
source_entity_id = mr_source_cds_view->get_header( )-entityname
source_entity_where_cond = mt_where
source_entity_param_values = mt_param_values
source_entity_params = mv_source_params

).

lv_mem_id = zif_dbbr_c_report_id=>main && sy-uname.
Expand Down Expand Up @@ -184,7 +220,7 @@ CLASS zcl_dbbr_cds_navigator IMPLEMENTATION.
CHECK <ls_target_key_field> IS ASSIGNED.

lt_cond_tab = VALUE #(
( sign = 'I' option = zif_sat_c_options=>is_not_null sqlfieldname = |\\{ ms_association-raw_name }-{ <ls_target_key_field>-fieldname_raw }| )
( sign = 'I' option = zif_sat_c_options=>is_not_null sqlfieldname = |\\{ ms_association-raw_name }{ mv_params }-{ <ls_target_key_field>-fieldname_raw }| )
).
DATA(lt_not_null_cond) = VALUE zif_sat_ty_global=>ty_t_or_seltab_sql( ( values = lt_cond_tab ) ).

Expand Down Expand Up @@ -247,4 +283,39 @@ CLASS zcl_dbbr_cds_navigator IMPLEMENTATION.
*... check if there was an error message
handle_messages( ).
ENDMETHOD.

METHOD request_param_values.

DATA(lo_custom_f4_map) = NEW zcl_dbbr_custom_f4_map( ).

lo_custom_f4_map->read_custom_f4_definitions( iv_cds_view_name ).
lo_custom_f4_map->read_same_type_custom_f4_defs( ).

*... create parameters
zcl_dbbr_cds_tabfield_util=>add_parameters(
ir_tabfield_list = io_tabfields
io_custom_f4_map = lo_custom_f4_map
it_parameters = it_params ).

DATA(lo_param_popup) = NEW zcl_dbbr_cds_param_popup(
io_tabfields = io_tabfields
iv_cds_view_name = iv_cds_view_name ).

lo_param_popup->show( ).
rt_param_values = lo_param_popup->get_param_values( ).

ENDMETHOD.

METHOD determine_param_string.

mv_params = zcl_dbbr_cds_param_util=>build_param_string(
iv_param_indentation = strlen( iv_cds_view_name )
if_sep_param_by_newline = abap_false
it_param_values = request_param_values(
it_params = it_params
iv_cds_view_name = iv_cds_view_name
io_tabfields = io_tabfields ) ).

ENDMETHOD.

ENDCLASS.
12 changes: 12 additions & 0 deletions src/ui/util/zcl_dbbr_cds_navigator.clas.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@
<LANGU>E</LANGU>
<DESCRIPT>Create output fields for target entity</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CLSNAME>ZCL_DBBR_CDS_NAVIGATOR</CLSNAME>
<CMPNAME>DETERMINE_PARAM_STRING</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Determine Parameter String</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CLSNAME>ZCL_DBBR_CDS_NAVIGATOR</CLSNAME>
<CMPNAME>EXPORT_DATA_TO_MEMORY</CMPNAME>
Expand Down Expand Up @@ -72,6 +78,12 @@
<LANGU>E</LANGU>
<DESCRIPT>Type of Entity</DESCRIPT>
</SEOCOMPOTX>
<SEOCOMPOTX>
<CLSNAME>ZCL_DBBR_CDS_NAVIGATOR</CLSNAME>
<CMPNAME>REQUEST_PARAM_VALUES</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Request parameter value input</DESCRIPT>
</SEOCOMPOTX>
</DESCRIPTIONS>
</asx:values>
</asx:abap>
Expand Down
51 changes: 51 additions & 0 deletions src/ui/util/zcl_dbbr_cds_param_util.clas.abap
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
"! <p class="shorttext synchronized" lang="en">Utility Class handling CDS Parameters</p>
CLASS zcl_dbbr_cds_param_util DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .

PUBLIC SECTION.
"! <p class="shorttext synchronized" lang="en">Concatenate parameters and its values to a string</p>
"!
"! @parameter it_param_values | <p class="shorttext synchronized" lang="en">List of parameters with values</p>
"! @parameter iv_param_indentation | <p class="shorttext synchronized" lang="en">Number of spaces for indentation</p>
"! @parameter if_sep_param_by_newline | <p class="shorttext synchronized" lang="en">Every param/value in new line</p>
"! @parameter rv_params | <p class="shorttext synchronized" lang="en">Concatenated parameter/value combinations</p>
CLASS-METHODS build_param_string
IMPORTING
it_param_values TYPE zif_sat_ty_global=>ty_t_cds_param_value
iv_param_indentation TYPE int1
if_sep_param_by_newline TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(rv_params) TYPE string.

PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.



CLASS zcl_dbbr_cds_param_util IMPLEMENTATION.

METHOD build_param_string.

DATA(lv_spaces) = ` `.
DO iv_param_indentation TIMES.
lv_spaces = lv_spaces && ` `.
ENDDO.

DATA(lv_param_seperation) = COND #(
WHEN if_sep_param_by_newline = abap_true THEN |{ cl_abap_char_utilities=>cr_lf }{ lv_spaces }|
ELSE | | ).

DATA(lv_params) = REDUCE string(
INIT value = `` sep = ``
FOR param IN it_param_values
NEXT value = |{ value }{ sep }{ param-name } = { cl_abap_dyn_prg=>quote( param-value ) }|
sep = `,` && lv_param_seperation ).

rv_params = |( { lv_params } )|.

ENDMETHOD.

ENDCLASS.
24 changes: 24 additions & 0 deletions src/ui/util/zcl_dbbr_cds_param_util.clas.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_DBBR_CDS_PARAM_UTIL</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Utility Class handling CDS Parameters</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
<DESCRIPTIONS>
<SEOCOMPOTX>
<CLSNAME>ZCL_DBBR_CDS_PARAM_UTIL</CLSNAME>
<CMPNAME>BUILD_PARAM_STRING</CMPNAME>
<LANGU>E</LANGU>
<DESCRIPT>Concatenate parameters and its values to a string</DESCRIPT>
</SEOCOMPOTX>
</DESCRIPTIONS>
</asx:values>
</asx:abap>
</abapGit>
41 changes: 16 additions & 25 deletions src/ui/util/zcl_dbbr_cds_selection_util.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ CLASS zcl_dbbr_cds_selection_util DEFINITION
REDEFINITION .
METHODS zif_dbbr_screen_util~handle_pbo
REDEFINITION .

PROTECTED SECTION.

METHODS create_from_clause
Expand Down Expand Up @@ -199,32 +200,20 @@ CLASS zcl_dbbr_cds_selection_util IMPLEMENTATION.
*..if we have a source entity it means we also have to use it´s parameters
*... e.g when following associations
IF mv_source_entity_id IS NOT INITIAL
AND mt_source_param_values IS NOT INITIAL.
lt_param_values = mt_source_param_values.
AND mv_source_params IS NOT INITIAL.
DATA(lv_params) = mv_source_params.
ELSEIF mo_cds_view->has_parameters( ).
lt_param_values = VALUE zif_sat_ty_global=>ty_t_cds_param_value(
FOR ls_param_value IN mt_param_values
WHERE ( is_parameter = abap_true )
( name = ls_param_value-fieldname
value = ls_param_value-low ) ).
lv_params = zcl_dbbr_cds_param_util=>build_param_string(
iv_param_indentation = strlen( lv_entity )
it_param_values = VALUE zif_sat_ty_global=>ty_t_cds_param_value(
FOR ls_param_value IN mt_param_values
WHERE ( is_parameter = abap_true )
( name = ls_param_value-fieldname
value = ls_param_value-low ) ) ).
ENDIF.

IF lt_param_values IS NOT INITIAL.
lv_entity = |{ lv_entity }( |.
DATA(lv_spaces) = ``.
DO strlen( lv_entity ) TIMES.
lv_spaces = lv_spaces && ` `.
ENDDO.

DATA(lv_from_with_params) = REDUCE string(
INIT value = lv_entity sep = ``
FOR param IN lt_param_values
NEXT value = |{ value }{ sep }{ param-name } = { cl_abap_dyn_prg=>quote( param-value ) }|
sep = `,` && cl_abap_char_utilities=>cr_lf && lv_spaces ).
* lv_from_with_params = lv_from_with_params && lv_from_alias_text && ` )`.
lv_from_with_params = lv_from_with_params && ` )` && lv_from_alias_text .

SPLIT lv_from_with_params AT cl_abap_char_utilities=>cr_lf INTO TABLE mt_from.
IF lv_params IS NOT INITIAL.
SPLIT |{ lv_entity }{ lv_params }{ lv_from_alias_text }| AT cl_abap_char_utilities=>cr_lf INTO TABLE mt_from.
ELSE.
mt_from = VALUE #( ( lv_entity && lv_from_alias_text ) ).
ENDIF.
Expand Down Expand Up @@ -535,8 +524,9 @@ CLASS zcl_dbbr_cds_selection_util IMPLEMENTATION.
result = super->get_deactivated_functions( ).
DELETE result WHERE table_line = zif_dbbr_c_selection_functions=>show_cds_source.

IF mo_cds_view->has_parameters( if_exclude_system_params = abap_true ).
DELETE result WHERE table_line = zif_dbbr_c_selection_functions=>change_cds_parameters.
IF mo_cds_view->has_parameters( if_exclude_system_params = abap_true )
AND mv_source_entity_id IS INITIAL.
DELETE result WHERE table_line = zif_dbbr_c_selection_functions=>change_cds_parameters.
ENDIF.

IF mo_cds_view->has_associations( ).
Expand Down Expand Up @@ -590,4 +580,5 @@ CLASS zcl_dbbr_cds_selection_util IMPLEMENTATION.
ENDCASE.

ENDMETHOD.

ENDCLASS.
Loading