SAP CC03 User Exit

*&---------------------------------------------------------------------*
*&  Include           ZXCCAU05
*&---------------------------------------------------------------------*

  CALL FUNCTION 'ZWF_INTERFACE_ECM'
    EXPORTING
      AENRB         ECM_DATA

 

FUNCTION ZWF_INTERFACE_ECM.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(AENRB) TYPE  AENRB
*"----------------------------------------------------------------------
  DATA: L_TYPEID TYPE SIBFTYPEID.
  DATA: L_INSTID TYPE SIBFBORIID.
  DATA: CONTAINER TYPE TABLE OF SWCONT WITH HEADER LINE.
  DATA: WA_AENV TYPE AENV,
        IT_AENV TYPE TABLE OF AENV.
  DATA: L_RUN TYPE FLAG.

  IF SY-TCODE <> 'CC02'
    AND SY-UNAME <> 'WF-BATCH' AND SY-BINPT <> 'X'.
    EXIT.
  ENDIF.

  "Function with release key (EO) & without release key (MAEO)
  IF AENRB-AEFUN <> '' AND AENRB-AEFUN <> '1'.
    EXIT.
  ENDIF.

  "Check change material or material BOM
  SELECT INTO TABLE IT_AENV FROM AENV WHERE AENNR AENRB-AENNR AND AEERL 'X'.
  LOOP AT IT_AENV INTO WA_AENV.
    IF WA_AENV-AETYP OR WA_AENV-AETYP 41.
      L_RUN 'X'.
      EXIT.
    ENDIF.
  ENDLOOP.
  CHECK L_RUN 'X'.

  L_TYPEID 'ECM'.
  L_INSTID AENRB-AENNR.
  CALL FUNCTION 'ZWF_DIS_APPROVELOG_1'
    EXPORTING
      TYPEID    L_TYPEID
      INSTID    L_INSTID
      SUBMIT    'X'
    TABLES
      CONTAINER CONTAINER.

ENDFUNCTION.

 

FUNCTION ZWF_DIS_APPROVELOG_1.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(TYPEID) TYPE  SIBFTYPEID OPTIONAL
*"     VALUE(INSTID) TYPE  SIBFBORIID OPTIONAL
*"     VALUE(WFID) TYPE  ZWFID OPTIONAL
*"     VALUE(SUBMIT) TYPE  CHAR1 OPTIONAL
*"  EXPORTING
*"     VALUE(UCOMM) LIKE  SY-UCOMM
*"  TABLES
*"      CONTAINER STRUCTURE  SWCONT OPTIONAL
*"----------------------------------------------------------------------
  DATA: WA_CONTAINER TYPE SWCONT.
  DATA: WA_SWWUSERWI TYPE SWWUSERWI,
        IT_SWWUSERWI TYPE SWWUSERWI OCCURS 0.
  DATA: L_STSPID TYPE ZSPID.
  DATA: WA_ZWF002 TYPE ZWF002_1.
  DATA: L_OBJTYPE TYPE SWO_OBJTYP.
  DATA: L_OBJKEY TYPE SWO_TYPEID.
  DATA: SWO_RETURN TYPE SWOTRETURN.
  DATA: IT_CONTAINER TYPE TABLE OF SWCONT WITH HEADER LINE.
  DATA: IT_SWR_CONT TYPE TABLE OF SWR_CONT WITH HEADER LINE.
  DATA: L_CREATOR TYPE SYUNAME.
  DATA: L_ISLAU TYPE ZISLAU.
  DATA: CHK_ADM TYPE RS_XFIELD.

  "Clear all variants value
  PERFORM INIT_VARIANT.

  "Initalize TYPEID
  IF TYPEID IS INITIAL.
    SELECT SINGLE FROM ZWF002_1 INTO WA_ZWF002 WHERE WFID WFID.
    TYPEID WA_ZWF002-TYPEID.
  ENDIF.

  "Initalize WFID
  IF WFID IS INITIAL.
    L_OBJTYPE TYPEID.
    L_OBJKEY  INSTID.
    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.
      MESSAGE W015(ZWF_1).
      EXIT.
    ENDIF.
    READ TABLE IT_CONTAINER WITH KEY ELEMENT 'WFID'.
    WFID IT_CONTAINER-VALUE.
  ENDIF.

  "If launch workflow
  CALL FUNCTION 'ZWF_CHECK_WF_RUN'
    EXPORTING
      WFID    WFID
      CHK_ADM ''
    EXCEPTIONS
      NOT_RUN 1
      OTHERS  2.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.

  "Get creator
  CALL FUNCTION 'ZKZ_GETCREATOR'
    EXPORTING
      INSTID INSTID
      WFID   WFID
    IMPORTING
      RESULT L_CREATOR.
  IF SUBMIT 'X'.
    "If not creator, then exit when submit
    IF L_CREATOR <> SY-UNAME.
      EXIT.
    ENDIF.
  ENDIF.

  "Get current process
  CALL FUNCTION 'ZKZ_GETCURRAPPR'
    EXPORTING
      INSTID          INSTID
      WFID            WFID
      SUBMIT_FLAG     SUBMIT
    IMPORTING
      WA_CURR_PROCESS G_CURR_PROCESS.

  "Get current O/S work item
  CALL FUNCTION 'ZKZ_GET_CURR_WI'
    EXPORTING
      TYPEID       TYPEID
      INSTID       INSTID
      WFID         WFID
    TABLES
      IT_SWWUSERWI IT_SWWUSERWI.
  READ TABLE IT_SWWUSERWI INTO WA_SWWUSERWI INDEX 1.

  G_WIID WA_SWWUSERWI-WI_ID.
  G_TYPEID  TYPEID.
  G_WFID    WFID.
  G_INSTID  INSTID.
  G_SUBMIT  SUBMIT.
  G_CREATOR L_CREATOR.

  CLEAR IT_SWR_CONT[].
  CALL FUNCTION 'ZKZ_GETWICONTAINER'
    EXPORTING
      TYPEID       TYPEID
      INSTID       INSTID
      WFID         WFID
    TABLES
      IT_CONTAINER IT_SWR_CONT.

  LOOP AT IT_SWR_CONT.
    CONTAINER-ELEMENT IT_SWR_CONT-ELEMENT.
    CONTAINER-VALUE IT_SWR_CONT-VALUE.
    APPEND CONTAINER.
  ENDLOOP.

  G_CONTAINER[] CONTAINER[].

  DYNAME SY-REPID.
  DYNUMB SY-DYNNR.

  "Get object number
  LOOP AT CONTAINER INTO WA_CONTAINER WHERE ELEMENT 'OBJNR'.
    G_OBJNR WA_CONTAINER-VALUE.
  ENDLOOP.

  "Get current status (for show user's function buttons)
  SELECT SINGLE STSPID INTO L_STSPID FROM ZWF002_1 WHERE WFID WFID.
  IF L_STSPID G_CURR_PROCESS-SPID.
    G_STATUS 'DRAFT'.
  ENDIF.
  IF G_CURR_PROCESS-SPID 'APP'.
    G_STATUS 'APP'.
  ENDIF.

  "Get Containers (Exit for workflow)
  CALL FUNCTION 'ZWF_EXIT_CONTAINER'
    EXPORTING
      TYPEID       G_TYPEID
      WFID         G_WFID
      INSTID       G_INSTID
      CREATOR      G_CREATOR
    TABLES
      AC_CONTAINER G_CONTAINER
    EXCEPTIONS
      NO_CONTAINER 1
      OTHERS       2.
  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.

  CALL SCREEN 0100 STARTING AT 1
                   ENDING   AT 115 21.

  UCOMM G_UCOMM.

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.

  "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_GETCREATOR.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"     REFERENCE(WFID) TYPE  ZWFID
