GET_SALES_DATA Issue1:
Issue2:
GET_HEADER_WITH_DESC_BY_GUIDS Issue3: still remember the cyclomatic complexity concept in my S.O.L.I.D session? Instead of using
METHODS:
IF < condition is fulfilled>
DO SOMETHING.
ENDIF.
ENDMETHOD.
use code below to AVOID IF :
METHODS:
CHECK <condition is NOT fulfilled>
DO SOMETHING.
ENDMETHOD.
get_required_select_list - DRY!! Issue4:
The improved solution to avoid SO MANY IF: execute the following report in AG9
REPORT ztest_wei.
TYPES: BEGIN OF ty_select_list_rule,
flag_name TYPE string,
operation TYPE string,
END OF ty_select_list_rule.
TYPES: tt_select_list_rule TYPE STANDARD TABLE OF ty_select_list_rule WITH KEY flag_name.
START-OF-SELECTION.
DATA: ls_rule TYPE ty_select_list_rule,
lt_rule TYPE tt_select_list_rule.
ls_rule = VALUE #( flag_name = 'is_prod_shtext_required' operation = ', \_ProductShortText-ProductName as ShortText' ).
APPEND ls_rule TO lt_rule.
ls_rule = VALUE #( flag_name = 'is_material_type_text_required' operation = ', \_MaterialTypeText-MaterialTypeName as MaterialTypeText' ).
APPEND ls_rule TO lt_rule.
ls_rule = VALUE #( flag_name = 'is_base_unit_text_required' operation = ', \_BaseUnitText-UnitOfMeasureName as BaseUnitText' ).
APPEND ls_rule TO lt_rule.
DATA(ls_data) = VALUE crms4s_required_fields( is_prod_shtext_required = 'X' is_base_unit_text_required = 'X' ).
DATA(lv_select_list) = CONV string( 'product_h~*' ).
PERFORM get_required_select_list USING ls_data CHANGING lv_select_list.
WRITE:/ lv_select_list.
FORM get_required_select_list USING is_required_fields TYPE crms4s_required_fields
CHANGING ev_select_list TYPE string.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE is_required_fields TO FIELD-SYMBOL(<status>).
IF sy-subrc = 0 AND <status> = abap_true.
ev_select_list = ev_select_list && lt_rule[ sy-index ]-operation.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDFORM.
The new implementation only has 9 lines and IFIFIFIFIFIF…IF is avoided:
Issue5: Is this AS really necessary?
Issue6: when to add the error handling in TODO?
Update on 2017-02-17 Issue1
Issue2 这个method的signature设计地有点confusing, 输入参数里的UOM_DESC和输出参数的UOM_DESC是配对的,这里给我一个错觉,如果IV_UOM_DESC_REQUIRED = TRUE, 那么输出ET_UOM_DESC. 反过来,如果IV_UOM_DESC_REQUIRED = FALSE, 是不是就不输出东西了?