You are on page 1of 9

CONSTANTS: lc_obtyp TYPE j_obtyp VALUE 'IEQ',

lc_pargr_pm TYPE tpaer-pargr VALUE 'PM',


lc_aktyp_a TYPE t365-aktyp VALUE 'H'.
DATA: ls_partner TYPE eam_s_alm_partn_mul,
lv_objnr TYPE j_objnr.
DATA: lv_subrc TYPE sy-subrc.

DATA:CT_PARTNER TYPE EAM_T_ALM_PARTN_MUL.

DATA:
E1EQUIPMENT_CREATE like E1EQUIPMENT_CREATE,
E1BP_ITOB like E1BP_ITOB,
E1BP_ITOB_EQ_ONLY like E1BP_ITOB_EQ_ONLY,
E1BP_FLEET like E1BP_FLEET,
E1BP_ITOB_EQ_INSTALL like E1BP_ITOB_EQ_INSTALL,
E1BPPAREX like E1BPPAREX,
ZEQUIPMENT_PARVW TYPE ZEQUIPMENT_PARVW,
ZZEQUIPMENT_PARVW TYPE TABLE OF ZEQUIPMENT_PARVW,
EQUIPMENT like
BAPI_ITOB_PARMS-EQUIPMENT,
DATA_GENERAL_EXP like
BAPI_ITOB,
DATA_SPECIFIC_EXP like
BAPI_ITOB_EQ_ONLY,
DATA_FLEET_EXP like
BAPI_FLEET,
RETURN like
BAPIRET2,
EXTERNAL_NUMBER like
BAPI_ITOB_PARMS-EQUIPMENT,
DATA_GENERAL like
BAPI_ITOB,
DATA_SPECIFIC like
BAPI_ITOB_EQ_ONLY,
DATA_FLEET like
BAPI_FLEET,
VALID_DATE like
BAPI_ITOB_PARMS-INST_DATE,
DATA_INSTALL like
BAPI_ITOB_EQ_INSTALL,

EXTENSIONIN like BAPIPAREX


occurs 0 with header line,

T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE,


BAPI_RETN_INFO LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.

DATA: ERROR_FLAG,
BAPI_IDOC_STATUS LIKE BDIDOCSTAT-STATUS.

data: ls_xihpa type ihpavb.


data: lt_xihpa type standard table of ihpavb.

IN_UPDATE_TASK = 'X'.
CLEAR CALL_TRANSACTION_DONE.
* check if the function is called correctly *
READ TABLE IDOC_CONTRL INDEX 1.
IF SY-SUBRC <> 0.
EXIT.
ELSEIF IDOC_CONTRL-MESTYP <> 'ZEQUIPMENT_CREATE'.
RAISE WRONG_FUNCTION_CALLED.
ENDIF.

* go through all IDocs *


LOOP AT IDOC_CONTRL.
* select segments belonging to one IDoc *
REFRESH T_EDIDD.
LOOP AT IDOC_DATA WHERE DOCNUM = IDOC_CONTRL-DOCNUM.
APPEND IDOC_DATA TO T_EDIDD.
ENDLOOP.

* through all segments of this IDoc *


CLEAR ERROR_FLAG.
REFRESH BAPI_RETN_INFO.
CATCH SYSTEM-EXCEPTIONS CONVERSION_ERRORS = 1.
LOOP AT T_EDIDD INTO IDOC_DATA.

CASE IDOC_DATA-SEGNAM.

WHEN 'E1EQUIPMENT_CREATE'.

E1EQUIPMENT_CREATE = IDOC_DATA-SDATA.
MOVE E1EQUIPMENT_CREATE-EXTERNAL_NUMBER
TO EXTERNAL_NUMBER.
MOVE E1EQUIPMENT_CREATE-VALID_DATE
TO VALID_DATE.

IF E1EQUIPMENT_CREATE-VALID_DATE
IS INITIAL.
CLEAR VALID_DATE.
ENDIF.

WHEN 'E1BP_ITOB'.

E1BP_ITOB = IDOC_DATA-SDATA.
MOVE-CORRESPONDING E1BP_ITOB
TO DATA_GENERAL."#EC ENHOK

