cancel
Showing results for 
Search instead for 
Did you mean: 

Add action button on Custom Business Object exposed as service on BAS on which BAPI is called

Shahab_Infosys
Discoverer
0 Kudos
204

Hi Everyone,

Currently we are on S4HANA 2020 on premise. We have a requirement where we need to use Custom Business Object ( CBO ) which will be exposed as a service and config on BAS. 

We will be doing with all CRUD operation on the above application build from CBO and also had to trigger a BAPI call to create Sales Order on one action button. 

Please suggest how I can add the BAPI functionality here on Action button. Secondly, how we can add action button on UI build through CBO.

Best Regards

View Entire Topic
AC4
Discoverer
0 Kudos

Hello!

I am unsure with your version if you can call the BAPI directly inside the Implementation method of your action, implemented in the Behaviour Implementation Class. 

If not, you will have to create a Class and method to call the BAPI and expose it as C1 to call it inside your RAP Behaviour Implementation.

The only tricky thing is the commit that you need to perform. For that, we came up with a workaround by wrapping the BAPI in a custom RFC function module, similar to this (this is for Planned Order creation but the logic is the same):

CALL FUNCTION 'ZPP_FM_CUTSIZE_CREATE_ORDER'

STARTING NEW TASK 'Z_ORDER'

DESTINATION 'NONE'

CALLING response_action ON END OF TASK

EXPORTING

logical_system = mv_logsys

order_type = '5'

ext_number_assignment = 'X'

commit_control = 'E' "E

strategy_profile = ls_strategy_profile

event_control = '1'

planning_mode_usage = '1'

TABLES

order_head = lt_order_head

order_structure = lt_order_structure

order_components = lt_order_components

characteristics_val_io = lt_characteristics_val_io

order_modes = lt_o_mode

mapping_data = lt_mapping_data

return = lt_ret

extension_in = lt_extension_in

CHANGING

cv_complete = lv_is_complete

EXCEPTIONS

communication_failure = 1

system_failure = 2

OTHERS = 3.

WAIT UNTIL lv_is_complete EQ abap_true.

response action method to receive the result:

METHOD response_action.

 

DATA lt_mapping_data TYPE TABLE OF bapi10503ordmapreto.

 

RECEIVE RESULTS FROM FUNCTION 'ZPP_FM_CREATE_ORDER'

IMPORTING return = mt_bapi_create_ret

mapping_data = lt_mapping_data .

 

READ TABLE lt_mapping_data ASSIGNING FIELD-SYMBOL(<fs_mapping_data>) INDEX 1.

CHECK <fs_mapping_data> IS ASSIGNED.

mv_planned_order = <fs_mapping_data>-order_number.

 

 

ENDMETHOD.



code inside ZPP_FM_CREATE_ORDER:

 

 

CALL FUNCTION 'BAPI_MOSRVAPS_SAVETMPLPPM' DESTINATION 'NONE'

EXPORTING

logical_system = logical_system

order_type = order_type

ext_number_assignment = ext_number_assignment

commit_control = commit_control

strategy_profile = strategy_profile

planning_mode_usage = planning_mode_usage

event_control = event_control

TABLES

order_head = order_head

order_structure = order_structure

order_components = order_components

characteristics_val_io = characteristics_val_io

characteristics_val_act = characteristics_val_act

order_modes = order_modes

mapping_data = mapping_data

return = return

extension_in = extension_in

EXCEPTIONS

communication_failure = 1

system_failure = 2

OTHERS = 3.

 

IF sy-subrc NE 0.

DATA ls_ret TYPE bapiret2.

MOVE sy-msgid TO ls_ret-id.

MOVE sy-msgno TO ls_ret-number.

MOVE sy-msgty TO ls_ret-type.

MOVE sy-msgv1 TO ls_ret-message_v1.

MOVE sy-msgv2 TO ls_ret-message_v2.

MOVE sy-msgv3 TO ls_ret-message_v3.

MOVE sy-msgv4 TO ls_ret-message_v4.

 

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno INTO ls_ret-message

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

APPEND ls_ret TO return.

ENDIF.

 

cv_complete = abap_true.

 

 

Let me know if this helps you in any case. We have implemented it and it works well. I can try to help if you need further help 🙂

Shahab_Infosys
Discoverer
0 Kudos
Thanks for your reply... we need this BAPI functionality under Custom Business Object action button. Is it feasible? Secondly, if it not feasible, then we will build a RAP application managed with unmanaged save and under save_modified method, seems we can call the BAPI. I need to check how feasible this can be.. Lastly, if I go with your suggested solution, are you referring here to create wrapper class and released it as C1.