
method /iwbep/if_v4_dp_basic~create_entity.
data: lv_entity_type_name type /iwbep/if_v4_med_element=>ty_e_med_internal_name.
io_request->get_entity_type( importing ev_entity_type_name = lv_entity_type_name ).
case lv_entity_type_name.
when gcs_entity_type_names-internal-salesorder.
create_salesorder(
io_request = io_request
io_response = io_response ).
when gcs_entity_type_names-internal-salesorderitem.
create_salesorderitem(
io_request = io_request
io_response = io_response ).
when others.
super->/iwbep/if_v4_dp_basic~create_entity(
exporting
io_request = io_request
io_response = io_response ).
endcase.
endmethod.
method create_salesorder.
"entity type specific data types
data: ls_salesorder type gty_cds_views-salesorder,
ls_salesorder_rfc type bapi_epm_so_header,
ls_salesorder_rfc_key type bapi_epm_so_id.
"generic data types
data:
ls_todo_list type /iwbep/if_v4_requ_basic_create=>ty_s_todo_list,
ls_done_list type /iwbep/if_v4_requ_basic_create=>ty_s_todo_process_list,
lt_bapi_return type table of bapiret2,
ls_bapi_return type bapiret2,
lo_message_container type ref to /iwbep/if_v4_message_container,
lv_names_of_missing_props type string.
io_request->get_todos( importing es_todo_list = ls_todo_list ).
if ls_todo_list-process-busi_data = abap_true.
io_request->get_busi_data( importing es_busi_data = ls_salesorder ).
ls_done_list-busi_data = abap_true. "business data processed
endif.
if ls_todo_list-process-partial_busi_data = abap_true.
"check if the mandatory properties have been provided
"do not check for properties that are not mandatory
if ls_salesorder-customer is not initial and
ls_salesorder-transactioncurrency is not initial.
ls_salesorder_rfc-buyer_id = ls_salesorder-customer.
ls_salesorder_rfc-currency_code = ls_salesorder-transactioncurrency.
ls_done_list-partial_busi_data = abap_true.
else.
lv_names_of_missing_props = 'Customer or TransactionCurrency'.
raise exception type zcx_e2e001_odata_v4_so
exporting
textid = zcx_e2e001_odata_v4_so=>missing_properties
http_status_code = zcx_e2e001_odata_v4_so=>gcs_http_status_codes-bad_request
edm_entity_set_name = gcs_entity_set_names-edm-salesorder
names_of_missing_props = lv_names_of_missing_props.
endif.
endif.
call function 'BAPI_EPM_SO_CREATE'
exporting
headerdata = ls_salesorder_rfc
importing
salesorderid = ls_salesorder_rfc_key
tables
return = lt_bapi_return.
" Error handling
if lt_bapi_return is not initial.
"check if an error message is in lt_bapi_return
loop at lt_bapi_return into ls_bapi_return.
if ls_bapi_return-type = 'E'.
lo_message_container = io_response->get_message_container( ).
loop at lt_bapi_return into ls_bapi_return.
lo_message_container->add_t100(
exporting
iv_msg_type = ls_bapi_return-type
iv_msg_id = ls_bapi_return-id
iv_msg_number = ls_bapi_return-number
iv_msg_v1 = ls_bapi_return-message_v1
iv_msg_v2 = ls_bapi_return-message_v2
iv_msg_v3 = ls_bapi_return-message_v3
iv_msg_v4 = ls_bapi_return-message_v4 ).
endloop.
"raise exception
raise exception type zcx_e2e001_odata_v4_so
exporting
message_container = lo_message_container.
endif.
endloop.
endif.
if ls_todo_list-return-busi_data = abap_true.
" Read data again and set the response.
clear ls_salesorder.
select single * from ze2e001_c_salesorder
into corresponding fields of @ls_salesorder
where salesorder = @ls_salesorder_rfc_key-so_id.
io_response->set_busi_data( ls_salesorder ).
endif.
io_response->set_is_done( ls_done_list ).
method update_salesorder.
"entity type specific data types
data: ls_salesorder type gty_cds_views-salesorder,
ls_key_salesorder type gty_cds_views-salesorder,
ls_salesorder_rfc type bapi_epm_so_header,
ls_salesorder_x_rfc type bapi_epm_so_headerx,
ls_salesorder_rfc_key type bapi_epm_so_id,
lv_salesorder_key_edm type string,
lv_helper_int type i.
"generic data types
data: ls_todo_list type /iwbep/if_v4_requ_basic_update=>ty_s_todo_list,
ls_done_list type /iwbep/if_v4_requ_basic_update=>ty_s_todo_process_list,
lt_bapi_return type table of bapiret2,
lo_message_container type ref to /iwbep/if_v4_message_container.
io_request->get_todos( importing es_todo_list = ls_todo_list ).
if ls_todo_list-process-busi_data = abap_true.
io_request->get_busi_data( importing es_busi_data = ls_salesorder ).
ls_done_list-busi_data = abap_true. "business data processed
endif.
" Update single entity using classic API.
" fill structure for header data
ls_salesorder_rfc-so_id = ls_key_salesorder-salesorder.
ls_salesorder_rfc-buyer_id = ls_salesorder-customer.
ls_salesorder_rfc-currency_code = ls_salesorder-transactioncurrency.
" @TODO Sales order description is not yet a property of the CDS view
" Map constant values to function module parameters
ls_salesorder_x_rfc-so_id = ls_key_salesorder-salesorder.
ls_salesorder_x_rfc-buyer_id = 'X'.
ls_salesorder_x_rfc-currency_code = 'X'.
" @TODO Sales order description is not yet a property of the CDS view
ls_salesorder_rfc_key-so_id = ls_key_salesorder-salesorder.
* update data
call function 'BAPI_EPM_SO_CHANGE'
exporting
so_id = ls_salesorder_rfc_key
soheaderdata = ls_salesorder_rfc
soheaderdatax = ls_salesorder_x_rfc
tables
return = lt_bapi_return.
" Error handling
if lt_bapi_return is not initial.
lo_message_container = io_response->get_message_container( ).
loop at lt_bapi_return into data(ls_bapi_return).
lo_message_container->add_t100(
exporting
iv_msg_type = ls_bapi_return-type
iv_msg_id = ls_bapi_return-id
iv_msg_number = ls_bapi_return-number
iv_msg_v1 = ls_bapi_return-message_v1
iv_msg_v2 = ls_bapi_return-message_v2
iv_msg_v3 = ls_bapi_return-message_v3
iv_msg_v4 = ls_bapi_return-message_v4 ).
endloop.
raise exception type zcx_e2e001_odata_v4_so
exporting
message_container = lo_message_container.
endif.
if ls_todo_list-return-busi_data = abap_true.
" Read data again and set the response.
select single * from ze2e001_c_salesorder
into corresponding fields of @ls_salesorder
where salesorder = @ls_salesorder_rfc_key-so_id.
io_response->set_busi_data( ls_salesorder ).
endif.
io_response->set_is_done( ls_done_list ).
method delete_salesorder.
"entity type specific data types
data: ls_key_salesorder type gty_cds_views-salesorder,
ls_so_id type bapi_epm_so_id.
"generic data types
data:
ls_todo_list type /iwbep/if_v4_requ_basic_delete=>ty_s_todo_list,
ls_done_list type /iwbep/if_v4_requ_basic_delete=>ty_s_todo_process_list,
lt_bapi_return type table of bapiret2,
lo_message_container type ref to /iwbep/if_v4_message_container.
io_request->get_todos( importing es_todo_list = ls_todo_list ).
" read the key data
io_request->get_key_data( importing es_key_data = ls_key_salesorder ).
ls_done_list-key_data = abap_true.
ls_so_id-so_id = ls_key_salesorder-salesorder.
" Delete data
call function 'BAPI_EPM_SO_DELETE'
exporting
so_id = ls_so_id
tables
return = lt_bapi_return.
" Error handling
if lt_bapi_return is not initial.
lo_message_container = io_response->get_message_container( ).
loop at lt_bapi_return into data(ls_bapi_return).
lo_message_container->add_t100(
exporting
iv_msg_type = ls_bapi_return-type
iv_msg_id = ls_bapi_return-id
iv_msg_number = ls_bapi_return-number
iv_msg_v1 = ls_bapi_return-message_v1
iv_msg_v2 = ls_bapi_return-message_v2
iv_msg_v3 = ls_bapi_return-message_v3
iv_msg_v4 = ls_bapi_return-message_v4 ).
endloop.
"custom exception
raise exception type zcx_e2e001_odata_v4_so
exporting
message_container = lo_message_container.
endif.
io_response->set_is_done( ls_done_list ).
endmethod.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
24 | |
23 | |
22 | |
15 | |
13 | |
10 | |
9 | |
7 | |
7 | |
6 |