ENHANCEMENT 1 ZWF_MM_ENIM1. "active version
CALL FUNCTION 'ZWF_MM_ISEDIT'
EXPORTING
MATNR = RMMG1-MATNR
AENNR = RMMG1-AENNR
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.
ENDENHANCEMENT.
FUNCTION ZWF_MM_ISEDIT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(MATNR) TYPE MATNR OPTIONAL
*" VALUE(AENNR) TYPE AENNR 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_AENNR TYPE SIBFBORIID.
IF SY-TCODE <> 'MM02' AND SY-TCODE <> 'MM12'.
EXIT.
ENDIF.
"Get WFID
L_OBJKEY = MATNR.
L_OBJTYPE = 'BUS1001006'.
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 material status
SELECT SINGLE MSTAE FROM MARA INTO L_MSTAE WHERE MATNR = MATNR.
IF SY-SUBRC <> 0.
EXIT.
ELSE.
IF L_MSTAE = ''.
IF AENNR IS INITIAL.
SY-MSGID = 'ZWF_1'.
SY-MSGTY = 'E'.
SY-MSGNO = '011'.
SY-MSGV1 = 'Status is active'.
RAISE NOT_EDIT.
ELSE.
"Check change number is under approval or not
L_AENNR = AENNR.
CALL FUNCTION 'ZKZ_CHECK_UNDER_APPROVAL'
EXPORTING
WFID = 'WFECNA02'
INSTID = L_AENNR
EXCEPTIONS
UNDER_APPROVAL = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
SY-MSGID = 'ZWF_1'.
SY-MSGTY = 'E'.
SY-MSGNO = '011'.
SY-MSGV1 = 'Change number is under approval'.
RAISE NOT_EDIT.
ENDIF.
ENDIF.
ENDIF.
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_CHECK_UNDER_APPROVAL.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(WFID) TYPE ZWFID
*" REFERENCE(INSTID) TYPE SIBFBORIID
*" EXCEPTIONS
*" UNDER_APPROVAL
*"----------------------------------------------------------------------
DATA: L_SPID TYPE ZSPID.
DATA: L_DRSPID TYPE ZSPID.
SELECT SINGLE SPID INTO L_SPID FROM ZWF006_1
WHERE WFID = WFID AND INSTID = INSTID.
IF SY-SUBRC = 0.
SELECT SINGLE DRSPID INTO L_DRSPID FROM ZWF002_1
WHERE WFID = WFID.
IF L_SPID <> L_DRSPID.
RAISE UNDER_APPROVAL.
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.