SAP Business Application Studio: Browser-basierte ABAP-Entwicklung

kategorie
DevOps
Veröffentlicht
autor
Johannes

SAP Business Application Studio (BAS) ist die cloud-native Entwicklungsumgebung von SAP, die vollständig im Browser läuft. Mit der ABAP-Entwicklungserweiterung kannst du ABAP Cloud Anwendungen entwickeln, ohne lokale Software installieren zu müssen.

Was ist SAP Business Application Studio?

BAS ist eine webbasierte IDE, die auf Eclipse Theia basiert und speziell für SAP-Entwicklung optimiert ist:

FeatureBeschreibung
Cloud-basiertLäuft vollständig im Browser
Dev SpacesVorkonfigurierte Entwicklungsumgebungen
ABAP-SupportVolle ABAP Cloud Entwicklung
IntegriertVerbindung zu BTP und S/4HANA Cloud

Vorteile von BAS

  • Keine Installation: Nur Browser erforderlich
  • Überall nutzbar: Arbeite von jedem Gerät
  • Immer aktuell: SAP pflegt die Umgebung
  • Einheitlich: Gleiche Umgebung für alle Entwickler
  • Integriert: Native BTP-Integration

Dev Space einrichten

1. Zugang zu BAS

Um BAS zu nutzen, benötigst du:

  • SAP BTP Account (Trial oder produktiv)
  • Subscription für SAP Business Application Studio
  • Berechtigung zum Erstellen von Dev Spaces

2. Dev Space erstellen

Schritte zum Erstellen eines ABAP Dev Space:
1. SAP BTP Cockpit öffnen
2. Subaccount auswählen → Services → Instances and Subscriptions
3. SAP Business Application Studio öffnen
4. "Create Dev Space" klicken
5. Namen eingeben: "ABAP_Development"
6. Dev Space Type: "SAP ABAP Development" auswählen
7. "Create Dev Space" bestätigen

Dev Space Typen für ABAP

Dev Space TypeBeschreibungAnwendungsfall
SAP ABAP DevelopmentABAP Cloud EntwicklungBTP ABAP Environment
Full Stack Cloud ApplicationFiori + BackendFull-Stack Projekte
SAP FioriUI-EntwicklungReine Fiori Apps

3. Dev Space starten

1. Dev Space Status: "STOPPED"
2. Play-Button klicken zum Starten
3. Warten bis Status: "RUNNING" (ca. 1-2 Minuten)
4. "Open" klicken um IDE zu öffnen

Hinweis: Dev Spaces stoppen automatisch nach Inaktivität (ca. 1 Stunde). Deine Arbeit bleibt gespeichert.

ABAP-Projekt erstellen und verbinden

System-Verbindung einrichten

Bevor du entwickeln kannst, musst du eine Verbindung zu deinem ABAP-System herstellen.

Verbindung zu BTP ABAP Environment:
1. View → Command Palette (Ctrl+Shift+P)
2. "ABAP: Create Service Instance" eingeben
3. Service Key von BTP ABAP Environment einfügen
4. Verbindungsname vergeben: "BTP_DEV"
5. Verbindung wird getestet und gespeichert

Service Key erstellen

Um die Verbindung herzustellen, benötigst du einen Service Key:

Im BTP Cockpit:
1. Subaccount → Cloud Foundry → Spaces
2. Space öffnen → Service Instances
3. ABAP Environment Instance auswählen
4. "Create" → Service Key
5. Name: "BAS_Connection"
6. Key-Daten kopieren (JSON)

ABAP-Projekt anlegen

Neues ABAP Cloud Projekt:
1. View → Command Palette (Ctrl+Shift+P)
2. "ABAP: Create Project" eingeben
3. System-Verbindung auswählen
4. Package eingeben: "ZRAP_DEMO"
5. Projektname: "rap-demo"
6. Projekt wird erstellt und geöffnet

Projektstruktur in BAS

rap-demo/
├── .abap/
│ └── service-binding.json
├── src/
│ └── zrap_demo/
│ ├── zcl_example_class.clas.abap
│ └── zif_example_interface.intf.abap
└── package.json

