15 June 2015

Modification simple du logon "Page Builder"

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
   EXPORTING 
      iv_context = iv_context.

A partir de la on peut écraser les propriétés qui nous intéresse avec nos propres valeurs. Nous avons donc changé les images utilisées pour le fond d’écran, ainsi que le logo de la société.

*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