Je vous conseille d’aller lire cet article à sa nouvelle adresse : Ajouter des boutons sur un écran de sélection

SSCRFIELDS : Boutons dans un écran de sélection

SSCRFIELDS : Boutons dans un écran de sélection


Dans un écran SAP, pour gérer des boutons au niveau de la barre de fonction (toolbar), vous devez créer un statut de surface (set pf-status et SE41) et y définir vos boutons. Sans être vraiment long, l’opération est assez fastidieuse, surtout si l’on doit documenter chaque objet créé ;-)

Dans un écran de sélection, il existe une astuce afin de gérer jusqu’à 5 boutons dans la toolbar sans avoir à déclarer de statut de surface, simplement avec un peu d’ABAP. C’est la structure SSCRFIELDS qui va nous permettre ce petit tour de magie.

  1. Tout d’abord déclarer la structure sscrfields.
    TABLES sscrfields.
  2. Activer les boutons (de 1 à 5)
    SELECTION-SCREEN FUNCTION KEY 1.
    SELECTION-SCREEN FUNCTION KEY 2.
  3. Renseigner le texte du bouton (il est possible d’y mettre un icone)
    INITIALIZATION.
      sscrfields-functxt_01 = 'Fonction 1'.
      sscrfields-functxt_02 = '@01@Fonction 2'.
  4. Capturer l’action dans le PAI de l’écran de sélection
    AT SELECTION-SCREEN.
      CASE sy-ucomm.
        WHEN 'FC01'.
          MESSAGE i000(38) WITH 'Fonction 1 !'.
        WHEN 'FC02'.
          CLEAR sy-ucomm.
          MESSAGE e000(38) WITH 'Fonction 2 !'.
      ENDCASE.

C’est tout !
Autre avantage, les boutons étant intégralement déclarés dans le code, un simple copier-coller vous permet de réutiliser votre code ailleurs ;-)

La preuve par cet exemple complet :

REPORT zkunnr.

* declaration
TABLES sscrfields.

* Ecran de sélection
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
SELECTION-SCREEN BEGIN OF BLOCK one WITH FRAME TITLE text-t01.
PARAMETERS p_kunnr LIKE kna1-kunnr.
SELECTION-SCREEN END OF BLOCK one.

INITIALIZATION.
  sscrfields-functxt_01 = 'Fonction 1'.
  sscrfields-functxt_02 = '@01@Fonction 2'.

AT SELECTION-SCREEN.
  CASE sy-ucomm.
    WHEN 'FC01'.
      MESSAGE i000(38) WITH 'Fonction 1 !'.
    WHEN 'FC02'.
      CLEAR sy-ucomm.
      MESSAGE e000(38) WITH 'Fonction 2 !'.
  ENDCASE.

START-OF-SELECTION.
  WRITE p_kunnr.

Tags: , , ,