IF E1BP_ITOB-ACQDATE
IS INITIAL.
CLEAR DATA_GENERAL-ACQDATE.
ENDIF.
IF E1BP_ITOB-START_FROM
IS INITIAL.
CLEAR DATA_GENERAL-START_FROM.
ENDIF.
IF E1BP_ITOB-READ_CRDAT
IS INITIAL.
CLEAR DATA_GENERAL-READ_CRDAT.
ENDIF.
IF E1BP_ITOB-READ_CHDAT
IS INITIAL.
CLEAR DATA_GENERAL-READ_CHDAT.
ENDIF.

WHEN 'E1BP_ITOB_EQ_ONLY'.

E1BP_ITOB_EQ_ONLY = IDOC_DATA-SDATA.
MOVE-CORRESPONDING E1BP_ITOB_EQ_ONLY
TO DATA_SPECIFIC."#EC ENHOK

IF E1BP_ITOB_EQ_ONLY-DELIVDATE
IS INITIAL.
CLEAR DATA_SPECIFIC-DELIVDATE.
ENDIF.
IF E1BP_ITOB_EQ_ONLY-FREE_DATE1
IS INITIAL.
CLEAR DATA_SPECIFIC-FREE_DATE1.
ENDIF.
IF E1BP_ITOB_EQ_ONLY-FREE_DATE2
IS INITIAL.
CLEAR DATA_SPECIFIC-FREE_DATE2.
ENDIF.
IF E1BP_ITOB_EQ_ONLY-READ_VALID_FROM
IS INITIAL.
CLEAR DATA_SPECIFIC-READ_VALID_FROM.
ENDIF.

WHEN 'E1BP_FLEET'.

E1BP_FLEET = IDOC_DATA-SDATA.
MOVE-CORRESPONDING E1BP_FLEET
TO DATA_FLEET."#EC ENHOK

IF E1BP_FLEET-EXPIRY_DATE
IS INITIAL.
CLEAR DATA_FLEET-EXPIRY_DATE.
ENDIF.
IF E1BP_FLEET-REPLA_DATE
IS INITIAL.
CLEAR DATA_FLEET-REPLA_DATE.
ENDIF.

WHEN 'E1BP_ITOB_EQ_INSTALL'.

E1BP_ITOB_EQ_INSTALL = IDOC_DATA-SDATA.
MOVE-CORRESPONDING E1BP_ITOB_EQ_INSTALL
TO DATA_INSTALL."#EC ENHOK

WHEN 'E1BPPAREX'.

E1BPPAREX = IDOC_DATA-SDATA.
MOVE-CORRESPONDING E1BPPAREX
TO EXTENSIONIN."#EC ENHOK

APPEND EXTENSIONIN.

WHEN 'ZEQUIPMENT_PARVW'.

ZEQUIPMENT_PARVW = IDOC_DATA-SDATA.
APPEND ZEQUIPMENT_PARVW TO ZZEQUIPMENT_PARVW.
CLEAR ZEQUIPMENT_PARVW.

ENDCASE.