*"  EXPORTING
*"     VALUE(RESULT) TYPE  SYUNAME
*"     VALUE(SPNAME) TYPE  ZSPNAME
*"----------------------------------------------------------------------
  DATA: IT_ZWF004 TYPE ZWF004_1 OCCURS WITH HEADER LINE.
  DATA: WA_ZWF004 TYPE ZWF004_1.
  DATA: L_AGENT(20TYPE C.

  SELECT INTO TABLE IT_ZWF004 FROM ZWF004_1
    WHERE SPLX 'S' AND INSTID INSTID AND WFID WFID.
  IF SY-SUBRC <> 0.
    RESULT SY-UNAME.
    EXIT.
  ENDIF.

  SORT IT_ZWF004 BY SPRQ SPSJ DESCENDING.
  READ TABLE IT_ZWF004 INTO WA_ZWF004 INDEX 1.

  CONCATENATE 'US' WA_ZWF004-SPYH INTO L_AGENT.

  CALL FUNCTION 'SWD_CHECK_AGENT'
    EXPORTING
      IN_EXPRESSION L_AGENT
    EXCEPTIONS
      ERROR         1
      BINDING_ERROR 2
      OTHERS        3.

  IF SY-SUBRC 0.
    RESULT WA_ZWF004-SPYH.
  ELSE.
    RESULT SY-UNAME.
  ENDIF.
  SPNAME WA_ZWF004-SPNAME.

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.

  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.
    ELSE.
      CALL FUNCTION 'ZKZ_GETWICONTAINER'
        EXPORTING
          TYPEID       TYPEID
          INSTID       INSTID
          WFID         WFID
        TABLES
          IT_CONTAINER IT_CONTAINER.

      IF IT_CONTAINER IS INITIAL.
        WA_CURR_PROCESS-SPID    'APP'.
        WA_CURR_PROCESS-SPNAME  'SYSTEM WORKFLOW'.
        WA_CURR_PROCESS-SELID   ''.
        SELECT FROM ZWF004_1 INTO TABLE IT_ZWF004
          WHERE WFID WFID AND INSTID INSTID.
        SORT IT_ZWF004 BY SPCNT DESCENDING.
        READ TABLE IT_ZWF004 INTO WA_ZWF004 INDEX 1.
        WA_CURR_PROCESS-SPRQ    WA_ZWF004-SPRQ.
        WA_CURR_PROCESS-SPSJ    WA_ZWF004-SPSJ.
      ELSE.
        LOOP AT IT_CONTAINER INTO WA_CONTAINER WHERE ELEMENT 'NEXT_SPID'.
          IF WA_CONTAINER-VALUE SPACE.
            "          SELECT SINGLE * FROM ZWF002_1 INTO WA_ZWF002 WHERE WFID = WFID.
            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.
      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'.
      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.

 

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_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'.
      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.

 

FUNCTION ZWF_EXIT_CONTAINER.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TYPEID) TYPE  SIBFTYPEID
*"     REFERENCE(WFID) TYPE  ZWFID
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"     REFERENCE(CREATOR) TYPE  UNAME
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"  EXCEPTIONS
*"      NO_CONTAINER
*"----------------------------------------------------------------------
  DATA: L_INDEX TYPE I.

  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'Initiator'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'Initiator'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 12.
    AC_CONTAINER-VALUE CREATOR.
    APPEND AC_CONTAINER.
  ENDIF.

  CASE WFID.
    WHEN 'WFBOMC01'.
      CALL FUNCTION 'ZWF_EXIT_CONTAINER_BOM'
        EXPORTING
          INSTID       INSTID
        TABLES
          AC_CONTAINER AC_CONTAINER
        EXCEPTIONS
          NO_CONTAINER 1
          OTHERS       2.
      IF SY-SUBRC <> 0.
        RAISE NO_CONTAINER.
      ENDIF.

    WHEN 'WFECNA01'.
      CALL FUNCTION 'ZWF_EXIT_CONTAINER_EO'
        EXPORTING
          INSTID       INSTID
        TABLES
          AC_CONTAINER AC_CONTAINER.

    WHEN 'WFECNA02'.
      CALL FUNCTION 'ZWF_EXIT_CONTAINER_MAEO'
        EXPORTING
          INSTID       INSTID
        TABLES
          AC_CONTAINER AC_CONTAINER.

    WHEN 'WFMMCA01'.
      CALL FUNCTION 'ZWF_EXIT_CONTAINER_MM'
        EXPORTING
          INSTID       INSTID
        TABLES
          AC_CONTAINER AC_CONTAINER
        EXCEPTIONS
          NO_CONTAINER 1
          OTHERS       2.
      IF SY-SUBRC <> 0.
        RAISE NO_CONTAINER.
      ENDIF.
    WHEN 'WFDRAW01'.
      CALL FUNCTION 'ZWF_EXIT_CONTAINER_SPEC'
        EXPORTING
          INSTID       INSTID
        TABLES
          AC_CONTAINER AC_CONTAINER
        EXCEPTIONS
          NO_CONTAINER 1
          OTHERS       2.
      IF SY-SUBRC <> 0.
        RAISE NO_CONTAINER.
      ENDIF.
    WHEN 'WFMRRN01' OR 'WFMRRN02'.
      CALL FUNCTION 'ZWF_EXIT_CONTAINER_MRRN'
        EXPORTING
          INSTID       INSTID
        TABLES
          AC_CONTAINER AC_CONTAINER
        EXCEPTIONS
          NO_CONTAINER 1
          OTHERS       2.
      IF SY-SUBRC <> 0.
        RAISE NO_CONTAINER.
      ENDIF.
    WHEN 'WFMRRN03'.
      CALL FUNCTION 'ZWF_EXIT_CONTAINER_IMIR'
        EXPORTING
          INSTID       INSTID
        TABLES
          AC_CONTAINER AC_CONTAINER
        EXCEPTIONS
          NO_CONTAINER 1
          OTHERS       2.
      IF SY-SUBRC <> 0.
        RAISE NO_CONTAINER.
      ENDIF.

    WHEN OTHERS.
  ENDCASE.



