Logique de flux Dynpro ABAP : L

Catégorie
ABAP-Statements
Publié
Auteur
Johannes

Remarque importante préalable : L’instruction FIELD n’est pas une commande dans le code ABAP procédural ou orienté objet standard (comme dans un REPORT, une CLASS ou un FUNCTION MODULE). Au lieu de cela, FIELD est un mot-clé utilisé exclusivement dans la logique de flux (Flow Logic) des Dynpros (écrans) créés avec le Screen Painter (transaction SE51).

L’instruction FIELD a les tâches principales suivantes dans la logique de flux Dynpro :

  1. Contrôle du transport de données (PAI) : Dans le bloc d’événement PROCESS AFTER INPUT (PAI), FIELD détermine quand le contenu d’un champ spécifique de l’écran est transporté vers la variable globale de même nom dans le programme ABAP.
  2. Appel conditionnel de modules (PAI) : Également dans le bloc PAI, FIELD contrôle quand certains modules ABAP (MODULE ... ON INPUT ou MODULE ... ON REQUEST) sont appelés pour la vérification ou le traitement des champs.
  3. Connexion des aides aux champs (POV, POH) : Dans les blocs d’événements PROCESS ON VALUE-REQUEST (POV) et PROCESS ON HELP-REQUEST (POH), FIELD associe un champ d’écran à un module ABAP qui fournit la fonctionnalité F4 (aide aux valeurs) ou F1 (aide au champ).

Distinction avec FIELD-SYMBOLS

Attention à ne pas confondre : L’instruction FIELD dans la logique de flux Dynpro n’a rien à voir avec FIELD-SYMBOLS dans le code ABAP. FIELD-SYMBOLS sont des placeholders ou pointeurs vers des zones mémoire dans le programme ABAP. L’instruction FIELD se réfère toujours à un champ d’entrée/sortie concret sur un masque d’écran.

Contexte

  • Où : Logique de flux d’un Dynpro (Screen Painter, SE51)
  • Quand : Principalement dans le bloc PROCESS AFTER INPUT (PAI), mais aussi dans PROCESS ON VALUE-REQUEST (POV) pour l’aide F4 et PROCESS ON HELP-REQUEST (POH) pour l’aide F1.

Syntaxe et fonctionnement

1. Dans PROCESS AFTER INPUT (PAI)

Syntaxe :

PROCESS AFTER INPUT.
...
FIELD <screen_field_name>.
MODULE <pai_module_name> [ON INPUT | ON REQUEST].
...
" Ou avec CHAIN pour les vérifications de groupe :
CHAIN.
FIELD <field1>.
FIELD <field2>.
MODULE <module_for_field2> ON INPUT. " Module uniquement pour le champ 2
ENDCHAIN.
MODULE <module_for_chain> [ON CHAIN-INPUT | ON CHAIN-REQUEST]. " Module pour la chaîne
...

Fonctionnement

  • Transport de données : Lorsque le traitement PAI atteint la ligne FIELD <screen_field_name>., le contenu de ce champ de l’écran n’est transféré dans la variable globale de même nom du programme ABAP que si l’utilisateur a modifié la valeur depuis le dernier envoi de l’écran (PBO).
  • Appel de module : Un MODULE <pai_module_name> ON INPUT. ou MODULE <pai_module_name> ON REQUEST. qui suit directement n’est exécuté que si le contenu du champ a été transporté (donc modifié par l’utilisateur).
    • ON INPUT : Appel si le champ était prêt pour la saisie et a été modifié.
    • ON REQUEST : Appel uniquement si le champ a été modifié ET que l’utilisateur a déclenché une action qui demande explicitement PAI (par ex. Entrée, Sauvegarder - pas seulement Tab).
  • Ordre : La séquence des instructions FIELD détermine dans quel ordre les champs sont potentiellement transportés et leurs modules appelés.
  • CHAIN ... ENDCHAIN : Regroupe plusieurs instructions FIELD. Un MODULE ... ON CHAIN-INPUT ou ON CHAIN-REQUEST est appelé si au moins un champ de la CHAIN a été modifié. Ceci est utile pour les vérifications qui dépendent de plusieurs champs et pour le traitement des erreurs commun (avec MESSAGE E... dans la chaîne, tous les champs de la chaîne restent prêts pour la saisie).

