Update Route in Transportation Unit in SAP EWM – Using Monitor Node TU
Create New FM with following Importing Parameter
IV_LGNUM TYPE /SCWM/LGNUM
IT_DATA TYPE STANDARD TABLE
*Veraible Decleration
DATA: lv_route TYPE /scmb/de_route_id,
ls_act_chg TYPE /scwm/tu_sr_act,
lt_act_chg TYPE TABLE OF /scwm/tu_sr_act,
lt_act_chgg TYPE /scwm/tt_tu_sr_activity,
ls_flds TYPE sval,
lt_flds TYPE TABLE OF sval.
*Constant Decleration
CONSTANTS: lc_rflag TYPE kzroute VALUE 'X',
lc_title TYPE cua_tit_tx VALUE 'Update Route',
lc_status TYPE char5 VALUE 'DGI',
lc_rno TYPE char10 VALUE 'ROUTE',
lc_msg TYPE char1 VALUE 'I',
lc_msge TYPE char1 VALUE 'E',
lc_msgw TYPE char1 VALUE 'W',
lc_tab TYPE char5 VALUE 'LIKP',
lc_0 TYPE /scdl/dl_status_value VALUE '0',
lc_1 TYPE /scdl/dl_status_value VALUE '1',
lc_9 TYPE /scdl/dl_status_value VALUE '9',
lc_2 TYPE /scdl/dl_status_value VALUE '2'.
DATA: lr_status_value TYPE RANGE OF /scdl/dl_status_value,
ls_status_value LIKE LINE OF lr_status_value.
APPEND INITIAL LINE TO lt_flds ASSIGNING FIELD-SYMBOL(<lf_fldst>).
<lf_fldst>-tabname = lc_tab.
<lf_fldst>-fieldname = lc_rno.
*FM to trigger pop-up and capture value
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = lc_title
TABLES
fields = lt_flds[]
EXCEPTIONS
error_in_fields = 1
OTHERS = 2.
CHECK sy-subrc EQ 0.
IF sy-subrc EQ 0.
LOOP AT lt_flds ASSIGNING FIELD-SYMBOL(<lf_flds>).
lv_route = <lf_flds>-value.
ENDLOOP.
ENDIF.
IF lv_route is NOT INITIAL.
SELECT SINGLE ROUTE
FROM TVRO
INTO lv_route
WHERE route = lv_route.
IF sy-subrc ne 0.
MESSAGE S305(ZLG001) WITH lv_route DISPLAY LIKE wmegc_severity_err.
RETURN.
ENDIF.
ELSE.
MESSAGE S306(ZLG001) DISPLAY LIKE wmegc_severity_err.
RETURN.
ENDIF.
IF it_data IS NOT INITIAL AND lv_route IS NOT INITIAL.
LOOP AT it_data ASSIGNING FIELD-SYMBOL(<lf_data>) .
MOVE-CORRESPONDING <lf_data> TO ls_act_chg.
*Select query for capturing DOCID.
SELECT tu_num,
docid,
docno
FROM /scwm/tu_dlv
INTO TABLE @DATA(lt_docid)
WHERE tu_num = @ls_act_chg-tu_num.
IF lt_docid IS NOT INITIAL.
*Select query for capturing satus of DOCID
SELECT docid,
doccat,
status_value,
status_type
FROM /scdl/db_status
FOR ALL ENTRIES IN @lt_docid
WHERE status_type = @lc_status AND
docid = @lt_docid-docid
INTO TABLE @DATA(lt_status).
ENDIF.
*Checking status of document
IF sy-subrc = 0.
ls_status_value-sign = 'I' .
ls_status_value-option = 'EQ' .
ls_status_value-low = lc_0 .
APPEND ls_status_value TO lr_status_value .
ls_status_value-sign = 'I' .
ls_status_value-option = 'EQ' .
ls_status_value-low = lc_9 .
APPEND ls_status_value TO lr_status_value .
LOOP AT lt_status INTO DATA(ls_status) WHERE status_value NOT IN lr_status_value .
DATA(lv_flag) = abap_true .
CLEAR lr_status_value .
ENDLOOP .
IF lv_flag = abap_true .
*Select query for route capture data
SELECT *
FROM /scwm/tu_sr_act
INTO @DATA(ls_tu)
UP TO 1 ROWS
WHERE tu_num = @ls_act_chg-tu_num.
ENDSELECT.
IF sy-subrc = 0.
ls_tu-route_curr = lv_route.
APPEND ls_tu TO lt_act_chg.
CLEAR ls_tu.
lt_act_chgg = lt_act_chg.
ENDIF.
*FM to update route data against TU.
CALL FUNCTION '/SCWM/SR_DB_TU_ACT'
EXPORTING
it_act_chg = lt_act_chgg.
IF lt_act_chgg IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
ELSE.
DATA(ls_satus) = VALUE #( lt_status[ status_value = lc_9 ] OPTIONAL ).
DATA(lv_deliv) = VALUE #( lt_docid[ docid = ls_satus-docid ]-docno OPTIONAL ).
MESSAGE i162(zlg001) WITH lv_deliv . "# TEXT-002
CLEAR ls_satus.
ENDIF.
CLEAR:lt_act_chgg,ls_act_chg,ls_satus.
ENDIF.
ENDLOOP.
ELSE.
MESSAGE I163(zlg001) DISPLAY LIKE lc_msgw .
ENDIF.