SAP Build Work Zone est le point d’entree central pour les applications Fiori sur la SAP Business Technology Platform. Dans cet article, vous apprendrez comment deployer et configurer vos apps Fiori basees sur RAP dans le Launchpad Work Zone.
Qu’est-ce que SAP Build Work Zone ?
SAP Build Work Zone fournit un Launchpad unifie et base sur les roles pour l’acces aux applications Fiori, workflows et contenus metier :
| Aspect | SAP GUI Launchpad | SAP Build Work Zone |
|---|---|---|
| Plateforme | On-Premise | BTP (Cloud) |
| Technologie | ABAP BSP | Cloud Foundry |
| Personnalisation | Limitee | Etendue |
| Integration | Interne SAP | Multi-Cloud, paysages hybrides |
| Contenu | Transactions | Apps, Workflows, Spaces, Pages |
| Mobile | Restreint | Support natif |
Editions Work Zone
- Edition Standard : Fiori Launchpad, Spaces, Pages, Analytics de base
- Edition Advanced : En plus : Workspaces, Content Federation, integration SAP Jam
Vue d’ensemble de l’architecture
┌─────────────────────────────────────────────────────────────────────┐│ SAP Build Work Zone ││ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ││ │ Spaces │ │ Pages │ │ Roles │ ││ │ (Espaces) │ │ (Pages) │ │ (Acces) │ ││ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ ││ │ │ │ ││ └────────────────┬┴─────────────────┘ ││ │ ││ ┌───────────────────────▼───────────────────────────────────────┐ ││ │ Launchpad Service │ ││ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ ││ │ │ Tile 1 │ │ Tile 2 │ │ Tile 3 │ │ Tile 4 │ │ ││ │ └───┬────┘ └───┬────┘ └───┬────┘ └───┬────┘ │ ││ │ │ │ │ │ │ ││ └───────┼───────────┼───────────┼───────────┼────────────────────┘ │└──────────┼───────────┼───────────┼───────────┼───────────────────────┘ │ │ │ │ ┌─────▼──┐ ┌─────▼──┐ ┌─────▼──┐ ┌─────▼──┐ │App ABAP│ │App CAP │ │App UI5 │ │Externe │ │(RAP) │ │(Node) │ │(Custom)│ │(Lien) │ └────────┘ └────────┘ └────────┘ └────────┘Semantic Objects et Actions
Les Semantic Objects sont des objets metier abstraits pilotes par des Actions. Ils permettent la navigation basee sur les intents entre les applications.
Concept
| Terme | Description | Exemple |
|---|---|---|
| Semantic Object | Objet metier abstrait | SalesOrder, Customer, Product |
| Action | Operation sur l’objet | display, create, edit, approve |
| Intent | Combinaison Object + Action | SalesOrder-display |
| Parameters | Donnees de contexte pour la navigation | SalesOrderID=1000 |
Navigation basee sur les intents
// Navigation vers une autre app via Intentsap.ushell.Container.getServiceAsync("CrossApplicationNavigation") .then(function(oService) { oService.toExternal({ target: { semanticObject: "SalesOrder", action: "display" }, params: { SalesOrderID: "1000" } }); });App Descriptor (manifest.json)
Le manifest.json est le coeur de chaque app Fiori et definit toutes les metadonnees pour l’integration Work Zone.
Structure de base
{ "_version": "1.62.0", "sap.app": { "id": "com.mycompany.salesorder.manage", "type": "application", "title": "{{appTitle}}", "description": "{{appDescription}}", "applicationVersion": { "version": "1.0.0" }, "dataSources": { "mainService": { "uri": "/sap/opu/odata4/sap/zsalesorder_api/srvd_a2x/sap/zsalesorder/0001/", "type": "OData", "settings": { "odataVersion": "4.0" } } }, "crossNavigation": { "inbounds": { "SalesOrder-manage": { "semanticObject": "SalesOrder", "action": "manage", "title": "{{flpTitle}}", "subTitle": "{{flpSubtitle}}", "signature": { "parameters": {}, "additionalParameters": "allowed" } } }, "outbounds": { "displayCustomer": { "semanticObject": "Customer", "action": "display" } } } }, "sap.ui": { "technology": "UI5", "deviceTypes": { "desktop": true, "tablet": true, "phone": true } }, "sap.ui5": { "flexEnabled": true, "dependencies": { "minUI5Version": "1.120.0", "libs": { "sap.m": {}, "sap.ui.core": {}, "sap.fe.templates": {} } }, "models": { "": { "dataSource": "mainService", "preload": true, "settings": { "synchronizationMode": "None", "operationMode": "Server", "autoExpandSelect": true, "earlyRequests": true } }, "i18n": { "type": "sap.ui.model.resource.ResourceModel", "settings": { "bundleName": "com.mycompany.salesorder.manage.i18n.i18n" } } }, "routing": { "routes": [ { "pattern": ":?query:", "name": "SalesOrderList", "target": "SalesOrderList" }, { "pattern": "SalesOrder({key}):?query:", "name": "SalesOrderObjectPage", "target": "SalesOrderObjectPage" } ], "targets": { "SalesOrderList": { "type": "Component", "id": "SalesOrderList", "name": "sap.fe.templates.ListReport", "options": { "settings": { "entitySet": "SalesOrder" } } }, "SalesOrderObjectPage": { "type": "Component", "id": "SalesOrderObjectPage", "name": "sap.fe.templates.ObjectPage", "options": { "settings": { "entitySet": "SalesOrder" } } } } } }, "sap.cloud": { "public": true, "service": "com.mycompany.salesorder" }}Configurer la navigation Inbound
La section crossNavigation.inbounds definit comment l’app est accessible dans le Launchpad :
{ "crossNavigation": { "inbounds": { "SalesOrder-manage": { "semanticObject": "SalesOrder", "action": "manage", "title": "{{flpTitle}}", "subTitle": "{{flpSubtitle}}", "icon": "sap-icon://sales-order", "signature": { "parameters": { "Status": { "defaultValue": { "value": "Open", "format": "plain" }, "filter": { "value": "(Open|InProgress)", "format": "regexp" }, "required": false } }, "additionalParameters": "allowed" }, "deviceTypes": { "desktop": true, "tablet": true, "phone": true } } } }}Configurer la navigation Outbound
Pour la navigation vers d’autres apps :
{ "crossNavigation": { "outbounds": { "displayCustomer": { "semanticObject": "Customer", "action": "display", "parameters": { "CustomerID": {} } }, "displayProduct": { "semanticObject": "Product", "action": "display" } } }}Configuration du Launchpad
1. Configurer les Spaces et Pages
Les Spaces organisent les applications par theme, les Pages representent le contenu reel.
Creer un Space :
- BTP Cockpit -> ouvrir Work Zone Site Manager
- Content Manager -> Create -> Space
- Attribuer un ID et titre de Space (par ex. “SalesManagement”)
Creer une Page :
- Content Manager -> Create -> Page
- Associer la Page au Space
- Configurer les Sections avec des Tiles
2. Configurer la Business App
┌───────────────────────────────────────────────────────────────┐│ Content Manager: Business App │├───────────────────────────────────────────────────────────────┤│ General: ││ ├── App ID: com.mycompany.salesorder.manage ││ ├── Title: Gerer les commandes ││ └── Subtitle: Sales Order Management ││ ││ Navigation: ││ ├── Semantic Object: SalesOrder ││ └── Action: manage ││ ││ Visualization: ││ ├── Tile Type: Static ││ ├── Icon: sap-icon://sales-order ││ └── Info: Live ││ ││ Assignment: ││ └── Roles: Z_SALES_MANAGER, Z_SALES_ADMIN │└───────────────────────────────────────────────────────────────┘3. Affectation des roles
Les apps sont affectees via des roles :
┌─────────────────────────────────────────────────────────────┐│ Role: Z_SALES_MANAGER │├─────────────────────────────────────────────────────────────┤│ Apps affectees : ││ ├── Gerer les commandes (SalesOrder-manage) ││ ├── Afficher les commandes (SalesOrder-display) ││ └── Afficher les clients (Customer-display) ││ ││ Spaces affectes : ││ └── SalesManagement ││ ││ Utilisateurs/Groupes affectes : ││ ├── SALES_MANAGERS (Groupe IDP) ││ └── [email protected] │└─────────────────────────────────────────────────────────────┘Integration avec les IAM Apps
Dans le systeme ABAP, les IAM Business Catalogs et IAM Apps sont utilises pour le controle des autorisations.
Creer une IAM App
" IAM App: ZSALESORDER_MANAGE" Description: Application Sales Order Management"" Services associes :" - ZC_SALESORDER_CDS (Service OData V4)" - ZUI_SALESORDER_O4 (Service UI)"" Objets d'autorisation :" - S_SERVICE (Services RFC/HTTP)" - ZAUTH_SO (Autorisation personnalisee)Creer un Business Catalog
┌─────────────────────────────────────────────────────────────┐│ Business Catalog: ZSALES_BC │├─────────────────────────────────────────────────────────────┤│ Description: Sales Business Catalog ││ ││ IAM Apps affectees : ││ ├── ZSALESORDER_MANAGE ││ ├── ZSALESORDER_DISPLAY ││ └── ZCUSTOMER_DISPLAY ││ ││ Services affectes : ││ ├── /sap/opu/odata4/sap/zsalesorder_api/... ││ └── /sap/opu/odata4/sap/zcustomer_api/... │└─────────────────────────────────────────────────────────────┘Liaison BTP et systeme ABAP
La connexion entre les roles Work Zone et l’IAM ABAP s’effectue via :
- Communication Arrangement (SAP_COM_0008)
- Destination dans le BTP Cockpit
- Content Provider dans Work Zone
┌─────────────────┐ Destination ┌─────────────────┐│ SAP Build │◄─────────────────►│ Systeme ABAP ││ Work Zone │ │ (BTP/On-Prem) ││ │ SAP_COM_0008 │ ││ - Roles │◄─────────────────►│ - IAM Apps ││ - Tiles │ │ - Bus. Catalog ││ - Navigation │ Content │ - Services ││ │◄─────────────────►│ │└─────────────────┘ Federation └─────────────────┘Configurer le Content Provider
{ "name": "ABAP_S4HANA", "description": "Systeme S/4HANA ABAP", "contentProviderType": "sap_abap", "connection": { "destination": "S4HANA_ABAP", "path": "/sap/bc/ui2/cdm3/", "authenticationType": "OAuth2SAMLBearerAssertion" }, "runtime": { "destination": "S4HANA_RUNTIME", "path": "" }}Exemple complet : Deploiement d’une Travel App
1. Creer le service RAP
@EndUserText.label: 'Travel Projection View"@AccessControl.authorizationCheck: #CHECK@Metadata.allowExtensions: truedefine root view entity ZC_Travel provider contract transactional_query as projection on ZI_Travel{ key TravelUUID, TravelID, Description, CustomerID, BeginDate, EndDate, TotalPrice, CurrencyCode, Status, /* Associations */ _Customer, _Booking : redirected to composition child ZC_Booking}2. Definition du service
@EndUserText.label: 'Travel Service"define service ZUI_Travel_O4 { expose ZC_Travel as Travel; expose ZC_Booking as Booking; expose ZC_Customer as Customer;}3. manifest.json pour Fiori Elements
{ "_version": "1.62.0", "sap.app": { "id": "com.mycompany.travel.manage", "type": "application", "title": "{{appTitle}}", "description": "{{appDescription}}", "ach": "MM-PUR", "applicationVersion": { "version": "1.0.0" }, "dataSources": { "mainService": { "uri": "/sap/opu/odata4/sap/zui_travel_o4/srvd_a2x/sap/zui_travel_o4/0001/", "type": "OData", "settings": { "odataVersion": "4.0" } } }, "crossNavigation": { "inbounds": { "Travel-manage": { "semanticObject": "Travel", "action": "manage", "title": "{{flpTitle}}", "subTitle": "{{flpSubtitle}}", "icon": "sap-icon://flight", "signature": { "parameters": {}, "additionalParameters": "allowed" } } }, "outbounds": { "displayCustomer": { "semanticObject": "Customer", "action": "display" }, "displayBooking": { "semanticObject": "Booking", "action": "display" } } } }, "sap.ui5": { "flexEnabled": true, "dependencies": { "minUI5Version": "1.120.0", "libs": { "sap.m": {}, "sap.fe.templates": {} } }, "models": { "": { "dataSource": "mainService", "preload": true, "settings": { "synchronizationMode": "None", "operationMode": "Server", "autoExpandSelect": true } } }, "routing": { "routes": [ { "pattern": ":?query:", "name": "TravelList", "target": "TravelList" }, { "pattern": "Travel({key}):?query:", "name": "TravelObjectPage", "target": "TravelObjectPage" } ], "targets": { "TravelList": { "type": "Component", "id": "TravelList", "name": "sap.fe.templates.ListReport", "options": { "settings": { "entitySet": "Travel", "variantManagement": "Page", "initialLoad": "Enabled" } } }, "TravelObjectPage": { "type": "Component", "id": "TravelObjectPage", "name": "sap.fe.templates.ObjectPage", "options": { "settings": { "entitySet": "Travel", "editableHeaderContent": false, "sectionLayout": "Tabs" } } } } } }, "sap.cloud": { "public": true, "service": "com.mycompany.travel" }, "sap.fiori": { "registrationIds": ["F1234"], "archeType": "transactional" }}4. Definition IAM App (ADT)
Dans Eclipse ADT sous IAM App -> Create New :
ID: ZTRAVEL_MANAGEDescription: Application Travel ManagementFiori App ID: com.mycompany.travel.manage
Services:- ZUI_TRAVEL_O4 (OData V4)
UI5 Repository:- com.mycompany.travel.manage5. Business Catalog (ADT)
ID: ZTRAVEL_BCDescription: Travel Management Business Catalog
Apps:- ZTRAVEL_MANAGE- ZTRAVEL_DISPLAY- ZBOOKING_MANAGE
Restrictions (optionnel):- Acces en lecture seule pour certains champs6. Configuration dans Work Zone Site Manager
1. Ajouter le Content Provider └── Source: S4HANA_ABAP_DESTINATION
2. Recuperer le contenu du Provider └── Apps/Catalogs sont synchronises
3. Creer le role : Z_TRAVEL_MANAGER ├── Affecter les apps : Travel-manage └── Affecter le Space : TravelManagement
4. Ajouter utilisateurs/groupes au role └── TRAVEL_MANAGERS (Groupe IDP)
5. Activer le site et testerTiles dynamiques avec KPIs
Les Tiles dynamiques affichent des indicateurs actuels directement dans le Launchpad.
Service OData pour les donnees Tile
@EndUserText.label: 'Travel KPI View"define root view entity ZI_TravelKPI as select from ZI_Travel{ key 1 as DummyKey, @Aggregation.default: #SUM count(*) as TotalCount, @Aggregation.default: #SUM sum( case Status when 'O' then 1 else 0 end ) as OpenCount, @Aggregation.default: #SUM sum( case Status when 'A' then 1 else 0 end ) as ApprovedCount}group by Statusmanifest.json pour Tile dynamique
{ "crossNavigation": { "inbounds": { "Travel-manage": { "semanticObject": "Travel", "action": "manage", "title": "{{flpTitle}}", "subTitle": "{{flpSubtitle}}", "icon": "sap-icon://flight", "indicatorDataSource": { "dataSource": "mainService", "path": "TravelKPI", "refresh": 300 }, "signature": { "parameters": {}, "additionalParameters": "allowed" } } } }}Bonnes pratiques
| Theme | Recommandation |
|---|---|
| Semantic Objects | Nommage coherent sur toutes les apps (CamelCase, singulier) |
| Actions | Utiliser les actions standard : display, create, manage, edit, approve |
| manifest.json | Remplir completement toutes les metadonnees de navigation |
| Localisation | Externaliser titres et descriptions dans les fichiers i18n |
| IAM | Un objet IAM par app, regroupement en Business Catalogs |
| Content Provider | Activer la synchronisation automatique |
| Tests | Valider l’integration Launchpad en environnement de test avant Go-Live |
| Roles | Bases sur les roles metier, pas techniques (Sales Manager au lieu de APP_USER) |
Sujets connexes
- RAP Basics - Fondamentaux du developpement RAP
- OData Services - Definition et Binding de services
- Destination Service - Configurer les connexions systeme
- CDS Annotations - Annotations UI pour Fiori Elements