cancel
Showing results for 
Search instead for 
Did you mean: 

Problem with ABAP proxy calling BAPI in a sync scenario

Former Member
0 Kudos

Hello all,

We have an business scenario where we will post absence into ECC 6.0 from external application (database). For this purpose we prepare an ABAP inbound proxy which will receive one or more records from database, go through a every line and for it call a appropriate BAPI, store response from BAPI, collect it and send back to database to update status of all processed records.

We also set up simple BPM to handle this scenario (receive async from DB – send sync to ECC – send async to DB) but the problem is that BAPI that we call if there is an error stop executing an ABAP proxy (which is called from XI using XI protocol) and give us an error:

The following error text was processed in the system QAX :

HTTP_RESP_STATUS_CODE_NOT_OK

Change before earliest retro. date 01.11.2007 acc. to control rec. to py area MC The error occurred on the application server xpodtest_QAX_23 and in the work process 0 . The termination type was: <b>ERROR_MESSAGE_STATE The ABAP call stack was: Form: ABPER of program SAPFP50MForm: POST_INPUT_EDYNR of program MP200000 Module: POST_CHECKS of program MP200000</b>

When a proxy is tested form SPROXY transaction we are able to debug it and we found a source of an error:

SAPFP50M/FP50MF40

FORM/ABPER

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

Where a content of a variable is:

SY-MSGID RP

SY-MSGTY E

SY-MSGNO 456

SY-MSGV1 01.11.2007

SY-MSGV2 MC

SY-MSGV3 31.10.2007

Problem is with a current employee, but in a SPROXY it works OK dnd give us a response in a Payload after service.

When we investigate more deeply this error we found a blog from Brian McKellar: <a href="/people/mark.finnern/blog/2003/09/16/bsp-in-depth-message-statement-handling In-Depth: MESSAGE Statement Handling</a> where he suggests how to handle messages in a called program.

We take his advice but we haven’t success:

CALL FUNCTION 'BAPI_PTMGRATTABS_MNGCREATION'

..

..

EXCEPTIONS

ERROR_MESSAGE= 98

OTHERS = 99.

Here is our code:

[code]method ZII_PROXY_BAPI_PTMGRATTABS_MNG~EXECUTE_SYNCHRONOUS.

      • **** INSERT IMPLEMENTATION HERE **** ***

DATA: STANDATD_DATA TYPE ZEXCHANGE_FAULT_DATA,

DETAIL_DATA TYPE ZEXCHANGE_LOG_DATA.

DATA: ZRB TYPE INT4,

ZEMPLOYEENUMBER TYPE BAPIHRITBASE-EMPLOYEENUM,

ZABS_ATT_TYPE TYPE BAPIHRTYPES-ABS_ATT_TYPE,

ZHRABSATT_IN TYPE BAPIHRABSATT_IN,

ZHRTIMESKEY TYPE BAPIHRTIMESKEY,

ZABSENCE_FLAG TYPE HRABSFLAG,

ZHRABSATT_OUT TYPE BAPIHRABSATT_OUT,

ZLOCKINDICATOR TYPE HR_SPRPS,

ZHRABSATTEXT TYPE HRABSATTEXT,

ZWORKTAXAREA TYPE HRWRKAR.

DATA: ZRETURNTAB TYPE BAPIRETTAB,

ZRETURNITEM TYPE BAPIRET2,

ZINDEX TYPE INT2.

DATA: ZRETURN TYPE BAPIRETURN1.

DATA: ZINPUT_TAB TYPE TABLE OF ZAP_IT_2001_FIELDS_2_DT_ROW,

ZINPUT_ROW LIKE LINE OF ZINPUT_TAB,

ZOUTPUT_TAB TYPE TABLE OF ZUPDATE_AP_IT_2001_2_DT,

ZOUTPUT_ROW LIKE LINE OF ZOUTPUT_TAB,

ZUPDATE_TAB TYPE TABLE OF ZUPDATE_AP_IT_2001_2_DT_UPDATE,

ZUPDATE_ROW LIKE LINE OF ZUPDATE_TAB,

ZAP_IT_2001 TYPE ZUPDATE_AP_IT_2001_2_DT_AP_IT,

ZKEY TYPE ZUPDATE_AP_IT_2001_2_DT_KEY,

ZACCESS TYPE STRING,

ZACTION TYPE STRING.

DATA: ZSEP TYPE STRING VALUE '"',

C1 TYPE STRING,

C2 TYPE STRING,

C3 TYPE STRING,

C4 TYPE STRING,

C5 TYPE STRING,

C6 TYPE STRING.

ZINPUT_TAB = INPUT-AP_IT_2001_2_MT-ROW.

IF ZINPUT_TAB IS NOT INITIAL.

LOOP AT ZINPUT_TAB INTO ZINPUT_ROW.

ZEMPLOYEENUMBER = ZINPUT_ROW-KADROVSKI_BROJ.

CALL FUNCTION 'BAPI_EMPLOYEE_ENQUEUE'

EXPORTING

NUMBER = ZEMPLOYEENUMBER

IMPORTING

RETURN = ZRETURN.

ZRB = ZINPUT_ROW-RB.

IF NOT ZRETURN-TYPE EQ 'E'.

ZABS_ATT_TYPE = ZINPUT_ROW-TIP_PRISUSTVA.

ZHRABSATT_IN-FROM_DATE = ZINPUT_ROW-DATUM_OD.

ZHRABSATT_IN-TO_DATE = ZINPUT_ROW-DATUM_DO.

ZHRABSATT_IN-START_TIME = ZINPUT_ROW-VRIJEME_OD.

