diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..6356ef3
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,17 @@
+name: test
+
+on:
+ push
+
+permissions:
+ contents: read
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ - run: npm ci
+ - run: npm test
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b512c09
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
\ No newline at end of file
diff --git a/abaplint.jsonc b/abaplint.jsonc
new file mode 100644
index 0000000..458be7c
--- /dev/null
+++ b/abaplint.jsonc
@@ -0,0 +1,38 @@
+{
+ "global": {
+ "files": "/src/**/*.*"
+ },
+ "dependencies": [
+ {
+ "url": "https://github.com/open-abap/open-abap-core",
+ "folder": "/deps",
+ "files": "/src/**/*.*"
+ }
+ ],
+ "syntax": {
+ "version": "Cloud",
+ "errorNamespace": "."
+ },
+ "rules": {
+ "begin_end_names": true,
+ "cds_parser_error": true,
+ "check_ddic": true,
+ "strict_sql": true,
+ "sql_escape_host_variables": true,
+ "check_include": true,
+ "check_syntax": true,
+ "cloud_types": true,
+ "space_before_colon": true,
+ "space_before_dot": true,
+ "align_parameters": true,
+ "align_type_expressions": true,
+ "sy_modification": true,
+ "global_class": true,
+ "implement_methods": true,
+ "method_implemented_twice": true,
+ "parser_error": true,
+ "superclass_final": true,
+ "unknown_types": true,
+ "xml_consistency": true
+ }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..948433c
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,30 @@
+{
+ "name": "open-abap-rap",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "open-abap-rap",
+ "version": "1.0.0",
+ "dependencies": {
+ "@abaplint/cli": "^2.113.143"
+ }
+ },
+ "node_modules/@abaplint/cli": {
+ "version": "2.113.143",
+ "resolved": "https://registry.npmjs.org/@abaplint/cli/-/cli-2.113.143.tgz",
+ "integrity": "sha512-mEQtN1Mv/RBxxbY3bcoafH2Z1SEB6CCHJEvBH4f/j0OsenCd6DtoCyeINfWBfXWlYPM/tlqdgTCpAbFaOQRrPA==",
+ "license": "MIT",
+ "bin": {
+ "abaplint": "abaplint"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/larshp"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..fdb9150
--- /dev/null
+++ b/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "open-abap-rap",
+ "version": "1.0.0",
+ "description": "open-abap-rap",
+ "private": true,
+ "scripts": {
+ "test": "abaplint"
+ },
+ "author": "",
+ "license": "",
+ "dependencies": {
+ "@abaplint/cli": "^2.113.143"
+ }
+}
diff --git a/src/cl_abap_behavior_handler.clas.abap b/src/cl_abap_behavior_handler.clas.abap
new file mode 100644
index 0000000..3a72d5a
--- /dev/null
+++ b/src/cl_abap_behavior_handler.clas.abap
@@ -0,0 +1,7 @@
+CLASS cl_abap_behavior_handler DEFINITION PUBLIC.
+ PUBLIC SECTION.
+ENDCLASS.
+
+CLASS cl_abap_behavior_handler IMPLEMENTATION.
+
+ENDCLASS.
\ No newline at end of file
diff --git a/src/cl_abap_behavior_handler.clas.xml b/src/cl_abap_behavior_handler.clas.xml
new file mode 100644
index 0000000..3feb2ae
--- /dev/null
+++ b/src/cl_abap_behavior_handler.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ CL_ABAP_BEHAVIOR_HANDLER
+ E
+ CL_ABAP_BEHAVIOR_HANDLER
+ 1
+ X
+ X
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/cl_abap_behavior_saver.clas.abap b/src/cl_abap_behavior_saver.clas.abap
new file mode 100644
index 0000000..860917e
--- /dev/null
+++ b/src/cl_abap_behavior_saver.clas.abap
@@ -0,0 +1,7 @@
+CLASS cl_abap_behavior_saver DEFINITION PUBLIC.
+ PUBLIC SECTION.
+ENDCLASS.
+
+CLASS cl_abap_behavior_saver IMPLEMENTATION.
+
+ENDCLASS.
\ No newline at end of file
diff --git a/src/cl_abap_behavior_saver.clas.xml b/src/cl_abap_behavior_saver.clas.xml
new file mode 100644
index 0000000..212b1ee
--- /dev/null
+++ b/src/cl_abap_behavior_saver.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ CL_ABAP_BEHAVIOR_SAVER
+ E
+ CL_ABAP_BEHAVIOR_SAVER
+ 1
+ X
+ X
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/cl_abap_behavior_saver_failed.clas.abap b/src/cl_abap_behavior_saver_failed.clas.abap
new file mode 100644
index 0000000..cbb2ee8
--- /dev/null
+++ b/src/cl_abap_behavior_saver_failed.clas.abap
@@ -0,0 +1,7 @@
+CLASS cl_abap_behavior_saver_failed DEFINITION PUBLIC.
+ PUBLIC SECTION.
+ENDCLASS.
+
+CLASS cl_abap_behavior_saver_failed IMPLEMENTATION.
+
+ENDCLASS.
\ No newline at end of file
diff --git a/src/cl_abap_behavior_saver_failed.clas.xml b/src/cl_abap_behavior_saver_failed.clas.xml
new file mode 100644
index 0000000..e883ade
--- /dev/null
+++ b/src/cl_abap_behavior_saver_failed.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ CL_ABAP_BEHAVIOR_SAVER_FAILED
+ E
+ CL_ABAP_BEHAVIOR_SAVER_FAILED
+ 1
+ X
+ X
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/exceptions/cx_rap_query_filter_no_range.clas.abap b/src/exceptions/cx_rap_query_filter_no_range.clas.abap
new file mode 100644
index 0000000..aae6b0c
--- /dev/null
+++ b/src/exceptions/cx_rap_query_filter_no_range.clas.abap
@@ -0,0 +1,23 @@
+CLASS cx_rap_query_filter_no_range DEFINITION
+ PUBLIC
+ INHERITING FROM cx_static_check
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+ INTERFACES if_t100_dyn_msg.
+
+ CLASS-METHODS not_expressable_as_range RETURNING VALUE(rx) TYPE REF TO cx_rap_query_filter_no_range.
+
+ METHODS constructor.
+
+ENDCLASS.
+
+CLASS cx_rap_query_filter_no_range IMPLEMENTATION.
+ METHOD not_expressable_as_range.
+ RETURN. " todo, implement method
+ ENDMETHOD.
+
+ METHOD constructor.
+ RETURN. " todo, implement method
+ ENDMETHOD.
+ENDCLASS.
\ No newline at end of file
diff --git a/src/exceptions/cx_rap_query_filter_no_range.clas.xml b/src/exceptions/cx_rap_query_filter_no_range.clas.xml
new file mode 100644
index 0000000..0e54bc9
--- /dev/null
+++ b/src/exceptions/cx_rap_query_filter_no_range.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ CX_RAP_QUERY_FILTER_NO_RANGE
+ E
+ CX_RAP_QUERY_FILTER_NO_RANGE
+ 1
+ X
+ X
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/exceptions/cx_rap_query_prov_not_impl.clas.abap b/src/exceptions/cx_rap_query_prov_not_impl.clas.abap
new file mode 100644
index 0000000..799cf46
--- /dev/null
+++ b/src/exceptions/cx_rap_query_prov_not_impl.clas.abap
@@ -0,0 +1,8 @@
+CLASS cx_rap_query_prov_not_impl DEFINITION PUBLIC ABSTRACT INHERITING FROM cx_rap_query_provider.
+ PUBLIC SECTION.
+ PROTECTED SECTION.
+ENDCLASS.
+
+CLASS cx_rap_query_prov_not_impl IMPLEMENTATION.
+
+ENDCLASS.
\ No newline at end of file
diff --git a/src/exceptions/cx_rap_query_prov_not_impl.clas.xml b/src/exceptions/cx_rap_query_prov_not_impl.clas.xml
new file mode 100644
index 0000000..efa4d86
--- /dev/null
+++ b/src/exceptions/cx_rap_query_prov_not_impl.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ CX_RAP_QUERY_PROV_NOT_IMPL
+ E
+ CX_RAP_QUERY_PROV_NOT_IMPL
+ 1
+ X
+ X
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/exceptions/cx_rap_query_provider.clas.abap b/src/exceptions/cx_rap_query_provider.clas.abap
new file mode 100644
index 0000000..5f18b97
--- /dev/null
+++ b/src/exceptions/cx_rap_query_provider.clas.abap
@@ -0,0 +1,21 @@
+CLASS cx_rap_query_provider DEFINITION
+ PUBLIC
+ INHERITING FROM cx_static_check
+ ABSTRACT
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+
+ INTERFACES if_t100_dyn_msg .
+ INTERFACES if_t100_message .
+
+ METHODS constructor IMPORTING textid LIKE if_t100_message=>t100key OPTIONAL
+ previous LIKE previous OPTIONAL.
+ PROTECTED SECTION.
+ENDCLASS.
+
+CLASS cx_rap_query_provider IMPLEMENTATION.
+ METHOD constructor.
+ RETURN. " todo, implement method
+ ENDMETHOD.
+ENDCLASS.
\ No newline at end of file
diff --git a/src/exceptions/cx_rap_query_provider.clas.xml b/src/exceptions/cx_rap_query_provider.clas.xml
new file mode 100644
index 0000000..dc66d8e
--- /dev/null
+++ b/src/exceptions/cx_rap_query_provider.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ CX_RAP_QUERY_PROVIDER
+ E
+ CX_RAP_QUERY_PROVIDER
+ 1
+ X
+ X
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/exceptions/cx_rap_query_response_set_twic.clas.abap b/src/exceptions/cx_rap_query_response_set_twic.clas.abap
new file mode 100644
index 0000000..e00a72e
--- /dev/null
+++ b/src/exceptions/cx_rap_query_response_set_twic.clas.abap
@@ -0,0 +1,23 @@
+CLASS cx_rap_query_response_set_twic DEFINITION
+ PUBLIC
+ FINAL
+ INHERITING FROM cx_dynamic_check
+ CREATE PRIVATE.
+
+ PUBLIC SECTION.
+ INTERFACES if_t100_dyn_msg.
+
+ CLASS-METHODS setter_already_called RETURNING VALUE(rx) TYPE REF TO cx_rap_query_response_set_twic.
+
+ METHODS constructor.
+
+ENDCLASS.
+
+CLASS cx_rap_query_response_set_twic IMPLEMENTATION.
+ METHOD setter_already_called.
+ RETURN. " todo, implement method
+ ENDMETHOD.
+ METHOD constructor.
+ RETURN. " todo, implement method
+ ENDMETHOD.
+ENDCLASS.
\ No newline at end of file
diff --git a/src/exceptions/cx_rap_query_response_set_twic.clas.xml b/src/exceptions/cx_rap_query_response_set_twic.clas.xml
new file mode 100644
index 0000000..69cdf76
--- /dev/null
+++ b/src/exceptions/cx_rap_query_response_set_twic.clas.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ CX_RAP_QUERY_RESPONSE_SET_TWIC
+ E
+ CX_RAP_QUERY_RESPONSE_SET_TWIC
+ 1
+ X
+ X
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_aggregation.intf.abap b/src/interfaces/if_rap_query_aggregation.intf.abap
new file mode 100644
index 0000000..37214da
--- /dev/null
+++ b/src/interfaces/if_rap_query_aggregation.intf.abap
@@ -0,0 +1,26 @@
+INTERFACE if_rap_query_aggregation PUBLIC.
+
+ CONSTANTS:
+ BEGIN OF co_standard_aggregation_method,
+ count TYPE string VALUE `COUNT`,
+ count_distinct TYPE string VALUE `COUNT_DISTINCT`,
+ sum TYPE string VALUE `SUM`,
+ minimum TYPE string VALUE `MIN`,
+ maximum TYPE string VALUE `MAX`,
+ average TYPE string VALUE `AVG`,
+ END OF co_standard_aggregation_method.
+ CONSTANTS co_count_all_identifier TYPE string VALUE `*`.
+
+ TYPES:
+ BEGIN OF ty_aggregation_element,
+ aggregation_method TYPE string,
+ input_element TYPE string,
+ result_element TYPE string,
+ END OF ty_aggregation_element.
+ TYPES tt_aggregation_elements TYPE STANDARD TABLE OF ty_aggregation_element WITH EMPTY KEY.
+ METHODS get_aggregated_elements RETURNING VALUE(rt_aggregated_elements) TYPE tt_aggregation_elements.
+
+ TYPES tt_grouped_elements TYPE STANDARD TABLE OF string WITH EMPTY KEY.
+ METHODS get_grouped_elements RETURNING VALUE(rt_grouped_elements) TYPE tt_grouped_elements.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_aggregation.intf.xml b/src/interfaces/if_rap_query_aggregation.intf.xml
new file mode 100644
index 0000000..7551e06
--- /dev/null
+++ b/src/interfaces/if_rap_query_aggregation.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_AGGREGATION
+ E
+ IF_RAP_QUERY_AGGREGATION
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_filter.intf.abap b/src/interfaces/if_rap_query_filter.intf.abap
new file mode 100644
index 0000000..da3ac87
--- /dev/null
+++ b/src/interfaces/if_rap_query_filter.intf.abap
@@ -0,0 +1,23 @@
+INTERFACE if_rap_query_filter PUBLIC.
+
+ TYPES:
+ BEGIN OF ty_range_option,
+ sign TYPE c LENGTH 1,
+ option TYPE c LENGTH 2,
+ low TYPE string,
+ high TYPE string,
+ END OF ty_range_option,
+ tt_range_option TYPE STANDARD TABLE OF ty_range_option WITH EMPTY KEY,
+
+ BEGIN OF ty_name_range_pairs,
+ name TYPE string,
+ range TYPE tt_range_option,
+ END OF ty_name_range_pairs,
+ tt_name_range_pairs TYPE STANDARD TABLE OF ty_name_range_pairs WITH EMPTY KEY.
+ METHODS get_as_ranges IMPORTING iv_drop_null_comparisons TYPE abap_bool DEFAULT abap_false
+ RETURNING VALUE(rt_ranges) TYPE tt_name_range_pairs
+ RAISING cx_rap_query_filter_no_range.
+ METHODS get_as_sql_string RETURNING VALUE(rv_string) TYPE string.
+ METHODS get_as_tree RETURNING VALUE(ro_tree) TYPE REF TO if_rap_query_filter_tree.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_filter.intf.xml b/src/interfaces/if_rap_query_filter.intf.xml
new file mode 100644
index 0000000..711825f
--- /dev/null
+++ b/src/interfaces/if_rap_query_filter.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_FILTER
+ E
+ IF_RAP_QUERY_FILTER
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_filter_tree.intf.abap b/src/interfaces/if_rap_query_filter_tree.intf.abap
new file mode 100644
index 0000000..3727292
--- /dev/null
+++ b/src/interfaces/if_rap_query_filter_tree.intf.abap
@@ -0,0 +1,5 @@
+INTERFACE if_rap_query_filter_tree PUBLIC.
+
+ METHODS get_root_node RETURNING VALUE(root_node) TYPE REF TO if_rap_query_filter_tree_node.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_filter_tree.intf.xml b/src/interfaces/if_rap_query_filter_tree.intf.xml
new file mode 100644
index 0000000..7e90b20
--- /dev/null
+++ b/src/interfaces/if_rap_query_filter_tree.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_FILTER_TREE
+ E
+ IF_RAP_QUERY_FILTER_TREE
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_filter_tree_node.intf.abap b/src/interfaces/if_rap_query_filter_tree_node.intf.abap
new file mode 100644
index 0000000..c8f1884
--- /dev/null
+++ b/src/interfaces/if_rap_query_filter_tree_node.intf.abap
@@ -0,0 +1,7 @@
+INTERFACE if_rap_query_filter_tree_node PUBLIC.
+
+ METHODS get_children RETURNING VALUE(children) TYPE if_rap_query_filter_tree_types=>ordered_children.
+ METHODS get_type RETURNING VALUE(type) TYPE if_rap_query_filter_tree_types=>node_type.
+ METHODS get_value RETURNING VALUE(value) TYPE REF TO data.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_filter_tree_node.intf.xml b/src/interfaces/if_rap_query_filter_tree_node.intf.xml
new file mode 100644
index 0000000..2923a62
--- /dev/null
+++ b/src/interfaces/if_rap_query_filter_tree_node.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_FILTER_TREE_NODE
+ E
+ IF_RAP_QUERY_FILTER_TREE_NODE
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_filter_tree_types.intf.abap b/src/interfaces/if_rap_query_filter_tree_types.intf.abap
new file mode 100644
index 0000000..b703d77
--- /dev/null
+++ b/src/interfaces/if_rap_query_filter_tree_types.intf.abap
@@ -0,0 +1,19 @@
+INTERFACE if_rap_query_filter_tree_types PUBLIC.
+
+ TYPES: BEGIN OF ENUM node_type STRUCTURE node_types,
+ identifier,
+ value,
+ is_null,
+ equals,
+ matches_pattern,
+ less_than,
+ greater_than,
+ logical_not,
+ logical_and,
+ logical_or,
+ END OF ENUM node_type STRUCTURE node_types.
+
+ TYPES: node TYPE REF TO if_rap_query_filter_tree_node,
+ ordered_children TYPE STANDARD TABLE OF node WITH EMPTY KEY.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_filter_tree_types.intf.xml b/src/interfaces/if_rap_query_filter_tree_types.intf.xml
new file mode 100644
index 0000000..43fffe8
--- /dev/null
+++ b/src/interfaces/if_rap_query_filter_tree_types.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_FILTER_TREE_TYPES
+ E
+ IF_RAP_QUERY_FILTER_TREE_TYPES
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_paging.intf.abap b/src/interfaces/if_rap_query_paging.intf.abap
new file mode 100644
index 0000000..7db9939
--- /dev/null
+++ b/src/interfaces/if_rap_query_paging.intf.abap
@@ -0,0 +1,7 @@
+INTERFACE if_rap_query_paging PUBLIC.
+
+ CONSTANTS page_size_unlimited TYPE int8 VALUE -1.
+ METHODS get_offset RETURNING VALUE(rv_offset) TYPE int8.
+ METHODS get_page_size RETURNING VALUE(rv_page_size) TYPE int8.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_paging.intf.xml b/src/interfaces/if_rap_query_paging.intf.xml
new file mode 100644
index 0000000..571cf6a
--- /dev/null
+++ b/src/interfaces/if_rap_query_paging.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_PAGING
+ E
+ IF_RAP_QUERY_PAGING
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_provider.intf.abap b/src/interfaces/if_rap_query_provider.intf.abap
new file mode 100644
index 0000000..23be429
--- /dev/null
+++ b/src/interfaces/if_rap_query_provider.intf.abap
@@ -0,0 +1,11 @@
+INTERFACE if_rap_query_provider PUBLIC.
+
+ METHODS select
+ IMPORTING
+ io_request TYPE REF TO if_rap_query_request
+ io_response TYPE REF TO if_rap_query_response
+ RAISING
+ cx_rap_query_prov_not_impl
+ cx_rap_query_provider.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_provider.intf.xml b/src/interfaces/if_rap_query_provider.intf.xml
new file mode 100644
index 0000000..3bb79af
--- /dev/null
+++ b/src/interfaces/if_rap_query_provider.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_PROVIDER
+ E
+ IF_RAP_QUERY_PROVIDER
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_request.intf.abap b/src/interfaces/if_rap_query_request.intf.abap
new file mode 100644
index 0000000..df376ac
--- /dev/null
+++ b/src/interfaces/if_rap_query_request.intf.abap
@@ -0,0 +1,28 @@
+INTERFACE if_rap_query_request PUBLIC.
+
+ METHODS get_entity_id RETURNING VALUE(rv_entity_id) TYPE string.
+ METHODS is_data_requested RETURNING VALUE(rv_is_requested) TYPE abap_bool.
+ METHODS is_total_numb_of_rec_requested RETURNING VALUE(rv_is_requested) TYPE abap_bool.
+ METHODS get_filter RETURNING VALUE(ro_filter) TYPE REF TO if_rap_query_filter.
+ METHODS get_paging RETURNING VALUE(ro_paging) TYPE REF TO if_rap_query_paging.
+
+ TYPES: BEGIN OF ty_sort_element,
+ element_name TYPE string,
+ descending TYPE abap_bool,
+ END OF ty_sort_element.
+ TYPES tt_sort_elements TYPE STANDARD TABLE OF ty_sort_element WITH EMPTY KEY.
+ METHODS get_sort_elements RETURNING VALUE(rt_sort_elements) TYPE tt_sort_elements.
+
+ TYPES: BEGIN OF ty_parameter,
+ parameter_name TYPE string,
+ value TYPE string,
+ END OF ty_parameter.
+ TYPES tt_parameters TYPE STANDARD TABLE OF ty_parameter WITH EMPTY KEY.
+ METHODS get_parameters RETURNING VALUE(rt_parameters) TYPE tt_parameters.
+ METHODS get_aggregation RETURNING VALUE(ro_aggregation) TYPE REF TO if_rap_query_aggregation.
+ METHODS get_search_expression RETURNING VALUE(rv_search_expression) TYPE string.
+
+ TYPES tt_requested_elements TYPE STANDARD TABLE OF string WITH EMPTY KEY.
+ METHODS get_requested_elements RETURNING VALUE(rt_requested_elements) TYPE tt_requested_elements.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_request.intf.xml b/src/interfaces/if_rap_query_request.intf.xml
new file mode 100644
index 0000000..cf18db2
--- /dev/null
+++ b/src/interfaces/if_rap_query_request.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_REQUEST
+ E
+ IF_RAP_QUERY_REQUEST
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_response.intf.abap b/src/interfaces/if_rap_query_response.intf.abap
new file mode 100644
index 0000000..4d506ff
--- /dev/null
+++ b/src/interfaces/if_rap_query_response.intf.abap
@@ -0,0 +1,11 @@
+INTERFACE if_rap_query_response PUBLIC.
+
+ METHODS set_data
+ IMPORTING it_data TYPE STANDARD TABLE
+ RAISING cx_rap_query_response_set_twic.
+
+ METHODS set_total_number_of_records
+ IMPORTING iv_total_number_of_records TYPE int8
+ RAISING cx_rap_query_response_set_twic.
+
+ENDINTERFACE.
\ No newline at end of file
diff --git a/src/interfaces/if_rap_query_response.intf.xml b/src/interfaces/if_rap_query_response.intf.xml
new file mode 100644
index 0000000..e6a89c2
--- /dev/null
+++ b/src/interfaces/if_rap_query_response.intf.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+ IF_RAP_QUERY_RESPONSE
+ E
+ IF_RAP_QUERY_RESPONSE
+ 2
+ 1
+ X
+
+
+
+
\ No newline at end of file