SAP:MD61 User Exit

58 篇文章 0 订阅

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(ZWFwith '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 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.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值