ENDLOOP.
ENDCATCH.
IF SY-SUBRC = 1.
* write IDoc status-record as error and continue *
CLEAR BAPI_RETN_INFO.
BAPI_RETN_INFO-TYPE = 'E'.
BAPI_RETN_INFO-ID = 'B1'.
BAPI_RETN_INFO-NUMBER = '527'.
BAPI_RETN_INFO-MESSAGE_V1 = IDOC_DATA-SEGNAM.
BAPI_IDOC_STATUS = '51'.
PERFORM IDOC_STATUS_EQUIPMENT_CREATE
TABLES T_EDIDD
IDOC_STATUS
RETURN_VARIABLES
USING IDOC_CONTRL
BAPI_RETN_INFO
BAPI_IDOC_STATUS
WORKFLOW_RESULT.
CONTINUE.
ENDIF.
* call BAPI-function in this system *
CALL FUNCTION 'BAPI_EQUI_CREATE'
exporting
EXTERNAL_NUMBER = EXTERNAL_NUMBER
DATA_GENERAL = DATA_GENERAL
DATA_SPECIFIC = DATA_SPECIFIC
DATA_FLEET = DATA_FLEET
VALID_DATE = VALID_DATE
DATA_INSTALL = DATA_INSTALL
importing
EQUIPMENT = EQUIPMENT
DATA_GENERAL_EXP = DATA_GENERAL_EXP
DATA_SPECIFIC_EXP = DATA_SPECIFIC_EXP
DATA_FLEET_EXP = DATA_FLEET_EXP
RETURN = RETURN
tables
EXTENSIONIN = EXTENSIONIN
exceptions
OTHERS = 1
.
IF SY-SUBRC <> 0.
* write IDoc status-record as error *
CLEAR BAPI_RETN_INFO.
BAPI_RETN_INFO-TYPE = 'E'.
BAPI_RETN_INFO-ID = SY-MSGID.
BAPI_RETN_INFO-NUMBER = SY-MSGNO.
BAPI_RETN_INFO-MESSAGE_V1 = SY-MSGV1.
BAPI_RETN_INFO-MESSAGE_V2 = SY-MSGV2.
BAPI_RETN_INFO-MESSAGE_V3 = SY-MSGV3.
BAPI_RETN_INFO-MESSAGE_V4 = SY-MSGV4.
BAPI_IDOC_STATUS = '51'.
PERFORM IDOC_STATUS_EQUIPMENT_CREATE
TABLES T_EDIDD
IDOC_STATUS
RETURN_VARIABLES
USING IDOC_CONTRL
BAPI_RETN_INFO
BAPI_IDOC_STATUS
WORKFLOW_RESULT.
ELSE.
IF NOT RETURN IS INITIAL.
CLEAR BAPI_RETN_INFO.
MOVE-CORRESPONDING RETURN TO BAPI_RETN_INFO."#EC ENHOK
IF RETURN-TYPE = 'A' OR RETURN-TYPE = 'E'.
ERROR_FLAG = 'X'.
ENDIF.
APPEND BAPI_RETN_INFO.
ENDIF.
LOOP AT BAPI_RETN_INFO.
* write IDoc status-record *
IF ERROR_FLAG IS INITIAL.
BAPI_IDOC_STATUS = '53'.
ELSE.
BAPI_IDOC_STATUS = '51'.
IF BAPI_RETN_INFO-TYPE = 'S'.
CONTINUE.
ENDIF.
ENDIF.
PERFORM IDOC_STATUS_EQUIPMENT_CREATE
TABLES T_EDIDD
IDOC_STATUS
RETURN_VARIABLES
USING IDOC_CONTRL
BAPI_RETN_INFO
BAPI_IDOC_STATUS
WORKFLOW_RESULT.
ENDLOOP.
IF SY-SUBRC <> 0.
***********************************************************************
***Partner Assignment***
lv_objnr = data_general_exp-read_objnr.

CALL FUNCTION 'PM_PARTNER_INIT' "**Call function to initiate object number


for partner assignment
EXPORTING
aktyp = lc_aktyp_a
objnr = lv_objnr
obtyp = lc_obtyp
pargr = lc_pargr_pm.

LOOP AT ZZEQUIPMENT_PARVW INTO ZEQUIPMENT_PARVW.


* ls_xihpa-mandt = sy-mandt.
ls_xihpa-objnr = lv_objnr. "Equimpet objnr
ls_xihpa-obtyp = 'IEQ'.
ls_xihpa-erdat = sy-datum.
ls_xihpa-erzeit = sy-uzeit.
ls_xihpa-ernam = sy-uname.
ls_xihpa-aedat = sy-datum.
ls_xihpa-aezeit = sy-uzeit.
ls_xihpa-aenam = sy-uname.

ls_xihpa-updkz = 'I'.
ls_xihpa-parvw = ZEQUIPMENT_PARVW-parvw.
ls_xihpa-counter = 1.
ls_xihpa-adrnr = '24142'.
ls_xihpa-parnr = ZEQUIPMENT_PARVW-parnr. "New partner
append ls_xihpa to lt_xihpa.
CLEAR ls_xihpa.
ENDLOOP.

if not lt_xihpa is initial.


call function 'PM_PARTNER_UPDATE'
tables
fxihpa = lt_xihpa.
endif.

* LOOP AT ZZEQUIPMENT_PARVW INTO ZEQUIPMENT_PARVW.

** CALL FUNCTION 'PM_PARTNER_READ' "**Call function to validate the partner


** EXPORTING
** parvw = ZEQUIPMENT_PARVW-parvw
** parnr = ZEQUIPMENT_PARVW-parnr
** EXCEPTIONS
** no_valid_parnr = 1
** no_valid_parnr_today = 2
** no_authority = 3
** OTHERS = 4.
** lv_subrc = sy-subrc.

