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:
| Feature | Beschreibung |
|---|---|
| Cloud-basiert | Läuft vollständig im Browser |
| Dev Spaces | Vorkonfigurierte Entwicklungsumgebungen |
| ABAP-Support | Volle ABAP Cloud Entwicklung |
| Integriert | Verbindung 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 öffnen2. Subaccount auswählen → Services → Instances and Subscriptions3. SAP Business Application Studio öffnen4. "Create Dev Space" klicken5. Namen eingeben: "ABAP_Development"6. Dev Space Type: "SAP ABAP Development" auswählen7. "Create Dev Space" bestätigenDev Space Typen für ABAP
| Dev Space Type | Beschreibung | Anwendungsfall |
|---|---|---|
| SAP ABAP Development | ABAP Cloud Entwicklung | BTP ABAP Environment |
| Full Stack Cloud Application | Fiori + Backend | Full-Stack Projekte |
| SAP Fiori | UI-Entwicklung | Reine Fiori Apps |
3. Dev Space starten
1. Dev Space Status: "STOPPED"2. Play-Button klicken zum Starten3. Warten bis Status: "RUNNING" (ca. 1-2 Minuten)4. "Open" klicken um IDE zu öffnenHinweis: 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" eingeben3. Service Key von BTP ABAP Environment einfügen4. Verbindungsname vergeben: "BTP_DEV"5. Verbindung wird getestet und gespeichertService Key erstellen
Um die Verbindung herzustellen, benötigst du einen Service Key:
Im BTP Cockpit:
1. Subaccount → Cloud Foundry → Spaces2. Space öffnen → Service Instances3. ABAP Environment Instance auswählen4. "Create" → Service Key5. 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" eingeben3. System-Verbindung auswählen4. Package eingeben: "ZRAP_DEMO"5. Projektname: "rap-demo"6. Projekt wird erstellt und geöffnetProjektstruktur in BAS
rap-demo/├── .abap/│ └── service-binding.json├── src/│ └── zrap_demo/│ ├── zcl_example_class.clas.abap│ └── zif_example_interface.intf.abap└── package.jsonWichtige Features und Extensions
ABAP-spezifische Features
| Feature | Shortcut | Beschreibung |
|---|---|---|
| Code Completion | Ctrl+Space | Intelligente Vervollständigung |
| Quick Fix | Ctrl+. | Schnelle Fehlerbehebung |
| Go to Definition | F12 | Zur Definition springen |
| Find References | Shift+F12 | Verwendungen finden |
| Rename Symbol | F2 | Umbenennen |
| Format Document | Shift+Alt+F | Code 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/PullProblems View: Alle Fehler und Warnungen auf einen Blick
View → Problems (Ctrl+Shift+M)Empfohlene Extensions
BAS kommt mit vorinstallierten Extensions für ABAP:
| Extension | Funktion |
|---|---|
| ABAP Language Support | Syntax, Completion, Navigation |
| ABAP CDS Language Support | CDS View Entwicklung |
| SAP Fiori Tools | Fiori Elements Generator |
| SAP HANA Database Explorer | Datenbank-Zugriff |
Vergleich zu ADT/Eclipse
Feature-Vergleich
| Feature | BAS | ADT (Eclipse) |
|---|---|---|
| Installation | Keine (Browser) | Eclipse + Plugin |
| Updates | Automatisch | Manuell |
| Performance | Netzwerkabhängig | Lokal, schneller |
| Offline-Arbeit | Nicht möglich | Begrenzt möglich |
| ABAP Debugger | Verfügbar | Vollständig |
| ABAP Profiler | Begrenzt | Vollständig |
| CDS Development | Ja | Ja |
| RAP Development | Ja | Ja |
| Git Integration | Nativ | Via Plugin |
| Transport Management | Ja | Ja |
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 Entwicklung2. BAS für BTP ABAP Environment3. Git als gemeinsame Code-Basis4. Gleicher Code, verschiedene IDEsPraktische 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 : #Adefine 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 Travelpersistent table ztab_traveldraft table ztab_d_travellock master total etag LastChangedAtauthorization 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 Zeilennummer2. Debug-Konfiguration: Run → Add Configuration3. ABAP System auswählen4. App starten und Aktion ausführen5. Debugger stoppt am Breakpoint6. Variables View zeigt Variablenwerte7. 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ängigKeyboard Shortcuts
| Aktion | Windows/Linux | Mac |
|---|---|---|
| Command Palette | Ctrl+Shift+P | Cmd+Shift+P |
| Quick Open | Ctrl+P | Cmd+P |
| Go to Definition | F12 | F12 |
| Find All References | Shift+F12 | Shift+F12 |
| Rename Symbol | F2 | F2 |
| Format Document | Shift+Alt+F | Shift+Option+F |
| Toggle Terminal | Ctrl+` | Cmd+` |
| Save | Ctrl+S | Cmd+S |
| Activate | Ctrl+F3 | Cmd+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-EinstellungenTroubleshooting
Häufige Probleme
Dev Space startet nicht:
Lösung:1. Browser-Cache leeren2. Dev Space löschen und neu erstellen3. BTP Subscription prüfenVerbindung zum ABAP-System fehlerhaft:
Lösung:1. Service Key neu erstellen2. Verbindung in BAS neu anlegen3. Netzwerk/Firewall-Einstellungen prüfenLangsame Performance:
Lösung:1. Nicht benötigte Extensions deaktivieren2. Projekt-Größe reduzieren3. Browser-Tab isolieren4. Dev Space neu startenCode Completion funktioniert nicht:
Lösung:1. ABAP Language Server Status prüfen (unten rechts)2. Verbindung zum ABAP-System prüfen3. Projekt neu laden: Command Palette → Developer: Reload WindowFazit
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.