Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Reg: Extension of BAPI "BAPI_ALM_ORDER_MAINTAIN"

Former Member
0 Kudos

Hi All,

I am having 2 custom fields in Order enhancemnet tab. I would like to update them through custom transaction using BAPI "BAPI_ALM_ORDER_MAINTAIN".

I have used the code as mentioned below:

lwa_method-refnumber = '000001'.

lwa_method-method = 'SAVE'.

lwa_method-objectkey = wa_p_detail-aufnr.

APPEND lwa_method TO lit_method.

CLEAR lwa_method.

lwa_header-orderid = wa_p_detail-aufnr.

APPEND lwa_header TO lit_header.

CLEAR lwa_header.

lwa_exten-structure = 'BAPI_TE_AUFK'.

lwa_exten-valuepart1+0(12) = wa_p_detail-aufnr.

lwa_exten-valuepart1+24(8) = qmel-erdat.

lwa_exten-valuepart1+32(6) = qmel-mzeit.

APPEND lwa_exten TO lit_exten.

CLEAR lwa_exten.

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'

TABLES

it_methods = lit_method

it_header = lit_header

extension_in = lit_exten

return = lit_return.

LOOP AT lit_return INTO lwa_return WHERE type EQ c_e.

MESSAGE lwa_return-message TYPE c_e DISPLAY LIKE c_i.

AT LAST.

ROLLBACK WORK.

ENDAT.

ENDLOOP.

IF sy-subrc NE 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = c_x.

endif.

But its not updaing any single field in database. Please provide your suggestion.

Thanks,

Jaten Sangal

Edited by: JatenS on Feb 13, 2012 11:38 AM

1 ACCEPTED SOLUTION

Former Member

Hi,

Try checking the below example for your requirement.


1: using BAPI 'BAPI_ALM_ORDER_MAINTAIN'
2: append structure in IBAPI_CAUFVD_UPDATE
3: create BADI from 'IBAPI_ALM_ORD_MODIFY'

CI_AUFK has the Zfields, so CAUFV has already had the Zfields.

--------------------------------------------------------------------------------
*---- 1: using BAPI 'BAPI_ALM_ORDER_MAINTAIN'
IW_METHODS-OBJECTTYPE = SPACE.
IW_METHODS-METHOD = 'SAVE'.
IW_METHODS-OBJECTKEY = SPACE.
APPEND IW_METHODS TO IT_METHODS.

CLEAR: IW_METHODS.
IW_METHODS-REFNUMBER = '000001'.
IW_METHODS-OBJECTTYPE = 'HEADER'.
IW_METHODS-METHOD = 'CHANGE'.
IW_METHODS-OBJECTKEY = W_AUFNR.
APPEND IW_METHODS TO IT_METHODS.

IW_EXTENSION_IN-VALUEPART1+0(12) = W_AUFNR.
IW_EXTENSION_IN-VALUEPART1+12(2) = W_ZFIELD. "Zfield
APPEND IW_EXTENSION_IN TO IT_EXTENSION_IN.

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
TABLES
IT_METHODS = IT_METHODS
EXTENSION_IN = IT_EXTENSION_IN
RETURN = IT_RETURN.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = COS_X.

*----2: append structure in IBAPI_CAUFVD_UPDATE
*---- you need to create an APPEND structure in ALMB_CAUFVD_UP_TAB_INT.
*---- (of course you can create that in SE11)
*---- you need to set flag fields (CHAR1) in APPEND structure


*---- 3: create BADI from 'IBAPI_ALM_ORD_MODIFY'
*---- you need to create BADI from 'IBAPI_ALM_ORD_MODIFY' in SE19
*---- and you need to add some Codes in method of 'MODIFY_INPUT_DATA'
*---- code is below
DATA: LW_HEADER_INT TYPE ALMB_CAUFVD.
DATA: LW_HEADER_INT_UP TYPE IBAPI_CAUFVD_UPDATE.