ENDFUNCTION.

 

FUNCTION ZWF_EXIT_CONTAINER_BOM.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TYPEID) TYPE  SIBFTYPEID OPTIONAL
*"     REFERENCE(WFID) TYPE  ZWFID OPTIONAL
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"  EXCEPTIONS
*"      NO_CONTAINER
*"----------------------------------------------------------------------
  DATA: L_INDEX TYPE I.
  DATA: WA_KNMT TYPE KNMT,
        IT_KNMT TYPE KNMT OCCURS 0.

  "Plant
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PLANT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PLANT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 4.
    AC_CONTAINER-VALUE INSTID+18(4).
    APPEND AC_CONTAINER.
  ENDIF.

  "Customer
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'CUSTOMER'.
  IF SY-SUBRC <> 0.
    CALL FUNCTION 'ZWF_GET_CUSTOMER_BY_MATERIAL'
      EXPORTING
        MATNR             INSTID(18)
      TABLES
        KNMT              IT_KNMT
      EXCEPTIONS
        NO_CUSTOMER_FOUND 1
        OTHERS            2.
    IF SY-SUBRC <> 0.
      MESSAGE W004(ZWF_BOM).
      EXIT.
    ENDIF.

    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    READ TABLE IT_KNMT INTO WA_KNMT INDEX 1.
    AC_CONTAINER-ELEMENT 'CUSTOMER'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE WA_KNMT-KUNNR.
    APPEND AC_CONTAINER.
  ENDIF.

ENDFUNCTION.

FUNCTION ZWF_GET_CUSTOMER_BY_MATERIAL.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(MATNR) TYPE  MATNR
*"  TABLES
*"      KNMT STRUCTURE  KNMT
*"  EXCEPTIONS
*"      NO_CUSTOMER_FOUND
*"----------------------------------------------------------------------
*  DATA: BEGIN OF WA_KUNNR.
*  DATA:     KUNNR TYPE KUNNR_V.
*  DATA: END OF WA_KUNNR.


  SELECT INTO TABLE KNMT FROM KNMT WHERE MATNR MATNR.
  IF SY-SUBRC <> 0.
    RAISE NO_CUSTOMER_FOUND.
  ENDIF.

ENDFUNCTION.

 

FUNCTION ZWF_EXIT_CONTAINER_EO .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TYPEID) TYPE  SIBFTYPEID OPTIONAL
*"     REFERENCE(WFID) TYPE  ZWFID OPTIONAL
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"----------------------------------------------------------------------
  DATA: L_AENNR TYPE AENNR.
  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER TYPE KUNNR.
  DATA: L_INDEX TYPE I.

  L_AENNR INSTID.

  "Get plant and customer
  CALL FUNCTION 'ZWF_EO_GET_PLANT_AND_CUTM'
    EXPORTING
      AENNR              L_AENNR
    IMPORTING
      PLANT              L_PLANT
      CUSTOMER           L_CUSTOMER
    EXCEPTIONS
      CLASS_NOT_FOUND    1
      PLANT_NOT_FOUND    2
      CUSTOMER_NOT_FOUND 3
      OTHERS             4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  "Plant
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PLANT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PLANT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 4.
    AC_CONTAINER-VALUE L_PLANT.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_PLANT.
      AC_CONTAINER-VALUE L_PLANT.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Customer
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'CUSTOMER'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'CUSTOMER'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE L_CUSTOMER.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_CUSTOMER.
      AC_CONTAINER-VALUE L_CUSTOMER.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

ENDFUNCTION.

 

FUNCTION ZWF_EO_GET_PLANT_AND_CUTM .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(AENNR) TYPE  AENNR
*"  EXPORTING
*"     REFERENCE(PLANT) TYPE  WERKS_D
*"     REFERENCE(CUSTOMER) TYPE  KUNNR
*"  EXCEPTIONS
*"      CLASS_NOT_FOUND
*"      PLANT_NOT_FOUND
*"      CUSTOMER_NOT_FOUND
*"----------------------------------------------------------------------

