SAP Business Application Studio (BAS) est l’environnement de développement cloud-native de SAP, fonctionnant entièrement dans le navigateur. Avec l’extension de développement ABAP, vous pouvez développer des applications ABAP Cloud sans avoir à installer de logiciel local.
Qu’est-ce que SAP Business Application Studio ?
BAS est un IDE web basé sur Eclipse Theia, spécialement optimisé pour le développement SAP :
| Fonctionnalité | Description |
|---|---|
| Cloud-basé | Fonctionne entièrement dans le navigateur |
| Dev Spaces | Environnements de développement préconfigurés |
| Support ABAP | Développement ABAP Cloud complet |
| Intégré | Connexion à BTP et S/4HANA Cloud |
Avantages de BAS
- Aucune installation : Seul un navigateur est nécessaire
- Accessible partout : Travaillez depuis n’importe quel appareil
- Toujours à jour : SAP maintient l’environnement
- Uniforme : Même environnement pour tous les développeurs
- Intégré : Intégration native avec BTP
Configurer un Dev Space
1. Accès à BAS
Pour utiliser BAS, vous avez besoin de :
- Un compte SAP BTP (Trial ou productif)
- Un abonnement à SAP Business Application Studio
- L’autorisation de créer des Dev Spaces
2. Créer un Dev Space
Étapes pour créer un Dev Space ABAP :
1. Ouvrir le SAP BTP Cockpit2. Sélectionner le subaccount → Services → Instances and Subscriptions3. Ouvrir SAP Business Application Studio4. Cliquer sur "Create Dev Space"5. Entrer un nom : "ABAP_Development"6. Type de Dev Space : sélectionner "SAP ABAP Development"7. Confirmer "Create Dev Space"Types de Dev Space pour ABAP
| Type de Dev Space | Description | Cas d’utilisation |
|---|---|---|
| SAP ABAP Development | Développement ABAP Cloud | BTP ABAP Environment |
| Full Stack Cloud Application | Fiori + Backend | Projets Full-Stack |
| SAP Fiori | Développement UI | Applications Fiori pures |
3. Démarrer un Dev Space
1. Statut du Dev Space : "STOPPED"2. Cliquer sur le bouton Play pour démarrer3. Attendre que le statut soit : "RUNNING" (environ 1-2 minutes)4. Cliquer sur "Open" pour ouvrir l'IDERemarque : Les Dev Spaces s’arrêtent automatiquement après une période d’inactivité (environ 1 heure). Votre travail reste sauvegardé.
Créer et connecter un projet ABAP
Configurer la connexion système
Avant de pouvoir développer, vous devez établir une connexion à votre système ABAP.
Connexion à BTP ABAP Environment :
1. View → Command Palette (Ctrl+Shift+P)2. Entrer "ABAP: Create Service Instance"3. Coller la clé de service de BTP ABAP Environment4. Donner un nom de connexion : "BTP_DEV"5. La connexion est testée et sauvegardéeCréer une clé de service
Pour établir la connexion, vous avez besoin d’une clé de service :
Dans le BTP Cockpit :
1. Subaccount → Cloud Foundry → Spaces2. Ouvrir le Space → Service Instances3. Sélectionner l'instance ABAP Environment4. "Create" → Service Key5. Nom : "BAS_Connection"6. Copier les données de la clé (JSON)Créer un projet ABAP
Nouveau projet ABAP Cloud :
1. View → Command Palette (Ctrl+Shift+P)2. Entrer "ABAP: Create Project"3. Sélectionner la connexion système4. Entrer le package : "ZRAP_DEMO"5. Nom du projet : "rap-demo"6. Le projet est créé et ouvertStructure du projet dans BAS
rap-demo/├── .abap/│ └── service-binding.json├── src/│ └── zrap_demo/│ ├── zcl_example_class.clas.abap│ └── zif_example_interface.intf.abap└── package.jsonFonctionnalités et extensions importantes
Fonctionnalités spécifiques à ABAP
| Fonctionnalité | Raccourci | Description |
|---|---|---|
| Code Completion | Ctrl+Space | Complétion intelligente |
| Quick Fix | Ctrl+. | Correction rapide des erreurs |
| Go to Definition | F12 | Aller à la définition |
| Find References | Shift+F12 | Trouver les utilisations |
| Rename Symbol | F2 | Renommer |
| Format Document | Shift+Alt+F | Formater le code |
Coloration syntaxique et IntelliSense
BAS offre un support complet de la syntaxe ABAP :
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 offre ici : " - Coloration syntaxique " - IntelliSense pour les méthodes " - Documentation en ligne " - Marquage des erreurs en temps réel
out->write( 'Hello from BAS!' ). ENDMETHOD.
METHOD calculate_total. " Code Completion affiche les opérations sur les tables LOOP AT it_items ASSIGNING FIELD-SYMBOL(<item>). rv_total = rv_total + <item>-amount. ENDLOOP. ENDMETHOD.
ENDCLASS.Outils intégrés
Terminal : Terminal intégré pour Git et les outils CLI
View → Terminal (Ctrl+`)Intégration Git : Contrôle de version directement dans BAS
Source Control View (Ctrl+Shift+G)- Stage Changes- Commit- Push/PullVue Problems : Toutes les erreurs et avertissements en un coup d’oeil
View → Problems (Ctrl+Shift+M)Extensions recommandées
BAS est livré avec des extensions préinstallées pour ABAP :
| Extension | Fonction |
|---|---|
| ABAP Language Support | Syntaxe, Completion, Navigation |
| ABAP CDS Language Support | Développement de CDS Views |
| SAP Fiori Tools | Générateur Fiori Elements |
| SAP HANA Database Explorer | Accès à la base de données |
Comparaison avec ADT/Eclipse
Comparaison des fonctionnalités
| Fonctionnalité | BAS | ADT (Eclipse) |
|---|---|---|
| Installation | Aucune (navigateur) | Eclipse + Plugin |
| Mises à jour | Automatiques | Manuelles |
| Performance | Dépend du réseau | Local, plus rapide |
| Travail hors ligne | Impossible | Limité mais possible |
| Débogueur ABAP | Disponible | Complet |
| Profileur ABAP | Limité | Complet |
| Développement CDS | Oui | Oui |
| Développement RAP | Oui | Oui |
| Intégration Git | Native | Via Plugin |
| Gestion des transports | Oui | Oui |
Quand utiliser BAS ?
- Cloud-First : Développement BTP ABAP Environment
- Onboarding d’équipe : Démarrage rapide sans configuration
- Travail à distance : Développement depuis n’importe où
- Standardisation : Environnement uniforme dans l’équipe
Quand utiliser ADT ?
- On-Premise : Systèmes S/4HANA On-Premise
- Performance : Grands projets avec de nombreux fichiers
- Hors ligne : Connexion Internet limitée
- Outils spéciaux : ABAP Profiler, Memory Inspector
Utilisation hybride
Les deux outils peuvent être utilisés en parallèle :
Workflow typique :
1. ADT pour le développement S/4HANA On-Premise2. BAS pour BTP ABAP Environment3. Git comme base de code commune4. Même code, différents IDEsExemples pratiques
Exemple 1 : Créer un RAP Business Object
Créer un simple RAP Business Object dans BAS :
" Étape 1: Database Table" Créé 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;}" Étape 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}" Étape 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; }}Exemple 2 : CDS View avec associations
" Consumption View avec annotations" BAS offre l'auto-complétion pour toutes les annotations
@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,
/* Élément virtuel pour la criticité du statut */ case Status when 'O' then 2 " Open - Jaune when 'A' then 3 " Approved - Vert when 'R' then 1 " Rejected - Rouge else 0 end as StatusCriticality,
/* Champs admin */ CreatedBy, CreatedAt, LastChangedBy, LastChangedAt}Exemple 3 : Implémentation du comportement avec débogage
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. " Lire les entités pour les clés transmises READ ENTITIES OF ZI_Travel IN LOCAL MODE ENTITY Travel FIELDS ( TravelId ) WITH CORRESPONDING #( keys ) RESULT DATA(travels).
" Définir les valeurs par défaut pour les nouvelles entrées 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).
" Dans BAS : Définir un point d'arrêt en cliquant à gauche du numéro de ligne " Démarrer le débogage via Run → Start Debugging ENDMETHOD.
METHOD validateDates. " Validation : BeginDate doit être avant EndDate 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 = 'La date de début doit être avant la date de fin" ) %element-BeginDate = if_abap_behv=>mk-on %element-EndDate = if_abap_behv=>mk-on ) TO reported-travel. ENDIF. ENDLOOP. ENDMETHOD.
ENDCLASS.Débogage dans BAS :
1. Définir un point d'arrêt : Cliquer à gauche du numéro de ligne2. Configuration de débogage : Run → Add Configuration3. Sélectionner le système ABAP4. Démarrer l'application et exécuter l'action5. Le débogueur s'arrête au point d'arrêt6. La vue Variables affiche les valeurs des variables7. Step Over (F10), Step Into (F11), Continue (F5)Conseils et bonnes pratiques
Optimiser les performances
1. Charger uniquement les packages nécessaires → Projets plus petits = meilleures performances
2. Redémarrer régulièrement le Dev Space → Nettoie la mémoire et le cache
3. Fermer les onglets inutilisés → Réduit la consommation de mémoire
4. Utiliser une connexion Internet stable → BAS dépend du réseauRaccourcis clavier
| Action | 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 |
Organisation du workspace
Structure de workspace recommandée :
workspace/├── project-rap-demo/ # Projet RAP├── project-fiori-app/ # Application Fiori├── project-api-integration/ # Intégration API└── .vscode/ └── settings.json # Paramètres du workspaceDépannage
Problèmes courants
Le Dev Space ne démarre pas :
Solution :1. Vider le cache du navigateur2. Supprimer et recréer le Dev Space3. Vérifier l'abonnement BTPConnexion au système ABAP défectueuse :
Solution :1. Recréer la clé de service2. Recréer la connexion dans BAS3. Vérifier les paramètres réseau/pare-feuPerformances lentes :
Solution :1. Désactiver les extensions inutiles2. Réduire la taille du projet3. Isoler l'onglet du navigateur4. Redémarrer le Dev SpaceLa complétion de code ne fonctionne pas :
Solution :1. Vérifier le statut du serveur de langage ABAP (en bas à droite)2. Vérifier la connexion au système ABAP3. Recharger le projet : Command Palette → Developer: Reload WindowConclusion
SAP Business Application Studio offre un environnement de développement moderne et cloud-native pour ABAP Cloud :
- Zéro installation : Prêt immédiatement dans le navigateur
- Support ABAP complet : CDS, RAP, Débogage
- Outils intégrés : Git, Terminal, Extensions
- Optimisé pour le cloud : Intégration native BTP
Pour BTP ABAP Environment et le développement cloud, BAS est le premier choix. Pour les systèmes On-Premise et les fonctionnalités de débogage avancées, ADT reste l’option la plus complète.