Transport & topology pitfalls
What you'll learn
Coupled objects — view+DCL, BDEF+pool, binding+draft tables — must travel in the same transport, or the target system is left half-wired.
- A CDS view's DCL role is a separate object — it isn't auto-transported unless it's in the same transport as the view.
- A behavior-pool change without its BDEF produces 'outdated' warnings on the target — move the pair together.
- OData V4 service bindings carry a draft node — exporting without the draft tables leaves a half-working service.
Transport pitfalls share one shape: a model is split across several objects, and moving only the obvious one leaves the target system half-wired. A CDS view's DCL role is a *separate* transportable object — transport the view without the role (or in a different request that arrives later) and the target view either fails its #CHECK at runtime or grants nothing, because the access logic never travelled with it. Keep the view and its DCL in the same transport.
The behaviour-pool case is the same trap from the runtime side. The behaviour definition (BDEF) and its implementing pool are distinct objects; ship a pool change without the matching BDEF and the target system reports 'outdated' warnings because the runtime behaviour no longer matches the definition it was generated against. The pair must move together to stay consistent.
OData V4 service bindings hide a structural dependency. A draft-enabled binding carries a *draft node* backed by its own draft persistence tables. Export the binding without those draft tables and the service half-works: the active part responds, but anything touching the draft — edit-draft, resume, discard — fails on the target because the persistence behind the draft node is missing.
Key points
- A CDS view's DCL role is a separate object — it isn't auto-transported unless it's in the same transport as the view.
- A behavior-pool change without its BDEF produces 'outdated' warnings on the target — move the pair together.
- OData V4 service bindings carry a draft node — exporting without the draft tables leaves a half-working service.
- The common shape: a model split across objects; transport all of it or the target is half-wired.
Examples
Transport TR-A carries zi_order with #CHECK; the role zi_order_dcl is left in an unreleased TR-B. On the target, the view activates but the first access fails — the access logic never arrived.
Bundle the CDS view + its DCL role, the BDEF + its behaviour pool, and the service binding + its draft tables each into one transport so the target is fully wired.
Source notes: clean-core-curriculum §10.6
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.