*  DATA: WA_AEOI     TYPE AEOI,
*        IT_AEOI     TYPE TABLE OF AEOI.
*  DATA: L_MATNR     TYPE MATNR.
*  DATA: L_PLANT     TYPE WERKS_D,
*        L_PLANT_OLD TYPE WERKS_D.
*  DATA: WA_KNMT     TYPE KNMT,
*        IT_KNMT     TYPE TABLE OF KNMT.
*  DATA: L_KUNNR     TYPE KUNNR,
*        L_KUNNR_OLD TYPE KUNNR.
*
*  "Get all items by change number
*  SELECT * INTO TABLE IT_AEOI FROM AEOI WHERE AENNR = AENNR.
*
*  LOOP AT IT_AEOI INTO WA_AEOI.
*    "Get item
*    L_MATNR = WA_AEOI-USOBJ(18).
*
*    "Get Plant
*    IF WA_AEOI-AETYP = '02'.  "Material BOM
*      L_PLANT = WA_AEOI-USOBJ+18(4).
*    ELSEIF WA_AEOI-AETYP = '41'.  "Material
*
*    ENDIF.
*    "If difference plant, can not be submitted
*    IF L_PLANT_OLD IS NOT INITIAL AND L_PLANT_OLD <> L_PLANT.
*      RAISE DIFFERENCE_PLANT.
*    ENDIF.
*    L_PLANT_OLD = L_PLANT.
*
*    "Get Customer
*    IF WA_AEOI-AETYP = '02'.  "Material BOM
*      CALL FUNCTION 'ZWF_GET_CUSTOMER_BY_MATERIAL'
*        EXPORTING
*          MATNR             = L_MATNR
*        TABLES
*          KNMT              = IT_KNMT
*        EXCEPTIONS
*          NO_CUSTOMER_FOUND = 1
*          OTHERS            = 2.
*      IF SY-SUBRC = 0.
*        READ TABLE IT_KNMT INTO WA_KNMT INDEX 1.
*        L_KUNNR = WA_KNMT-KUNNR.
*      ENDIF.
*
*    ELSEIF WA_AEOI-AETYP = '41'.  "Material
*
*    ENDIF.
*
*    "If difference plant, can not be submitted
*    IF L_KUNNR_OLD IS NOT INITIAL AND L_KUNNR_OLD <> L_KUNNR.
*      RAISE DIFFERENCE_CUSTOMER.
*    ENDIF.
*    L_KUNNR_OLD = L_KUNNR.
*
*  ENDLOOP.
*
*  PLANT = L_PLANT.
*  CUSTOMER = L_KUNNR.

  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER  TYPE KUNNR.
  DATA: L_OBJ TYPE AUSP-OBJEK.
  DATA: WA_EXP_AUSP TYPE AUSP,
        IT_EXP_AUSP TYPE TABLE OF AUSP.
  DATA: L_ATINN TYPE ATINN.
  DATA: L_VKORG TYPE VKORG.

  CLEAR: SY-MSGID, SY-MSGTY, SY-MSGNO, SY-MSGV1, SY-MSGV2, SY-MSGV3, SY-MSGV4.

  "Get Customer
  L_OBJ AENNR.
  CALL FUNCTION 'CLFM_GET_AUSP_FROM_BUFFER'
    EXPORTING
      OBJECT    L_OBJ
      CLASSYTPE '025'
    TABLES
      EXP_AUSP  IT_EXP_AUSP.

  IF IT_EXP_AUSP[] IS INITIAL.
    SY-MSGID 'ZWF_ECM'.
    SY-MSGTY 'E'.
    SY-MSGNO '010'.
    SY-MSGV1 'ZWF_EO'.
    RAISE CLASS_NOT_FOUND.
  ENDIF.

  SELECT SINGLE ATINN INTO L_ATINN
   FROM CABN
   WHERE ATNAM 'ZWF_CUSTOMER'.
  IF L_ATINN IS INITIAL.
    SY-MSGID 'ZWF_ECM'.
    SY-MSGTY 'E'.
    SY-MSGNO '010'.
    SY-MSGV1 'ZWF_EO'.
    RAISE CUSTOMER_NOT_FOUND.
  ENDIF.

  READ TABLE IT_EXP_AUSP INTO WA_EXP_AUSP WITH KEY ATINN L_ATINN.
  L_CUSTOMER WA_EXP_AUSP-ATWRT.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  L_CUSTOMER
    IMPORTING
      OUTPUT L_CUSTOMER.

  "Get Plant
  SELECT SINGLE B~VKORG INTO L_VKORG
    FROM KNA1 AS A INNER JOIN KNVV AS ON A~KUNNR B~KUNNR
    WHERE A~KTOKD 'Z001' AND A~KUNNR L_CUSTOMER.
  IF SY-SUBRC <> 0.
    SY-MSGID 'ZWF_ECM'.
    SY-MSGTY 'E'.
    SY-MSGNO '011'.
    SY-MSGV1 L_CUSTOMER.
    RAISE PLANT_NOT_FOUND.
  ENDIF.
  L_PLANT L_VKORG.

  PLANT L_PLANT.
  CUSTOMER L_CUSTOMER.

ENDFUNCTION.

 

