Un de nos client a demandé des modifications de l'écran standard de login de ses applications HR Renewal. Ces modifications sont mineures (fond d'écran, libellés...), mais la solution ayant pris plus de temps à être trouvée qu'à être réalisée, je met en ligne la méthode employée.
Après avoir cherché le service correspondant au "suite page builder" (l'application d'accueil des composants HR Renewal en UI5), via la transaction SICF, nous avons trouvé que ce service est associé à une classe de logon spécifique : CL_SRA_LOGIN.
A noter qu'il existe un service pour l'application en elle même (sap/bc/ui5_ui5/sap/arsrvc_suite_pb), et un autre pour l'administration de l'application (sap/bc/ui5_ui5/sap/arsrvc_upb_admn). L’écran de login peut donc servir a différencier le mode d’utilisation.
La classe CL_SRA_LOGIN est responsable de la génération du code HTML qui forme la page de logon. Ceci est réalisé dans la methode HTML_LOGIN. Cette dernière utilise une série de propriété (image de fond, taille, labels) pour définir un contexte qui sera utilisé dans un template de génération de l’écran.
En poussant un peu l’analyse, on trouve que les propriété sont initialisées au sein de la méthode INIT_DEFAULT_PROPERTIES. Elles y sont soit codées en dur (images), soient proviennent de champs internes à la classe, hérité de la classe mère, qui elle même va aller les lires dans des textes standards (textes de la table T100, ICF_SYSTEM_LOGIN), ou les générer dynamiquement (textes de copyright)
Les modifications demandées concernant les images (définies statiquement) ou le texte de copyright (généré dans la classe mère), nous avons donc décidé de modifier l'initialisation des propriétés. Pour ce faire nous avons créé une sous-classe de CL_SRA_LOGIN, ZCL_SRA_LOGIN, et avons redéfini la méthode INIT_DEFAULT_PROPERTIES.
Cette méthode commence par appeler la méthode de la classe mère, fin de s'assurer que toutes les propriété standards sont associées à une valeur.
*call super implementation
CALL METHOD super->init_default_properties
CALL METHOD super->init_default_properties
EXPORTING
iv_context = iv_context.
*company Logo
set_property( iv_name = 'img_logo'
iv_value = '/sap/public/bc/ui2/logon/img/logo_new.jpg' ).
set_property( iv_name = 'img_logo_width'
iv_value = '64' ).
* background
set_property( iv_name = 'img_background'
iv_value = '/sap/public/bc/ui2/logon/img/background_new.jpg' ).
set_property( iv_name = 'img_background_ie8'
iv_value = '/sap/public/bc/ui2/logon/img/background_new.jpg' ).
set_property( iv_name = 'img_background_mobile'
iv_value = '/sap/public/bc/ui2/logon/img/background_new.jpg' ).
set_property( iv_name = 'img_background_mobile_land'
iv_value = '/sap/public/bc/ui2/logon/img/background_new.jpg' ).
Le texte de copyright a aussi été changé, en générant un nouveau texte, sur le même modèle que celui de SAP :
CONCATENATE `Copyright © `
sy-datum+0(4)
`Nom Société. Tous droits réservés.`
INTO lv_txt_copyright. "#EC NOTEXT
set_property( iv_name = 'label_copyright'
iv_value = lv_txt_copyright ).
Une fois cette classe activé, nous avons pu l'utiliser pour remplacer la classe de logon standard affectée au service :

Dans notre cas les images référencées dans l’écran de login doivent être stockées sur l'instance SAP. Pour ce faire on utilise la transcation SE80, et on place les images dans le repository MIME.
Remarque : la position dans le template standard du logo de la compagnie implique que le logo, une fois redimensionné (comme défini par la propriété "img_logo_width") fasse au plus 50 pixels.
Au final, une connexion à l'application montre notre nouvel écran :
No comments:
Post a Comment