Appearance
Lesson 16 — RAP Projection, Value Help, Metadata, and OData V4
By the end of Lesson 15, the Reservation Business Object already has:
text
Persistence
Business Object structure
Managed behavior
EML
Determinations
Validations
Messages
Actions
Feature control
AuthorizationBut it still has no consumer-facing business service.
Today you add the service layer.
The architecture becomes:
text
Persistence
↓
ZR_RESERVATION_###
Base RAP Business Object
↓
ZC_RESERVATION_###
Transactional Projection
↓
Projection Behavior
↓
Service Definition
↓
Service Binding
↓
OData V4 UI Service
↓
Fiori Elements PreviewThis is a major architectural transition.
Until now, your main consumer was:
text
ABAP class
→ EML
→ RAP BOToday you add:
text
UI / OData consumer
→ OData V4
→ projected RAP BOLesson information
| Teacher-led time | About 3 hours |
| Self-practice time | About 3 hours |
| Environment | SAP BTP ABAP Trial |
| Prerequisite | Lesson 15 |
| Base BO | ZR_RESERVATION_### |
| Projection view | ZC_RESERVATION_### |
| Projection BDEF | Behavior Definition for ZC_RESERVATION_### |
| Projection DCL | Access Control for ZC_RESERVATION_### |
| Metadata extension | ZC_RESERVATION_### |
| Service definition | ZUI_RESERVATION_### |
| Service binding | ZUI_RESV_###_O4 |
| Protocol | OData V4 UI |
| Main outcome | Expose and preview a protected RAP UI service |
Replace:
text
###with your own student/group suffix.
Learning objectives
After the teacher-led part, you should be able to:
- explain why RAP uses a projection layer;
- distinguish the base BO from a service-specific BO projection;
- create a CDS transactional projection view;
- use
provider contract transactional_query; - explain why the projection must remain a root view;
- understand that projection views cannot add new persistent fields;
- preserve CDS access control at the projection layer;
- create projection-level DCL by inheriting base access conditions;
- create a projection Behavior Definition;
- use
projection;andstrict ( 2 ); - use
use etag; - expose standard operations with
use create,use update, anduse delete; - expose base actions with
use action; - explain that reused operations inherit base behavior implementation and authorization;
- define a simple CDS value help with
@Consumption.valueHelpDefinition; - expose the value-help provider in the service;
- enable metadata extensions with
@Metadata.allowExtensions: true; - create UI metadata in a metadata extension;
- use
@UI.headerInfo,@UI.lineItem,@UI.identification, and@UI.selectionField; - create a Service Definition;
- explain what a Service Definition exposes;
- create an OData V4 UI Service Binding;
- explain what a Service Binding adds;
- publish the local service;
- launch the Fiori Elements preview;
- verify authorization, actions, field control, value help, and messages through the service;
- explain why full draft editing is deferred until Lesson 17.
Architecture
1. What changes today?
Before Lesson 16:
text
ZCL_RESV_AUTH_###
↓
EML
↓
ZR_RESERVATION_###
↓
Managed RAPAfter Lesson 16:
text
ABAP consumer
↓
EML
↓
ZR_RESERVATION_###and also:
text
Fiori Elements Preview
↓
OData V4
↓
Service Binding
↓
Service Definition
↓
ZC_RESERVATION_###
↓
Projection Behavior
↓
ZR_RESERVATION_###
↓
Managed RAPOne BO can support multiple consumption channels.
2. Why not expose the root directly?
The root BO describes:
text
general business structure
general business behaviorA service may need a consumer-specific view.
For example:
text
only selected fields
specific labels
search behavior
value helps
specific actions
UI metadata
service-specific namesThat belongs in:
text
the projection / consumption layernot the reusable base BO.
3. Base BO vs projection BO
Base BO
text
ZR_RESERVATION_###Answers:
text
What is a Reservation?
What can a Reservation do?
What business rules protect it?Projection
text
ZC_RESERVATION_###Answers:
text
What part of that BO should this service expose?
How should this consumer see it?
Which behavior should this service offer?4. Projection is not a copy
A projection view does not duplicate persistence.
It sits on top of the base CDS entity:
text
ZRESV_###
↓
ZR_RESERVATION_###
↓
ZC_RESERVATION_###The service still reaches the same BO and persistence.
Projection View
5. Create the projection Data Definition
Right-click:
text
ZR_RESERVATION_###Choose:
text
New
→ Data DefinitionUse:
text
Name: ZC_RESERVATION_###
Description: Reservation Service ProjectionChoose the projection-view template if available.
6. Use a transactional projection
The projection must be:
abap
define root view entity ZC_Reservation_###
provider contract transactional_query
as projection on ZR_Reservation_###Two pieces are important:
text
root
transactional_query7. Why root remains
The underlying entity is the root of the Business Object.
The service-facing projection must preserve that root role.
For our single-node BO:
text
ZR_RESERVATION_###
→ base root
ZC_RESERVATION_###
→ projected root8. Why transactional_query
Current CDS projection views use a provider contract to state their use case.
For a service-specific RAP BO projection:
text
provider contract transactional_queryis the intended contract.
It enables the projection to specialize the underlying transactional RAP BO for consumption.
9. Projection views are service-specific
A projection can:
text
project a subset of elements
rename elements
add service-specific metadata
define value-help annotations
add certain projection-level calculated/virtual elementsBut it does not create a new persistence model.
10. Projection fields for this lesson
Expose:
text
Uuid
ReservationNo
CustomerName
CustomerEmail
WorkshopCode
ReservationDate
Status
ResponsibleUser
Fee
CurrencyCode
Notes
LocalCreatedBy
LocalCreatedAt
LocalLastChangedBy
LocalLastChangedAt
LastChangedAtKeeping all fields visible makes the first service lesson easier to debug.
Later services can intentionally expose less.
11. Projection CDS source
Use:
abap
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Reservation Service Projection'
@Metadata.allowExtensions: true
@Search.searchable: true
define root view entity ZC_Reservation_###
provider contract transactional_query
as projection on ZR_Reservation_###
{
key Uuid,
@Search.defaultSearchElement: true
ReservationNo,
@Search.defaultSearchElement: true
CustomerName,
CustomerEmail,
WorkshopCode,
ReservationDate,
Status,
ResponsibleUser,
Fee,
@Consumption.valueHelpDefinition: [
{
entity: {
name: 'I_CurrencyStdVH',
element: 'Currency'
},
useForValidation: true
}
]
CurrencyCode,
Notes,
LocalCreatedBy,
LocalCreatedAt,
LocalLastChangedBy,
LocalLastChangedAt,
LastChangedAt
}Replace ###.
12. Search annotations
At view level:
abap
@Search.searchable: trueThen selected fields can be:
abap
@Search.defaultSearchElement: trueFor this lesson:
text
ReservationNo
CustomerNameare default search elements.
13. Why search belongs here
Search behavior is:
text
consumer/service-specificIt does not define the core business object itself.
That makes the projection layer an appropriate home.
Value Help
14. What is value help?
A value help gives a consumer a list of valid/selectable values for an input field.
Classic user experience:
text
F4 / value-help buttonExample:
text
CurrencyCode
→ choose from available currencies15. @Consumption.valueHelpDefinition
The projection annotates:
text
CurrencyCodewith:
abap
@Consumption.valueHelpDefinition: [
{
entity: {
name: 'I_CurrencyStdVH',
element: 'Currency'
},
useForValidation: true
}
]Meaning:
text
value-help provider
→ I_CurrencyStdVH
returned value
→ Currency16. Why value help belongs in the projection
Value help is consumer-facing metadata.
The base business object should not need to know:
text
which lookup dialog this specific UI service usesThat is one reason projections exist.
17. Value help does not replace validation
A value help helps the user choose.
Your backend business rules still protect data.
Think:
text
Value help
→ assists input
Validation
→ protects business validityDo not use UI convenience as your only backend protection.
18. Value-help provider must be exposed
For OData consumption, the value-help provider must be reachable through the service.
So later the Service Definition will expose:
text
I_CurrencyStdVHas a service entity.
Preserve Lesson 15 Read Authorization
19. DCL does not automatically propagate upward
This is important.
You protected:
text
ZR_RESERVATION_###in Lesson 15.
But:
text
ZC_RESERVATION_###is a new CDS entity.
CDS access controls are not automatically inherited by higher-layer CDS entities.
Without projection-level protection, exposing the projection could reopen read access.
20. Create projection Access Control
Create an Access Control object for:
text
ZC_RESERVATION_###Use:
abap
@EndUserText.label: 'Reservation Projection Access'
@MappingRole: true
define role ZC_Reservation_###
{
grant select on ZC_Reservation_###
where inheriting conditions from entity ZR_Reservation_###;
}This reuses the Lesson 15 access condition.
21. Why inherit instead of duplicate?
You could repeat:
text
ResponsibleUser = aspect userBut then you would maintain the same authorization rule in two places.
Inheritance keeps:
text
ZR_RESERVATION_###as the source of the read-access condition.
Projection DCL reuses it.
22. Root and projection now both use #CHECK
Base:
text
ZR_RESERVATION_###
→ #CHECKProjection:
text
ZC_RESERVATION_###
→ #CHECKEach protected CDS entity has an appropriate access control.
23. Activate and test the projection
Activate:
text
projection CDS
projection Access ControlUse:
text
F8Expected:
text
only Reservations permitted by inherited DCLThe projection should not reveal the Lesson 15 unassigned/unauthorized rows.
Projection Behavior
24. Why a projection BDEF?
The projection CDS controls:
text
service-facing data shapeThe projection Behavior Definition controls:
text
service-facing behavior surfaceIt answers:
text
Which operations from the base BO should this service expose?25. Create projection behavior
Right-click:
text
ZC_RESERVATION_###Choose:
text
New
→ Behavior DefinitionSelect:
text
Implementation Type: Projection26. Projection BDEF header
Use:
abap
projection;
strict ( 2 );This BDEF does not implement a new managed BO.
It projects existing behavior.
27. Reuse ETag behavior
Add:
abap
use etagto the entity behavior.
The underlying BO already defines:
text
LocalLastChangedAtas ETag master.
The projection explicitly reuses the ETag for the service.
28. Reuse standard operations
Expose:
abap
use create;
use update;
use delete;These do not create new CRUD implementations.
They expose the underlying BO operations through this projection.
29. Reuse actions
Expose:
abap
use action confirm;
use action cancel;The action implementation remains in:
text
ZBP_R_RESV_###There is no new action implementation class for the projection.
30. Complete projection BDEF
Use:
abap
projection;
strict ( 2 );
define behavior for ZC_Reservation_### alias Reservation
use etag
{
use create;
use update;
use delete;
use action confirm;
use action cancel;
}Replace ###.
31. What gets inherited?
Reused operations/actions continue to rely on the base BO for:
text
implementation
validations
determinations
messages
feature control
authorization
transaction handlingThe projection decides:
text
expose it
or
do not expose it32. Projection behavior can expose less
Suppose a read-only service should not allow deletes.
Its projection BDEF could omit:
abap
use delete;even though the base BO supports delete.
This is one purpose of the service-specific behavior layer.
33. Authorization is still active
Reused CRUD operations and reused actions inherit authorization control from the base behavior.
Lesson 15 therefore remains relevant through the service.
You are not creating a second authorization implementation.
Metadata Extension
34. What is UI metadata?
The service now knows:
text
data
behavior
authorizationBut a UI also needs presentation hints.
Examples:
text
which fields appear in the list
which fields appear on the object page
which fields are filter fields
what title represents an object
how fields are orderedThese are:
text
UI annotations35. Why use a metadata extension?
You could place many UI annotations directly in the projection CDS.
SAP recommends separating UI annotations into a metadata extension where practical.
Benefits:
text
projection source stays readable
UI metadata can evolve independently
separation of concerns36. Enable metadata extensions
The projection already contains:
abap
@Metadata.allowExtensions: trueWithout it, the external metadata extension cannot annotate the projection.
37. Create Metadata Extension
In ADT:
text
Right-click projection Data Definition
→ New
→ Metadata ExtensionUse a name based on:
text
ZC_RESERVATION_###Choose the core metadata layer.
38. Metadata extension header
Use:
abap
@Metadata.layer: #CORE
@UI.headerInfo: {
typeName: 'Reservation',
typeNamePlural: 'Reservations',
title: {
type: #STANDARD,
value: 'ReservationNo'
}
}
annotate entity ZC_Reservation_### with
{
...
}39. List report fields
Annotate key business fields with:
text
@UI.lineItemRecommended list order:
text
ReservationNo
CustomerName
WorkshopCode
ReservationDate
Status
Fee
CurrencyCode
ResponsibleUser40. Object-page fields
Use:
text
@UI.identificationfor the same important fields plus:
text
CustomerEmail
NotesThis helps Fiori Elements construct the object page.
41. Selection fields
Use:
text
@UI.selectionFieldfor fields such as:
text
Status
ReservationDate
CurrencyCodeThese become useful filters in the generated UI.
42. Metadata extension reference
Use a source equivalent to:
abap
@Metadata.layer: #CORE
@UI.headerInfo: {
typeName: 'Reservation',
typeNamePlural: 'Reservations',
title: {
type: #STANDARD,
value: 'ReservationNo'
}
}
annotate entity ZC_Reservation_### with
{
@UI.facet: [
{
id: 'Reservation',
purpose: #STANDARD,
type: #IDENTIFICATION_REFERENCE,
label: 'Reservation',
position: 10
}
]
@UI.lineItem: [
{ position: 10, label: 'Reservation' }
]
@UI.identification: [
{ position: 10, label: 'Reservation' }
]
ReservationNo;
@UI.lineItem: [
{ position: 20, label: 'Customer' }
]
@UI.identification: [
{ position: 20, label: 'Customer' }
]
CustomerName;
@UI.identification: [
{ position: 30, label: 'Customer Email' }
]
CustomerEmail;
@UI.lineItem: [
{ position: 30, label: 'Workshop' }
]
@UI.identification: [
{ position: 40, label: 'Workshop' }
]
WorkshopCode;
@UI.lineItem: [
{ position: 40, label: 'Reservation Date' }
]
@UI.identification: [
{ position: 50, label: 'Reservation Date' }
]
@UI.selectionField: [
{ position: 20 }
]
ReservationDate;
@UI.lineItem: [
{ position: 50, label: 'Status' },
{ position: 90, type: #FOR_ACTION, dataAction: 'confirm', label: 'Confirm' },
{ position: 100, type: #FOR_ACTION, dataAction: 'cancel', label: 'Cancel' }
]
@UI.identification: [
{ position: 60, label: 'Status' },
{ position: 110, type: #FOR_ACTION, dataAction: 'confirm', label: 'Confirm' },
{ position: 120, type: #FOR_ACTION, dataAction: 'cancel', label: 'Cancel' }
]
@UI.selectionField: [
{ position: 10 }
]
Status;
@UI.lineItem: [
{ position: 60, label: 'Fee' }
]
@UI.identification: [
{ position: 70, label: 'Fee' }
]
Fee;
@UI.lineItem: [
{ position: 70, label: 'Currency' }
]
@UI.identification: [
{ position: 80, label: 'Currency' }
]
@UI.selectionField: [
{ position: 30 }
]
CurrencyCode;
@UI.lineItem: [
{ position: 80, label: 'Responsible User' }
]
@UI.identification: [
{ position: 90, label: 'Responsible User' }
]
ResponsibleUser;
@UI.identification: [
{ position: 100, label: 'Notes' }
]
Notes;
}43. Expose action buttons in UI metadata
The projection behavior exposes:
text
confirm
cancelFor Fiori Elements to render action buttons, add action records to UI metadata using:
text
type: #FOR_ACTION
dataAction: '<action name>'The Lesson 16 metadata extension attaches confirm and cancel action records to the Status element for both:
text
@UI.lineItem
@UI.identificationThe element used as the annotation carrier does not determine where the action appears; the UI renders the action in the appropriate action area.
Service Definition
44. What is a Service Definition?
A Service Definition answers:
What CDS entities are part of this business service?
It is:
text
protocol-independentIt does not decide:
text
OData V2
OData V4
UI
Web APIThat comes later in the Service Binding.
45. Create Service Definition
Right-click your package.
Choose:
text
New
→ Other ABAP Repository Object
→ Business Services
→ Service DefinitionUse:
text
Name: ZUI_RESERVATION_###
Description: Reservation UI Service46. Expose the projection
Use:
abap
@EndUserText.label: 'Reservation UI Service'
define service ZUI_RESERVATION_###
{
expose ZC_Reservation_### as Reservations;
expose I_CurrencyStdVH as Currencies;
}47. Why expose Currencies?
Your projection references:
text
I_CurrencyStdVHas the value-help provider.
For the OData value help to work, expose the provider through the service.
48. Service Definition = what
Remember:
text
Service Definition
→ WHAT is exposedIt chooses the CDS entities.
It does not choose the transport protocol.
Service Binding
49. What is a Service Binding?
A Service Binding answers:
text
HOW is this service exposed?It binds the Service Definition to a communication protocol and service category.
For this lesson:
text
OData V4
UI50. Why OData V4?
SAP recommends OData V4 wherever possible for transactional services.
It supports modern RAP capabilities such as:
text
feature control exposure
value help
Fiori Elements previewLesson 17 will add Draft, which is especially important for full transactional Fiori Elements editing with OData V4.
51. Create the Service Binding
In ADT:
text
Right-click package
→ New
→ Other ABAP Repository Object
→ Business Services
→ Service BindingUse:
text
Name: ZUI_RESV_###_O4
Description: Reservation OData V4 UI
Service Definition: ZUI_RESERVATION_###
Binding Type: OData V4 - UIThe exact wizard wording may appear as:
text
OData V4
UI Servicedepending on ADT version.
52. Activate before publishing
Activate:
text
Ctrl+F3The binding must be active before local publishing/preview.
53. Publish the service
Open the Service Binding editor.
Choose:
text
PublishThis enables the local service endpoint in the development system.
Publishing locally is not the same thing as deploying a productive application to another system.
54. Inspect the entity sets
The binding should expose service entities equivalent to:
text
Reservations
CurrenciesThe service-facing aliases come from the Service Definition.
55. Service Binding = how
Remember:
text
Service Definition
→ WHAT
Service Binding
→ HOWFor this project:
text
WHAT
Reservations + Currencies
HOW
OData V4 UI serviceFiori Elements Preview
56. Launch Preview
In the Service Binding editor:
text
select Reservations
→ PreviewThe exact button arrangement can vary by ADT version.
The preview opens a generated Fiori Elements application.
57. What the preview proves
It proves that these layers work together:
text
projection
projection behavior
DCL
base RAP authorization
UI metadata
value help
service definition
service binding
OData V4 runtimeThis is much more than simply proving that a CDS view activates.
58. Verify list fields
Expected list fields include:
text
Reservation
Customer
Workshop
Reservation Date
Status
Fee
Currency
Responsible UserIf the list is empty, remember Lesson 15:
text
DCL may hide older rowsUse a Reservation owned by the current user.
59. Verify search
Use the search field.
Try a value from:
text
ReservationNo
or
CustomerNameThe projection marked those fields as default search elements.
60. Verify selection fields
Look for filters corresponding to:
text
Status
ReservationDate
CurrencyCodeTheir UI location comes from the metadata extension.
61. Verify Currency value help
Open the value help for:
text
CurrencyCodeThe service should use:
text
I_CurrencyStdVHas its provider.
Choose a value and verify that the currency code is transferred to the field.
62. Verify actions
On an authorized New Reservation:
text
confirm
cancelshould reflect the Lesson 14 feature-control rules.
Example:
text
Status = N
→ confirm available
→ cancel availableAfter confirm:
text
Status = C
→ confirm unavailable
→ cancel availableThe UI consumes behavior already implemented in the base BO.
63. Verify dynamic field control
For:
text
Status = NFee/Currency can be editable.
After:
text
Status = C
or
Status = Xthey should reflect the read-only feature result.
You did not write new UI logic for this.
The service exposes RAP feature control.
64. Verify authorization
Use a row whose:
text
ResponsibleUser = current userIt should be readable and modifiable according to Lesson 15.
Unauthorized rows should not simply appear because a new projection/service was created.
That is why projection DCL matters.
65. Verify validation messages
Attempt to create or change data that violates Lesson 13 rules.
Examples:
text
blank CustomerName
past ReservationDate
Fee <= 0
missing CurrencyCodeThe service consumer should receive backend validation messages.
Again:
text
UI does not own the rules
BO owns the rulesNon-Draft Limitation
66. Lesson 16 is deliberately non-draft
The BO is still:
text
non-draftYou are exposing it through OData V4 so you can understand:
text
projection
service
metadata
value help
behavior exposurebefore adding Draft.
67. Why Draft comes next
SAP notes that full Fiori Elements support for transactional OData V4 UI services is tied strongly to draft-enabled scenarios.
Lesson 17 will add:
text
draft persistence
draft actions
active vs draft state
edit
save
discardThat will make the UI editing lifecycle more complete.
68. Do not fake Draft with a Status value
A field such as:
text
Status = Newis business state.
RAP Draft is framework-managed transactional editing state.
They are not the same thing.
This distinction is why Checkpoint 3 uses:
text
N = Newrather than:
text
D = DraftService-Layer Responsibilities
69. What belongs in the projection?
Good projection concerns:
text
service-specific field subset
search annotations
value help
text arrangement
consumer-specific aliases
UI-facing semantics70. What belongs in metadata extension?
Good metadata-extension concerns:
text
header information
line-item positions
identification fields
selection fields
facets
UI labels71. What belongs in the base BO?
Keep business logic in:
text
base behavior / Behavior PoolExamples:
text
validations
determinations
workflow actions
feature logic
authorization logicDo not move those into the UI metadata layer.
72. What belongs in Service Definition?
Only:
text
which entities the business service exposesThe Service Definition is not the place for:
text
validation code
behavior implementation
protocol configuration73. What belongs in Service Binding?
Protocol/service-category configuration:
text
OData V4
UI
local publish
service endpoint
previewThe binding does not redefine business rules.
Common Mistakes
74. Mistake — exposing the base root directly
Technically, service definitions can expose CDS entities.
But for a structured RAP application, use the projection layer to keep:
text
base BO reusable
service specifics separate75. Mistake — no provider contract
Current projection-view modeling should explicitly specify:
text
provider contract transactional_queryDo not rely on old implicit behavior.
76. Mistake — forget root
Your projected root must remain:
text
define root view entitynot merely:
text
define view entity77. Mistake — projection with no projection BDEF
The projection CDS may show data.
But to expose transactional BO behavior through the service, create the projection Behavior Definition and explicitly reuse the operations/actions required by the service.
78. Mistake — assume behavior is automatically exposed
Projection BDEF uses:
text
use create
use update
use delete
use action ...The base supports behavior.
The projection decides what the service exposes.
79. Mistake — forget use etag
The base BO has ETag behavior.
The service projection should explicitly reuse:
abap
use etagfor concurrency-aware service behavior.
80. Mistake — DCL only on the base view
CDS access controls do not automatically propagate to higher CDS entities.
If the service exposes:
text
ZC_RESERVATION_###protect:
text
ZC_RESERVATION_###too.
This is a security-critical modeling point.
81. Mistake — duplicate DCL manually
You could repeat the same user rule.
Prefer:
text
inheriting conditions from entitywhen the projection should reuse the base rule unchanged.
82. Mistake — value-help provider not exposed
The projection can contain:
text
@Consumption.valueHelpDefinitionbut the OData service also needs access to the referenced provider.
Expose:
text
I_CurrencyStdVHin the Service Definition.
83. Mistake — Service Definition vs Binding confusion
Remember:
text
Definition
→ what
Binding
→ howA Service Definition alone does not create an OData endpoint.
84. Mistake — annotations everywhere
Do not put every UI annotation into:
text
ZR_RESERVATION_###Keep service/UI concerns near the projection layer.
Prefer a metadata extension for substantial UI metadata.
85. Mistake — UI validation instead of BO validation
A value help or field control improves user experience.
It does not replace:
text
backend validation
authorization
business rulesLesson 13–15 behavior remains authoritative.
86. Mistake — expect full draft-style edit flow
This is still a non-draft BO.
Do not confuse:
text
OData V4 service existswith:
text
RAP Draft existsDraft comes in Lesson 17.
Certification Alignment
87. Why this lesson matters
A practical RAP task can require you to navigate and repair several connected repository objects:
text
root CDS
projection CDS
projection BDEF
DCL
metadata extension
service definition
service bindingYou need to understand which object owns which responsibility.
88. Certification repair map
If:
text
fields missing from service
→ projection / Service Definition
create/update/delete missing
→ projection BDEF
action missing
→ projection BDEF
wrong rows visible
→ projection DCL
value help missing
→ valueHelp annotation / provider exposure
list columns wrong
→ metadata extension
service endpoint missing
→ Service Binding / publish
business rule wrong
→ base Behavior Pool89. BTP Trial reproducibility
This lesson is designed to be reproducible in BTP Trial:
text
projection view
projection behavior
DCL
metadata extension
Service Definition
OData V4 UI binding
local publish
Fiori Elements previewProductive launchpad deployment and enterprise role administration remain outside the Trial exercise.
Knowledge Check
90. Questions
1. Why do we create ZC_RESERVATION_### instead of exposing only ZR_RESERVATION_###?
2. What does provider contract transactional_query mean?
3. Why must the projection remain a root view?
4. What is the purpose of a projection Behavior Definition?
5. What does use create mean?
6. Where is the actual create implementation?
7. Why do we use use etag?
8. Do reused operations lose Lesson 15 authorization?
9. Why does the projection need its own DCL?
10. What does inheriting conditions from entity solve?
11. What does @Consumption.valueHelpDefinition do?
12. Why must the value-help provider be exposed in the service?
13. What does @Metadata.allowExtensions: true enable?
14. Why place UI annotations in a metadata extension?
15. Service Definition: what or how?
16. Service Binding: what or how?
17. Why use OData V4 UI?
18. What does Fiori Elements Preview prove?
19. Why are validations still implemented in the base BO?
20. Why is Draft not part of this lesson?
Teacher-Led Completion Checklist
91. Checklist
End-of-Day Mental Model
92. Final model
text
Consumer
↓
OData V4 UI
↓
Service Binding
↓
Service Definition
↓
ZC_RESERVATION_###
Projection View
+ Projection DCL
↓
Projection Behavior
↓
ZR_RESERVATION_###
Base RAP BO
↓
Rules / Actions / Authorization
↓
PersistenceRemember:
text
Projection
→ consumer-specific BO shape
Projection BDEF
→ consumer-specific behavior surface
Metadata Extension
→ UI presentation metadata
Service Definition
→ WHAT is exposed
Service Binding
→ HOW it is exposed
OData V4
→ protocol
Fiori Elements Preview
→ generated consumer/test surfaceLesson 17 adds:
text
RAP Draft
→ edit lifecycle
→ active/draft instances
→ save/discard
→ draft-aware OData V4 UI