FUNCTION ZWF_EXIT_CONTAINER_MAEO .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TYPEID) TYPE  SIBFTYPEID OPTIONAL
*"     REFERENCE(WFID) TYPE  ZWFID OPTIONAL
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"----------------------------------------------------------------------
  DATA: L_AENNR TYPE AENNR.
  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER  TYPE KUNNR.
  DATA: L_MATNR TYPE MATNR.
  DATA: L_INDEX TYPE I.
  DATA: IT_AEOI TYPE AEOI.
  DATA: L_EKGRP TYPE EKGRP.

  L_AENNR INSTID.

  "Get plant and customer
  CALL FUNCTION 'ZWF_MAEO_GET_PLANT_AND_CUTM'
    EXPORTING
      AENNR              L_AENNR
    IMPORTING
      PLANT              L_PLANT
      CUSTOMER           L_CUSTOMER
    EXCEPTIONS
      CLASS_NOT_FOUND    1
      PLANT_NOT_FOUND    2
      CUSTOMER_NOT_FOUND 3
      OTHERS             4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  "Plant
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PLANT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PLANT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 4.
    AC_CONTAINER-VALUE L_PLANT.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_PLANT.
      AC_CONTAINER-VALUE L_PLANT.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Customer
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'CUSTOMER'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'CUSTOMER'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE L_CUSTOMER.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_CUSTOMER.
      AC_CONTAINER-VALUE L_CUSTOMER.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Purchasing Group
  SELECT SINGLE INTO IT_AEOI FROM AEOI WHERE AENNR L_AENNR.
  IF SY-SUBRC 0.
    L_MATNR IT_AEOI-USOBJ.

    SELECT SINGLE EKGRP FROM MARC INTO L_EKGRP
      WHERE MATNR L_MATNR AND WERKS L_PLANT.
    IF SY-SUBRC 0.

      READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PURGROUP'.
      IF SY-SUBRC <> 0.
        DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
        AC_CONTAINER-ELEMENT 'PURGROUP'.
        AC_CONTAINER-TAB_INDEX L_INDEX.
        AC_CONTAINER-TYPE 'C'.
        AC_CONTAINER-ELEMLENGTH 3.
        AC_CONTAINER-VALUE L_EKGRP.
        APPEND AC_CONTAINER.
      ELSE.
        IF AC_CONTAINER-VALUE <> L_EKGRP.
          AC_CONTAINER-VALUE L_EKGRP.
          MODIFY AC_CONTAINER INDEX SY-TABIX.
        ENDIF.
      ENDIF.

    ENDIF.

  ENDIF.

ENDFUNCTION.

 

FUNCTION ZWF_MAEO_GET_PLANT_AND_CUTM .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(AENNR) TYPE  AENNR
*"  EXPORTING
*"     REFERENCE(PLANT) TYPE  WERKS_D
*"     REFERENCE(CUSTOMER) TYPE  KUNNR
*"  EXCEPTIONS
*"      CLASS_NOT_FOUND
*"      PLANT_NOT_FOUND
*"      CUSTOMER_NOT_FOUND
*"----------------------------------------------------------------------
  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER  TYPE KUNNR.
  DATA: L_OBJ TYPE AUSP-OBJEK.
  DATA: WA_EXP_AUSP TYPE AUSP,
        IT_EXP_AUSP TYPE TABLE OF AUSP.
  DATA: L_ATINN TYPE ATINN.
  DATA: L_VKORG TYPE VKORG.

  "Get Customer
  L_OBJ AENNR.
  CALL FUNCTION 'CLFM_GET_AUSP_FROM_BUFFER'
    EXPORTING
      OBJECT    L_OBJ
      CLASSYTPE '025'
      MAFID     'O'
    TABLES
      EXP_AUSP  IT_EXP_AUSP.

  IF IT_EXP_AUSP[] IS INITIAL.
    SY-MSGID 'ZWF_ECM'.
    SY-MSGTY 'E'.
    SY-MSGNO '010'.
    SY-MSGV1 'ZWF_MAEO'.
    RAISE CLASS_NOT_FOUND.
  ENDIF.

  SELECT SINGLE ATINN INTO L_ATINN
   FROM CABN
   WHERE ATNAM 'ZWF_CUSTOMER'.
  IF L_ATINN IS INITIAL.
    SY-MSGID 'ZWF_ECM'.
    SY-MSGTY 'E'.
    SY-MSGNO '010'.
    SY-MSGV1 'ZWF_MAEO'.
    RAISE CUSTOMER_NOT_FOUND.
  ENDIF.

  READ TABLE IT_EXP_AUSP INTO WA_EXP_AUSP WITH KEY ATINN L_ATINN.
  L_CUSTOMER WA_EXP_AUSP-ATWRT.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  L_CUSTOMER
    IMPORTING
      OUTPUT L_CUSTOMER.

  "Get Plant
  SELECT SINGLE B~VKORG INTO L_VKORG
    FROM KNA1 AS A INNER JOIN KNVV AS ON A~KUNNR B~KUNNR
    WHERE A~KTOKD 'Z001' AND A~KUNNR L_CUSTOMER.
  IF SY-SUBRC <> 0.
    SY-MSGID 'ZWF_ECM'.
    SY-MSGTY 'E'.
    SY-MSGNO '011'.
    SY-MSGV1 L_CUSTOMER.
    RAISE PLANT_NOT_FOUND.
  ENDIF.
  L_PLANT L_VKORG.

  PLANT L_PLANT.
  CUSTOMER L_CUSTOMER.

ENDFUNCTION.

 

FUNCTION ZWF_EXIT_CONTAINER_MM .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TYPEID) TYPE  SIBFTYPEID OPTIONAL
*"     REFERENCE(WFID) TYPE  ZWFID OPTIONAL
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"  EXCEPTIONS
*"      NO_CONTAINER
*"----------------------------------------------------------------------
  DATA: L_MATNR TYPE MATNR.
  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER TYPE KUNNR.
  DATA: L_INDEX TYPE I.

  L_MATNR INSTID.

  "Get plant and customer
  CALL FUNCTION 'ZWF_MM_GET_PLANT_AND_CUTM'
    EXPORTING
      MATNR              L_MATNR
    IMPORTING
      PLANT              L_PLANT
      CUSTOMER           L_CUSTOMER
    EXCEPTIONS
      CLASS_NOT_FOUND    1
      PLANT_NOT_FOUND    2
      CUSTOMER_NOT_FOUND 3
      OTHERS             4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    RAISE NO_CONTAINER.
  ENDIF.

  "Plant
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PLANT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PLANT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 4.
    AC_CONTAINER-VALUE L_PLANT.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_PLANT.
      AC_CONTAINER-VALUE L_PLANT.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Customer
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'CUSTOMER'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'CUSTOMER'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE L_CUSTOMER.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_CUSTOMER.
      AC_CONTAINER-VALUE L_CUSTOMER.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

