method IF_EX_DOCUMENT_MAIN01~BEFORE_READ_DATA.
CALL FUNCTION 'ZWF_SPEC_ISEDIT'
EXPORTING
DRAW = DRAW
EXCEPTIONS
NOT_EDIT = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
EXPORT WA_DRAW FROM DRAW TO MEMORY ID 'ZDRAW_CHK'.
endmethod.
FUNCTION ZWF_SPEC_ISEDIT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(DRAW) TYPE DRAW OPTIONAL
*" EXCEPTIONS
*" NOT_EDIT
*"----------------------------------------------------------------------
DATA: L_WFID TYPE ZWFID.
DATA: L_SPID TYPE ZSPID.
DATA: L_OBJKEY TYPE SWO_TYPEID.
DATA: L_OBJTYPE TYPE SWO_OBJTYP.
DATA: SWO_RETURN TYPE SWOTRETURN.
DATA: IT_CONTAINER TYPE SWCONT OCCURS 0 WITH HEADER LINE.
DATA: L_AEPRO TYPE CC_PROFIL.
DATA: L_MSTAE TYPE MSTAE.
DATA: L_ISLAU TYPE ZISLAU.
DATA: WA_SWWUSERWI TYPE SWWUSERWI,
IT_SWWUSERWI TYPE SWWUSERWI OCCURS 0.
DATA: G_WIID TYPE SWW_WIID.
DATA: L_TYPEID TYPE SIBFTYPEID.
DATA: L_DOKST TYPE DOKST.
IF SY-TCODE <> 'CV02N' AND SY-TCODE <> 'CV02'.
EXIT.
ENDIF.
CHECK DRAW-DOKAR = 'CPS'. "Only for SPEC trigger workflow
"Get WFID
L_OBJTYPE = 'DRAW'.
CONCATENATE DRAW-DOKAR DRAW-DOKNR DRAW-DOKVR DRAW-DOKTL INTO L_OBJKEY.
CALL FUNCTION 'ZKZ_GET_OBJ_ATTR'
EXPORTING
OBJTYPE = L_OBJTYPE
OBJKEY = L_OBJKEY
VERB = 'WFID'
ACCESS = 'G'
IMPORTING
RETURN = SWO_RETURN
TABLES
CONTAINER = IT_CONTAINER
EXCEPTIONS
DISPLAY_ERROR = 1
OTHERS = 2.
IF SY-SUBRC NE 0 OR SWO_RETURN-CODE NE 0.
SY-MSGID = 'OA'.
SY-MSGTY = 'E'.
SY-MSGNO = '679'.
RAISE NOT_EDIT.
ENDIF.
READ TABLE IT_CONTAINER WITH KEY ELEMENT = 'WFID'.
L_WFID = IT_CONTAINER-VALUE.
"If launch workflow
CALL FUNCTION 'ZWF_CHECK_WF_RUN'
EXPORTING
WFID = L_WFID
EXCEPTIONS
NOT_RUN = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
"Check status
SELECT SINGLE DOKST INTO L_DOKST FROM DRAW
WHERE DOKAR = DRAW-DOKAR AND DOKNR = DRAW-DOKNR
AND DOKVR = DRAW-DOKVR AND DOKTL = DRAW-DOKTL.
IF L_DOKST = 'RE'.
SY-MSGID = 'ZWF_1'.
SY-MSGTY = 'E'.
SY-MSGNO = '011'.
SY-MSGV1 = 'Status is released'.
RAISE NOT_EDIT.
ENDIF.
"Get current O/S work item
"To fix exception no workflow trigger but create approval log
"Check work item created or not, if not, no check edit mode
L_TYPEID = L_OBJTYPE.
CALL FUNCTION 'ZKZ_GET_CURR_WI'
EXPORTING
TYPEID = L_TYPEID
INSTID = L_OBJKEY
WFID = L_WFID
TABLES
IT_SWWUSERWI = IT_SWWUSERWI.
IF IT_SWWUSERWI[] IS INITIAL.
EXIT.
ENDIF.
READ TABLE IT_SWWUSERWI INTO WA_SWWUSERWI INDEX 1.
G_WIID = WA_SWWUSERWI-WI_ID.
IF G_WIID IS INITIAL.
EXIT.
ENDIF.
"Get current approval step
CALL FUNCTION 'ZKZ_GET_NEXT_STEP'
EXPORTING
WFID = L_WFID
INSTID = L_OBJKEY
IMPORTING
SPID = L_SPID.
"Check user has authorization to edit or not
CALL FUNCTION 'ZKZ_CHECK_MOD_AUTH'
EXPORTING
WFID = L_WFID
INSTID = L_OBJKEY
SPID = L_SPID
EXCEPTIONS
NO_AUTH = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
SY-MSGID = 'ZWF_1'.
SY-MSGTY = 'E'.
SY-MSGNO = '011'.
SY-MSGV1 = 'Status is under approval'.
RAISE NOT_EDIT.
ENDIF.
ENDFUNCTION.
FUNCTION ZKZ_GET_OBJ_ATTR.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(OBJTYPE) TYPE SWO_OBJTYP OPTIONAL
*" VALUE(OBJKEY) TYPE SWO_TYPEID OPTIONAL
*" VALUE(VERB) TYPE SWO_VERB OPTIONAL
*" VALUE(ACCESS) TYPE SWO_CONTXT DEFAULT 'C'
*" EXPORTING
*" REFERENCE(OBJECT) TYPE SWO_OBJHND
*" REFERENCE(RETURN) TYPE SWOTRETURN
*" TABLES
*" CONTAINER STRUCTURE SWCONT
*" EXCEPTIONS
*" DISPLAY_ERROR
*"----------------------------------------------------------------------
DATA: SWO_RETURN TYPE SWOTRETURN.
CLEAR: SWO_RETURN, OBJECT.
CALL FUNCTION 'SWO_CREATE'
EXPORTING
OBJTYPE = OBJTYPE
OBJKEY = OBJKEY
* OBJNAME = ' '
* LOGICAL_SYSTEM = ' '
IMPORTING
OBJECT = OBJECT
RETURN = SWO_RETURN
EXCEPTIONS
NO_REMOTE_OBJECTS = 1
OTHERS = 2.
IF SY-SUBRC NE 0 OR SWO_RETURN-CODE NE 0.
"MESSAGE E679(OA) RAISING DISPLAY_ERROR.
RAISE DISPLAY_ERROR.
ENDIF.
CLEAR: SWO_RETURN, CONTAINER.
CALL FUNCTION 'SWO_INVOKE'
EXPORTING
ACCESS = ACCESS "G - Get attribute P - Put attribute
OBJECT = OBJECT
VERB = VERB
IMPORTING
RETURN = SWO_RETURN
TABLES
CONTAINER = CONTAINER.
IF SWO_RETURN-CODE NE 0
AND SWO_RETURN-CODE NE 8017."user cancel
"MESSAGE E679(OA) RAISING DISPLAY_ERROR.
RAISE DISPLAY_ERROR.
ENDIF.
ENDFUNCTION.
FUNCTION ZWF_CHECK_WF_RUN.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(WFID) TYPE ZWFID
*" VALUE(CHK_ADM) TYPE RS_XFIELD DEFAULT 'X'
*" EXCEPTIONS
*" NOT_RUN
*"----------------------------------------------------------------------
DATA: L_ISLAU TYPE ZISLAU.
DATA: WA_ZWF007 TYPE ZWF007_1.
DATA: L_ISLOCKD TYPE BAPISLOCKD.
DATA: IT_RC TYPE TABLE OF BAPIRET2 WITH HEADER LINE.
"Check locked user
* CALL FUNCTION 'BAPI_USER_GET_DETAIL'
* EXPORTING
* USERNAME = SY-UNAME
* IMPORTING
* ISLOCKED = L_ISLOCKD
* TABLES
* RETURN = IT_RC.
* IF L_ISLOCKD <> 'UUUU'.
* MESSAGE E021(ZWF_1) WITH SY-UNAME.
* RAISE NOT_RUN.
* ENDIF.
"If launch workflow
SELECT SINGLE ISLAU INTO L_ISLAU FROM ZWF002_1 WHERE WFID = WFID.
IF SY-SUBRC <> 0.
RAISE NOT_RUN.
ENDIF.
IF L_ISLAU IS INITIAL.
RAISE NOT_RUN.
ELSE.
"If user is administrator, then do not control
IF CHK_ADM = 'X'.
SELECT SINGLE * INTO WA_ZWF007 FROM ZWF007_1 WHERE WFID = WFID AND USNAM = SY-UNAME.
IF SY-SUBRC = 0.
RAISE NOT_RUN.
ENDIF.
ENDIF.
ENDIF.
ENDFUNCTION.
FUNCTION ZKZ_GET_CURR_WI.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(TYPEID) TYPE SIBFTYPEID OPTIONAL
*" VALUE(INSTID) TYPE SIBFBORIID OPTIONAL
*" VALUE(WFID) TYPE ZWFID OPTIONAL
*" TABLES
*" IT_SWWUSERWI STRUCTURE SWWUSERWI OPTIONAL
*"----------------------------------------------------------------------
DATA: IT_SWR_WIHDR TYPE SWR_WIHDR OCCURS 0.
DATA: WA_SWR_WIHDR TYPE SWR_WIHDR.
DATA: IT_SWP_LOGTAB TYPE SWP_LOGTAB OCCURS 0.
DATA: WA_SWP_LOGTAB TYPE SWP_LOGTAB.
DATA: L_CURR_WORKITEMID TYPE SWOTOBJID-OBJKEY.
DATA: WA_SWWUSERWI TYPE SWWUSERWI.
DATA: L_OBJTYPE TYPE SWOTOBJID-OBJTYPE.
DATA: L_OBJKEY TYPE SWOTOBJID-OBJKEY.
DATA: WA_ZWF002 TYPE ZWF002_1.
* Get current work item ID If open from inbox
CALL FUNCTION 'SWE_WI_GET_FROM_REQUESTER'
IMPORTING
REQUESTER_WORKITEMID = L_CURR_WORKITEMID.
IF L_CURR_WORKITEMID IS NOT INITIAL.
SELECT SINGLE *
INTO WA_SWWUSERWI
FROM SWWUSERWI
WHERE WI_ID = L_CURR_WORKITEMID.
ELSE.
L_OBJTYPE = TYPEID.
L_OBJKEY = INSTID.
"Get all work items by object key on running time (Top WI ID)
CALL FUNCTION 'SAP_WAPI_WORKITEMS_TO_OBJECT'
EXPORTING
OBJTYPE = L_OBJTYPE
OBJKEY = L_OBJKEY
TABLES
WORKLIST = IT_SWR_WIHDR.
IF IT_SWR_WIHDR IS INITIAL.
EXIT.
ENDIF.
"Get workflow template ID in setting table
SELECT SINGLE * FROM ZWF002_1 INTO WA_ZWF002 WHERE WFID = WFID.
"Based on workflow template ID, get work item detail and container
LOOP AT IT_SWR_WIHDR INTO WA_SWR_WIHDR WHERE WI_RH_TASK = WA_ZWF002-WI_RH_TASK.
"Get Sub-WI List
CALL FUNCTION 'SWP_WORKFLOW_LOG_READ'
EXPORTING
TOP_LEVEL_WF = WA_SWR_WIHDR-WI_ID
TABLES
WF_LOG = IT_SWP_LOGTAB.
LOOP AT IT_SWP_LOGTAB INTO WA_SWP_LOGTAB WHERE WI_TYPE = 'W'.
SELECT SINGLE *
INTO WA_SWWUSERWI
FROM SWWUSERWI
WHERE WI_ID = WA_SWP_LOGTAB-WI_ID AND NO_SEL = ''.
ENDLOOP.
ENDLOOP.
ENDIF.
CLEAR IT_SWWUSERWI[].
APPEND WA_SWWUSERWI TO IT_SWWUSERWI.
ENDFUNCTION.
FUNCTION ZKZ_GET_NEXT_STEP.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(WFID) TYPE ZWFID
*" REFERENCE(INSTID) TYPE SIBFBORIID
*" EXPORTING
*" REFERENCE(SPID) TYPE ZSPID
*"----------------------------------------------------------------------
DATA: WA_ZWF002 TYPE ZWF002_1,
WA_ZWF006 TYPE ZWF004_1,
WA_ZWF001 TYPE ZWF001_1.
" IT_ZWF004 TYPE ZWF004_1 OCCURS 0.
SELECT SINGLE * FROM ZWF006_1 INTO WA_ZWF006
WHERE WFID = WFID AND INSTID = INSTID.
IF SY-SUBRC <> 0.
"Get workflow template ID in setting table
SELECT SINGLE * FROM ZWF002_1 INTO WA_ZWF002 WHERE WFID = WFID.
SPID = WA_ZWF002-STSPID.
ELSE.
SELECT SINGLE * FROM ZWF001_1 INTO WA_ZWF001
WHERE WFID = WFID AND SPID = WA_ZWF006-SPID.
SPID = WA_ZWF001-NSTEP.
ENDIF.
ENDFUNCTION.
FUNCTION ZKZ_CHECK_MOD_AUTH.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(WFID) TYPE ZWFID
*" REFERENCE(INSTID) TYPE SIBFBORIID
*" REFERENCE(SPID) TYPE ZSPID
*" EXCEPTIONS
*" NO_AUTH
*"----------------------------------------------------------------------
DATA: WA_ZWF002 TYPE ZWF002_1,
IT_ZWF002 TYPE ZWF002_1 OCCURS 0.
DATA: WA_ZWF001 TYPE ZWF001_1,
IT_ZWF001 TYPE ZWF001_1 OCCURS 0.
DATA: L_RESULT(1) TYPE C.
DATA: WA_CURR_PROCESS TYPE ZKZ_CURR_PROCESS.
L_RESULT = ''.
SELECT SINGLE * FROM ZWF002_1 INTO WA_ZWF002
WHERE WFID = WFID.
IF SY-SUBRC = 0.
IF SPID = WA_ZWF002-APSPID OR SPID = WA_ZWF002-RJSPID.
"Apporved, anybody can not modify
L_RESULT = 'X'.
ELSEIF SPID <> WA_ZWF002-STSPID.
"In process, only current approver can modify if it's set EDIT mode
SELECT SINGLE * FROM ZWF001_1 INTO WA_ZWF001
WHERE WFID = WFID AND SPID = SPID.
IF SY-SUBRC = 0.
IF WA_ZWF001-ISEDTDOC = 'X'.
L_RESULT = 'X'.
ELSE.
"Check if current user is approver
CALL FUNCTION 'ZKZ_GETCURRAPPR'
EXPORTING
INSTID = INSTID
WFID = WFID
IMPORTING
WA_CURR_PROCESS = WA_CURR_PROCESS.
IF WA_CURR_PROCESS-SELID <> SY-UNAME.
L_RESULT = 'X'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF L_RESULT = 'X'.
RAISE NO_AUTH.
ENDIF.
ENDIF.
ENDFUNCTION.
FUNCTION ZKZ_GETCURRAPPR.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(INSTID) TYPE SIBFBORIID
*" REFERENCE(WFID) TYPE ZWFID
*" VALUE(SUBMIT_FLAG) TYPE CHAR1 OPTIONAL
*" EXPORTING
*" REFERENCE(WA_CURR_PROCESS) TYPE ZKZ_CURR_PROCESS
*"----------------------------------------------------------------------
DATA: IT_CONTAINER TYPE SWR_CONT OCCURS 0.
DATA: WA_CONTAINER TYPE SWR_CONT.
DATA: WA_ZWF002 TYPE ZWF002_1.
DATA: WA_ZWF001 TYPE ZWF001_1.
DATA: L_USERID TYPE XUBNAME.
DATA: L_CREA_TMP TYPE SWFRCRETS.
DATA: WA_ZWF004 TYPE ZWF004_1,
IT_ZWF004 TYPE ZWF004_1 OCCURS 0.
DATA: WA_ZWF006 TYPE ZWF006_1.
DATA: TYPEID TYPE SIBFTYPEID.
"Get workflow template ID in setting table
SELECT SINGLE * FROM ZWF002_1 INTO WA_ZWF002 WHERE WFID = WFID.
TYPEID = WA_ZWF002-TYPEID.
WA_CURR_PROCESS-INSTID = INSTID.
WA_CURR_PROCESS-WFID = WFID.
"Get workitem details if existing
CALL FUNCTION 'ZKZ_GETWICONTAINER'
EXPORTING
TYPEID = TYPEID
INSTID = INSTID
WFID = WFID
TABLES
IT_CONTAINER = IT_CONTAINER.
IF IT_CONTAINER[] IS NOT INITIAL.
LOOP AT IT_CONTAINER INTO WA_CONTAINER WHERE ELEMENT = 'NEXT_SPID'.
IF WA_CONTAINER-VALUE = SPACE.
WA_CURR_PROCESS-SPID = WA_ZWF002-STSPID.
ELSE.
WA_CURR_PROCESS-SPID = WA_CONTAINER-VALUE.
ENDIF.
ENDLOOP.
LOOP AT IT_CONTAINER INTO WA_CONTAINER WHERE ELEMENT = 'ACTUAL_NEXT_USER'.
WA_CURR_PROCESS-SELID = WA_CONTAINER-VALUE.
ENDLOOP.
LOOP AT IT_CONTAINER INTO WA_CONTAINER WHERE ELEMENT = 'WI_CD'.
WA_CURR_PROCESS-SPRQ = WA_CONTAINER-VALUE.
ENDLOOP.
LOOP AT IT_CONTAINER INTO WA_CONTAINER WHERE ELEMENT = 'WI_CT'.
WA_CURR_PROCESS-SPSJ = WA_CONTAINER-VALUE.
ENDLOOP.
ELSE.
SELECT SINGLE * FROM ZWF006_1 INTO WA_ZWF006
WHERE WFID = WFID AND INSTID = INSTID.
IF SY-SUBRC <> 0.
WA_CURR_PROCESS-SPID = WA_ZWF002-STSPID.
WA_CURR_PROCESS-SELID = SY-UNAME.
WA_CURR_PROCESS-SPRQ = SY-DATUM.
WA_CURR_PROCESS-SPSJ = SY-UZEIT.
ELSE.
IF SUBMIT_FLAG = 'X'.
WA_CURR_PROCESS-SPID = WA_ZWF002-STSPID.
WA_CURR_PROCESS-SELID = SY-UNAME.
WA_CURR_PROCESS-SPRQ = SY-DATUM.
WA_CURR_PROCESS-SPSJ = SY-UZEIT.
ELSEIF WA_ZWF006-SPID = '1'. "step is reject to creator
WA_CURR_PROCESS-SPID = WA_ZWF002-STSPID.
WA_CURR_PROCESS-SELID = WA_ZWF006-SELID.
WA_CURR_PROCESS-SPRQ = SY-DATUM.
WA_CURR_PROCESS-SPSJ = SY-UZEIT.
ELSEIF WA_ZWF006-SPID = 'APP'.
WA_CURR_PROCESS-SPID = WA_ZWF006-SPID.
WA_CURR_PROCESS-SPNAME = 'SYSTEM WORKFLOW'.
WA_CURR_PROCESS-SELID = ''.
WA_CURR_PROCESS-SPRQ = WA_ZWF006-SPRQ.
WA_CURR_PROCESS-SPSJ = WA_ZWF006-SPSJ.
ENDIF.
ENDIF.
ENDIF.
SELECT SINGLE * INTO WA_ZWF001 FROM ZWF001_1
WHERE WFID = WFID AND SPID = WA_CURR_PROCESS-SPID.
IF SY-SUBRC = 0.
WA_CURR_PROCESS-SPNAME = WA_ZWF001-SPNAME.
WA_CURR_PROCESS-NSTEP = WA_ZWF001-NSTEP.
WA_CURR_PROCESS-RSTEP = WA_ZWF001-RSTEP.
WA_CURR_PROCESS-ISCHGAPR = WA_ZWF001-ISCHGAPR.
WA_CURR_PROCESS-ISEDTDOC = WA_ZWF001-ISEDTDOC.
ENDIF.
ENDFUNCTION.
FUNCTION ZKZ_GETWICONTAINER.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(TYPEID) TYPE SIBFTYPEID
*" REFERENCE(INSTID) TYPE SIBFBORIID
*" REFERENCE(WFID) TYPE ZWFID
*" TABLES
*" IT_CONTAINER STRUCTURE SWR_CONT
*"----------------------------------------------------------------------
DATA IT_SWR_WIHDR TYPE SWR_WIHDR OCCURS 0.
DATA WA_SWR_WIHDR TYPE SWR_WIHDR.
DATA L_OBJTYPE TYPE SWOTOBJID-OBJTYPE.
DATA L_OBJKEY TYPE SWOTOBJID-OBJKEY.
DATA IT_SWHACTOR TYPE SWHACTOR OCCURS 0.
DATA WA_ZWF002 TYPE ZWF002_1.
DATA IT_SWRTWIAGENT TYPE SWRTWIAGENT.
DATA IT_SWR_WIDTL TYPE SWR_WIDTL.
DATA IT_SWR_CONT TYPE SWR_CONT OCCURS 0.
DATA IT_SWP_LOGTAB TYPE SWP_LOGTAB OCCURS 0.
DATA WA_SWP_LOGTAB TYPE SWP_LOGTAB.
DATA L_USERID TYPE XUBNAME.
IF TYPEID IS INITIAL OR INSTID IS INITIAL OR WFID IS INITIAL.
EXIT.
ENDIF.
L_OBJTYPE = TYPEID.
L_OBJKEY = INSTID.
"Get all work items by object key on running time (Top WI ID)
CALL FUNCTION 'SAP_WAPI_WORKITEMS_TO_OBJECT'
EXPORTING
OBJTYPE = L_OBJTYPE
OBJKEY = L_OBJKEY
TABLES
WORKLIST = IT_SWR_WIHDR.
IF IT_SWR_WIHDR IS INITIAL.
EXIT.
ENDIF.
"Get workflow template ID in setting table
SELECT SINGLE * FROM ZWF002_1 INTO WA_ZWF002 WHERE WFID = WFID.
"Based on workflow template ID, get work item detail and container
LOOP AT IT_SWR_WIHDR INTO WA_SWR_WIHDR WHERE WI_RH_TASK = WA_ZWF002-WI_RH_TASK.
"Get Top WI ID Details
CALL FUNCTION 'SAP_WAPI_GET_WORKITEM_DETAIL'
EXPORTING
WORKITEM_ID = WA_SWR_WIHDR-WI_ID
IMPORTING
WORKITEM_DETAIL = IT_SWR_WIDTL.
"Get Goalble Container
CALL FUNCTION 'SAP_WAPI_READ_CONTAINER'
EXPORTING
WORKITEM_ID = WA_SWR_WIHDR-WI_ID
TABLES
SIMPLE_CONTAINER = IT_CONTAINER.
"Get Sub-WI List
CALL FUNCTION 'SWP_WORKFLOW_LOG_READ'
EXPORTING
TOP_LEVEL_WF = WA_SWR_WIHDR-WI_ID
TABLES
WF_LOG = IT_SWP_LOGTAB.
LOOP AT IT_SWP_LOGTAB INTO WA_SWP_LOGTAB WHERE WI_TYPE = 'W'.
"Get work item user
"CALL FUNCTION 'RH_USERS_OF_WI_READ'
SELECT SINGLE USER_ID
INTO L_USERID
FROM SWWUSERWI
WHERE WI_ID = WA_SWP_LOGTAB-WI_ID AND NO_SEL = ''.
IF SY-SUBRC = 0.
IT_CONTAINER-ELEMENT = 'ACTUAL_NEXT_USER'.
IT_CONTAINER-VALUE = L_USERID.
APPEND IT_CONTAINER.
IT_CONTAINER-ELEMENT = 'WI_CD'.
IT_CONTAINER-VALUE = WA_SWP_LOGTAB-WI_CD.
APPEND IT_CONTAINER.
IT_CONTAINER-ELEMENT = 'WI_CT'.
IT_CONTAINER-VALUE = WA_SWP_LOGTAB-WI_CT.
APPEND IT_CONTAINER.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFUNCTION.
method IF_EX_DOCUMENT_MAIN01~AFTER_READ_DATA.
DATA: WA_DRAW TYPE DRAW,
IT_DRAW TYPE TABLE OF DRAW.
"Show lastest version for superior document
IF DRAW-PRENR IS NOT INITIAL.
SELECT * INTO TABLE IT_DRAW FROM DRAW
WHERE DOKAR = DRAW-PREAR AND DOKNR = DRAW-PRENR AND DOKTL = DRAW-PRETL.
SORT IT_DRAW BY DOKVR DESCENDING.
READ TABLE IT_DRAW INDEX 1 INTO WA_DRAW.
DRAW-PREVR = WA_DRAW-DOKVR.
ENDIF.
endmethod.
method IF_EX_DOCUMENT_MAIN01~BEFORE_SAVE.
CALL FUNCTION 'ZWF_INTERFACE_DRAW'
EXPORTING
DRAW = DRAW.
endmethod.
FUNCTION ZWF_INTERFACE_CS000010.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(I_STZUB) LIKE STZUB STRUCTURE STZUB
*" REFERENCE(FL_UPD_TASK) TYPE XFELD OPTIONAL
*" TABLES
*" T_CLRKB STRUCTURE CSCLRK
*" T_CLSTB STRUCTURE CLSTB
*" T_DOSTB STRUCTURE DOSTB
*" T_EQSTB STRUCTURE EQSTB
*" T_KDSTB STRUCTURE KDSTB
*" T_MASTB STRUCTURE MASTB
*" T_PRSTB STRUCTURE PRSTB
*" T_STASB STRUCTURE STASB
*" T_STKOB STRUCTURE STKOB
*" T_STPOB STRUCTURE STPOB
*" T_STPUB STRUCTURE STPUB
*" T_STSTB STRUCTURE STSTB
*" T_TPSTB STRUCTURE TPSTB
*"----------------------------------------------------------------------
DATA: L_TYPEID TYPE SIBFTYPEID.
DATA: L_INSTID TYPE SIBFBORIID.
DATA: CONTAINER TYPE TABLE OF SWCONT WITH HEADER LINE.
DATA: BEGIN OF OBJKEY,
MATERIAL LIKE MAST-MATNR,
PLANT LIKE MAST-WERKS,
BOMUSAGE LIKE MAST-STLAN,
END OF OBJKEY.
DATA: WA_OBJKEY LIKE OBJKEY OCCURS 0 WITH HEADER LINE.
DATA: L_MTART TYPE MTART.
DATA: WA_KNMT TYPE KNMT,
IT_KNMT TYPE KNMT OCCURS 0.
IF SY-TCODE <> 'CS01' AND SY-TCODE <> 'CS02'
AND SY-UNAME <> 'WF-BATCH' AND SY-BINPT <> 'X'.
EXIT.
ENDIF.
" Only run approval flow for finish goods
* SELECT SINGLE MTART INTO L_MTART FROM MARA
* WHERE MATNR = T_MASTB-MATNR.
* IF SY-SUBRC <> 0.
* EXIT.
* ENDIF.
* IF L_MTART <> 'ZVFG' AND L_MTART <> 'ZUFG'.
* EXIT.
* ENDIF.
IF T_STKOB-STLST = 2.
"Active BOM can not be approved again
EXIT.
ENDIF.
WA_OBJKEY-MATERIAL = T_MASTB-MATNR.
WA_OBJKEY-PLANT = T_MASTB-WERKS.
WA_OBJKEY-BOMUSAGE = T_MASTB-STLAN.
APPEND WA_OBJKEY.
L_INSTID = WA_OBJKEY.
L_TYPEID = 'BUS1080'.
CALL FUNCTION 'ZWF_DIS_APPROVELOG_1'
EXPORTING
TYPEID = L_TYPEID
INSTID = L_INSTID
SUBMIT = 'X'
TABLES
CONTAINER = CONTAINER.
ENDFUNCTION.