***Call function to maintain the partner


** CLEAR: lv_subrc.
** CALL FUNCTION 'PM_PARTNER_MAINTAIN' "**Call function to maintain partners
to the object number
** EXPORTING
** objnr = lv_objnr
** parnr = ZEQUIPMENT_PARVW-parnr
** parvw = ZEQUIPMENT_PARVW-parvw
*** tabix = l_tabix
** EXCEPTIONS
** invalid_parnr = 1
** cpd_customer = 2
** invalid_parvw = 3
** parvw_unique = 4
** blocked_parnr = 5
** OTHERS = 6.
** lv_subrc = sy-subrc.

* ENDLOOP.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


* EXPORTING
* WAIT =
* IMPORTING
* RETURN =
.

***********************************************************************

* 'RETURN' is empty write idoc status-record as successful *


CLEAR BAPI_RETN_INFO.
BAPI_RETN_INFO-TYPE = 'S'.
BAPI_RETN_INFO-ID = 'B1'.
BAPI_RETN_INFO-NUMBER = '501'.
BAPI_RETN_INFO-MESSAGE_V1 = 'CREATE'.
BAPI_IDOC_STATUS = '53'.
PERFORM IDOC_STATUS_EQUIPMENT_CREATE
TABLES T_EDIDD
IDOC_STATUS
RETURN_VARIABLES
USING IDOC_CONTRL
BAPI_RETN_INFO
BAPI_IDOC_STATUS
WORKFLOW_RESULT.
ENDIF.
IF ERROR_FLAG IS INITIAL.
* write linked object keys *
CLEAR RETURN_VARIABLES.
RETURN_VARIABLES-WF_PARAM = 'Appl_Objects'.
READ TABLE RETURN_VARIABLES WITH KEY WF_PARAM = 'Appl_Objects'.
MOVE EQUIPMENT
TO RETURN_VARIABLES-DOC_NUMBER+00.
IF SY-SUBRC <> 0.
APPEND RETURN_VARIABLES.
ELSE.
MODIFY RETURN_VARIABLES INDEX SY-TABIX.
ENDIF.
ENDIF.
ENDIF.

ENDLOOP. " idoc_contrl

ENDFUNCTION.

* subroutine writing IDoc status-record *


FORM IDOC_STATUS_EQUIPMENT_CREATE
TABLES IDOC_DATA STRUCTURE EDIDD
IDOC_STATUS STRUCTURE BDIDOCSTAT
R_VARIABLES STRUCTURE BDWFRETVAR
USING IDOC_CONTRL LIKE EDIDC
VALUE(RETN_INFO) LIKE BAPIRET2
STATUS LIKE BDIDOCSTAT-STATUS
WF_RESULT LIKE BDWF_PARAM-RESULT.

CLEAR IDOC_STATUS.
IDOC_STATUS-DOCNUM = IDOC_CONTRL-DOCNUM.
IDOC_STATUS-MSGTY = RETN_INFO-TYPE.
IDOC_STATUS-MSGID = RETN_INFO-ID.
IDOC_STATUS-MSGNO = RETN_INFO-NUMBER.
IDOC_STATUS-APPL_LOG = RETN_INFO-LOG_NO.
IDOC_STATUS-MSGV1 = RETN_INFO-MESSAGE_V1.
IDOC_STATUS-MSGV2 = RETN_INFO-MESSAGE_V2.
IDOC_STATUS-MSGV3 = RETN_INFO-MESSAGE_V3.
IDOC_STATUS-MSGV4 = RETN_INFO-MESSAGE_V4.
IDOC_STATUS-REPID = SY-REPID.
IDOC_STATUS-STATUS = STATUS.