ENDFUNCTION.

 

FUNCTION ZWF_MM_GET_PLANT_AND_CUTM .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(MATNR) TYPE  MATNR
*"  EXPORTING
*"     REFERENCE(PLANT) TYPE  WERKS_D
*"     REFERENCE(CUSTOMER) TYPE  KUNNR
*"  EXCEPTIONS
*"      CLASS_NOT_FOUND
*"      PLANT_NOT_FOUND
*"      CUSTOMER_NOT_FOUND
*"----------------------------------------------------------------------

  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER  TYPE KUNNR.
  DATA: L_OBJ TYPE AUSP-OBJEK.
  DATA: WA_EXP_AUSP TYPE AUSP,
        IT_EXP_AUSP TYPE TABLE OF AUSP.
  DATA: L_ATINN TYPE ATINN.
  DATA: L_VKORG TYPE VKORG.

  CLEAR: SY-MSGID, SY-MSGTY, SY-MSGNO, SY-MSGV1, SY-MSGV2, SY-MSGV3, SY-MSGV4.

  "Get Customer
  L_OBJ MATNR.
  CALL FUNCTION 'CLFM_GET_AUSP_FROM_BUFFER'
    EXPORTING
      OBJECT    L_OBJ
      CLASSYTPE '001'
    TABLES
      EXP_AUSP  IT_EXP_AUSP.

  IF IT_EXP_AUSP[] IS INITIAL.
    SY-MSGID 'ZWF_MM'.
    SY-MSGTY 'W'.
    SY-MSGNO '001'.
    SY-MSGV1 'ZMATL_WF'.
    RAISE CLASS_NOT_FOUND.
  ENDIF.

  SELECT SINGLE ATINN INTO L_ATINN
   FROM CABN
   WHERE ATNAM 'ZEND_CUSTOMER'.
  IF L_ATINN IS INITIAL.
    SY-MSGID 'ZWF_MM'.
    SY-MSGTY 'W'.
    SY-MSGNO '002'.
    SY-MSGV1 'ZMATL_WF'.
    RAISE CUSTOMER_NOT_FOUND.
  ENDIF.

  READ TABLE IT_EXP_AUSP INTO WA_EXP_AUSP WITH KEY ATINN L_ATINN.
  L_CUSTOMER WA_EXP_AUSP-ATWRT.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  L_CUSTOMER
    IMPORTING
      OUTPUT L_CUSTOMER.

  "Get Plant
  SELECT SINGLE B~VKORG INTO L_VKORG
    FROM KNA1 AS A INNER JOIN KNVV AS ON A~KUNNR B~KUNNR
    WHERE A~KTOKD 'Z001' AND A~KUNNR L_CUSTOMER.
  IF SY-SUBRC <> 0.
    SY-MSGID 'ZWF_MM'.
    SY-MSGTY 'W'.
    SY-MSGNO '002'.
    SY-MSGV1 L_CUSTOMER.
    RAISE PLANT_NOT_FOUND.
  ENDIF.
  L_PLANT L_VKORG.

  PLANT L_PLANT.
  CUSTOMER L_CUSTOMER.

ENDFUNCTION.

FUNCTION ZWF_EXIT_CONTAINER_SPEC .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TYPEID) TYPE  SIBFTYPEID OPTIONAL
*"     REFERENCE(WFID) TYPE  ZWFID OPTIONAL
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"  EXCEPTIONS
*"      NO_CONTAINER
*"----------------------------------------------------------------------
  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER TYPE KUNNR.
  DATA: L_INDEX TYPE I.

  "Get plant and customer
  CALL FUNCTION 'ZWF_SPEC_GET_PLANT'
    EXPORTING
      INSTID             INSTID
    IMPORTING
      PLANT              L_PLANT
      CUSTOMER           L_CUSTOMER
    EXCEPTIONS
      CLASS_NOT_FOUND    1
      PLANT_NOT_FOUND    2
      CUSTOMER_NOT_FOUND 3
      OTHERS             4.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  "Plant
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PLANT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PLANT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 4.
    AC_CONTAINER-VALUE L_PLANT.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_PLANT.
      AC_CONTAINER-VALUE L_PLANT.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Customer
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'CUSTOMER'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'CUSTOMER'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE L_CUSTOMER.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_CUSTOMER.
      AC_CONTAINER-VALUE L_CUSTOMER.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

ENDFUNCTION.

 