2. Dans PROCESS ON VALUE-REQUEST (POV) pour l’aide F4

  • Syntaxe :
PROCESS ON VALUE-REQUEST.
FIELD <screen_field_name> MODULE <f4_module_name>.

Fonctionnement : Lorsque l’utilisateur positionne le curseur sur <screen_field_name> et appuie sur F4, le module ABAP <f4_module_name> est appelé. Ce module est responsable de l’affichage de l’aide aux valeurs (par ex. en appelant des modules fonctionnels comme F4IF_INT_TABLE_VALUE_REQUEST).

3. Dans PROCESS ON HELP-REQUEST (POH) pour l’aide F1

Syntaxe :

PROCESS ON HELP-REQUEST.
FIELD <screen_field_name> MODULE <f1_module_name>.

Fonctionnement : Lorsque l’utilisateur positionne le curseur sur <screen_field_name> et appuie sur F1, le module ABAP <f1_module_name> est appelé. Ce module peut ensuite afficher des informations d’aide contextuelles (par ex. en appelant HELP_OBJECT_SHOW).

Exemples (conceptuels)

1. Validation PAI simple

*&---------------------------------------------------------------------*
*& Dynpro 0100 Flow Logic
*&---------------------------------------------------------------------*
PROCESS AFTER INPUT.
*-- Lire le champ KUNDENNUMMER depuis l'écran (si modifié) et vérifier
FIELD KUNDENNUMMER.
MODULE VALIDATE_KUNDE ON INPUT.
*&---------------------------------------------------------------------*
*& Module VALIDATE_KUNDE INPUT
*&---------------------------------------------------------------------*
MODULE VALIDATE_KUNDE INPUT.
* La variable globale KUNDENNUMMER a été remplie si l'utilisateur a saisi
IF KUNDENNUMMER IS INITIAL.
MESSAGE E001(ZMSG) WITH 'Veuillez saisir le numéro client !'.
ELSE.
SELECT SINGLE KUNNR FROM KNA1 INTO KUNDENNUMMER WHERE KUNNR = KUNDENNUMMER.
IF SY-SUBRC <> 0.
MESSAGE E002(ZMSG) WITH 'Le numéro client n''existe pas'.
ENDIF.
ENDIF.
ENDMODULE.

2. PAI avec CHAIN

PROCESS AFTER INPUT.
CHAIN.
FIELD FLUGDATUM_VON.
FIELD FLUGDATUM_BIS.
MODULE CHECK_DATUMSRANGE ON CHAIN-INPUT.
ENDCHAIN.
MODULE CHECK_DATUMSRANGE INPUT.
* FLUGDATUM_VON et FLUGDATUM_BIS ont été remplis si l'un a été modifié
IF FLUGDATUM_BIS < FLUGDATUM_VON.
MESSAGE E003(ZMSG) WITH 'La date Fin doit être après la date Début'.
ENDIF.
ENDMODULE.

3. Connecter l’aide F4 (POV)

PROCESS ON VALUE-REQUEST.
FIELD CARRID MODULE F4_FOR_CARRID.
MODULE F4_FOR_CARRID INPUT.
* Ici le code pour appeler l'aide aux valeurs pour les compagnies aériennes (table SCARR)
* par ex. avec F4IF_INT_TABLE_VALUE_REQUEST ou F4IF_FIELD_VALUE_REQUEST
ENDMODULE.

Remarques importantes

  • L’instruction FIELD est fondamentale pour le contrôle de la programmation Dynpro classique.
  • Sa compréhension est essentielle pour travailler avec les programmes module pool et les applications SAP classiques.
  • Dans les technologies UI modernes comme Web Dynpro ABAP ou SAP Fiori (avec SAPUI5), il n’y a pas de logique de flux Dynpro et donc pas d’instruction FIELD sous cette forme. Là, l’échange de données et la validation sont réalisés via d’autres concepts comme le Data Binding et le Event Handling.