408 lines
12 KiB
Markdown
408 lines
12 KiB
Markdown
# ABAP Cloud Development Reference
|
|
|
|
## Overview
|
|
|
|
ABAP Cloud is SAP's cloud-ready development model for building extensible, maintainable applications in the SAP BTP ABAP Environment.
|
|
|
|
## Foundational Technologies
|
|
|
|
| Technology | Purpose |
|
|
|------------|---------|
|
|
| Core Data Services (CDS) | Data modeling, integrated analytics |
|
|
| ABAP RESTful Application Programming Model (RAP) | Service-oriented application development |
|
|
| Restricted ABAP Language | Cloud-safe development through controlled API access |
|
|
| Released Public APIs | Upgrade-stable extensions |
|
|
|
|
## Development Environment
|
|
|
|
**Primary IDE**: ABAP Development Tools for Eclipse (ADT)
|
|
|
|
**Additional Tools:**
|
|
- ABAP Test Cockpit (ATC) - Static analysis
|
|
- ABAP Unit - Dynamic testing
|
|
- SAP Fiori Launchpad - UI deployment
|
|
|
|
## Application Development Process
|
|
|
|
### 6-Step Development Workflow
|
|
|
|
| Step | Activity | Details |
|
|
|------|----------|---------|
|
|
| 1 | **Model the Domain** | Define domain-specific data models aligned with RAP architecture |
|
|
| 2 | **Implement Business Behavior** | Add validations, determinations, actions, consistency management |
|
|
| 3 | **Expose Services** | Define and bind services via OData |
|
|
| 4 | **Secure Access** | Configure authorization, assign proper scopes and roles |
|
|
| 5 | **Build the UI** | Develop SAP Fiori applications consuming services |
|
|
| 6 | **Ensure Quality** | Add automated tests and static checks |
|
|
|
|
### Development Approaches
|
|
|
|
**Develop from Scratch:**
|
|
- Build new applications and services using RAP blueprint
|
|
- Domain-specific data models with extensibility built-in
|
|
|
|
**Extend Existing Services:**
|
|
- Extend SAP or custom services in upgrade-safe way
|
|
- Opt-in extensibility: original data models must explicitly enable each option
|
|
|
|
### S/4HANA Extension Options
|
|
|
|
| Type | Description | Use Case |
|
|
|------|-------------|----------|
|
|
| **On-Stack** | Extensions run within S/4HANA Cloud, share database and lifecycle | Tight integration, key-user extensibility (low-code), developer extensibility (pro-code) |
|
|
| **Side-by-Side** | Extensions run on SAP BTP with separate runtime and lifecycle | Loosely coupled solutions, partner offerings, hub scenarios |
|
|
|
|
### Test Strategy
|
|
|
|
**Automated Testing** is essential for reliability, stability, and quality:
|
|
|
|
- **Unit Tests**: ABAP Unit for functional correctness
|
|
- **Integration Tests**: Cross-component validation
|
|
- **Static Analysis**: ABAP Test Cockpit (ATC)
|
|
|
|
### Development Recommendations
|
|
|
|
1. Connect ABAP Cloud systems to Eclipse with ABAP Development Tools
|
|
2. Build OData services using RAP optimized for SAP HANA Cloud
|
|
3. Perform static code analysis with ATC including Code Vulnerability Analyzer
|
|
4. Use central ATC on SAP BTP for custom code governance
|
|
5. Leverage the Analyze Custom Code application for code inspection
|
|
|
|
## Model-Driven Architecture
|
|
|
|
### Three-Tier Structure
|
|
1. **Data Access Layer** - Database tables, CDS views
|
|
2. **Domain Model Layer** - Business logic, validations
|
|
3. **Service Exposure Layer** - OData services, Web APIs
|
|
|
|
### Benefits
|
|
- Faster delivery via standardized stacks
|
|
- Interoperability through consistent rules
|
|
- Multipurpose CDS models (transactional + analytical)
|
|
|
|
## CDS Data Modeling
|
|
|
|
### Basic Entity Definition
|
|
```abap
|
|
@EndUserText.label: 'Travel'
|
|
@AccessControl.authorizationCheck: #NOT_REQUIRED
|
|
define root view entity ZI_Travel
|
|
as select from ztravel
|
|
{
|
|
key travel_uuid as TravelUUID,
|
|
travel_id as TravelID,
|
|
agency_id as AgencyID,
|
|
customer_id as CustomerID,
|
|
begin_date as BeginDate,
|
|
end_date as EndDate,
|
|
booking_fee as BookingFee,
|
|
total_price as TotalPrice,
|
|
currency_code as CurrencyCode,
|
|
description as Description,
|
|
overall_status as OverallStatus,
|
|
@Semantics.user.createdBy: true
|
|
created_by as CreatedBy,
|
|
@Semantics.systemDateTime.createdAt: true
|
|
created_at as CreatedAt,
|
|
@Semantics.user.lastChangedBy: true
|
|
last_changed_by as LastChangedBy,
|
|
@Semantics.systemDateTime.lastChangedAt: true
|
|
last_changed_at as LastChangedAt
|
|
}
|
|
```
|
|
|
|
### Projection View for UI
|
|
```abap
|
|
@EndUserText.label: 'Travel Projection'
|
|
@AccessControl.authorizationCheck: #NOT_REQUIRED
|
|
@Metadata.allowExtensions: true
|
|
define root view entity ZC_Travel
|
|
provider contract transactional_query
|
|
as projection on ZI_Travel
|
|
{
|
|
key TravelUUID,
|
|
TravelID,
|
|
AgencyID,
|
|
CustomerID,
|
|
BeginDate,
|
|
EndDate,
|
|
BookingFee,
|
|
TotalPrice,
|
|
CurrencyCode,
|
|
Description,
|
|
OverallStatus,
|
|
CreatedBy,
|
|
CreatedAt,
|
|
LastChangedBy,
|
|
LastChangedAt
|
|
}
|
|
```
|
|
|
|
## RAP Business Object Definition
|
|
|
|
### Behavior Definition
|
|
```abap
|
|
managed implementation in class zbp_i_travel unique;
|
|
strict ( 2 );
|
|
|
|
define behavior for ZI_Travel alias Travel
|
|
persistent table ztravel
|
|
lock master
|
|
authorization master ( instance )
|
|
etag master LastChangedAt
|
|
{
|
|
// Standard operations
|
|
create;
|
|
update;
|
|
delete;
|
|
|
|
// Field controls
|
|
field ( readonly ) TravelUUID, TravelID, CreatedBy, CreatedAt, LastChangedBy, LastChangedAt;
|
|
field ( mandatory ) AgencyID, CustomerID;
|
|
|
|
// Determinations
|
|
determination setTravelID on modify { create; }
|
|
determination calculateTotalPrice on modify { field BookingFee; }
|
|
|
|
// Validations
|
|
validation validateCustomer on save { field CustomerID; }
|
|
validation validateDates on save { field BeginDate, EndDate; }
|
|
|
|
// Actions
|
|
action acceptTravel result [1] $self;
|
|
action rejectTravel result [1] $self;
|
|
|
|
// Factory action
|
|
factory action copyTravel [1];
|
|
|
|
// Draft handling
|
|
draft action Edit;
|
|
draft action Activate optimized;
|
|
draft action Discard;
|
|
draft action Resume;
|
|
draft determine action Prepare;
|
|
}
|
|
```
|
|
|
|
### Behavior Implementation
|
|
```abap
|
|
CLASS zbp_i_travel DEFINITION PUBLIC ABSTRACT FINAL
|
|
FOR BEHAVIOR OF zi_travel.
|
|
ENDCLASS.
|
|
|
|
CLASS zbp_i_travel IMPLEMENTATION.
|
|
|
|
METHOD setTravelID.
|
|
" Get max Travel ID
|
|
SELECT MAX( travel_id ) FROM ztravel INTO @DATA(lv_max_id).
|
|
|
|
" Set Travel ID for new entities
|
|
MODIFY ENTITIES OF zi_travel IN LOCAL MODE
|
|
ENTITY Travel
|
|
UPDATE FIELDS ( TravelID )
|
|
WITH VALUE #( FOR key IN keys
|
|
( %tky = key-%tky
|
|
TravelID = lv_max_id + 1 ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD validateDates.
|
|
READ ENTITIES OF zi_travel IN LOCAL MODE
|
|
ENTITY Travel
|
|
FIELDS ( BeginDate EndDate )
|
|
WITH CORRESPONDING #( keys )
|
|
RESULT DATA(lt_travels).
|
|
|
|
LOOP AT lt_travels INTO DATA(ls_travel).
|
|
IF ls_travel-BeginDate > ls_travel-EndDate.
|
|
APPEND VALUE #( %tky = ls_travel-%tky ) TO failed-travel.
|
|
APPEND VALUE #( %tky = ls_travel-%tky
|
|
%msg = new_message_with_text(
|
|
severity = if_abap_behv_message=>severity-error
|
|
text = 'End date must be after begin date' )
|
|
) TO reported-travel.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS.
|
|
```
|
|
|
|
## Service Definition and Binding
|
|
|
|
### Service Definition
|
|
```abap
|
|
@EndUserText.label: 'Travel Service Definition'
|
|
define service ZUI_TRAVEL_O4 {
|
|
expose ZC_Travel as Travel;
|
|
}
|
|
```
|
|
|
|
### Service Binding
|
|
Create via ADT: OData V4 - UI binding type
|
|
|
|
## Extensibility Options
|
|
|
|
### Developer Extensibility
|
|
- Custom fields and nodes
|
|
- Custom business logic
|
|
- ABAP Development Tools required
|
|
|
|
### Key User Extensibility (Multitenant SaaS)
|
|
- UI adaptations
|
|
- Custom fields
|
|
- Business Add-Ins (BAdIs)
|
|
- No coding required
|
|
|
|
## Reuse Services
|
|
|
|
Pre-built building blocks available:
|
|
- Application Jobs
|
|
- Application Logging
|
|
- Forms (Adobe Document Services)
|
|
- Emails
|
|
- Change Documents
|
|
- Workflow (SAP Build Process Automation)
|
|
- Number Ranges
|
|
|
|
## Transport Mechanisms
|
|
|
|
### gCTS (Recommended)
|
|
- Modern transport for BTP systems within same global account
|
|
- Managed via "Manage Software Components" app
|
|
- Automatic Git repository management
|
|
|
|
### abapGit
|
|
- Open-source Git client
|
|
- Use cases:
|
|
- Migrate on-premise code to cloud
|
|
- System decommissioning (export/import)
|
|
- Cross-account code transfers
|
|
- **Not recommended** for standard production transports
|
|
|
|
## Quality Assurance
|
|
|
|
### ABAP Test Cockpit (ATC)
|
|
|
|
**Default Variant**: `ABAP_CLOUD_DEVELOPMENT_DEFAULT`
|
|
|
|
**Check Categories:**
|
|
- Approved enhancement technologies
|
|
- API usage governance
|
|
- Critical ABAP statement analysis
|
|
- Code Vulnerability Analyzer (optional)
|
|
|
|
**Blocking Mode:**
|
|
Configure to prevent Priority 1/2 findings from transport
|
|
|
|
### ABAP Unit Testing
|
|
```abap
|
|
CLASS ltcl_travel DEFINITION FINAL FOR TESTING
|
|
DURATION SHORT
|
|
RISK LEVEL HARMLESS.
|
|
|
|
PRIVATE SECTION.
|
|
DATA: mo_cut TYPE REF TO zcl_travel_handler.
|
|
|
|
METHODS setup.
|
|
METHODS test_date_validation FOR TESTING.
|
|
ENDCLASS.
|
|
|
|
CLASS ltcl_travel IMPLEMENTATION.
|
|
|
|
METHOD setup.
|
|
mo_cut = NEW #( ).
|
|
ENDMETHOD.
|
|
|
|
METHOD test_date_validation.
|
|
" Given
|
|
DATA(lv_begin) = cl_abap_context_info=>get_system_date( ).
|
|
DATA(lv_end) = lv_begin + 7.
|
|
|
|
" When
|
|
DATA(lv_valid) = mo_cut->validate_dates(
|
|
iv_begin = lv_begin
|
|
iv_end = lv_end
|
|
).
|
|
|
|
" Then
|
|
cl_abap_unit_assert=>assert_true( lv_valid ).
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS.
|
|
```
|
|
|
|
## Elastic Scaling
|
|
|
|
### ABAP Compute Units (ACUs)
|
|
- Manual scaling via BTP Cockpit
|
|
- Automatic elastic scaling (0.5 ACU increments)
|
|
- Metrics: CPU, memory, work process counts
|
|
|
|
### HANA Compute Units (HCUs)
|
|
- Manual adjustment with near-zero downtime
|
|
- Native Storage Extension for cost optimization
|
|
|
|
## System Hibernation
|
|
|
|
**Benefits:**
|
|
- Reduces costs to <5% of operational expenses
|
|
- Preserves HANA Cloud instance
|
|
- Automatic restart during scheduled maintenance
|
|
|
|
**Management:**
|
|
- Via Landscape Portal
|
|
- Scheduling available (except trial accounts)
|
|
|
|
## SAP Joule Integration
|
|
|
|
**AI Capabilities:**
|
|
1. Predictive code completion
|
|
2. Joule chat (natural language)
|
|
3. Code explanation
|
|
4. ABAP Unit generation
|
|
5. CDS test generation
|
|
|
|
**ABAP AI SDK:**
|
|
- Standardized access to language models on SAP AI Core
|
|
- Intelligent Scenario Lifecycle Management
|
|
|
|
## Partner Deployment Models
|
|
|
|
### Multitenant SaaS
|
|
- Cloud service in partner's global account
|
|
- Customers subscribe
|
|
- Partner manages operations
|
|
- Key user extensibility for customers
|
|
|
|
### Add-on Product
|
|
- Installed in customer's ABAP environment
|
|
- Customer manages lifecycle
|
|
- Developer extensibility available
|
|
- Requires SAP PartnerEdge Build contract
|
|
|
|
### Requirements
|
|
- Registered ABAP namespace (mandatory)
|
|
- Software Components for transport
|
|
- Landscape Portal for lifecycle management
|
|
|
|
## Upgrade Management
|
|
|
|
### Downtime-Optimized Upgrades
|
|
1. **Preparation**: New release in shadow layer (system available)
|
|
2. **Takeover**: 10-40 minutes downtime
|
|
3. **Postprocessing**: Background cleanup (system available)
|
|
|
|
### Pre-Upgrade Option
|
|
- Test on non-production 4 weeks before release
|
|
- Validate custom applications
|
|
- Report issues through SAP support
|
|
|
|
## Source Documentation
|
|
|
|
- ABAP Environment: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/sap-btp-abap-environment-with-abap-cloud-174b229.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/sap-btp-abap-environment-with-abap-cloud-174b229.md)
|
|
- ABAP Cloud Development: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/developing-with-abap-cloud-in-the-sap-btp-abap-environment-9aaaf65.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/developing-with-abap-cloud-in-the-sap-btp-abap-environment-9aaaf65.md)
|
|
- Elastic Scaling: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/benefit-from-the-elastic-scaling-of-abap-application-servers-c1d35c5.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/benefit-from-the-elastic-scaling-of-abap-application-servers-c1d35c5.md)
|
|
- System Hibernation: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/use-system-hibernation-6a8d7ee.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/use-system-hibernation-6a8d7ee.md)
|
|
- ATC Governance: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/keep-clean-core-governance-with-abap-test-cockpit-698ddfa.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/keep-clean-core-governance-with-abap-test-cockpit-698ddfa.md)
|
|
- Joule: [https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/use-joule-for-developers-generative-ai-in-abap-cloud-63c8ac1.md](https://github.com/SAP-docs/btp-developer-guide/blob/main/docs/use-joule-for-developers-generative-ai-in-abap-cloud-63c8ac1.md)
|