READ TABLE CT_HEADER_INT INTO LW_HEADER_INT
WITH KEY AUFNR = EXTENSION_IN-VALUEPART1+0(12).
IF SY-SUBRC = 0.
LW_HEADER_INT-ZFIELD = EXTENSION_IN-VALUEPART1+12(2). "set Zfield value
MODIFY CT_HEADER_INT FROM LW_HEADER_INT index SY-TABIX.
ELSE.
LW_HEADER_INT-AUFNR = EXTENSION_IN-VALUEPART1+0(12).
LW_HEADER_INT-ZFIELD = EXTENSION_IN-VALUEPART1+12(2). "set Zfield value
APPEND LW_HEADER_INT TO CT_HEADER_INT.
ENDIF.

READ TABLE CT_HEADER_INT_UP INTO LW_HEADER_INT_UP
WITH KEY AUFNR = EXTENSION_IN-VALUEPART1+0(12).
IF SY-SUBRC = 0.set Zfield value
LW_HEADER_INT_UP-ZFIELD = 'X'. "set Zfield flag
MODIFY CT_HEADER_INT_UP FROM LW_HEADER_INT_UP index SY-TABIX.
ELSE.
LW_HEADER_INT_UP-ZFIELD = 'X'.
APPEND LW_HEADER_INT_UP TO CT_HEADER_INT_UP. "set Zfield flag
ENDIF.

6 REPLIES 6

Former Member

Hi,

Try checking the below example for your requirement.


1: using BAPI 'BAPI_ALM_ORDER_MAINTAIN'
2: append structure in IBAPI_CAUFVD_UPDATE
3: create BADI from 'IBAPI_ALM_ORD_MODIFY'

CI_AUFK has the Zfields, so CAUFV has already had the Zfields.

--------------------------------------------------------------------------------
*---- 1: using BAPI 'BAPI_ALM_ORDER_MAINTAIN'
IW_METHODS-OBJECTTYPE = SPACE.
IW_METHODS-METHOD = 'SAVE'.
IW_METHODS-OBJECTKEY = SPACE.
APPEND IW_METHODS TO IT_METHODS.

CLEAR: IW_METHODS.
IW_METHODS-REFNUMBER = '000001'.
IW_METHODS-OBJECTTYPE = 'HEADER'.
IW_METHODS-METHOD = 'CHANGE'.
IW_METHODS-OBJECTKEY = W_AUFNR.
APPEND IW_METHODS TO IT_METHODS.

IW_EXTENSION_IN-VALUEPART1+0(12) = W_AUFNR.
IW_EXTENSION_IN-VALUEPART1+12(2) = W_ZFIELD. "Zfield
APPEND IW_EXTENSION_IN TO IT_EXTENSION_IN.

CALL FUNCTION 'BAPI_ALM_ORDER_MAINTAIN'
TABLES
IT_METHODS = IT_METHODS
EXTENSION_IN = IT_EXTENSION_IN
RETURN = IT_RETURN.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = COS_X.

*----2: append structure in IBAPI_CAUFVD_UPDATE
*---- you need to create an APPEND structure in ALMB_CAUFVD_UP_TAB_INT.
*---- (of course you can create that in SE11)
*---- you need to set flag fields (CHAR1) in APPEND structure


*---- 3: create BADI from 'IBAPI_ALM_ORD_MODIFY'
*---- you need to create BADI from 'IBAPI_ALM_ORD_MODIFY' in SE19
*---- and you need to add some Codes in method of 'MODIFY_INPUT_DATA'
*---- code is below
DATA: LW_HEADER_INT TYPE ALMB_CAUFVD.
DATA: LW_HEADER_INT_UP TYPE IBAPI_CAUFVD_UPDATE.

READ TABLE CT_HEADER_INT INTO LW_HEADER_INT
WITH KEY AUFNR = EXTENSION_IN-VALUEPART1+0(12).
IF SY-SUBRC = 0.
LW_HEADER_INT-ZFIELD = EXTENSION_IN-VALUEPART1+12(2). "set Zfield value
MODIFY CT_HEADER_INT FROM LW_HEADER_INT index SY-TABIX.
ELSE.
LW_HEADER_INT-AUFNR = EXTENSION_IN-VALUEPART1+0(12).
LW_HEADER_INT-ZFIELD = EXTENSION_IN-VALUEPART1+12(2). "set Zfield value
APPEND LW_HEADER_INT TO CT_HEADER_INT.
ENDIF.

