diff --git a/src/ddic/ddls/zage_cds_projection.ddls.asddls b/src/ddic/ddls/zage_cds_projection.ddls.asddls
new file mode 100644
index 0000000..1bad84b
--- /dev/null
+++ b/src/ddic/ddls/zage_cds_projection.ddls.asddls
@@ -0,0 +1,11 @@
+@AccessControl.authorizationCheck: #NOT_REQUIRED
+@EndUserText.label: 'AGE Sample CDS Projection View'
+@Metadata.ignorePropagatedAnnotations: true
+define view ZAGE_C_PROJECTION
+ as select from ZAGE_I_SAMPLE
+{
+ key client,
+ key name,
+ description,
+ IsActiveEntity
+}
diff --git a/src/ddic/ddls/zage_cds_projection.ddls.xml b/src/ddic/ddls/zage_cds_projection.ddls.xml
new file mode 100644
index 0000000..4d9b004
--- /dev/null
+++ b/src/ddic/ddls/zage_cds_projection.ddls.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ ZAGE_CDS_PROJECTION
+ E
+
+
+ DEVELOPER
+ 20240101
+
+
+ AGE Sample CDS Projection View
+ EP
+
+
+
+
\ No newline at end of file
diff --git a/src/ddic/ddls/zage_cds_sample.ddls.asddls b/src/ddic/ddls/zage_cds_sample.ddls.asddls
new file mode 100644
index 0000000..1217ecd
--- /dev/null
+++ b/src/ddic/ddls/zage_cds_sample.ddls.asddls
@@ -0,0 +1,11 @@
+@AccessControl.authorizationCheck: #CHECK
+@EndUserText.label: 'AGE Sample CDS View'
+define view ZAGE_I_SAMPLE
+ as select from zage_tabl
+{
+ key client,
+ key name as Name,
+ description as Description,
+ @ObjectModel.virtualElement: true
+ cast('X' as abap.char(1)) as IsActiveEntity
+}
diff --git a/src/ddic/ddls/zage_cds_sample.ddls.xml b/src/ddic/ddls/zage_cds_sample.ddls.xml
new file mode 100644
index 0000000..62fa1ec
--- /dev/null
+++ b/src/ddic/ddls/zage_cds_sample.ddls.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ ZAGE_CDS_SAMPLE
+ E
+
+
+ DEVELOPER
+ 20240101
+
+
+ AGE Sample CDS View
+ EP
+
+
+
+
\ No newline at end of file
diff --git a/src/ddic/ddlx/zage_ddlx_sample.ddlx.asddlxs b/src/ddic/ddlx/zage_ddlx_sample.ddlx.asddlxs
new file mode 100644
index 0000000..927d3ca
--- /dev/null
+++ b/src/ddic/ddlx/zage_ddlx_sample.ddlx.asddlxs
@@ -0,0 +1,12 @@
+@Metadata.layer: #CORE
+@UI: {
+ headerInfo: {
+ typeName: 'Sample',
+ typeNamePlural: 'Samples'
+ }
+}
+annotate view ZAGE_C_PROJECTION with
+{
+ @UI.lineItem: [{ position: 10 }]
+ Client;
+}
\ No newline at end of file
diff --git a/src/ddic/ddlx/zage_ddlx_sample.ddlx.xml b/src/ddic/ddlx/zage_ddlx_sample.ddlx.xml
new file mode 100644
index 0000000..30ba374
--- /dev/null
+++ b/src/ddic/ddlx/zage_ddlx_sample.ddlx.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+ ZAGE_DDLX_SAMPLE
+ E
+
+
+ DEVELOPER
+ 20240101
+
+
+ AGE Sample CDS Metadata Extension
+ ZAGE_C_PROJECTION
+ EP
+
+
+
+
\ No newline at end of file
diff --git a/src/ddic/tabl/zage_tabl.tabl.xml b/src/ddic/tabl/zage_tabl.tabl.xml
index f9263b2..6ca52ab 100644
--- a/src/ddic/tabl/zage_tabl.tabl.xml
+++ b/src/ddic/tabl/zage_tabl.tabl.xml
@@ -20,18 +20,49 @@
N
-
- CLIENT
- X
- 0
- C
- 000006
- X
- CLNT
- 000003
- CLNT
-
-
+
+ CLIENT
+ X
+ 0
+ C
+ 000006
+ X
+ CLNT
+ 000003
+ CLNT
+
+
+ NAME
+ X
+ 0
+ C
+ 000040
+ X
+ CHAR
+ 000020
+ CHAR
+
+
+ DESCRIPTION
+ X
+ 0
+ C
+ 000100
+ X
+ CHAR
+ 000050
+ CHAR
+
+
+ LOCALLASTCHANGEDAT
+ 0
+ C
+ 000016
+ LTST
+ 000014
+ LRAW
+
+
ZAGE_TABL
diff --git a/src/rap/zage_c_rap_sample.ddls.asddls b/src/rap/zage_c_rap_sample.ddls.asddls
new file mode 100644
index 0000000..1887527
--- /dev/null
+++ b/src/rap/zage_c_rap_sample.ddls.asddls
@@ -0,0 +1,10 @@
+@EndUserText.label: 'AGE Sample RAP Projection'
+@ObjectModel.result: #FIRST_ENTITY
+define view ZAGE_C_RAP_SAMPLE
+ as projection on ZAGE_C_PROJECTION
+{
+ key Client,
+ key Name,
+ Description,
+ IsActiveEntity
+}
diff --git a/src/rap/zage_c_rap_sample.ddls.xml b/src/rap/zage_c_rap_sample.ddls.xml
new file mode 100644
index 0000000..e4a7cde
--- /dev/null
+++ b/src/rap/zage_c_rap_sample.ddls.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+ ZAGE_C_RAP_SAMPLE
+ E
+
+
+ DEVELOPER
+ 20240101
+
+
+ AGE Sample RAP Projection View
+ EP
+
+
+
+
\ No newline at end of file
diff --git a/src/rap/zage_rap_sample.bdef.asbdef b/src/rap/zage_rap_sample.bdef.asbdef
new file mode 100644
index 0000000..a3ce78a
--- /dev/null
+++ b/src/rap/zage_rap_sample.bdef.asbdef
@@ -0,0 +1,26 @@
+managed implementation in class ZCL_AGE_RAP_SAMPLE unique;
+
+strict ( 2 );
+define behavior for ZAGE_C_PROJECTION
+persistent table zage_tabl
+lock master
+authorization master ( instance )
+etag master LocalLastChangedAt
+{
+ field ( mandatory : create, readonly : update ) Client;
+ field ( mandatory : create ) Name;
+ field ( readonly ) IsActiveEntity;
+
+ create;
+ update;
+ delete;
+
+ validation validateData on save { field Name; }
+
+ mapping for zage_tabl
+ {
+ Client = client;
+ Name = name;
+ Description = description;
+ }
+}
diff --git a/src/rap/zage_rap_sample.bdef.xml b/src/rap/zage_rap_sample.bdef.xml
new file mode 100644
index 0000000..6544006
--- /dev/null
+++ b/src/rap/zage_rap_sample.bdef.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ ZAGE_RAP_SAMPLE
+ E
+ AGE Sample RAP Behavior Definition
+
+
+ DEVELOPER
+ 20240101
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/rap/zage_rap_sample.sbtt.xml b/src/rap/zage_rap_sample.sbtt.xml
new file mode 100644
index 0000000..9ea36d3
--- /dev/null
+++ b/src/rap/zage_rap_sample.sbtt.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ E
+ ZAGE_RAP_SAMPLE
+ ZAGE_C_RAP_SAMPLE
+ JSON
+ E
+ AGE Sample RAP Service Binding
+ PROXY
+ 0000000000000000000000000000000000000000
+ X
+
+
+
+
\ No newline at end of file
diff --git a/src/rap/zcl_age_rap_sample.clas.abap b/src/rap/zcl_age_rap_sample.clas.abap
new file mode 100644
index 0000000..96dfffb
--- /dev/null
+++ b/src/rap/zcl_age_rap_sample.clas.abap
@@ -0,0 +1,39 @@
+CLASS zcl_age_rap_sample DEFINITION
+ FINAL
+ CREATE PUBLIC.
+
+ PUBLIC SECTION.
+ INTERFACES if_oo_adt_classrun.
+ INTERFACES if_rap_query_provider.
+ PRIVATE SECTION.
+ METHODS validate_data
+ IMPORTING
+ keys TYPE if_rap_query_provider=>tt_key
+ RETURNING
+ VALUE(result) TYPE abap_boolean.
+ENDCLASS.
+
+CLASS zcl_age_rap_sample IMPLEMENTATION.
+
+ METHOD if_oo_adt_classrun~main.
+ out->write( 'RAP Sample Implementation Class' ).
+ ENDMETHOD.
+
+ METHOD if_rap_query_provider~select.
+ DATA filter TYPE if_rap_query_filter=>tt_range_option.
+ DATA lt_data TYPE STANDARD TABLE OF zage_tabl.
+
+ filter = io_query->get_filter( )->get_filter_conditions( ).
+
+ SELECT FROM zage_tabl
+ FIELDS client, name, description
+ INTO TABLE lt_data.
+
+ io_response->set_data( lt_data ).
+ ENDMETHOD.
+
+ METHOD validate_data.
+ result = abap_true.
+ ENDMETHOD.
+
+ENDCLASS.
diff --git a/src/rap/zcl_age_rap_sample.clas.xml b/src/rap/zcl_age_rap_sample.clas.xml
new file mode 100644
index 0000000..0e9cd67
--- /dev/null
+++ b/src/rap/zcl_age_rap_sample.clas.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+ ZCL_AGE_RAP_SAMPLE
+ E
+ AGE Sample RAP Behavior Implementation
+ 1
+ X
+ X
+ X
+ 5
+
+
+
+
\ No newline at end of file