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: 

BAPI Enhancement

Former Member
0 Kudos

Hi

I'm planning to add new table in BAPI*change.(I'm not Appening or Doing a Include )

Will I be able to change the BAPI without Access Key Shd I add Extensionin and Extensionout to the Table.

Do I have to chekc for any preRequisites before Starting.

I tried to run in Debug and find out the Values are updating Only problem is there are no input Parameters for them.

Thank you for all your Suggestions.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

Hi Ghanta,

I need to add few fields and I dont want to add it to any DB TAble or existing tables in BAPI , I want to create a new table in BAPI Tables.

You can do the above without any access keys, if you are on ECC 6.0, you can use the enhance interface option of the FM and add an optional tables parameter. Once, you have done this you can use the implicit enhancement option in the beginning/end of the FM to add custom logic to handle the data in the new table parameter or you can use BADI - MRM_BAPI_MAPPING, if it gets triggered in the flow of the BAPI.

Now if you are in ECC .50 or less, then you will have to use the extensions table parameter, and check the BADI - MRM_BAPI_MAPPING(i am not sure if it is available).

Else, you can export the custom values into memory before calling the BAPI and importing it the SAVEBEFORE* method of the BADI - INVOICE_UPDATE.

Regards,

Chen

6 REPLIES 6

madhu_vadlamani
Active Contributor
0 Kudos

Hi Ghanta,

For which bapi you need extension. There is a provision to that in sales order,quotation etc. Please elaborate the requirement.

Regards,

Madhu.

Former Member
0 Kudos

If you have custom ZZ fields on VBAP and VBAK then you can update these fields using the standard BAPI to create or change the order and update these fields.

A lot has been spoken about this but nowhere does it spell out the pitfalls and give you an end-to-end procedure on how to do it. I even found some "SAP Experts - Ask a question" on Search SAP give a complete wrong answer!!! So here is the correct way to do it.

To do so you first need to ensure that the following 5 tables are in synch.

1) VBAP: In your append structure you specify your ZZFIELD with the data type as needed

2) BAPE_VBAP: In the append structure here also add the ZZFIELD with the data type as needed with limitations. No decimals. Try and stick to char characters

3) BAPE_VBAPX: In the append structure add the field ZZFIELD of type BAPIUPDATE

(NOTE: (2) and (3) must have the same number of fields in the same order)

4) VBAPKOZ: In the append structure here also add the ZZFIELD with the data type as needed with limitations. No decimals. Try and stick to char characters

5) VBAPKOZX: In the append structure add the field ZZFIELD of type BAPIUPDATE

(NOTE: (4) and (5) must have the same number of fields in the same order)

Similarly do for VBAK, BAPE_VBAK, BAPE_VBAKX, VBAKKOZ and VBAKKOZX.

Next we get to the code to fill in the structure EXTENSIONIN

I will demonstrate how to call the create sales order BAPI with custom fields.

  • Local definitions

DATA: wa_extensionin TYPE bapiparex,

wa_bape_vbap TYPE bape_vbap,

wa_bape_vbapx TYPE bape_vbapx,

wa_bape_vbak TYPE bape_vbak,

wa_bape_vbakx TYPE bape_vbakx,

lv_posnr TYPE posnr.

  • Processing the header extension

CLEAR wa_bape_vbak.

wa_bape_vbak-ZZFIELD = 'HDRTEST'.

wa_extensionin-structure = 'BAPE_VBAK'.

wa_extensionin+30(960) = wa_bape_vbak.

append wa_extensionin to lt_extensionin.

clear wa_extensionin.

  • Processing the line extension

LOOP AT line_items INTO wa_lineitems.

ADD 10 TO lv_posnr.

CLEAR wa_bape_vbap.

wa_bape_vbap-ZZFIELD = 'TEST'.

wa_extensionin-structure = 'BAPE_VBAP'.

wa_bape_vbap-posnr = lv_posnr.

wa_extensionin+30(960) = wa_bape_vbap.

append wa_extensionin to lt_extensionin.

clear wa_extensionin.

CLEAR wa_bape_vbapx.

wa_bape_vbapx-ZZFIELD = 'X'.

wa_extensionin-structure = 'BAPE_VBAPX'.

wa_bape_vbapx-posnr = lv_posnr.

wa_extensionin+30(960) = wa_bape_vbapx.

append wa_extensionin to lt_extensionin.

clear wa_extensionin.

ENDLOOP.

  • Then the call to the BAPI

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'

EXPORTING

order_header_in = ls_order_header_in

order_header_inx = ls_order_header_inx

IMPORTING

salesdocument = lv_salesdocument

TABLES

return = lt_ret2

order_items_in = lt_order_items_in

order_items_inx = lt_order_items_inx

order_partners = lt_order_partners

order_keys = lt_order_keys

extensionin = lt_extensionin.

Note: If you have a need to force a different Business Object type or wish to see the extension return fields then use the function SD_SALESDOCUMENT_CREATE instead.

CALL FUNCTION 'SD_SALESDOCUMENT_CREATE'

EXPORTING

sales_header_in = ls_order_header_in

sales_header_inx = ls_order_header_inx

business_object = 'BUS2032'

IMPORTING

salesdocument_ex = lv_salesdocument

sales_header_out = lv_sales_header_out

sales_header_status = lv_sales_header_status

TABLES

return = lt_ret2

sales_items_in = lt_order_items_in

sales_items_inx = lt_order_items_inx

sales_partners = lt_order_partners

sales_keys = lt_order_keys

extensionin = lt_extensionin

incomplete_log = lt_incomplete_log

extensionex = lt_extensionex.

Former Member
0 Kudos

Thank you Madhu and Ramesh.

I need to add few fields and I dont want to add it to any DB TAble or existing tables in BAPI , I want to create a new table in BAPI Tables.

I'm trying to Enhance BAPI_INCOMINGINVOICE_CHANGE.

Thanks for all of your time..

0 Kudos

Hi Ghanta,

1) What is the exact requirement 2) If you add new tables in bapi what you are going to keep in that 3) Where you will move that tables data. Elaborate the requirement more.

Regards,

Madhu.

Former Member
0 Kudos

Hi Ghanta,

I need to add few fields and I dont want to add it to any DB TAble or existing tables in BAPI , I want to create a new table in BAPI Tables.

You can do the above without any access keys, if you are on ECC 6.0, you can use the enhance interface option of the FM and add an optional tables parameter. Once, you have done this you can use the implicit enhancement option in the beginning/end of the FM to add custom logic to handle the data in the new table parameter or you can use BADI - MRM_BAPI_MAPPING, if it gets triggered in the flow of the BAPI.

Now if you are in ECC .50 or less, then you will have to use the extensions table parameter, and check the BADI - MRM_BAPI_MAPPING(i am not sure if it is available).

Else, you can export the custom values into memory before calling the BAPI and importing it the SAVEBEFORE* method of the BADI - INVOICE_UPDATE.

Regards,

Chen

0 Kudos

Thank You Chen! I was able to add Table ,

Madhu I just need to pass the values now I will be able to do that.