Wichtige Features und Extensions

ABAP-spezifische Features

FeatureShortcutBeschreibung
Code CompletionCtrl+SpaceIntelligente Vervollständigung
Quick FixCtrl+.Schnelle Fehlerbehebung
Go to DefinitionF12Zur Definition springen
Find ReferencesShift+F12Verwendungen finden
Rename SymbolF2Umbenennen
Format DocumentShift+Alt+FCode formatieren

Syntax Highlighting und IntelliSense

BAS bietet vollständige ABAP-Syntax-Unterstützung:

CLASS zcl_bas_demo DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
METHODS calculate_total
IMPORTING
it_items TYPE STANDARD TABLE
RETURNING
VALUE(rv_total) TYPE p.
ENDCLASS.
CLASS zcl_bas_demo IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
" BAS bietet hier:
" - Syntax Highlighting
" - IntelliSense für Methoden
" - Inline-Dokumentation
" - Fehlermarkierung in Echtzeit
out->write( 'Hello from BAS!' ).
ENDMETHOD.
METHOD calculate_total.
" Code Completion zeigt Tabellenoperationen
LOOP AT it_items ASSIGNING FIELD-SYMBOL(<item>).
rv_total = rv_total + <item>-amount.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

Integrierte Tools

Terminal: Integriertes Terminal für Git und CLI-Tools

