SAP: MM02 MM12 Enhancement LMGMMIIS

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 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 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 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(1TYPE 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.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值