Pour tout ceux qui utilisent des tables de configurations en passant par SM30 (Pour rappel, ce n’est pas Cloud Compliant puisqu’on accède directement au backend SAP via le GUI qui n’est plus disponible dans le Cloud), et qui se demandent quelle est la solution sur Fiori, la voici : Custom Business Configurations.
Nous allons voir ici comment utiliser cette application Fiori afin d’y ajouter nos tables de configurations customs.
A noter : Pour la configuration Standard mise a disposition par SAP, il faut suivre les instructions disponibles dans la documentation.
1. Création d’une table de base de données
La première chose a faire est de créer la table de base de données. Celle-ci doit obligatoirement être de type « C » (Customizing) pour pouvoir être configurée via l’application Fiori Custom Business Configuration. Cela implique donc comme dans la SM30 classique qu’il s’agissent de tables dont les entrées doivent être crées en DEV puis incluent dans un Ordre de Transport (OT) et transportées dans le système de production.
Mais nous savons tous qu’il existe parfois des besoins de configurations qui doivent être différents entre la DEV et la PROD, et pour autant nous ne voulons pas créer une table de type « A » (Application table) car nous restons sur de la configuration. Ne vous inquiétez pas, nous allons également voir comment rendre une table non transportable et modifiable en prod via l’application Fiori Custom Business Configuration.
Ici nous créons une table de customisation très simple pour l’exemple qui permet de stocker des messages d’erreur et leur description associée.
@EndUserText.label : 'Error code test'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #C
@AbapCatalog.dataMaintenance : #ALLOWED
define table zcode_test {
key client : abap.clnt not null;
key code : abap.char(3) not null;
description : abap.char(40);
email : abap.char(255);
last_changed_at : abp_lastchange_tstmpl;
local_last_changed_at : abp_locinst_lastchange_tstmpl;
}
Il faut préciser dans les annotations « @AbapCatalog.dataMaintenance : #ALLOWED » qui indique que les modifications sur la tables sont autorisées.
De meme, les champs suivant sont obligatoire pour la gneration du Business Configuration Object :
- last_changed_at : abp_lastchange_tstmpl;
- local_last_changed_at : abp_locinst_lastchange_tstmpl;
2. Génération du Business Object
Une fois la table créer, nous pouvons utiliser les outils mis à disposition par SAP pour creer automatique tous les objets necessaire pour ajouter la table dans l’application Custom Business Configuration ( Un objet RAP et son Maintenance Object associé).
Pour cela : Naviguer dans Generate ABAP Repository Objects… -> Maintenance Object en faisant clique droit sur la table.
Tous les objets nécessaires vont être crées :
- Les objets liés au Business Object crée
A noter qu’ici nous sommes dans un système S/4 Hana Cloud, Private Edition pour cette démo. Il faudra donc ajouter les objets d’autorisation nécessaires aux utilisateurs afin d’accéder a la table de configuration via PFCG (Idem pour On-Premise).
Pour les systèmes S/4 Hana Cloud, Public Edition et BTP, ABAP Environment, comme les systèmes d’autorisation ont évolués, il faudra créer une application IAM, l’attribuer a un Business Catalog et enfin a un Business Role qui sera donne aux users souhaités.
Documentation :
– S/4 Hana Cloud, Public Edition : https://help.sap.com/docs/SAP_S4HANA_CLOUD/6aa39f1ac05441e5a23f484f31e477e7/5b6290112008456b9e9400faebb8cd33.html
– BTP, ABAP Environment : https://help.sap.com/docs/btp/sap-business-technology-platform/identity-and-access-management-iam
- Le Maintenance Object crée ( Relié au BO crée précédemment)
Sur S/4 Hana, On-Premise et S/4 Hana, Private Cloud Edition, il faudra activer le service en /n/IWFND/V4_ADMIN ( C’est un service OData V4 qui est généré).
3. Accéder a la table de configuration
- Lancer l’application Custom Business Configuration
- Accéder a la table
Si nous ne donnons pas d’Ordre de Transport (OT), alors nous avons une erreur en sauvegardant.
4. Désactiver les transports
Ici, partons du principe que nous voudrions que l’email configuré soit différent en DEV afin de mettre l’email du développeur pour certains tests.
Lors de la génération automatique des objets, un transport object (Visible également en SOBJ pour les systèmes On-Premise et Private Cloud Edition) est créé.
Nous pouvons voir que ce sont ces propriétés du transport object qui empêchent la création sans ordre de transport (et la non changeabilité de notre table en production). En effet ces propriétés sont vérifiés dans le business object que nous venons de créer.
Pour supprimer cette gestion automatique via transport il faut regarder d’un peu plus près le behavior définition généré automatiquement.
Nous pouvons noter que la classe qui vient récupérer les informations du transport object est la suivante : LHC_RAP_TDAT_CTS grâce a sa (seule) méthode : GET et que celle ci est appelée dans d’autres méthodes du behavior definition afin d’effectuer des checks.
Nous allons donc commenter les méthodes GET_INSTANCE_FEATURE et GET_GLOBAL_FEATURES qui permettent d’autoriser, ou non, la modification de notre table de customizing en fonction des propriétés de notre Transport Object (Typiquement, en production ce serait refusé si non commenté), obtenues grâce a l’appel de la méthode GET vu précédemment.
Également, nous commentons une méthode qui implémente une VALIDATION du transport request : VALIDATETRANSPORTREQUEST
Enfin, comme il s’agit d’un objet RAP, il y a des annotations qui ont été générées, dont celles nécessaires a faire apparaitre le bouton « Select Transport » lorsque nous accédons a notre table.
Nous pouvons supprimer ce bouton dans la CDS Metadata Extensions comme il ne sert plus a rien.
Nous pouvons donc maintenant créer et modifier des entrées directement dans notre système sans OT.
A noter : Nous pourrions également ajouter nos propres validations/déterminations dans l’objet RAP généré.
Conclusion
Vous savez donc désormais comment remplacer vos accès a la SM30 pour configurer vos tables de customizing en étant Cloud Compliant.