480 lines
12 KiB
Markdown
480 lines
12 KiB
Markdown
# Adaptation Projects Reference
|
|
|
|
Comprehensive reference for creating and managing SAP Fiori adaptation projects.
|
|
|
|
## Table of Contents
|
|
|
|
1. [Overview](#overview)
|
|
2. [On-Premise Systems](#on-premise-systems)
|
|
3. [S/4HANA Cloud and BTP ABAP](#s4hana-cloud-and-btp-abap)
|
|
4. [Creating Adaptation Projects](#creating-adaptation-projects)
|
|
5. [Adaptation Capabilities](#adaptation-capabilities)
|
|
6. [Controller Extensions](#controller-extensions)
|
|
7. [Fragments and Extension Points](#fragments-and-extension-points)
|
|
8. [Preview and Testing](#preview-and-testing)
|
|
9. [Deployment](#deployment)
|
|
10. [Upgrade-Safe Rules](#upgrade-safe-rules)
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
Adaptation projects allow extending existing SAP Fiori applications without modifying source code. They create **application variants** that maintain separation from the original application.
|
|
|
|
### Benefits
|
|
|
|
- Non-invasive extensions
|
|
- Independent lifecycle from base application
|
|
- Upgrade-safe modifications
|
|
- Version control support
|
|
|
|
### Supported Environments
|
|
|
|
| Environment | IDE Support | Deployment Target |
|
|
|-------------|-------------|-------------------|
|
|
| On-Premise ABAP | VS Code | ABAP Repository |
|
|
| SAP S/4HANA Cloud | BAS | BTP ABAP Environment |
|
|
| SAP BTP ABAP | BAS, VS Code | BTP ABAP Environment |
|
|
|
|
---
|
|
|
|
## On-Premise Systems
|
|
|
|
### Prerequisites
|
|
|
|
| Requirement | Version/Details |
|
|
|-------------|-----------------|
|
|
| SAP_UI Component | 7.54 or higher |
|
|
| System SAPUI5 Version | 1.72 or higher |
|
|
| Base App SAPUI5 Version | 1.30 or higher |
|
|
| Base App | Must have manifest.json |
|
|
|
|
### Limitations
|
|
|
|
- Cannot use ABAP Cloud Development packages
|
|
- Apps with mandatory startup parameters unsupported
|
|
- Previously deployed application variants cannot serve as bases
|
|
- Apps using `sap.ca.scfld.md` scaffolding unsupported
|
|
|
|
### Required Services
|
|
|
|
Enable and activate:
|
|
- `/sap/bc/adt` - ABAP Development Tools
|
|
- `/sap/bc/ui2/app_index/` - Application Index
|
|
|
|
Grant access to:
|
|
- `/sap/bc/adt/discovery`
|
|
|
|
### Workflow
|
|
|
|
1. Create adaptation project
|
|
2. (Optional) Initialize Git repository
|
|
3. Make adaptations
|
|
4. Preview adaptation project
|
|
5. Deploy to ABAP repository
|
|
|
|
---
|
|
|
|
## S/4HANA Cloud and BTP ABAP
|
|
|
|
### Prerequisites
|
|
|
|
**SAP S/4HANA Cloud**:
|
|
- Verify extensibility support in SAP Fiori Apps Reference Library
|
|
- 3-system landscape with developer tenant required
|
|
- Submit enhancement requests via Influence Opportunity Homepage if needed
|
|
|
|
**Both Environments**:
|
|
- Source application must be "released for extensibility"
|
|
- Destination to development tenant configured
|
|
- Required business catalogs assigned
|
|
|
|
### Required Business Catalogs
|
|
|
|
| Catalog | Purpose |
|
|
|---------|---------|
|
|
| SAP_A4C_BC_DEV_UID_PC | Development - UI Deployment |
|
|
| SAP_A4C_BC_DEV_OBJ_DIS_PC | Retrieve extensible applications |
|
|
|
|
### Destination Configuration
|
|
|
|
Create destination in BTP Cockpit pointing to development tenant with appropriate authentication.
|
|
|
|
---
|
|
|
|
## Creating Adaptation Projects
|
|
|
|
### Via Template Wizard
|
|
|
|
1. Open Command Palette: `Cmd/Ctrl + Shift + P`
|
|
2. Execute: `Fiori: Open Template Wizard`
|
|
3. Select "Adaptation Project" tile
|
|
4. Configure project settings
|
|
|
|
### Configuration Fields
|
|
|
|
| Field | Description |
|
|
|-------|-------------|
|
|
| Project Name | Unique project identifier |
|
|
| Application Title | Display title |
|
|
| Namespace | Prefixed with `customer.` |
|
|
| SAPUI5 Version | Target UI5 version |
|
|
| Target System | SAP system connection |
|
|
| Application | Base application to extend |
|
|
|
|
### Via Generator Command
|
|
|
|
```
|
|
Fiori: Open Adaptation Project Generator
|
|
```
|
|
|
|
### Add Deployment Configuration
|
|
|
|
Optional during creation or added later via:
|
|
```
|
|
Fiori: Add Deployment Configuration
|
|
```
|
|
|
|
---
|
|
|
|
## Adaptation Capabilities
|
|
|
|
### UI Adaptations
|
|
|
|
| Adaptation | Description |
|
|
|------------|-------------|
|
|
| Control Variants | Create page variants/views |
|
|
| Hide/Show Controls | Toggle control visibility |
|
|
| Move Controls | Reposition UI elements |
|
|
| Rename Labels | Change display texts |
|
|
| Change Properties | Modify control properties |
|
|
|
|
### Structural Changes
|
|
|
|
| Change | Description |
|
|
|--------|-------------|
|
|
| Add Fragments | Insert UI fragments at extension points |
|
|
| Controller Extensions | Override/extend controller methods |
|
|
| Component Usages | Add SAPUI5 component references |
|
|
|
|
### Configuration Changes
|
|
|
|
| Change | Description |
|
|
|--------|-------------|
|
|
| App Descriptor | Modify manifest.json settings |
|
|
| OData Service | Add/replace OData services |
|
|
| Local Annotations | Add annotation files |
|
|
| Inbound Navigation | Modify navigation configuration |
|
|
|
|
### Adaptation Editor UI Operations
|
|
|
|
Access: Right-click `manifest.appdescr_variant` > "Open Adaptation Editor"
|
|
|
|
| Operation | Method |
|
|
|-----------|--------|
|
|
| Modify properties | Select element, adjust in Properties pane |
|
|
| Add fields | Right-click group > "Add Field" > select fields |
|
|
| Create groups | Right-click > "Add Group" |
|
|
| Add sections | Right-click sections > "Add Section" |
|
|
| Rename elements | Double-click or right-click > rename |
|
|
| Reorder elements | Drag and drop |
|
|
| Move elements | Cut, highlight target, paste |
|
|
| Combine fields | Ctrl+click multiple (max 3) > "Combine" |
|
|
| Split fields | Right-click combined > "Split" |
|
|
| Remove elements | Right-click > remove or Delete key |
|
|
|
|
**Note**: Removed fields remain available for re-adding. Mandatory fields require confirmation.
|
|
|
|
### Quick Actions Availability Matrix
|
|
|
|
Quick actions vary by SAPUI5 version. Key milestones:
|
|
|
|
| Action | Min Version | OData |
|
|
|--------|-------------|-------|
|
|
| Add Controller to Page | 1.71 | V2, V4 |
|
|
| Add Header Field | 1.71 | V2, V4 |
|
|
| Add Custom Section | 1.71 | V2, V4 |
|
|
| Enable/Disable Clear Button | 1.71 | V2, V4 |
|
|
| Add Custom Table Action | 1.96 | V2, V4 |
|
|
| Add Custom Table Column | 1.96 | V2, V4 |
|
|
| Change Table Columns | 1.96 | V2, V4 |
|
|
| Enable Variant Management | 1.96 | V2, V4 |
|
|
| Add Custom Page Action | 1.120 | V2, V4 |
|
|
| Add Local Annotation File | 1.133 | V2, V4 |
|
|
| Add Subpage (V4) | 1.135 | V4 only |
|
|
|
|
---
|
|
|
|
## Controller Extensions
|
|
|
|
### Purpose
|
|
|
|
Enhance existing controller functionality with:
|
|
- New methods
|
|
- Override methods
|
|
- Lifecycle hooks
|
|
|
|
### File Structure
|
|
|
|
```
|
|
webapp/
|
|
├── changes/
|
|
│ ├── coding/
|
|
│ │ └── MyExtension.js
|
|
│ └── MyExtension.controllerExtension.change
|
|
```
|
|
|
|
### Extension Template
|
|
|
|
```javascript
|
|
sap.ui.define([
|
|
"sap/ui/core/mvc/ControllerExtension"
|
|
], function(ControllerExtension) {
|
|
"use strict";
|
|
|
|
return ControllerExtension.extend("customer.project.extension.MyExtension", {
|
|
// Override member for lifecycle and base methods
|
|
override: {
|
|
// Lifecycle methods
|
|
onInit: function() {
|
|
// Called after base controller onInit
|
|
},
|
|
onBeforeRendering: function() {
|
|
// Called before view rendering
|
|
},
|
|
onAfterRendering: function() {
|
|
// Called after view rendering
|
|
},
|
|
onExit: function() {
|
|
// Called on controller destruction
|
|
}
|
|
},
|
|
|
|
// Custom methods (outside override)
|
|
myCustomMethod: function(oEvent) {
|
|
// Custom business logic
|
|
}
|
|
});
|
|
});
|
|
```
|
|
|
|
### Event Handler Binding
|
|
|
|
For methods in XML fragments, use prefix:
|
|
```
|
|
.extension.<controller extension namespace>
|
|
```
|
|
|
|
Example:
|
|
```xml
|
|
<Button press=".extension.customer.project.extension.MyExtension.myCustomMethod"/>
|
|
```
|
|
|
|
### Provided Methods by Template
|
|
|
|
| Application Type | Provided Methods |
|
|
|-----------------|------------------|
|
|
| List Report | Lifecycle + template overrides |
|
|
| Object Page | Lifecycle + template overrides |
|
|
| Overview Page | Lifecycle + template overrides |
|
|
| Analytical List Page | Lifecycle only |
|
|
|
|
### Important Rules
|
|
|
|
- Keep custom code in `changes/coding/` folder
|
|
- Do not create additional folders at higher levels
|
|
- Namespace extensions with `.extension` to avoid conflicts
|
|
|
|
---
|
|
|
|
## Fragments and Extension Points
|
|
|
|
### Adding Fragments to Aggregations
|
|
|
|
1. Open Adaptation Editor
|
|
2. Click Edit mode
|
|
3. Select target control (smart filter bar, toolbar, etc.)
|
|
4. Choose "Add Fragment" from context menu
|
|
5. Configure fragment settings
|
|
|
|
**Quick Actions**:
|
|
- Add Custom Page Action
|
|
- Add Custom Table Action
|
|
- Add Custom Table Column
|
|
- Add Header Field
|
|
- Add Custom Section
|
|
|
|
### Fragment Configuration
|
|
|
|
| Field | Description |
|
|
|-------|-------------|
|
|
| Target Aggregation | Container for fragment |
|
|
| Index | Position within aggregation |
|
|
| Fragment | Select existing or create new |
|
|
|
|
### Fragment Template
|
|
|
|
```xml
|
|
<core:FragmentDefinition
|
|
xmlns:core="sap.ui.core"
|
|
xmlns:uxap="sap.uxap"
|
|
xmlns="sap.m">
|
|
<uxap:ObjectPageSection id="customer.project.customSection" title="Custom Section">
|
|
<uxap:subSections>
|
|
<uxap:ObjectPageSubSection>
|
|
<Text text="Custom content"/>
|
|
</uxap:ObjectPageSubSection>
|
|
</uxap:subSections>
|
|
</uxap:ObjectPageSection>
|
|
</core:FragmentDefinition>
|
|
```
|
|
|
|
### Requirements
|
|
|
|
- Define namespace for all controls used
|
|
- Use stable and unique IDs
|
|
- IDs should follow pattern: `customer.<project>.<elementId>`
|
|
|
|
### Adding Fragments to Extension Points
|
|
|
|
For freestyle SAPUI5 applications with predefined extension points:
|
|
|
|
1. Expand outline tree to find extension points
|
|
2. Right-click parent element
|
|
3. Select "Add fragment at extension point"
|
|
4. Configure fragment
|
|
|
|
### Generated Files
|
|
|
|
- Fragment: `webapp/changes/fragments/<name>.fragment.xml`
|
|
- Change: `webapp/changes/addXML.change`
|
|
|
|
### Cleanup
|
|
|
|
Delete associated change files when removing fragments to avoid blocking future additions.
|
|
|
|
---
|
|
|
|
## Preview and Testing
|
|
|
|
### Launch Preview
|
|
|
|
```
|
|
Fiori: Preview Adaptation Project
|
|
```
|
|
|
|
Or via Application Info page.
|
|
|
|
### Preview Characteristics
|
|
|
|
- Runs in sandbox-like environment
|
|
- Outside SAP Fiori launchpad context
|
|
- Some FLP-dependent features may not work
|
|
- Features work correctly after deployment
|
|
|
|
### Testing Adaptations
|
|
|
|
1. Make changes in Adaptation Editor
|
|
2. Preview immediately reflects changes
|
|
3. Test functionality in preview
|
|
4. Deploy only when satisfied
|
|
|
|
---
|
|
|
|
## Deployment
|
|
|
|
### On-Premise Deployment
|
|
|
|
Deploy to ABAP repository using standard deployment:
|
|
|
|
```bash
|
|
npm run deploy
|
|
```
|
|
|
|
### S/4HANA Cloud Deployment
|
|
|
|
Use Adaptation Project Deployment Wizard:
|
|
```
|
|
Fiori: Deploy Adaptation Project
|
|
```
|
|
|
|
### Post-Deployment
|
|
|
|
- Application variant appears in Fiori launchpad
|
|
- Independent tile/navigation configuration possible
|
|
- Base application updates do not affect deployed variant
|
|
|
|
---
|
|
|
|
## Upgrade-Safe Rules
|
|
|
|
### Core Principles
|
|
|
|
SAPUI5 Flexibility uses modification-free extensibility:
|
|
- Extension code separated from base application lifecycle
|
|
- Base application can upgrade independently
|
|
- Extensions remain functional across upgrades
|
|
|
|
### Controller Extension Rules
|
|
|
|
1. **Follow SAPUI5 best practices**
|
|
2. **Access only controls with stable IDs**
|
|
- Never rely on control order in aggregations
|
|
- Never rely on parent-child relationships
|
|
3. **Verify control existence before access**
|
|
- Check if control exists
|
|
- Verify control type
|
|
4. **Avoid private/protected methods**
|
|
- Do not call or override private methods
|
|
- Do not use deprecated artifacts
|
|
5. **No hardcoded property values**
|
|
- OData metadata values change during upgrades
|
|
- Do not use value help entity sets in code
|
|
6. **Handle reuse component changes**
|
|
- Implement robust error handling
|
|
- Components may change during upgrades
|
|
|
|
### Fragment Rules
|
|
|
|
- Use stable IDs with proper namespacing
|
|
- Do not reference controls by position
|
|
- Handle missing extension points gracefully
|
|
|
|
---
|
|
|
|
## Checking Compatibility
|
|
|
|
### Base App Upgrade Check
|
|
|
|
```
|
|
Fiori: Check Base App Upgrades
|
|
```
|
|
|
|
Verifies if adaptation project is current with base application updates.
|
|
|
|
### Release State Consistency
|
|
|
|
```
|
|
Fiori: Check Consistency of Release State
|
|
```
|
|
|
|
Validates that adaptations align with released application state.
|
|
|
|
---
|
|
|
|
## Documentation Source
|
|
|
|
**GitHub**: [https://github.com/SAP-docs/btp-fiori-tools/tree/main/docs](https://github.com/SAP-docs/btp-fiori-tools/tree/main/docs)
|
|
|
|
Key files:
|
|
- `extending-an-existing-application-6e25aca.md`
|
|
- `extending-an-sap-fiori-application-for-an-on-premise-system-802f01c.md`
|
|
- `extending-an-sap-fiori-application-for-sap-s-4hana-cloud-public-edition-and-sap-btp-abap-f4881a9.md`
|
|
- `creating-an-adaptation-project-072f566.md`
|
|
- `controller-extensions-ad7b4ae.md`
|
|
- `add-fragments-to-an-aggregation-or-extension-point-6033d56.md`
|
|
- `upgrade-safe-compatibility-rules-53706e2.md`
|
|
- `making-adaptations-2a076dd.md`
|
|
- `previewing-an-adaptation-project-64cc15b.md`
|
|
- `deploying-an-adaptation-project-to-the-abap-repository-febf0d9.md`
|