Files
gh-secondsky-sap-skills-ski…/references/abap-cloud.md
2025-11-30 08:55:02 +08:00

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)