Tutoriel sur les sous-écrans ABAP : appeler le sous-écran dans SAP
⚡ Résumé intelligent
Les sous-écrans ABAP permettent d'intégrer un écran dans une zone d'un autre écran lors de l'exécution, ainsi que sa logique de flux. Cette page explique les zones de sous-écrans, l'instruction CALL SUBSCREEN en PBO et PAI, le transfert de données et les restrictions pouvant entraîner des erreurs d'exécution.

Qu'est-ce qu'un sous-écran dans SAP ABAP?
Avant de lire ce tutoriel, assurez-vous de savoir ce qu'est un Programme de dialogue est.
- Un sous-écran est un écran indépendant qui s'affiche dans une zone d'un autre écran (« principal »).
- Les sous-écrans vous permettent d'intégrer un écran dans un autre au moment de l'exécution. Vous pouvez inclure plusieurs sous-écrans sur l'écran principal.
- Le terme sous-écran s'applique à la fois à l'écran que vous intégrez et à la zone de l'écran principal dans laquelle vous le placez. Ce didacticiel concerne les zones de sous-écran. Les écrans réels créés via la transaction SE51 sont appelés écrans de sous-écran s'ils sont définis dans les attributs d'écran.
- Lorsque vous utilisez un sous-écran, la logique de flux de l'écran intégré est également intégrée dans la logique de flux de l'écran principal. Par conséquent, utiliser des sous-écrans sur des écrans revient à utiliser des inclusions dans Programmes ABAP.
Pour utiliser un sous-écran, vous devez suivre trois étapes simples
- Définir la ou les zones de sous-écran sur un écran
- Définir des écrans de sous-écran appropriés
- Incluez l’écran du sous-écran dans la zone du sous-écran.
En outre, vous devez ajuster le cadre du sous-écran et de l'écran principal. Vous devez le nommer dans le champ Nom du champ.
De plus, vous devez également ajuster les champs du sous-écran pour les faire apparaître sur l'écran principal. Dans le cas où le sous-écran est défini comme étant plus grand que la zone disponible dans l'écran principal, seule la partie du sous-écran qui correspond à la zone disponible sera visible. La zone est toujours mesurée à partir du coin supérieur gauche de l'écran. Par conséquent, vous devez faire preuve de prudence lors de la définition des zones de sous-écran et de la création de sous-écrans.
SOUS-ÉCRAN D'APPEL
EXEMPLE
Par exemple, ici, nous avons défini deux zones de sous-écran sur l'écran principal et avons attaché deux sous-écrans différents aux zones correspondantes. Chaque fois que l'écran principal est appelé, le PBO de l'écran principal est appelé. Mais avant l'affichage, les PBO de chaque écran attachés aux zones de sous-écran sur l'écran principal sont également appelés.
La capture d'écran montre l'écran principal avec les deux zones de sous-écran remplies par deux sous-écrans distincts.
Vous pouvez inclure un écran de sous-écran à l'aide de l'instruction CALL SUBSCREEN dans la logique de flux de l'écran principal.
Appel du sous-écran dans PBO
Pour inclure un écran de sous-écran dans la zone de sous-écran de l'écran principal et appeler sa logique de flux PBO, utilisez l'instruction suivante dans l'événement PBO de l'écran principal :
PROCESS BEFORE OUTPUT. CALL SUBSCREEN <area> INCLUDING [<prog>] <dynp>.
Cette instruction attribue à l'écran secondaire un numéro à la zone de sous-écran appelée . Vous pouvez également spécifier le programme dans lequel l'écran du sous-écran est défini (facultatif). Si vous ne spécifiez pas explicitement le programme, le système recherche l'écran secondaire dans le même programme ABAP que le programme principal. S'il ne trouve pas d'écran de sous-écran correspondant, une erreur d'exécution se produit. La logique de flux PBO de l'écran secondaire est également incluse au même endroit. Celui-ci peut appeler les modules PBO du programme ABAP dans lequel l'écran sous-écran est défini. À la fin du sous-écran PBO, les champs globaux du programme sont transmis à tous les champs d'écran portant le même nom dans l'écran sous-écran. La logique de flux PBO de l'écran secondaire peut elle-même inclure d'autres sous-écrans.
Le nom de la zone de sous-écran doivent être saisis directement sans virgules. Vous pouvez spécifier les noms et soit sous forme de littéraux, soit de variables. Si vous utilisez des variables, vous devez déclarer et remplir des variables portant le même nom dans le programme ABAP. Le numéro d'écran doit comporter 4 caractères. Si vous n'attribuez pas de sous-écran à une zone, celle-ci reste vide.
Appel du sous-écran dans PAI
Pour appeler la logique de flux PAI de l'écran secondaire, utilisez l'instruction suivante dans la logique de flux PAI de l'écran principal :
PROCESS AFTER INPUT. CALL SUBSCREEN <area>.
Cette instruction inclut la logique de flux PAI de l'écran de sous-écran inclus dans la zone de sous-écran lors de l'événement du DPB. Celui-ci peut faire appel aux modules PAI du programme ABAP dans lequel le sous-écran est défini. Les données sont transportées entre des champs portant le même nom dans l'écran secondaire et le programme ABAP, soit lorsque l'événement PAI est déclenché, soit au niveau des instructions FIELD correspondantes dans la logique de flux PAI de l'écran secondaire.
Comment créer et intégrer un sous-écran
Les trois étapes mentionnées précédemment sont réalisées dans l'écran Painter et dans la logique de flux de l'écran principal. La séquence ci-dessous crée un écran principal avec une seule zone de sous-écran.
- Créer la zone du sous-écran : Ouvrez l'écran principal, par exemple l'écran 100, dans l'écran Painter (SE51). Choisissez le Sous-écran Sélectionnez l'élément dans la barre d'éléments, dessinez-le sur la mise en page et saisissez un nom, par exemple SUB_AREA, dans le champ Nom. Ce nom sera utilisé ultérieurement dans l'instruction CALL SUBSCREEN.
- Créer l'écran secondaire : Créez un deuxième écran, par exemple l'écran 110, et définissez son type d'écran sur Sous-écran dans les attributs. Un sous-écran ne possède ni champ de code OK ni statut d'interface graphique propre.
- Placez les champs : Dessinez les champs de saisie sur l'écran 110. Gardez la mise en page à l'intérieur de la taille de la zone du sous-écran, car seule la partie qui tient est affichée, mesurée à partir du coin supérieur gauche.
- Déclarer les données globales : Placez les champs dans l'inclusion TOP du pool de modules, afin que l'écran principal et le sous-écran lisent les mêmes variables globales.
- Appelez le sous-écran : Ajoutez CALL SUBSCREEN au PBO et au PAI de l'écran principal, comme indiqué ci-dessous.
- Activer et tester : Activez les écrans et le programme, puis lancez la transaction. La zone du sous-écran est occupée par l'écran 110, et ses modules s'exécutent dans le flux logique de l'écran 100.
* Flow logic of the main screen 100 PROCESS BEFORE OUTPUT. MODULE status_0100. CALL SUBSCREEN sub_area INCLUDING 'SAPMZDEMO' '0110'. PROCESS AFTER INPUT. CALL SUBSCREEN sub_area. MODULE user_command_0100.
Astuce : Stockez le numéro d'écran dans une variable globale plutôt que dans une valeur littérale lorsque la zone doit afficher un sous-écran différent selon l'entrée utilisateur. La variable doit porter le même nom dans le programme et dans l'instruction CALL SUBSCREEN.
Points à retenir
- Les noms des éléments des sous-écrans au sein d'un écran doivent être uniques
- Vous ne devriez pas avoir OK_CODE ou FCODE attaché au sous-écran. Le OK_CODE de l'écran principal lui-même est OK_CODE du sous-écran
- Les sous-écrans ne peuvent pas contenir de modules de dialogue contenant SET TITLEBAR, SET PF-STATUS, SET SCREEN, LEAVE SCREEN ou LEAVE TO SCREEN. Cela provoquera une erreur d’exécution.
- Vous devez l'appeler dans la logique de flux (PBO et PAI) de l'écran principal.
- CALL SUBSCREEN n'est pas autorisé dans les instructions CHAIN..ENDCHAIN et LOOP ENDLOOP
- Impossible d'avoir un module AT EXIT-COMMAND
- Les champs que vous utilisez sont les champs globaux. Ils doivent être déclarés en haut include
- Si vous utilisez des sous-écrans d'un autre programme de dialogue le transfert de données n'aura lieu que si vous ajoutez un code spécifique.
⚠️ Attention : Placer CALL SUBSCREEN à l'intérieur de CHAIN … ENDCHAIN ou à l'intérieur d'une boucle d'écran produit une erreur de syntaxe, et appeler un numéro d'écran qui n'existe pas produit une erreur d'exécution lors du premier affichage.