ZHRABSATT_IN-END_TIME = ZINPUT_ROW-VRIJEME_DO.

CALL FUNCTION 'BAPI_PTMGRATTABS_MNGCREATION'

EXPORTING

EMPLOYEENUMBER = ZEMPLOYEENUMBER

ABS_ATT_TYPE = ZABS_ATT_TYPE

HRABSATT_IN = ZHRABSATT_IN

  • LOCKINDICATOR = LOCKINDICATOR

  • WORKTAXAREA = WORKTAXAREA

  • HRALTPAYMENT = HRALTPAYMENT

  • HRCOSTASSIGN = HRCOSTASSIGN

  • HRACTIVITYALLOC = HRACTIVITYALLOC

  • SIMULATE = SIMULATE

IMPORTING

HRTIMESKEY = ZHRTIMESKEY

ABSENCE_FLAG = ZABSENCE_FLAG

HRABSATT_OUT = ZHRABSATT_OUT

LOCKINDICATOR = ZLOCKINDICATOR

HRABSATTEXT = ZHRABSATTEXT

WORKTAXAREA = ZWORKTAXAREA

TABLES

RETURN = ZRETURNTAB

EXCEPTIONS

ERROR_MESSAGE= 98

OTHERS = 99.

IF SY-SUBRC NE 0.

CALL METHOD CL_PROXY_FAULT=>RAISE

EXPORTING

EXCEPTION_CLASS_NAME = ' ZCX_EXCHANGE_FAULT_DATA_MT'

BAPIRETURN_TAB = ZRETURNTAB.

ENDIF.

ZINDEX = SY-TABIX.

CALL FUNCTION 'BAPI_EMPLOYEE_DEQUEUE'

EXPORTING

NUMBER = ZEMPLOYEENUMBER

IMPORTING

RETURN = ZRETURN.

  • CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

ZACTION = 'SQL_DML'.

*ZACCESS = 'UPDATE ap_IT_2001 SET Datum_obrade = GETDATE(), Status =

*'$Status$', Poruka = '$Poruka$' WHERE rb = '$rb$'.

C1 = 'UPDATE ap_IT_2001 SET Datum_obrade = GETDATE(),Status = '.

C2 = ', Poruka = '.

C3 = '$Poruka$'.

C4 = ' WHERE rb = '.

C5 = '$rb$'.

C6 = ' '.

CONCATENATE C1 ZSEP C2 ZSEP C3 ZSEP C4 ZSEP C5 ZSEP C6 INTO

ZACCESS.

READ TABLE ZRETURNTAB INDEX ZINDEX INTO ZRETURNITEM.

ZKEY-STATUS = ZRETURNITEM-TYPE.

ZKEY-PORUKA = ZRETURNITEM-MESSAGE.

ZKEY-RB = ZRB.

ZKEY-KADROVSKI_BROJ = ZEMPLOYEENUMBER.

ZKEY-TIP_PRISUSTVA = ZABS_ATT_TYPE.

ZKEY-DATUM_OD = ZHRABSATT_IN-FROM_DATE.

ZKEY-DATUM_DO = ZHRABSATT_IN-TO_DATE.

ZAP_IT_2001-KEY = ZKEY.

ZAP_IT_2001-ACCESS = ZACCESS.

ZAP_IT_2001-ACTION = ZACTION.

ZUPDATE_ROW-AP_IT_2001 = ZAP_IT_2001.

APPEND ZUPDATE_ROW TO ZUPDATE_TAB.

CLEAR ZUPDATE_ROW.

ELSE.

ZACTION = 'SQL_DML'.

*ZACCESS = 'UPDATE ap_IT_2001 SET Datum_obrade = GETDATE(), Status =

*'$Status$', Poruka = '$Poruka$' WHERE rb = '$rb$'.

C1 = 'UPDATE ap_IT_2001 SET Datum_obrade = GETDATE(),Status = '.

C2 = ', Poruka = '.

C3 = '$Poruka$'.

C4 = ' WHERE rb = '.

C5 = '$rb$'.

C6 = ' '.

CONCATENATE C1 ZSEP C2 ZSEP C3 ZSEP C4 ZSEP C5 ZSEP C6 INTO

ZACCESS.

ZKEY-STATUS = ZRETURN-TYPE.

ZKEY-PORUKA = ZRETURN-MESSAGE.

ZKEY-RB = ZRB.

ZKEY-KADROVSKI_BROJ = ZEMPLOYEENUMBER.

ZKEY-TIP_PRISUSTVA = ZABS_ATT_TYPE.

ZKEY-DATUM_OD = ZHRABSATT_IN-FROM_DATE.

ZKEY-DATUM_DO = ZHRABSATT_IN-TO_DATE.

ZAP_IT_2001-KEY = ZKEY.

ZAP_IT_2001-ACCESS = ZACCESS.

ZAP_IT_2001-ACTION = ZACTION.

ZUPDATE_ROW-AP_IT_2001 = ZAP_IT_2001.

APPEND ZUPDATE_ROW TO ZUPDATE_TAB.

CLEAR ZUPDATE_ROW.

ENDIF.

ENDLOOP.

COMMIT WORK.

OUTPUT-UPDATE_AP_IT_2001_2_MT-UPDATE = ZUPDATE_TAB.

ENDIF.

endmethod.

[/code]

So, if you have an idea how ABAP proxy can call an BAPI give us a help.

Regards,

Mladen Kovacic

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hello Matias,

thanks, but I already did it and it didn't help.

Regards,

Mladen

Former Member
0 Kudos

Hi Mladen !

Check this thread:

Maybe it could help.

Regards,

Matias.