FUNCTION ZWF_SPEC_GET_PLANT .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(INSTID) TYPE  SIBFBORIID OPTIONAL
*"  EXPORTING
*"     REFERENCE(PLANT) TYPE  WERKS_D
*"     REFERENCE(CUSTOMER) TYPE  KUNNR
*"  EXCEPTIONS
*"      CLASS_NOT_FOUND
*"      PLANT_NOT_FOUND
*"      CUSTOMER_NOT_FOUND
*"----------------------------------------------------------------------

  DATA: L_CLASS TYPE TABELLE.
  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER  TYPE KUNNR.
  DATA: L_OBJ TYPE AUSP-OBJEK.
  DATA: WA_EXP_AUSP TYPE AUSP,
        IT_EXP_AUSP TYPE TABLE OF AUSP.
  DATA: L_ATINN TYPE ATINN.
  DATA: L_VKORG TYPE VKORG.

  CLEAR: SY-MSGID, SY-MSGTY, SY-MSGNO, SY-MSGV1, SY-MSGV2, SY-MSGV3, SY-MSGV4.

  "Get Customer
  L_OBJ INSTID.
  L_CLASS 'ZWF_SPEC'.
  CALL FUNCTION 'CLFM_GET_AUSP_FROM_BUFFER'
    EXPORTING
      OBJECT    L_OBJ
      CLASSYTPE '017'
      PTABLE    L_CLASS
      MAFID     'O'
    TABLES
      EXP_AUSP  IT_EXP_AUSP.

  IF IT_EXP_AUSP[] IS INITIAL.
    CALL FUNCTION 'CLFM_GET_AUSP_FROM_BUFFER'
      EXPORTING
        OBJECT          ''
        CLASSYTPE       '017'
        PTABLE          L_CLASS
        OBJECT_IS_CUOBJ 'X'
        MAFID           'O'
      TABLES
        EXP_AUSP        IT_EXP_AUSP.

    IF IT_EXP_AUSP[] IS INITIAL.
      SY-MSGID 'ZWF_DRAW'.
      SY-MSGTY 'W'.
      SY-MSGNO '001'.
      RAISE CLASS_NOT_FOUND.
    ENDIF.
  ENDIF.

  SELECT SINGLE ATINN INTO L_ATINN
   FROM CABN
   WHERE ATNAM 'ZWF_CUSTOMER'.
  IF L_ATINN IS INITIAL.
    SY-MSGID 'ZWF_DRAW'.
    SY-MSGTY 'W'.
    SY-MSGNO '002'.
    RAISE CUSTOMER_NOT_FOUND.
  ENDIF.

  READ TABLE IT_EXP_AUSP INTO WA_EXP_AUSP WITH KEY ATINN L_ATINN.
  L_CUSTOMER WA_EXP_AUSP-ATWRT.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  L_CUSTOMER
    IMPORTING
      OUTPUT L_CUSTOMER.

  "Get Plant
  SELECT SINGLE B~VKORG INTO L_VKORG
    FROM KNA1 AS A INNER JOIN KNVV AS ON A~KUNNR B~KUNNR
    WHERE A~KTOKD 'Z001' AND A~KUNNR L_CUSTOMER.
  IF SY-SUBRC <> 0.
    SY-MSGID 'ZWF_DRAW'.
    SY-MSGTY 'W'.
    SY-MSGNO '001'.
    RAISE PLANT_NOT_FOUND.
  ENDIF.
  L_PLANT L_VKORG.

  PLANT L_PLANT.
  CUSTOMER L_CUSTOMER.

ENDFUNCTION.

FUNCTION ZWF_EXIT_CONTAINER_MRRN .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TYPEID) TYPE  SIBFTYPEID OPTIONAL
*"     REFERENCE(WFID) TYPE  ZWFID OPTIONAL
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"  EXCEPTIONS
*"      NO_CONTAINER
*"----------------------------------------------------------------------
  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER TYPE KUNNR.
  DATA: L_PRODLINE TYPE ZPRODLINE.
  DATA: L_REASONCODE TYPE ZREASONID.
  DATA: L_DEPARTMENT TYPE ZMNTDEP.
  DATA: L_INDEX TYPE I.
  DATA: L_RNTYPE TYPE ZRNTYPE.
  DATA: L_MRRNFLG TYPE ZMRRNFLG.
  DATA: WA_ZMM001 TYPE ZMM001.

  SELECT SINGLE INTO WA_ZMM001
     FROM ZMM001 WHERE MRRNNO INSTID.

*  IF SY-SUBRC <> 0.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*  ENDIF.
  L_MRRNFLG WA_ZMM001-MRRNFLG.
  L_PLANT WA_ZMM001-WERKS.
  L_PRODLINE WA_ZMM001-PRODLINE.
  L_REASONCODE WA_ZMM001-REASON.
  L_CUSTOMER WA_ZMM001-KUNNR.
  L_DEPARTMENT WA_ZMM001-MNTDEP.

  "MRRN Type
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'MRRNTYPE'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'MRRNTYPE'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 1.
    AC_CONTAINER-VALUE L_MRRNFLG.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_MRRNFLG.
      AC_CONTAINER-VALUE L_MRRNFLG.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Plant
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PLANT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PLANT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 4.
    AC_CONTAINER-VALUE L_PLANT.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_PLANT.
      AC_CONTAINER-VALUE L_PLANT.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Department
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'DEPARTMENT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'DEPARTMENT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE L_DEPARTMENT.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_DEPARTMENT.
      AC_CONTAINER-VALUE L_DEPARTMENT.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Customer
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'CUSTOMER'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'CUSTOMER'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE L_CUSTOMER.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_CUSTOMER.
      AC_CONTAINER-VALUE L_CUSTOMER.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Production Line
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PRODLINE'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PRODLINE'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 4.
    AC_CONTAINER-VALUE L_PRODLINE.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_PRODLINE.
      AC_CONTAINER-VALUE L_PRODLINE.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Reason Code
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'REASONCODE'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'REASONCODE'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 2.
    AC_CONTAINER-VALUE L_REASONCODE.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_REASONCODE.
      AC_CONTAINER-VALUE L_REASONCODE.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Return to vendor
  SELECT SINGLE RNTYPE INTO L_RNTYPE FROM ZMM001 WHERE MRRNNO INSTID AND RNTYPE '1'.
  IF SY-SUBRC <> 0.
    L_RNTYPE '0'.
  ENDIF.

  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'RNTYPE'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'RNTYPE'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 1.
    AC_CONTAINER-VALUE L_RNTYPE.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_RNTYPE.
      AC_CONTAINER-VALUE L_RNTYPE.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.
ENDFUNCTION.

