EXIT_SAPLM60E_002
*&---------------------------------------------------------------------*
*& Include ZX60EU02
*&---------------------------------------------------------------------*
DATA: L_OBJKEY TYPE SIBFBORIID.
DATA: WA_FXPBPT LIKE FXPBPT.
DATA: WFSTATE TYPE CHAR1.
DATA: container type table of swcont with header line.
data: l_vkbur like vbak-vkbur.
data: l_vkgrp like vbak-vkgrp.
data: l_kunnr like kna1-kunnr.
data: l_vkorg like knvv-vkorg.
loop at fxpbpt into wa_fxpbpt where versb <> '00' and verVs = 'X'.
EXIT.
ENDLOOP.
IF SY-SUBRC = 0.
MESSAGE w015(ZWF) with 'All other versions were converted into an inactive state'.
ENDIF.
loop at fxpbpt into wa_fxpbpt where versb <> '00' and vervs = 'X'.
WA_FXPBPT-VERVS = SPACE.
MODIFY FXPBPT FROM WA_FXPBPT TRANSPORTING VERVS.
ENDLOOP.
if sy-tcode = 'MD62' OR SY-TCODE = 'MD61'.
LOOP AT FXPBPT INTO WA_FXPBPT WHERE VERSB = '00'.
EXIT.
ENDLOOP.
IF SY-SUBRC = 0.
MESSAGE E017(ZWF).
ENDIF.
ENDIF.
IF SY-TCODE = 'MD61' OR SY-TCODE = 'MD62' or sy-tcode = 'SBWP'. "COPY version时不启动注程
LOOP AT FXPBPT INTO WA_FXPBPT WHERE VERSB <> '00' AND VERVS = SPACE. "版本未激活且不为00版本的才启动流程
clear: l_kunnr, l_vkbur, l_vkgrp.
select single kunnr vkorg into (l_kunnr, l_vkorg)
from zcust_prodlot
where PS_PSP_PNR = wa_fxpbpt-pspel.
select single vkbur vkgrp into (l_vkbur, l_vkgrp)
from knvv
where kunnr = l_kunnr
and vkorg = l_vkorg.
if l_vkbur is initial.
case wa_fxpbpt-werks.
when '8101'.
l_vkbur = '3101'.
when '8201'.
l_vkbur = '3201'.
when '8301'.
l_vkbur = '3301'.
endcase.
endif.
L_OBJKEY+0(4) = WA_FXPBPT-WERKS.
L_OBJKEY+4(2) = WA_FXPBPT-VERSB.
L_OBJKEY+6(10) = WA_FXPBPT-PBDNR.
CONTAINER-ELEMENT = 'VKBUR'.
CONTAINER-TAB_INDEX = 1.
CONTAINER-TYPE = 'C'.
CONTAINER-ELEMLENGTH = 4.
CONTAINER-VALUE = l_vkbur.
APPEND CONTAINER.
CONTAINER-ELEMENT = 'VKGRP'.
CONTAINER-TAB_INDEX = 2.
CONTAINER-TYPE = 'C'.
CONTAINER-ELEMLENGTH = 4.
CONTAINER-VALUE = l_vkgrp.
APPEND CONTAINER.
CALL FUNCTION 'ZWF_GET_CURRENTSPSTEPID'
EXPORTING
WFID = 'WFSD0002'
INSTID = L_OBJKEY
IMPORTING
WFSTATE = WFSTATE.
CALL FUNCTION 'ZWF_DIS_APPROVELOG'
EXPORTING
mode = 'S'
TYPEID = 'ZBO_PIR'
INSTID = L_OBJKEY
WFID = 'WFSD0002'
TABLES
CONTAINER = container.
EXIT.
ENDLOOP.
ENDIF.
FUNCTION ZWF_GET_CURRENTSPSTEPID .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(WFID) TYPE ZWF001-WFID OPTIONAL
*" VALUE(INSTID) LIKE ZWF005-INSTID OPTIONAL
*" EXPORTING
*" VALUE(NEXTSPID) LIKE ZWF001-SPID
*" VALUE(NEXTSPTITLE) LIKE ZWF001-SPNAME
*" VALUE(NEXTSPUSER) LIKE WFSYST-AGENT
*" VALUE(CURSPID) LIKE ZWF001-SPID
*" VALUE(CURSPTITLE) LIKE ZWF001-SPNAME
*" VALUE(INITSPID) LIKE ZWF001-SPID
*" VALUE(ENDSPID) LIKE ZWF001-SPID
*" VALUE(WFSTATE) TYPE CHAR1
*" TABLES
*" SPJB STRUCTURE ZWF005 OPTIONAL
*"----------------------------------------------------------------------
data: it_wf001 type table of zwf001 with header line.
DATA: L_SPLX TYPE ZWF004-SPLX.
select single spid into initspid
from zwf001
where wfid = wfid
and spidlx = '1'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_wf004
FROM ZWF004
WHERE INSTID = INSTID
AND WFID = WFID.
sort it_wf004 by spcnt descending.
read table it_wf004 into it_wf004 index 1.
if sy-subrc = 0.
curspid = it_wf004-xjspid.
L_SPLX = IT_WF004-SPLX.
endif.
select * into corresponding fields of table it_wf005
from zwf005
where instid = instid
and wfid = wfid.
data: tmp_selid type zwf005-selid.
data: tmp_spid type zwf005-spid.
sort it_wf005 by spid descending.
loop at it_wf005 into it_wf005.
if tmp_spid <> space.
it_wf005-nstep = tmp_spid.
MODIFY IT_WF005 FROM IT_WF005 TRANSPORTING NSTEP.
clear tmp_spid.
endif.
if tmp_selid = it_wf005-selid or it_wf005-selid = space.
tmp_spid = it_wf005-NSTEP.
delete it_wf005.
continue.
endif.
tmp_selid = it_wf005-selid.
endloop.
READ TABLE IT_WF005 INTO IT_WF005 INDEX 1.
IF SY-SUBRC = 0.
ENDSPID = IT_WF005-SPID.
ENDIF.
READ TABLE IT_WF005 WITH KEY SPID = CURSPID.
IF SY-SUBRC = 0.
NEXTSPID = IT_WF005-NSTEP.
NEXTSPUSER+2 = IT_WF005-SELID.
NEXTSPUSER+0(2) = 'US'.
ENDIF.
SELECT SINGLE SPNAME INTO CURSPTITLE
FROM ZWF001
WHERE WFID = WFID
AND SPID = curSPID.
SELECT SINGLE SPNAME INTO NEXTSPTITLE
FROM ZWF001
WHERE WFID = WFID
AND SPID = NEXTSPID.
spjb[] = it_WF005[].
LOOP AT Spjb INTO SPJB.
SPJB-SELID+2 = SPJB-SELID.
SPJB-SELID+0(2) = 'US'.
MODIFY SPJB FROM SPJB TRANSPORTING SELID.
ENDLOOP.
SORT SPJB BY SPID.
IF L_SPLX = 'C'.
WFSTATE = '4'.
ELSEIF CURSPID = INITSPID OR CURSPID IS INITIAL.
WFSTATE = '1'.
ELSEIF CURSPID = 'APP'.
WFSTATE = '3'.
ELSE.
WFSTATE = '2'.
ENDIF.
ENDFUNCTION.
FUNCTION ZWF_DIS_APPROVELOG.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(TYPEID) TYPE SIBFTYPEID OPTIONAL
*" VALUE(INSTID) TYPE SIBFBORIID OPTIONAL
*" VALUE(WFID) TYPE ZWFID OPTIONAL
*" VALUE(SPID) TYPE ZSPID OPTIONAL
*" VALUE(INITSPID) TYPE ZSPID OPTIONAL
*" VALUE(MODE) TYPE CHAR1 OPTIONAL
*" VALUE(SAVE) TYPE CHAR1 OPTIONAL
*" EXPORTING
*" VALUE(UCOMM) LIKE SY-UCOMM
*" TABLES
*" CONTAINER STRUCTURE SWCONT OPTIONAL
*"----------------------------------------------------------------------
G_INSTID = INSTID.
G_TYPEID = TYPEID.
G_WFID = WFID.
g_spid = spid.
g_initspid = initspid.
G_MODE = MODE.
g_save = save.
G_CONTAINER[] = CONTAINER[].
DYNAME = SY-REPID.
DYNUMB = SY-DYNNR.
if G_MODE = 'S' AND G_CONTAINER[] IS INITIAL.
PERFORM ZEXIT_GET_CONTAINER.
ENDIF.
CALL FUNCTION 'ZWF_GET_CURRENTSPSTEPID'
EXPORTING
WFID = g_wfid
INSTID = g_instid
IMPORTING
NEXTSPID = g_nextspid
NEXTSPTITLE = g_nextsptitle
NEXTSPUSER = g_nextspuser
CURSPID = G_CURSPID
CURSPTITLE = g_cursptitle
* INITSPID =
* ENDSPID =
WFSTATE = G_WFSTATE
* TABLES
* SPJB =
.
CALL FUNCTION 'ZWF_GET_INITIATOR'
EXPORTING
WFID = G_WFID
INSTID = G_INSTID
IMPORTING
INITIATOR = G_INITIATOR.
if g_initiator = space.
g_initiator+2 = sy-uname.
g_initiator+0(2) = 'US'.
endif.
SELECT SINGLE a~CREA_TMP b~USER_ID B~WI_ID
INTO (it_current-crea_tmp, IT_CURRENT-APPROVER, IT_CURRENT-WI_ID)
FROM SWW_WI2OBJ AS A INNER JOIN SWWUSERWI AS B ON A~WI_ID = B~WI_ID
WHERE A~TYPEID = G_TYPEID
AND A~INSTID = G_INSTID
AND B~NO_SEL = SPACE.
* IF IT_CURRENT-APPROVER = SY-UNAME AND G_INITIATOR+2 <> SY-UNAME .
if it_current-approver = sy-uname or g_initiator+2 = sy-uname.
CALL FUNCTION 'ENQUEUE_EZWF005'
EXPORTING
MODE_ZWF005 = 'E'
MANDT = SY-MANDT
INSTID = G_INSTID
WFID = G_WFID
* X_INSTID = ' '
* X_WFID = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
clear: ALV_CONTAINER1, ALV_CONTAINER2, ALV_CONTAINER3.
CALL SCREEN 0100 starting at 2 2
ending at 105 25.
ucomm = g_ucomm.
CALL FUNCTION 'DEQUEUE_EZWF005'
EXPORTING
MODE_ZWF005 = 'E'
MANDT = SY-MANDT
INSTID = G_INSTID
WFID = G_WFID
* X_INSTID = ' '
* X_WFID = ' '
* _SCOPE = '3'
* _SYNCHRON = ' '
* _COLLECT = ' '
.
ENDFUNCTION.
FUNCTION ZWF_GET_CURRENTSPSTEPID .
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(WFID) TYPE ZWF001-WFID OPTIONAL
*" VALUE(INSTID) LIKE ZWF005-INSTID OPTIONAL
*" EXPORTING
*" VALUE(NEXTSPID) LIKE ZWF001-SPID
*" VALUE(NEXTSPTITLE) LIKE ZWF001-SPNAME
*" VALUE(NEXTSPUSER) LIKE WFSYST-AGENT
*" VALUE(CURSPID) LIKE ZWF001-SPID
*" VALUE(CURSPTITLE) LIKE ZWF001-SPNAME
*" VALUE(INITSPID) LIKE ZWF001-SPID
*" VALUE(ENDSPID) LIKE ZWF001-SPID
*" VALUE(WFSTATE) TYPE CHAR1
*" TABLES
*" SPJB STRUCTURE ZWF005 OPTIONAL
*"----------------------------------------------------------------------
data: it_wf001 type table of zwf001 with header line.
DATA: L_SPLX TYPE ZWF004-SPLX.
select single spid into initspid
from zwf001
where wfid = wfid
and spidlx = '1'.
SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_wf004
FROM ZWF004
WHERE INSTID = INSTID
AND WFID = WFID.
sort it_wf004 by spcnt descending.
read table it_wf004 into it_wf004 index 1.
if sy-subrc = 0.
curspid = it_wf004-xjspid.
L_SPLX = IT_WF004-SPLX.
endif.
select * into corresponding fields of table it_wf005
from zwf005
where instid = instid
and wfid = wfid.
data: tmp_selid type zwf005-selid.
data: tmp_spid type zwf005-spid.
sort it_wf005 by spid descending.
loop at it_wf005 into it_wf005.
if tmp_spid <> space.
it_wf005-nstep = tmp_spid.
MODIFY IT_WF005 FROM IT_WF005 TRANSPORTING NSTEP.
clear tmp_spid.
endif.
if tmp_selid = it_wf005-selid or it_wf005-selid = space.
tmp_spid = it_wf005-NSTEP.
delete it_wf005.
continue.
endif.
tmp_selid = it_wf005-selid.
endloop.
READ TABLE IT_WF005 INTO IT_WF005 INDEX 1.
IF SY-SUBRC = 0.
ENDSPID = IT_WF005-SPID.
ENDIF.
READ TABLE IT_WF005 WITH KEY SPID = CURSPID.
IF SY-SUBRC = 0.
NEXTSPID = IT_WF005-NSTEP.
NEXTSPUSER+2 = IT_WF005-SELID.
NEXTSPUSER+0(2) = 'US'.
ENDIF.
SELECT SINGLE SPNAME INTO CURSPTITLE
FROM ZWF001
WHERE WFID = WFID
AND SPID = curSPID.
SELECT SINGLE SPNAME INTO NEXTSPTITLE
FROM ZWF001
WHERE WFID = WFID
AND SPID = NEXTSPID.
spjb[] = it_WF005[].
LOOP AT Spjb INTO SPJB.
SPJB-SELID+2 = SPJB-SELID.
SPJB-SELID+0(2) = 'US'.
MODIFY SPJB FROM SPJB TRANSPORTING SELID.
ENDLOOP.
SORT SPJB BY SPID.
IF L_SPLX = 'C'.
WFSTATE = '4'.
ELSEIF CURSPID = INITSPID OR CURSPID IS INITIAL.
WFSTATE = '1'.
ELSEIF CURSPID = 'APP'.
WFSTATE = '3'.
ELSE.
WFSTATE = '2'.
ENDIF.
ENDFUNCTION.
FUNCTION ZWF_GET_INITIATOR.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(WFID) TYPE ZWF001-WFID OPTIONAL
*" VALUE(INSTID) TYPE ZWF005-INSTID OPTIONAL
*" EXPORTING
*" VALUE(INITIATOR) TYPE WFSYST-AGENT
*"----------------------------------------------------------------------
SELECT * INTO CORRESPONDING FIELDS OF TABLE IT_WF004
FROM ZWF004
WHERE WFID = WFID
AND INSTID = INSTID.
SORT IT_WF004 BY SPCNT DESCENDING.
LOOP AT IT_WF004 INTO IT_WF004 WHERE SPLX = 'S' .
INITIATOR+2 = IT_WF004-SPYH.
INITIATOR+0(2) = 'US'.
EXIT.
ENDLOOP.
ENDFUNCTION.