SAP Business Application Studio : Développement ABAP dans le navigateur

Catégorie
DevOps
Publié
Auteur
Johannes

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 SpacesEnvironnements de développement préconfigurés
Support ABAPDé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 Cockpit
2. Sélectionner le subaccount → Services → Instances and Subscriptions
3. Ouvrir SAP Business Application Studio
4. 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 SpaceDescriptionCas d’utilisation
SAP ABAP DevelopmentDéveloppement ABAP CloudBTP ABAP Environment
Full Stack Cloud ApplicationFiori + BackendProjets Full-Stack
SAP FioriDéveloppement UIApplications Fiori pures

3. Démarrer un Dev Space

1. Statut du Dev Space : "STOPPED"
2. Cliquer sur le bouton Play pour démarrer
3. Attendre que le statut soit : "RUNNING" (environ 1-2 minutes)
4. Cliquer sur "Open" pour ouvrir l'IDE

Remarque : 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 Environment
4. Donner un nom de connexion : "BTP_DEV"
5. La connexion est testée et sauvegardée

Cré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 → Spaces
2. Ouvrir le Space → Service Instances
3. Sélectionner l'instance ABAP Environment
4. "Create" → Service Key
5. 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ème
4. Entrer le package : "ZRAP_DEMO"
5. Nom du projet : "rap-demo"
6. Le projet est créé et ouvert

Structure du projet dans BAS

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

Fonctionnalités et extensions importantes

Fonctionnalités spécifiques à ABAP

FonctionnalitéRaccourciDescription
Code CompletionCtrl+SpaceComplétion intelligente
Quick FixCtrl+.Correction rapide des erreurs
Go to DefinitionF12Aller à la définition
Find ReferencesShift+F12Trouver les utilisations
Rename SymbolF2Renommer
Format DocumentShift+Alt+FFormater 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/Pull

Vue 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 :

ExtensionFonction
ABAP Language SupportSyntaxe, Completion, Navigation
ABAP CDS Language SupportDéveloppement de CDS Views
SAP Fiori ToolsGénérateur Fiori Elements
SAP HANA Database ExplorerAccès à la base de données

Comparaison avec ADT/Eclipse

Comparaison des fonctionnalités

FonctionnalitéBASADT (Eclipse)
InstallationAucune (navigateur)Eclipse + Plugin
Mises à jourAutomatiquesManuelles
PerformanceDépend du réseauLocal, plus rapide
Travail hors ligneImpossibleLimité mais possible
Débogueur ABAPDisponibleComplet
Profileur ABAPLimitéComplet
Développement CDSOuiOui
Développement RAPOuiOui
Intégration GitNativeVia Plugin
Gestion des transportsOuiOui

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-Premise
2. BAS pour BTP ABAP Environment
3. Git comme base de code commune
4. Même code, différents IDEs

Exemples 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 : #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;
}
" É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 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;
}
}

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 ligne
2. Configuration de débogage : Run → Add Configuration
3. Sélectionner le système ABAP
4. Démarrer l'application et exécuter l'action
5. Le débogueur s'arrête au point d'arrêt
6. La vue Variables affiche les valeurs des variables
7. 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éseau

Raccourcis clavier

ActionWindows/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

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 workspace

Dépannage

Problèmes courants

Le Dev Space ne démarre pas :

Solution :
1. Vider le cache du navigateur
2. Supprimer et recréer le Dev Space
3. Vérifier l'abonnement BTP

Connexion au système ABAP défectueuse :

Solution :
1. Recréer la clé de service
2. Recréer la connexion dans BAS
3. Vérifier les paramètres réseau/pare-feu

Performances lentes :

Solution :
1. Désactiver les extensions inutiles
2. Réduire la taille du projet
3. Isoler l'onglet du navigateur
4. Redémarrer le Dev Space

La 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 ABAP
3. Recharger le projet : Command Palette → Developer: Reload Window

Conclusion

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.

Ressources supplémentaires

Articles connexes