FUNCTION ZWF_EXIT_CONTAINER_IMIR .
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(TYPEID) TYPE  SIBFTYPEID OPTIONAL
*"     REFERENCE(WFID) TYPE  ZWFID OPTIONAL
*"     REFERENCE(INSTID) TYPE  SIBFBORIID
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"  EXCEPTIONS
*"      NO_CONTAINER
*"----------------------------------------------------------------------
  DATA: L_PLANT TYPE WERKS_D.
  DATA: L_CUSTOMER TYPE KUNNR.
  DATA: L_PURGROUP TYPE BKGRP.
  DATA: L_REASONCODE TYPE ZREASONID.
  DATA: L_DEPARTMENT TYPE ZMNTDEP.
  DATA: L_INDEX TYPE I.
  DATA: L_PHGA TYPE ZPHGA.
  DATA: L_FLOWPATH(3TYPE C.

  SELECT SINGLE A~WERKS A~EKGRP B~REASON B~KUNNR B~MNTDEP
    INTO (L_PLANT, L_PURGROUP, L_REASONCODE, L_CUSTOMER, L_DEPARTMENT)
    FROM ZMM002 AS A INNER JOIN ZMM001 AS B
    ON A~MRRNNO B~MRRNNO AND A~ITMNO B~ITMNO
    WHERE A~IMNO INSTID.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  "Plant
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PLANT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PLANT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 4.
    AC_CONTAINER-VALUE L_PLANT.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_PLANT.
      AC_CONTAINER-VALUE L_PLANT.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Purchase Group
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'PURGROUP'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'PURGROUP'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 3.
    AC_CONTAINER-VALUE L_PURGROUP.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_PURGROUP.
      AC_CONTAINER-VALUE L_PURGROUP.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Department
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'DEPARTMENT'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'DEPARTMENT'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE L_DEPARTMENT.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_DEPARTMENT.
      AC_CONTAINER-VALUE L_DEPARTMENT.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Customer
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'CUSTOMER'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'CUSTOMER'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 10.
    AC_CONTAINER-VALUE L_CUSTOMER.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_CUSTOMER.
      AC_CONTAINER-VALUE L_CUSTOMER.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "Reason Code
  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'REASONCODE'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'REASONCODE'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 2.
    AC_CONTAINER-VALUE L_REASONCODE.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_REASONCODE.
      AC_CONTAINER-VALUE L_REASONCODE.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

  "FlowPath
  SELECT B~PHGA INTO L_PHGA FROM ZMM002 AS A INNER JOIN ZMM001 AS B
  ON A~MRRNNO B~MRRNNO AND A~ITMNO B~ITMNO
  WHERE A~IMNO INSTID.
    IF L_PHGA 'SCR'.
      L_FLOWPATH 'SCR'.
      EXIT.
    ELSE.
      L_FLOWPATH 'RTV'.
    ENDIF.
  ENDSELECT.

  READ TABLE AC_CONTAINER WITH KEY ELEMENT 'FLOWPATH'.
  IF SY-SUBRC <> 0.
    DESCRIBE TABLE AC_CONTAINER LINES L_INDEX.
    AC_CONTAINER-ELEMENT 'FLOWPATH'.
    AC_CONTAINER-TAB_INDEX L_INDEX.
    AC_CONTAINER-TYPE 'C'.
    AC_CONTAINER-ELEMLENGTH 3.
    AC_CONTAINER-VALUE L_FLOWPATH.
    APPEND AC_CONTAINER.
  ELSE.
    IF AC_CONTAINER-VALUE <> L_FLOWPATH.
      AC_CONTAINER-VALUE L_FLOWPATH.
      MODIFY AC_CONTAINER INDEX SY-TABIX.
    ENDIF.
  ENDIF.

ENDFUNCTION.

 

*&---------------------------------------------------------------------*
*&  Include           ZXCCAU06
*&---------------------------------------------------------------------*

CALL FUNCTION 'ZWF_ECM_ISEDIT'
 EXPORTING
   AENRB          ECM_DATA
 EXCEPTIONS
   NOT_EDIT       1
   OTHERS         2
          .
IF SY-SUBRC <> 0.
  RAISE NOT_OK.
ENDIF.

 

FUNCTION ZWF_ECM_ISEDIT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(AENRB) TYPE  AENRB 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_ISLAU TYPE ZISLAU.
  DATA: L_TYPEID TYPE SIBFTYPEID.
  DATA: WA_SWWUSERWI TYPE SWWUSERWI,
        IT_SWWUSERWI TYPE SWWUSERWI OCCURS 0.
  DATA: G_WIID TYPE SWW_WIID.

  IF SY-TCODE 'CC01'.   "Change master
    IMPORT L_AEPRO FROM MEMORY ID 'ECM_PROFILE'.
    IF NOT L_AEPRO IS INITIAL.
      IF L_AEPRO 'Z0000001' AND AENRB-AEFUN <> '' or
        L_AEPRO 'Z0000002' AND AENRB-AEFUN <> '1' ) .
        SY-MSGID 'ZWF_ECM'.
        SY-MSGTY 'E'.
        SY-MSGNO '014'.
        SY-MSGV1 '(EO:Chg.Mas.->With Rel.Key->Profile Z0000002)'.
        SY-MSGV2 '(MAEO:Chg.Mas.->Without Rel.Key->Profile Z0000001)'.
        RAISE NOT_EDIT.
      ENDIF.
    ENDIF.
  ELSEIF SY-TCODE 'CC31'. "ECR
    SY-MSGID 'ZWF_ECM'.
    SY-MSGTY 'E'.
    SY-MSGNO '014'.
    SY-MSGV1 '(EO:Chg.Mas.->With Rel.Key->Profile Z0000002)'.
    SY-MSGV2 '(MAEO:Chg.Mas.->Without Rel.Key->Profile Z0000001)'.
    RAISE NOT_EDIT.
  ENDIF.

  IF SY-TCODE <> 'CC02'.
    EXIT.
  ENDIF.

  "Function with release key (EO)or without release key (MAEO)
  IF AENRB-AEFUN <> '' AND AENRB-AEFUN <> '1'.
    EXIT.
  ENDIF.

  "Get WFID
  L_OBJKEY AENRB-AENNR.
  L_OBJTYPE 'ECM'.
  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.
    EXIT.
  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.

  "If ECM was released, then do not change again
  IF AENRB-RLKEY '01'.
    SY-MSGID 'ZWF_1'.
    SY-MSGTY 'E'.
    SY-MSGNO '011'.
    SY-MSGV1 'Status is active'.
    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 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.

  "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(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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值