Test

Disponible uniquement sur Etudier
  • Pages : 13 (3101 mots )
  • Téléchargement(s) : 0
  • Publié le : 22 avril 2011
Lire le document complet
Aperçu du document
[ABAP] Écran de sélection (partie 2/2)
Bonjour à toi cher lecteur. Voici donc mon deuxième tutoriel pour sap-integration.net et il a pour but d'être la continuité de la partie 1 écrit par Jérome Fortias (alias jfo). Les thèmes abordés dans ce tutoriel seront beaucoup plus poussés que dans la partie 1 car nous verront comment rendre une écran de sélection "vivant", c'est à dire de pouvoirconditionner l'affichage des composants selon les actions faites à l'écran. Donc si ça t'intéresses et que t'es prêt, alors passons à la suite. Avant toute chose, on va commencer par se faire un écran de sélection donc on créé un programme, qui sera ZMODIF_SCREEN pour moi, et on va y placer des composants.

*&---------------------------------------------------------------------* *& Report ZMODIF_SCREEN*& *&---------------------------------------------------------------------* *& Auteur : Celdrøn *& *&---------------------------------------------------------------------* REPORT zmodif_screen.

* Données pour écran de sélection. DATA : vbeln TYPE vbak-vbeln, auart TYPE vbak-auart, pstyv TYPE vbap-pstyv, * BLOCK 1 SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1. SELECT-OPTIONS :so_vbeln FOR vbeln. SELECT-OPTIONS : so_auart FOR auart. SELECTION-SCREEN END OF BLOCK bl1. * BLOCK 2 SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-bl2. PARAMETERS : cb1 TYPE c AS CHECKBOX USER-COMMAND cb1. SELECT-OPTIONS : so_pstyv FOR pstyv MODIF ID bl2. PARAMETERS : p_file TYPE fileextern MODIF ID bl2. SELECTION-SCREEN END OF BLOCK bl2. Ce qui nous donne à l'affichage.

Voilà, etmaintenant je suis grillé car certains vont se rendre compte au premier coup d'œil qu'en ce moment je bosse sur SD. ^_^ Alors si tu te demandes comment j'ai eu les descriptions de champs sans les mettre dans le code, il suffit d'aller dans Saut=>"Éléments de texte"=>"Texte de sélection" et de cocher la case de sélection qui signifie que la description de zone fait référence à celle du DDIC(Dictionnaire de donnée). Et pour la case à cocher (Checkbox) sur l'écran, et bien elle va tout simplement nous servir à conditionner les zones du Bloque 2 (BL2). A noter la présence du USER-COMMAND fcode qui est nécessaire pour indiquer qu'une action faite sur ce composant déclenche un traitement, sans ça les actions faites sur le composants ne seront pas détéctés. Sinon pour les deux éléments où j'airajouté MODIF ID, c'est juste pour montrer, à titre d'exemple, que l'on peut regrouper des zones. C'est utile pour ne mettre qu'une condition plutôt que de conditionner selon chaque zone. L'ID se trouvera dans la zone SCREEN-GROUP1. Exemple : IF screen-group1 = 'BL2' * Traitement ENDIF. Plutôt que : IF screen-name = 'SO_PSTYV' OR screen-name = 'P_FILE'. * Traitement ENDIF. A noter pour finir quej'ai un principe de base qui est d'utiliser juste la mémoire dont j'ai besoin c'est pour cela que je n'utilise pas l'instruction TABLES qui déclare une structure qui ne sera surement pas utilisé mais que je déclare des DATA typé qui me servent pour les SELECT-OPTIONS.

1 Rendre des zones non-saisissables
Disons que les zones seront saisissables si la case à cocher est coché et non saisissablessi elle ne l'est pas. Il faut donc conditionner les zones avant l'affichage de l'écran et cela se passe dans l'évènement : AT SELECTION-SCREEN OUTPUT. * PBO de l'écran de sélection AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF cb1 IS INITIAL. IF screen-group1 = 'BL2'. screen-input = 0. ENDIF. "screen-name = 'P_FILE'. ELSE. IF screen-group1 = 'BL2'. screen-input = 1. ENDIF. "screen-group1 = 'BL2'.ENDIF. "cb1 IS INITIAL. MODIFY SCREEN. ENDLOOP. "AT SCREEN.

Et normalement :

et on doit revenir à l'écran initial quand on décoche la case à cocher.

2 Rendre des zones invisibles
Pour ça, ce sera pareil que la partie précédente, c'est à dire que tout se passe dans le PBO de l'écran de sélection. * PBO de l'écran de sélection AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF cb1 IS...
tracking img