Function used:
- /SCWM/TO_READ_HU - Get Handling Unit Information
- /SCWM/TO_INIT_NEW - Initialize WT Processing
- /SCWM/TO_CANCEL - Cancel Warehouse Task
- /SCWM/HUMAIN_REFRESH - Refresh
FUNCTION ZFM_EWM_WT_CANCEL .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IV_LGNUM) TYPE /SCWM/LGNUM
*" REFERENCE(IV_HUIDENT) TYPE /SCWM/HUIDENT
*" REFERENCE(IV_TANUM) TYPE /SCWM/TANUM
*" CHANGING
*" REFERENCE(CT_RETURN) TYPE BAPIRET2_T
*"----------------------------------------------------------------------
DATA: lt_ordim_o TYPE /scwm/tt_ordim_o,
lt_bapiret TYPE bapirettab,
lt_cancl TYPE /scwm/tt_cancl,
ls_data TYPE /scwm/ordim_l,
ls_cancl TYPE /scwm/cancl.
IF iv_huident IS NOT INITIAL.
"Get open TOs
"This codes is for multiple TOs/WTs
"Collect all WTs in Handling Unit
CALL FUNCTION '/SCWM/TO_READ_HU'
EXPORTING
iv_lgnum = iv_lgnum
iv_huident = iv_huident
IMPORTING
et_ordim_o_src = lt_ordim_o
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc IS INITIAL.
LOOP AT lt_ordim_o INTO DATA(ls_ordim_o).
##ENH_OK MOVE-CORRESPONDING ls_ordim_o TO ls_data.
MOVE ls_data-tanum TO ls_cancl-tanum.
APPEND ls_cancl TO lt_cancl.
CLEAR ls_cancl.
ENDLOOP.
ENDIF.
ELSE.
"This codes is for a single TO/WT
IF iv_tanum IS NOT INITIAL.
ls_cancl-tanum = iv_tanum.
APPEND ls_cancl TO lt_cancl.
CLEAR ls_cancl.
ENDIF.
ENDIF.
CHECK lt_cancl[] IS NOT INITIAL.
SORT lt_cancl.
DELETE ADJACENT DUPLICATES FROM lt_cancl COMPARING tanum.
"Initialize WT Processing
CALL FUNCTION '/SCWM/TO_INIT_NEW'
EXPORTING
iv_lgnum = iv_lgnum.
"Cancel WT/TO
CALL FUNCTION '/SCWM/TO_CANCEL'
EXPORTING
iv_lgnum = iv_lgnum
* IV_SUBST = ' '
iv_qname = sy-uname
iv_update_task = 'X'
iv_commit_work = abap_false
it_cancl = lt_cancl
IMPORTING
et_bapiret = lt_bapiret.
"Check for possibility of Error (E), Abort (A), or an abnormal termination (X)
LOOP AT lt_bapiret TRANSPORTING NO FIELDS
WHERE type CA 'AXE'.
ENDLOOP.
IF sy-subrc IS INITIAL.
"If true, roll back
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
"commit work and wait to display new data after auto-refresh
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
"Refresh
CALL METHOD /scwm/cl_tm=>cleanup( ).
CALL FUNCTION '/SCWM/HUMAIN_REFRESH'.
ENDIF.
IF lt_bapiret IS NOT INITIAL.
LOOP AT lt_bapiret INTO DATA(ls_ret).
IF ls_ret-row = 0.
DELETE lt_bapiret INDEX sy-tabix.
ENDIF.
ENDLOOP.
ENDIF.
ct_return[] = lt_bapiret[].
ENDFUNCTION.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IV_LGNUM) TYPE /SCWM/LGNUM
*" REFERENCE(IV_HUIDENT) TYPE /SCWM/HUIDENT
*" REFERENCE(IV_TANUM) TYPE /SCWM/TANUM
*" CHANGING
*" REFERENCE(CT_RETURN) TYPE BAPIRET2_T
*"----------------------------------------------------------------------
DATA: lt_ordim_o TYPE /scwm/tt_ordim_o,
lt_bapiret TYPE bapirettab,
lt_cancl TYPE /scwm/tt_cancl,
ls_data TYPE /scwm/ordim_l,
ls_cancl TYPE /scwm/cancl.
IF iv_huident IS NOT INITIAL.
"Get open TOs
"This codes is for multiple TOs/WTs
"Collect all WTs in Handling Unit
CALL FUNCTION '/SCWM/TO_READ_HU'
EXPORTING
iv_lgnum = iv_lgnum
iv_huident = iv_huident
IMPORTING
et_ordim_o_src = lt_ordim_o
EXCEPTIONS
error = 1
OTHERS = 2.
IF sy-subrc IS INITIAL.
LOOP AT lt_ordim_o INTO DATA(ls_ordim_o).
##ENH_OK MOVE-CORRESPONDING ls_ordim_o TO ls_data.
MOVE ls_data-tanum TO ls_cancl-tanum.
APPEND ls_cancl TO lt_cancl.
CLEAR ls_cancl.
ENDLOOP.
ENDIF.
ELSE.
"This codes is for a single TO/WT
IF iv_tanum IS NOT INITIAL.
ls_cancl-tanum = iv_tanum.
APPEND ls_cancl TO lt_cancl.
CLEAR ls_cancl.
ENDIF.
ENDIF.
CHECK lt_cancl[] IS NOT INITIAL.
SORT lt_cancl.
DELETE ADJACENT DUPLICATES FROM lt_cancl COMPARING tanum.
"Initialize WT Processing
CALL FUNCTION '/SCWM/TO_INIT_NEW'
EXPORTING
iv_lgnum = iv_lgnum.
"Cancel WT/TO
CALL FUNCTION '/SCWM/TO_CANCEL'
EXPORTING
iv_lgnum = iv_lgnum
* IV_SUBST = ' '
iv_qname = sy-uname
iv_update_task = 'X'
iv_commit_work = abap_false
it_cancl = lt_cancl
IMPORTING
et_bapiret = lt_bapiret.
"Check for possibility of Error (E), Abort (A), or an abnormal termination (X)
LOOP AT lt_bapiret TRANSPORTING NO FIELDS
WHERE type CA 'AXE'.
ENDLOOP.
IF sy-subrc IS INITIAL.
"If true, roll back
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
"commit work and wait to display new data after auto-refresh
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
"Refresh
CALL METHOD /scwm/cl_tm=>cleanup( ).
CALL FUNCTION '/SCWM/HUMAIN_REFRESH'.
ENDIF.
IF lt_bapiret IS NOT INITIAL.
LOOP AT lt_bapiret INTO DATA(ls_ret).
IF ls_ret-row = 0.
DELETE lt_bapiret INDEX sy-tabix.
ENDIF.
ENDLOOP.
ENDIF.
ct_return[] = lt_bapiret[].
ENDFUNCTION.
No comments :
Post a Comment