READ TABLE CT_HEADER_INT_UP INTO LW_HEADER_INT_UP
WITH KEY AUFNR = EXTENSION_IN-VALUEPART1+0(12).
IF SY-SUBRC = 0.set Zfield value
LW_HEADER_INT_UP-ZFIELD = 'X'. "set Zfield flag
MODIFY CT_HEADER_INT_UP FROM LW_HEADER_INT_UP index SY-TABIX.
ELSE.
LW_HEADER_INT_UP-ZFIELD = 'X'.
APPEND LW_HEADER_INT_UP TO CT_HEADER_INT_UP. "set Zfield flag
ENDIF.

0 Kudos

Thanks Harish for your reply..

Could you please let me explain below 2 points:

2: append structure in IBAPI_CAUFVD_UPDATE

3: create BADI from 'IBAPI_ALM_ORD_MODIFY'

I am not able to understand how & what exectly need to do..

Edited by: JatenS on Feb 13, 2012 12:39 PM

0 Kudos

Point 3: You need to implement this BADI in SE18 as when your BAPI will be called this badi implementation will get triggered and you can move data from your internal table to your respective structures

Point 2: You need to add your custom fields to correspodning structure mentioned above via append.

Nabheet

0 Kudos

Hi,

1. You need to create an append structure in "IBAPI_CAUFVD_UPDATE" structure with your two ZFIELDS and the type will be "BAPIUPDATE".

2. Now create an implementation for BADI - "IBAPI_ALM_ORD_MODIFY" using SE19 transaction and you need to add the Codes in method of 'MODIFY_INPUT_DATA'.

Sample code is :


DATA: LW_HEADER_INT        TYPE   ALMB_CAUFVD.
DATA: LW_HEADER_INT_UP  TYPE   IBAPI_CAUFVD_UPDATE.
 
READ TABLE CT_HEADER_INT INTO LW_HEADER_INT
                                                  WITH KEY AUFNR = EXTENSION_IN-VALUEPART1+0(12).
IF SY-SUBRC = 0.
    LW_HEADER_INT-ZFIELD = EXTENSION_IN-VALUEPART1+12(2). "set Zfield value
    MODIFY CT_HEADER_INT FROM LW_HEADER_INT index SY-TABIX.
ELSE.
    LW_HEADER_INT-AUFNR = EXTENSION_IN-VALUEPART1+0(12).
    LW_HEADER_INT-ZFIELD = EXTENSION_IN-VALUEPART1+12(2). "set Zfield value
    APPEND LW_HEADER_INT TO CT_HEADER_INT.
ENDIF.
 
READ TABLE CT_HEADER_INT_UP INTO LW_HEADER_INT_UP
                                                         WITH KEY AUFNR = EXTENSION_IN-VALUEPART1+0(12).
IF SY-SUBRC = 0.set Zfield value
    LW_HEADER_INT_UP-ZFIELD = 'X'. "set Zfield flag
    MODIFY CT_HEADER_INT_UP FROM LW_HEADER_INT_UP index SY-TABIX.
ELSE.
    LW_HEADER_INT_UP-ZFIELD = 'X'.
    APPEND LW_HEADER_INT_UP TO CT_HEADER_INT_UP. "set Zfield flag
ENDIF.

0 Kudos

Hi Harish,

Is it mandatory to add the Z-Fields in IBAPI_CAUFVD_UPDATE structure ??

0 Kudos

Hi Harish

Are you only updating a single order for each BAPI_ALM_ORDER_MAINTAIN call?

CT_HEADER_INT_UP-AUFNR is a single character field so I'm curious how you are updating the table correctly when there are multiple orders involved.

Thanks


Robyn