LCSDIFAZ:
FORM MAST_INSERT.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Form MAST_INSERT, Start A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 2 ZBOM_IMPLEMEMENTATION. "active version
CALL FUNCTION 'ZWF_BOM_APPRBOX'
EXPORTING
MATNR = TSD-MATNR
WERKS = TSD-WERKS
STLAN = TSD-STLAN
AENNR = TSD-AENNR
.
ENDENHANCEMENT.
FUNCTION ZWF_BOM_APPRBOX.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(MATNR) TYPE MATNR OPTIONAL
*" VALUE(WERKS) TYPE WERKS_D OPTIONAL
*" VALUE(STLAN) TYPE STLAN OPTIONAL
*" VALUE(AENNR) TYPE AENNR OPTIONAL
*"----------------------------------------------------------------------
DATA: L_OBJKEY TYPE SIBFBORIID.
DATA: L_SPID TYPE ZSPID.
DATA: L_STLST TYPE STLST.
DATA: L_WFID TYPE ZWFID.
DATA: L_TYPEID TYPE SWO_OBJTYP.
DATA: SWO_RETURN TYPE SWOTRETURN.
DATA: IT_CONTAINER TYPE TABLE OF SWCONT WITH HEADER LINE.
DATA: L_ISLAU TYPE ZISLAU.
DATA: L_STSPID TYPE ZSPID.
IF SY-TCODE <> 'CS02' AND SY-TCODE <> 'CS03'.
EXIT.
ENDIF.
* AUTHORITY-CHECK OBJECT 'C_STUE_NOH' ID 'NOHIS' FIELD 'X'.
* IF SY-SUBRC = 0.
* EXIT.
* ENDIF.
L_TYPEID = 'BUS1080'.
L_OBJKEY+0(18) = MATNR.
L_OBJKEY+18(4) = WERKS.
L_OBJKEY+22(1) = STLAN.
CALL FUNCTION 'SWU_OBJECT_PUBLISH'
EXPORTING
OBJTYPE = L_TYPEID
OBJKEY = L_OBJKEY
MODE = 'D'
EXCEPTIONS
OBJTYPE_NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE A018(ZWF_1).
ENDIF.
"Check enhancement program or not (ZCS02)
CALL FUNCTION 'ZKZ_CHECK_CUSTOM_PRGM'
EXCEPTIONS
CUSTOM_PRGM = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CALL FUNCTION 'ZWF_BOM_ISEDIT'
EXPORTING
MATNR = MATNR
WERKS = WERKS
STLAN = STLAN
AENNR = 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.
ENDFUNCTION.
FUNCTION ZKZ_CHECK_CUSTOM_PRGM.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" EXCEPTIONS
*" CUSTOM_PRGM
*"----------------------------------------------------------------------
DATA: L_TCVARIANT TYPE SHDTVCIU-TCVARIANT.
DATA: L_RC TYPE SY-SUBRC.
CALL FUNCTION 'RS_HDSYS_GET_TC_VARIANT'
IMPORTING
TCVARIANT = L_TCVARIANT
RC = L_RC.
IF L_RC = 0 AND L_TCVARIANT IS NOT INITIAL.
RAISE CUSTOM_PRGM.
ENDIF.
ENDFUNCTION.
FUNCTION ZWF_BOM_ISEDIT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" VALUE(MATNR) TYPE MATNR OPTIONAL
*" VALUE(WERKS) TYPE WERKS_D OPTIONAL
*" VALUE(STLAN) TYPE STLAN OPTIONAL
*" VALUE(AENNR) TYPE AENNR OPTIONAL
*" EXCEPTIONS
*" NOT_EDIT
*"----------------------------------------------------------------------
DATA: L_OBJKEY TYPE SIBFBORIID.
DATA: L_SPID TYPE ZSPID.
DATA: L_STLST TYPE STLST.
DATA: L_WFID TYPE ZWFID.
DATA: L_OBJTYPE TYPE SWO_OBJTYP.
DATA: SWO_RETURN TYPE SWOTRETURN.
DATA: IT_CONTAINER TYPE TABLE OF SWCONT WITH HEADER LINE.
DATA: L_ISLAU TYPE ZISLAU.
DATA: L_INSTID TYPE SIBFBORIID.
DATA: WA_SWWUSERWI TYPE SWWUSERWI,
IT_SWWUSERWI TYPE SWWUSERWI OCCURS 0.
DATA: G_WIID TYPE SWW_WIID.
DATA: L_TYPEID TYPE SIBFTYPEID.
CHECK SY-TCODE = 'CS02'.
CLEAR: SY-MSGID, SY-MSGTY, SY-MSGNO, SY-MSGV1, SY-MSGV2, SY-MSGV3, SY-MSGV4.
L_OBJTYPE = 'BUS1080'.
L_OBJKEY+0(18) = MATNR.
L_OBJKEY+18(4) = WERKS.
L_OBJKEY+22(1) = STLAN.
"Get WFID
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.
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.
"Get BOM status
CALL FUNCTION 'ZWF_CHECK_BOM_STATUS'
EXPORTING
MATNR = MATNR
WERKS = WERKS
STLAN = STLAN
BATCH_CHECK_ALTER = 'X'
IMPORTING
STLST = L_STLST
EXCEPTIONS
CHECK_BOM_FAILURE = 1
OTHERS = 2.
IF SY-SUBRC = 0.
IF L_STLST <> 2.
"If BOM status is 2 (active) then no any checking
"If BOM status is 1 (inactive)
"then check current user has authorization to modify or not
"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
CALL FUNCTION 'ZKZ_GET_CURR_WI'
EXPORTING
TYPEID = 'BUS1080'
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 = 'A'.
SY-MSGNO = '011'.
SY-MSGV1 = 'BOM is under approval'.
RAISE NOT_EDIT.
ENDIF.
ELSE.
IF AENNR IS INITIAL.
SY-MSGID = 'ZWF_1'.
SY