View → Terminal (Ctrl+`)

Git Integration: Versionskontrolle direkt in BAS

Source Control View (Ctrl+Shift+G)
- Stage Changes
- Commit
- Push/Pull

Problems View: Alle Fehler und Warnungen auf einen Blick

View → Problems (Ctrl+Shift+M)

Empfohlene Extensions

BAS kommt mit vorinstallierten Extensions für ABAP:

ExtensionFunktion
ABAP Language SupportSyntax, Completion, Navigation
ABAP CDS Language SupportCDS View Entwicklung
SAP Fiori ToolsFiori Elements Generator
SAP HANA Database ExplorerDatenbank-Zugriff

Vergleich zu ADT/Eclipse

Feature-Vergleich

FeatureBASADT (Eclipse)
InstallationKeine (Browser)Eclipse + Plugin
UpdatesAutomatischManuell
PerformanceNetzwerkabhängigLokal, schneller
Offline-ArbeitNicht möglichBegrenzt möglich
ABAP DebuggerVerfügbarVollständig
ABAP ProfilerBegrenztVollständig
CDS DevelopmentJaJa
RAP DevelopmentJaJa
Git IntegrationNativVia Plugin
Transport ManagementJaJa

Wann BAS verwenden?

  • Cloud-First: BTP ABAP Environment Entwicklung
  • Team-Onboarding: Schneller Start ohne Setup
  • Remote-Arbeit: Entwicklung von überall
  • Standardisierung: Einheitliche Umgebung im Team

Wann ADT verwenden?

  • On-Premise: S/4HANA On-Premise Systeme
  • Performance: Große Projekte mit vielen Dateien
  • Offline: Eingeschränkte Internetverbindung
  • Spezielle Tools: ABAP Profiler, Memory Inspector

Hybride Nutzung

Beide Tools können parallel genutzt werden:

Typischer Workflow:
1. ADT für On-Premise S/4HANA Entwicklung
2. BAS für BTP ABAP Environment
3. Git als gemeinsame Code-Basis
4. Gleicher Code, verschiedene IDEs

Praktische Beispiele

Beispiel 1: RAP Business Object erstellen

Erstelle ein einfaches RAP Business Object in BAS:

" Schritt 1: Database Table
" Erstellt via Command Palette: ABAP: New → Database Table
@EndUserText.label : 'Travel Bookings'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
define table ztab_travel {
key client : abap.clnt not null;
key travel_id : abap.numc(8) not null;
description : abap.char(255);
begin_date : abap.dats;
end_date : abap.dats;
total_price : abap.curr(15,2);
currency_code : abap.cuky;
status : abap.char(1);
created_by : abap.uname;
created_at : timestampl;
last_changed_by : abap.uname;
last_changed_at : timestampl;
}
" Schritt 2: CDS View Entity
" Command Palette: ABAP: New → Data Definition
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Travel Booking View'
define root view entity ZI_Travel
as select from ztab_travel
{
key travel_id as TravelId,
description as Description,
begin_date as BeginDate,
end_date as EndDate,
@Semantics.amount.currencyCode: 'CurrencyCode'
total_price as TotalPrice,
currency_code as CurrencyCode,
status as Status,
@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
}
" Schritt 3: Behavior Definition
" Command Palette: ABAP: New → Behavior Definition
managed implementation in class zbp_i_travel unique;
strict ( 2 );
with draft;
define behavior for ZI_Travel alias Travel
persistent table ztab_travel
draft table ztab_d_travel
lock master total etag LastChangedAt
authorization master ( instance )
{
create;
update;
delete;
field ( numbering : managed, readonly ) TravelId;
field ( readonly ) CreatedBy, CreatedAt, LastChangedBy, LastChangedAt;
determination setDefaults on modify { create; }
validation validateDates on save { field BeginDate, EndDate; }
draft action Edit;
draft action Activate;
draft action Discard;
draft action Resume;
draft determine action Prepare;
mapping for ztab_travel corresponding
{
TravelId = travel_id;
Description = description;
BeginDate = begin_date;
EndDate = end_date;
TotalPrice = total_price;
CurrencyCode = currency_code;
Status = status;
CreatedBy = created_by;
CreatedAt = created_at;
LastChangedBy = last_changed_by;
LastChangedAt = last_changed_at;
}
}

Beispiel 2: CDS View mit Assoziationen

" Consumption View mit Annotationen
" BAS bietet Auto-Complete für alle Annotationen
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Travel Consumption View'
@Metadata.allowExtensions: true
define root view entity ZC_Travel
provider contract transactional_query
as projection on ZI_Travel
{
@UI.facet: [
{ id: 'Travel',
purpose: #STANDARD,
type: #IDENTIFICATION_REFERENCE,
label: 'Travel',
position: 10 }
]
@UI.lineItem: [{ position: 10, importance: #HIGH }]
@UI.identification: [{ position: 10 }]
key TravelId,
@UI.lineItem: [{ position: 20, importance: #HIGH }]
@UI.identification: [{ position: 20 }]
Description,
@UI.lineItem: [{ position: 30 }]
@UI.identification: [{ position: 30 }]
BeginDate,
@UI.lineItem: [{ position: 40 }]
@UI.identification: [{ position: 40 }]
EndDate,
@UI.lineItem: [{ position: 50 }]
@UI.identification: [{ position: 50 }]
TotalPrice,
CurrencyCode,
@UI.lineItem: [{ position: 60, criticality: 'StatusCriticality' }]
Status,
/* Virtual Element für Status-Criticality */
case Status
when 'O' then 2 " Open - Yellow
when 'A' then 3 " Approved - Green
when 'R' then 1 " Rejected - Red
else 0
end as StatusCriticality,
/* Admin-Felder */
CreatedBy,
CreatedAt,
LastChangedBy,
LastChangedAt
}

Beispiel 3: Behavior Implementation mit Debugging

CLASS lhc_travel DEFINITION INHERITING FROM cl_abap_behavior_handler.
PRIVATE SECTION.
METHODS setDefaults FOR DETERMINE ON MODIFY
IMPORTING keys FOR Travel~setDefaults.
METHODS validateDates FOR VALIDATE ON SAVE
IMPORTING keys FOR Travel~validateDates.
ENDCLASS.
CLASS lhc_travel IMPLEMENTATION.
METHOD setDefaults.
" Lies die Entities für die übergebenen Keys
READ ENTITIES OF ZI_Travel IN LOCAL MODE
ENTITY Travel
FIELDS ( TravelId )
WITH CORRESPONDING #( keys )
RESULT DATA(travels).
" Setze Standardwerte für neue Einträge
MODIFY ENTITIES OF ZI_Travel IN LOCAL MODE
ENTITY Travel
UPDATE
FIELDS ( Status CurrencyCode )
WITH VALUE #( FOR travel IN travels
( %tky = travel-%tky
Status = 'O' " Open
CurrencyCode = 'EUR' ) )
REPORTED DATA(reported).
" In BAS: Breakpoint setzen mit Klick links neben Zeilennummer
" Debugging starten über Run → Start Debugging
ENDMETHOD.
METHOD validateDates.
" Validierung: BeginDate muss vor EndDate liegen
READ ENTITIES OF ZI_Travel IN LOCAL MODE
ENTITY Travel
FIELDS ( BeginDate EndDate )
WITH CORRESPONDING #( keys )
RESULT DATA(travels).
LOOP AT travels ASSIGNING FIELD-SYMBOL(<travel>).
IF <travel>-BeginDate > <travel>-EndDate.
APPEND VALUE #(
%tky = <travel>-%tky
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-error
text = 'Beginndatum muss vor Enddatum liegen'
)
%element-BeginDate = if_abap_behv=>mk-on
%element-EndDate = if_abap_behv=>mk-on
) TO reported-travel.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.

Debugging in BAS:

1. Breakpoint setzen: Klick links neben Zeilennummer
2. Debug-Konfiguration: Run → Add Configuration
3. ABAP System auswählen
4. App starten und Aktion ausführen
5. Debugger stoppt am Breakpoint
6. Variables View zeigt Variablenwerte
7. Step Over (F10), Step Into (F11), Continue (F5)

Tipps und Best Practices

Performance optimieren

1. Nur benötigte Packages laden
→ Kleinere Projekte = schnellere Performance
2. Dev Space regelmäßig neu starten
→ Bereinigt Speicher und Cache
3. Nicht benötigte Tabs schließen
→ Reduziert Speicherverbrauch
4. Stabile Internetverbindung nutzen
→ BAS ist netzwerkabhängig

Keyboard Shortcuts

AktionWindows/LinuxMac
Command PaletteCtrl+Shift+PCmd+Shift+P
Quick OpenCtrl+PCmd+P
Go to DefinitionF12F12
Find All ReferencesShift+F12Shift+F12
Rename SymbolF2F2
Format DocumentShift+Alt+FShift+Option+F
Toggle TerminalCtrl+`Cmd+`
SaveCtrl+SCmd+S
ActivateCtrl+F3Cmd+F3

Workspace-Organisation

Empfohlene Workspace-Struktur:
workspace/
├── project-rap-demo/ # RAP Projekt
├── project-fiori-app/ # Fiori App
├── project-api-integration/ # API Integration
└── .vscode/
└── settings.json # Workspace-Einstellungen

Troubleshooting

Häufige Probleme

Dev Space startet nicht:

Lösung:
1. Browser-Cache leeren
2. Dev Space löschen und neu erstellen
3. BTP Subscription prüfen

Verbindung zum ABAP-System fehlerhaft:

Lösung:
1. Service Key neu erstellen
2. Verbindung in BAS neu anlegen
3. Netzwerk/Firewall-Einstellungen prüfen

Langsame Performance:

Lösung:
1. Nicht benötigte Extensions deaktivieren
2. Projekt-Größe reduzieren
3. Browser-Tab isolieren
4. Dev Space neu starten

Code Completion funktioniert nicht:

Lösung:
1. ABAP Language Server Status prüfen (unten rechts)
2. Verbindung zum ABAP-System prüfen
3. Projekt neu laden: Command Palette → Developer: Reload Window

Fazit

SAP Business Application Studio bietet eine moderne, cloud-native Entwicklungsumgebung für ABAP Cloud:

  • Zero Installation: Sofort startklar im Browser
  • Volle ABAP-Unterstützung: CDS, RAP, Debugging
  • Integrierte Tools: Git, Terminal, Extensions
  • Cloud-optimiert: Native BTP-Integration

Für BTP ABAP Environment und cloud-basierte Entwicklung ist BAS die erste Wahl. Für On-Premise-Systeme und erweiterte Debugging-Features bleibt ADT die umfassendere Option.

Weiterführende Ressourcen

Weiterführende Artikel