CASE RETN_INFO-PARAMETER.
WHEN 'EXTENSIONIN'
.
LOOP AT IDOC_DATA WHERE
SEGNAM = 'E1BPPAREX'.
RETN_INFO-ROW = RETN_INFO-ROW - 1.
IF RETN_INFO-ROW <= 0.
IDOC_STATUS-SEGNUM = IDOC_DATA-SEGNUM.
IDOC_STATUS-SEGFLD = RETN_INFO-FIELD.
EXIT.
ENDIF.
ENDLOOP.
WHEN 'DATAFLEET'
or 'DATA_FLEET'
.
LOOP AT IDOC_DATA WHERE
SEGNAM = 'E1BP_FLEET'.
RETN_INFO-ROW = RETN_INFO-ROW - 1.
IF RETN_INFO-ROW <= 0.
IDOC_STATUS-SEGNUM = IDOC_DATA-SEGNUM.
IDOC_STATUS-SEGFLD = RETN_INFO-FIELD.
EXIT.
ENDIF.
ENDLOOP.
WHEN 'DATAGENERAL'
or 'DATA_GENERAL'
.
LOOP AT IDOC_DATA WHERE
SEGNAM = 'E1BP_ITOB'.
RETN_INFO-ROW = RETN_INFO-ROW - 1.
IF RETN_INFO-ROW <= 0.
IDOC_STATUS-SEGNUM = IDOC_DATA-SEGNUM.
IDOC_STATUS-SEGFLD = RETN_INFO-FIELD.
EXIT.
ENDIF.
ENDLOOP.
WHEN 'DATAINSTALL'
or 'DATA_INSTALL'
.
LOOP AT IDOC_DATA WHERE
SEGNAM = 'E1BP_ITOB_EQ_INSTALL'.
RETN_INFO-ROW = RETN_INFO-ROW - 1.
IF RETN_INFO-ROW <= 0.
IDOC_STATUS-SEGNUM = IDOC_DATA-SEGNUM.
IDOC_STATUS-SEGFLD = RETN_INFO-FIELD.
EXIT.
ENDIF.
ENDLOOP.
WHEN 'DATASPECIFIC'
or 'DATA_SPECIFIC'
.
LOOP AT IDOC_DATA WHERE
SEGNAM = 'E1BP_ITOB_EQ_ONLY'.
RETN_INFO-ROW = RETN_INFO-ROW - 1.
IF RETN_INFO-ROW <= 0.
IDOC_STATUS-SEGNUM = IDOC_DATA-SEGNUM.
IDOC_STATUS-SEGFLD = RETN_INFO-FIELD.
EXIT.
ENDIF.
ENDLOOP.
WHEN 'EXTERNALNUMBER'
or 'EXTERNAL_NUMBER'
.
LOOP AT IDOC_DATA WHERE
SEGNAM = 'E1EQUIPMENT_CREATE'.
RETN_INFO-ROW = RETN_INFO-ROW - 1.
IF RETN_INFO-ROW <= 0.
IDOC_STATUS-SEGNUM = IDOC_DATA-SEGNUM.
IDOC_STATUS-SEGFLD = RETN_INFO-FIELD.
EXIT.
ENDIF.
ENDLOOP.
WHEN 'VALIDDATE'
or 'VALID_DATE'
.
LOOP AT IDOC_DATA WHERE
SEGNAM = 'E1EQUIPMENT_CREATE'.
RETN_INFO-ROW = RETN_INFO-ROW - 1.
IF RETN_INFO-ROW <= 0.
IDOC_STATUS-SEGNUM = IDOC_DATA-SEGNUM.
IDOC_STATUS-SEGFLD = RETN_INFO-FIELD.
EXIT.
ENDIF.
ENDLOOP.
WHEN OTHERS.

ENDCASE.

INSERT IDOC_STATUS INDEX 1.

IF IDOC_STATUS-STATUS = '51'.
WF_RESULT = '99999'.
R_VARIABLES-WF_PARAM = 'Error_IDOCs'.
R_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
READ TABLE R_VARIABLES FROM R_VARIABLES.
IF SY-SUBRC <> 0.
APPEND R_VARIABLES.
ENDIF.
ELSEIF IDOC_STATUS-STATUS = '53'.
CLEAR WF_RESULT.
R_VARIABLES-WF_PARAM = 'Processed_IDOCs'.
R_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
READ TABLE R_VARIABLES FROM R_VARIABLES.
IF SY-SUBRC <> 0.
APPEND R_VARIABLES.
ENDIF.
R_VARIABLES-WF_PARAM = 'Appl_Object_Type'.
R_VARIABLES-DOC_NUMBER = 'EQUI'.
READ TABLE R_VARIABLES FROM R_VARIABLES.
IF SY-SUBRC <> 0.
APPEND R_VARIABLES.
ENDIF.
ENDIF.

You might also like