Capstone B — Released-API-first new development
What you'll learn
Build the full on-stack ABAP Cloud stack greenfield — CDS root entity over a Z table, a managed RAP BO with one validation and one determination, projection plus service plus OData V4, a DCL role, and tests — all ATC-clean against ABAP_CLOUD_DEVELOPMENT_DEFAULT.
- Model one CDS root view entity over a Z table as the foundation.
- Build a managed RAP BO with exactly one validation and one determination.
- Expose it via a consumption projection, a service definition, and an OData V4 binding.
The scenario: a greenfield purchase-requisition extension, built released-API-first so it is Clean Core by construction rather than by remediation. Because there is no legacy to migrate, every choice can be the modern one, and the capstone is graded on whether the full RAP stack hangs together and proves itself with tests.
The build is the canonical on-stack ABAP Cloud stack. One CDS root view entity sits over a Z table; a managed RAP business object adds exactly one validation and one determination, so the learner shows they can place logic in the behaviour layer without over-building. A consumption projection, a service definition, and an OData V4 binding expose it, and a DCL role tied to a PFCG authorization object moves authorisation into the model rather than scattering AUTHORITY-CHECK through the code.
Proof is non-negotiable. The behaviour is unit-tested with cl_abap_behv_aux_factory, which drives the RAP BO without touching the database, and the CDS view is tested with cl_cds_test_environment against injected rows. The whole thing must come up ATC-clean against ABAP_CLOUD_DEVELOPMENT_DEFAULT — the standing proof that nothing reaches an unreleased object and the extension will survive upgrades.
Key points
- Model one CDS root view entity over a Z table as the foundation.
- Build a managed RAP BO with exactly one validation and one determination.
- Expose it via a consumption projection, a service definition, and an OData V4 binding.
- Move authorisation into a DCL role tied to a PFCG authorization object.
- Prove it: cl_abap_behv_aux_factory for the BO, cl_cds_test_environment for the view, ATC-clean against ABAP_CLOUD_DEVELOPMENT_DEFAULT.
Source notes: clean-core-curriculum §14.2
Ask Claude
Build a prompt from this lesson + your question and open a fresh Claude chat with it pre-filled — handy for adapting a before/after pattern to your own object.