in src/zretail_demo/zretail_demo_frontend/src/zcl_product_review_qic.clas.abap [0:0]
METHOD if_rap_query_provider~select.
DATA lt_data TYPE STANDARD TABLE OF zce_product_reviews.
DATA(lv_top) = io_request->get_paging( )->get_page_size( ).
DATA(lv_skip) = io_request->get_paging( )->get_offset( ).
" TODO: variable is assigned but never used (ABAP cleaner)
DATA(ld_is_data_requested) = io_request->is_data_requested( ).
DATA(lt_sort_order) = CORRESPONDING abap_sortorder_tab( io_request->get_sort_elements( ) MAPPING name = element_name ).
DATA(lt_filter) = io_request->get_filter( )->get_as_ranges( ).
DATA(lv_product_id) = VALUE #( lt_filter[ name = 'PRODUCTID' ]-range[ 1 ]-low OPTIONAL ).
DATA: lo_bq_client TYPE REF TO /goog/cl_bigquery_v2.
DATA: ls_input_bq TYPE /goog/cl_bigquery_v2=>ty_103.
IF lv_product_id IS NOT INITIAL.
TRY .
CREATE OBJECT lo_bq_client
EXPORTING
iv_key_name = 'RETAIL_DEMO'.
ls_input_bq-query = |SELECT * FROM your-project-id.epm_shop.product_reviews_sap WHERE product_id = '{ lv_product_id }'|.
CALL METHOD lo_bq_client->query_jobs
EXPORTING
iv_p_projects_id = CONV #( lo_bq_client->gv_project_id )
is_input = ls_input_bq
IMPORTING
es_output = DATA(ls_output).
DATA(lv_index) = 0.
LOOP AT ls_output-rows REFERENCE INTO DATA(ls_rows).
lv_index = lv_index + 1.
DATA(ls_product_review) = VALUE t_product_review( ).
LOOP AT ls_rows->f ASSIGNING FIELD-SYMBOL(<ls_field>).
DATA(lv_tabix_field) = sy-tabix.
ASSIGN COMPONENT lv_tabix_field OF STRUCTURE ls_product_review
TO FIELD-SYMBOL(<ls_target_field>).
IF <ls_field>-v IS BOUND AND
<ls_target_field> IS ASSIGNED.
<ls_target_field> = <ls_field>-v->*.
ENDIF.
ENDLOOP.
APPEND VALUE #( productid = ls_product_review-product_id
reviewno = lv_index
reviewtext = ls_product_review-review_text
rating = ls_product_review-product_rating
)
TO lt_data.
ENDLOOP.
CATCH cx_root.
ENDTRY.
ENDIF.
DATA(lv_max_index) = 0.
IF lv_top IS NOT INITIAL.
lv_max_index = lv_top + lv_skip.
ENDIF.
IF lines( lt_data ) > lv_max_index.
DELETE lt_data FROM lv_max_index.
ENDIF.
IF lv_skip IS NOT INITIAL.
DELETE lt_data TO lv_skip.
ENDIF.
io_response->set_total_number_of_records( lines( lt_data ) ).
io_response->set_data( lt_data ).