SAP technical topicObjectAdaptation projects and Fiori extensibilityModuleRAP_CDS_ODATA

Adaptation Projects for Fiori UI Extensibility

An adaptation project is a Business Application Studio tool that lets a developer alter a standard Fiori elements app - hide fields, rename labels, add sections, extend controllers - without touching the original app's code. It produces a delta layer (an app variant descriptor plus change files) applied on top of the original manifest at runtime, so the standard app itself is never copied or modified.

This page covers what an adaptation project actually produces under the hood, when it is the right tool versus in-app key-user adaptation or full custom development, and where it fits between the OData service layer and the Fiori Launchpad. It focuses on the failure modes that show up after a standard app version upgrade, not on the wizard steps.

Published 16 Sept 2026· 1,431 words

What it is

An adaptation project is built in SAP Business Application Studio against an existing Fiori elements (or freestyle) app and generates a delta: an app variant descriptor referencing the original app id, plus a set of change files describing manifest edits, hidden or added UI elements, and optionally controller extensions. Nothing about the original app is copied or rewritten. The structural fact that explains most confusion: the adaptation is not a fork of the app, it is a layer resolved at runtime on top of whatever version of the original app is currently deployed. That is why the same adaptation project can work fine in the sandbox and then fail silently or throw an error in production after SAP ships a feature update to the underlying app - the element ids or fragment structure the delta references may no longer exist in the new version.

When to use it

Use an adaptation project for cosmetic and structural UI changes that do not require new backend data: hiding or reordering table columns, renaming field labels, adding a custom section or field to an object page, adding an extension point fragment, or exposing the app under a different tile for a specific business unit. Do not use it to add new business logic, a new screen flow, or a field that does not already exist in the OData service payload - the field has to be added at the CDS/service layer first via custom field extensibility, and the adaptation project only repositions or reveals what is already exposed. It is also the wrong tool when every user of the app, regardless of role, should see the change permanently; that is better handled by changing the standard configuration or the backend annotation itself rather than layering a variant on top.

How it fits the stack

Below the adaptation project sits the standard Fiori elements app, itself generated from CDS view annotations bound through a service definition and service binding, consuming an OData service. The adaptation project references that app's manifest and view structure by id. Above it sits the Fiori Launchpad, which either shows the original tile unchanged or, for an app variant, registers a new tile pointing at the adapted variant with its own semantic object and role assignment. It supersedes the older pattern of duplicating an app's full UI5 source in Web IDE and modifying it directly, which required carrying forward manual merges on every SAP update. It complements, rather than replaces, in-app key-user 'Adapt UI' runtime adaptation, which is simpler, needs no BAS or transport, but cannot add controller extensions or new fragments.

A worked example

A business unit wants the Net Value column removed from a sales order list report and a custom field, Regional Risk Score, shown on the object page's general information section, but only for its own users. The backend team first adds the custom field through custom field extensibility, exposes it in the relevant CDS view extension, and confirms it appears in the OData service payload. A developer then opens Business Application Studio, creates an adaptation project against the standard sales order Fiori elements app, and uses the UI adaptation editor to remove Net Value from the table's column list - a manifest-level change - and add the custom field to the general information section through an extension point wizard, which generates a change file referencing the property already present in the service. The project is deployed as an app variant with its own semantic object, given a new launchpad tile, and assigned only to the target business unit's role. The original app and its tile remain untouched for everyone else.

How to choose

  • Scope of the change: pure field visibility, order, or label edits can often be done through in-app key-user Adapt UI with no BAS involved; anything needing an extension point fragment or controller extension requires a full adaptation project.
  • Audience and rollout: a change for one role or department that must coexist with the standard app for everyone else calls for an app variant with its own tile; a change that should apply universally and permanently is better pushed back into the standard configuration or backend rather than carried as a UI delta forever.
  • Access key exposure: controller extensions require requesting a developer access key scoped to the original app's namespace; that key is a governance and maintenance liability on its own and should only be requested when a manifest-only change genuinely cannot achieve the requirement.
  • Upgrade exposure: ask what happens when SAP ships the next feature update to the underlying standard app - does the delta reference stable manifest properties, or does it depend on internal element ids that SAP does not guarantee across releases.
  • Clean core posture: an adaptation project without controller extension is generally acceptable under a clean core strategy; one with controller extension or local code changes is not, and should be flagged as technical debt even if it currently works.

Common pitfalls

  • Confusing in-app key-user Adapt UI (browser-based, no BAS, no transport, no controller extension) with a BAS adaptation project - teams sometimes build the heavier tool for a change that key users could have made themselves, or attempt controller-level changes through the lighter tool and find it impossible.
  • Requesting a controller extension access key without a plan for who owns and renews it; losing track of the key blocks any further extension work on that specific app and namespace.
  • Referencing UI element ids or fragment structures that SAP changes in a later feature pack of the standard app; the adaptation compiles and previews cleanly in the sandbox and then fails or silently omits the change once the target system's version of the standard app moves forward.
  • Incomplete transport of the delta: the app variant descriptor and its change files are separate design-time and runtime artifacts, and forgetting to include all of them in the transport produces a variant that half-applies in the target system.
  • Assuming the adaptation project can add a field that is not yet in the OData response - it cannot; the field has to exist in the service payload first through backend extensibility, the adaptation project only rearranges what is already there.
  • Proliferation of app variants, one per department or role, each of which now needs its own regression test after every update to the standard app it is layered on, quickly turning a lightweight extensibility mechanism into a maintenance burden larger than the problem it solved.

ECC, S/4HANA and clean core

On-premise S/4HANA still supports controller extensions in adaptation projects through an access key, but that path is discouraged under a clean core approach because it couples the customer's extension to the internal structure of SAP's UI code. Manifest-only adaptations that need no access key are the preferred pattern under current extensibility guidance. On S/4HANA Cloud public edition, the permitted surface is generally limited to in-app key-user adaptation and manifest-based adaptation projects without controller extension; anything requiring local UI5 code changes or an access key falls outside supported extensibility. Older ECC-era customer modifications built as full UI5 app copies are the pattern adaptation projects are meant to retire, and migrating them off is a recurring workstream during an S/4HANA conversion.

Whose problem this is

Simple field visibility and layout changes belong to the functional or key-user side through in-app Adapt UI. Anything built as a formal adaptation project in Business Application Studio, especially with controller extension or extension points, belongs to a Fiori/UI5 developer. Handover should include the app variant id, the exact version of the standard app it was built against, and the list of referenced manifest properties or element ids so regression testing can target them after every upgrade of the underlying app.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Source: ERPClimb — https://erpclimb.com/sap-technical-topics/adaptation-projects-and-fiori-extensibilityERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.