in src/ZGOOG_DEMO_RAP_AGENT/src/zcl_goog_rap_generative_model.clas.abap [0:0]
METHOD rap_call.
DATA(ls_rap_tool) = REF #( gt_rap_tools[ name = iv_function_name ] OPTIONAL ).
DATA: lo_client_proxy TYPE REF TO /iwbep/if_cp_client_proxy.
TRY.
CASE ls_rap_tool->implementation-version.
WHEN 'V2'.
lo_client_proxy =
/iwbep/cl_cp_client_proxy_fact=>create_v2_local_proxy(
VALUE #( service_id = ls_rap_tool->implementation-service service_version = '0001' ) ).
WHEN 'V4'.
lo_client_proxy =
/iwbep/cl_cp_client_proxy_fact=>create_v4_local_proxy(
VALUE #( service_id = ls_rap_tool->implementation-service service_version = '0001' repository_id = 'SRVD_A2X' ) ).
WHEN OTHERS.
ENDCASE.
CASE ls_rap_tool->implementation-operation.
WHEN 'GET'.
DATA: lo_read_request TYPE REF TO /iwbep/if_cp_request_read_list.
DATA: lo_read_response TYPE REF TO /iwbep/if_cp_response_read_lst.
lo_read_request =
lo_client_proxy->create_resource_for_entity_set(
CONV #( ls_rap_tool->implementation-entity )
)->create_request_for_read( ).
DATA(lo_filter_factory) = lo_read_request->create_filter_factory( ).
LOOP AT it_function_parameters REFERENCE INTO DATA(ls_function_param).
DATA(lr_range_func) =
get_range_table(
EXPORTING
pi_type = CONV #( ls_rap_tool->implementation-cds_name && '-' && ls_function_param->parameter_name )
pi_value = ls_function_param->parameter_value ).
FIELD-SYMBOLS: <lt_range_func> TYPE STANDARD TABLE.
ASSIGN lr_range_func->* TO <lt_range_func>.
DATA(lo_filter_func) =
lo_filter_factory->create_by_range(
iv_property_path = ls_function_param->parameter_name
it_range = <lt_range_func> ).
lo_read_request->set_filter( lo_filter_func ).
ENDLOOP.
LOOP AT ls_rap_tool->implementation-const_qp REFERENCE INTO DATA(ls_const_qp).
DATA(lr_range_const) =
get_range_table(
EXPORTING
pi_type = CONV #( ls_rap_tool->implementation-cds_name && '-' && ls_const_qp->name )
pi_value = ls_const_qp->value ).
FIELD-SYMBOLS: <lt_range_const> TYPE STANDARD TABLE.
ASSIGN lr_range_const->* TO <lt_range_const>.
DATA(lo_filter_const) =
lo_filter_factory->create_by_range(
iv_property_path = ls_const_qp->name
it_range = <lt_range_const> ).
lo_read_request->set_filter( lo_filter_const ).
ENDLOOP.
DATA: lr_data TYPE REF TO data.
CREATE DATA lr_data TYPE STANDARD TABLE OF (ls_rap_tool->implementation-cds_name).
FIELD-SYMBOLS: <lt_data> TYPE STANDARD TABLE.
ASSIGN lr_data->* TO <lt_data>.
lo_read_request->set_top( iv_top = 10 ).
lo_read_response = lo_read_request->execute( ).
"Retrieve the business data
lo_read_response->get_business_data( IMPORTING et_business_data = <lt_data> ).
IF <lt_data> IS INITIAL.
RETURN.
ENDIF.
ev_function_response = |List of { ls_rap_tool->implementation-cds_column }: |.
LOOP AT <lt_data> ASSIGNING FIELD-SYMBOL(<ls_data>).
ASSIGN COMPONENT ls_rap_tool->implementation-cds_column
OF STRUCTURE <ls_data> TO FIELD-SYMBOL(<lv_column>).
ev_function_response = ev_function_response && space && <lv_column>.
ENDLOOP.
WHEN 'PATCH'.
DATA: lo_update_request TYPE REF TO /iwbep/if_cp_request_update.
DATA: lo_entity_resource TYPE REF TO /iwbep/if_cp_resource_entity.
DATA: lr_upd_data TYPE REF TO data.
CREATE DATA lr_upd_data TYPE (ls_rap_tool->implementation-cds_name).
ASSIGN lr_upd_data->* TO FIELD-SYMBOL(<ls_upd_data>).
ASSIGN COMPONENT ls_rap_tool->implementation-cds_column OF STRUCTURE <ls_upd_data> TO FIELD-SYMBOL(<lv_upd_key>).
<lv_upd_key> = VALUE #( it_function_parameters[ 1 ]-parameter_value OPTIONAL ).
lo_entity_resource =
lo_client_proxy->create_resource_for_entity_set(
CONV #( ls_rap_tool->implementation-entity ) )->navigate_with_key( <ls_upd_data> ).
lo_update_request = lo_entity_resource->create_request_for_update( /iwbep/if_cp_request_update=>gcs_update_semantic-patch ).
LOOP AT ls_rap_tool->implementation-upd_param REFERENCE INTO DATA(ls_upd_param).
ASSIGN COMPONENT ls_upd_param->name OF STRUCTURE <ls_upd_data> TO FIELD-SYMBOL(<lv_upd_prop>).
<lv_upd_prop> = ls_upd_param->value.
ENDLOOP.
lo_update_request->set_business_data(
is_business_data = <ls_upd_data>
it_provided_property = VALUE #( FOR <wa_prop> IN ls_rap_tool->implementation-upd_param
( <wa_prop>-name ) ) ).
DATA(lo_update_response) = lo_update_request->execute( ).
lo_update_response->get_business_data( IMPORTING es_business_data = <ls_upd_data> ).
ev_function_response = |Update Performed successfully |.
WHEN OTHERS.
ENDCASE.
CATCH /iwbep/cx_cp_remote INTO DATA(lx_cp_remote).
" Error handling
DATA(lv_text) = lx_cp_remote->get_longtext( ).
CATCH /iwbep/cx_gateway INTO DATA(lx_gateway).
" Error Handling
DATA(lv_text1) = lx_gateway->get_longtext( ).
ENDTRY.
INSERT VALUE #( step = lines( gt_execution_plan[] ) + 1 ) INTO TABLE gt_execution_plan
REFERENCE INTO DATA(ls_execution_plan) .
APPEND CONV #( |Calling tool { ls_rap_tool->name }| ) TO ls_execution_plan->details.
APPEND CONV #( | - Implemented by RAP service { ls_rap_tool->implementation-service } | ) TO ls_execution_plan->details.
APPEND CONV #( | - Perfoming operation { ls_rap_tool->implementation-operation } on entity { ls_rap_tool->implementation-entity } | ) TO ls_execution_plan->details.
LOOP AT it_function_parameters REFERENCE INTO DATA(ls_func_param_output).
APPEND CONV #( | - With Parameters name { ls_func_param_output->parameter_name } and Value { ls_func_param_output->parameter_value } | ) TO ls_execution_plan->details.
ENDLOOP.
APPEND CONV #( | - Tool response: { ev_function_response } | ) TO ls_execution_plan->details.