Vous êtes sur la page 1sur 437

BC400 Introduction à ABAP Workbench :

concept et outils
BC400

R/3 System
Release 46B
17.08.2000

0
BC400 Introduction à ABAP Workbench : concept
et outils

BC400
Introduction à
ABAP Workbench :
Concept et outils
ã SAP AG 1999
ã SAP AG 1999

n Système R/3
n Version 4.6A
n Novembre 1999
n Numéro d'article 5003 4914

(C) SAP AG BC400 0-1


Copyright

Copyright 2000 SAP AG. Tous droits réservés.


Toute représentation ou reproduction de ce manuel, même
partielle, par quelque procédé et à quelque fin que ce soit, est
interdite sans l’autorisation écrite explicite de SAP AG. Les
informations contenues dans ce manuel peuvent être modifiées
ou complétées sans préavis.

Tous droits réservés.

ã SAP AG 1999

n Marques déposées :
n Microsoft ®, Windows ®, NT ®, PowerPoint ®, WinWord ®, Excel ®, Project ®, SQL-Server ®,
Multimedia Viewer ®, Video for Windows ®, Internet Explorer ®, NetShow ®, et HTML Help ®
sont des marques déposées de Microsoft Corporation.
n Lotus ScreenCam ® est une marque déposée de Lotus Development Corporation.
n Vivo ® et VivoActive ® sont des marques déposées de RealNetworks, Inc.
n ARIS Toolset ® est une marque déposée de IDS Prof. Scheer GmbH, Saarbruck
n Adobe ® et Acrobat ® sont des marques déposées de Adobe Systems Inc.
n TouchSend Index ® est une marque déposée de TouchSend Corporation.
n Visio ® est une marque déposée de Visio Corporation.
n IBM ®, OS/2 ®, DB2/6000 ® et AIX ® sont des marques déposées de IBM Corporation.
n Indeo ® est une marque déposée de Intel Corporation.
n Netscape Navigator ®, et Netscape Communicator ® sont des marques déposées de Netscape
Communications, Inc.
n OSF/Motif ® est une marque déposée de Open Software Foundation.
n ORACLE ® est une marque déposée de ORACLE Corporation, California, USA.
n INFORMIX ®-OnLine for SAP est une marque déposée de Informix Software Incorporated.
n UNIX ® et X/Open ® sont des marques déposées de SCO Santa Cruz Operation.
n ADABAS ® est une marque déposée de Software AG
n ABAP/4, InterSAP, RIVA, R/2, R/3, R/3 Retail, SAP (Word), SAPaccess, SAPfile, SAPfind,
SAPmail, SAPoffice, SAPscript, SAPtime, SAPtronic, SAP-EDI, SAP EarlyWatch, SAP
ArchiveLink, SAP Business Workflow, et ALE/WEB sont des marques ou marques déposées de
(C) SAP AG BC400 0-2
SAP AG. Le logo SAP et tous les autres produits, services, logos, ou noms de marques sont
également des marques ou marques déposées de SAP AG.
n Les autres produits, services, logos, ou noms de marques sont des marques ou marques déposées de
leurs propriétaires respectifs.

(C) SAP AG BC400 0-3


ABAP Workbench
Niveau 2 Niveau 3
BC402 3 jours BC414 2 jours
Techniques de BC490 3 jours
Programmation des
programmation ABAP mises à jour de la base Analyses des
de données performances
BC404 3 jours
ABAP
ABAP Objects - BC415 2 jours
Programmation orientée ABAP Workbench -
objets dans R/3 Interfaces de
BC405 3 jours communication
BC425 3 jours
Reporting dans ABAP
Workbench Extensions et
modifications
BC410 5 jours
BC412 2 jours
Programmation interactive Programmation de
BC400 5 jours BC420 5 jours dialogues à l'aide des
Introduction à ABAP Workbench - contrôles EnjoySAP
ABAP Workbench Interface de données BC440 5 jours
BC430 2 jours Développement des
Dictionnaire de données applications sur Internet
MBC40 2 jours
ABAP
Gestion des projets de BC460 3 jours Cours supplémentaires
développement ABAP Edition et impression de recommandés : Business
Process Technologies
formulaires dans CA925, CA926, CA927
SAPscripts BC095 (Technologie
CA610 2 jours d'intégration) BC619 (ALE),
CATT - Test Workbench et BC620, BC621
Computer Aided Test Tool
ã SAP AG 1999

(C) SAP AG BC400 0-4


Connaissances requises

l Connaissances en programmation
l Cours de formation SAP 50 : technologie de base

ã SAP AG 1999

(C) SAP AG BC400 0-5


À qui s'adresse ce cours ?

l Participants :
n Membres du projet
l Durée : 5 jours

ã SAP AG 1999

Notes aux participants


n Les supports de cours ne constituent pas un programme d'auto-formation. Ils sont conçus
uniquement dans le but de compléter les explications fournies par l'animateur. Un espace est
laissé à votre disposition sur ces supports pour vous permettre de prendre des notes.
n Vous n'aurez probablement pas le temps pendant le cours de terminer tous les exercices. Les
exercices fournissent des exemples complémentaires aux sujets discutés pendant ce cours. Vous
pouvez également les utiliser comme aide pour développer vos connaissances après la fin du cours.

(C) SAP AG BC400 0-6


Concept et outils de ABAP Workbench : contenu

l Objectif global du cours


l Détail des objectifs
l Table des matières
l Synoptique
l Scénario de gestion
l Introduction au cours

ã SAP AG 1999

(C) SAP AG BC400 1-1


Objectif du cours

À la fin de ce cours, vous serez en mesure :


l de comprendre les diverses applications d'ABAP
Workbench, notamment
n les différentes méthodes qui facilitent le dialogue
avec l'utilisateur et
n les modalités de dialogue avec la base de données

ã SAP AG 1999

(C) SAP AG BC400 1-2


Objectifs du cours

À la fin de ce cours, vous serez en mesure :

l de créer un programme ABAP comprenant des


dialogues utilisateur et des dialogues base de
données
l de décrire divers objets de développement (objets
du Repository) et leur mode d'emploi
l de créer des exemples simples d'objets du
Repository introduits dans le cours à l'aide des
outils adéquats d'ABAP Workbench appropriés à
chaque cas

ã SAP AG 1999

(C) SAP AG BC400 1-3


Table des matières

Chapitre 1 Introduction
Chapitre 2 Déroulement du programme dans un programme ABAP
Chapitre 3 Introduction à ABAP Workbench
Chapitre 4 Instructions et déclarations de données ABAP
Chapitre 5 Dialogues base de données I
(lecture à partir de la base de données)
Chapitre 6 Modularisation interne du programme
Chapitre 7 Dialogues utilisateur : liste
Chapitre 8 Dialogues utilisateur : écran de sélection
Chapitre 9 Dialogues utilisateur : écran
Chapitre 10 Interfaces

ã SAP AG 1999

(C) SAP AG BC400 1-4


Table des matières

Chapitre 11 Réutiliser les composantes


Chapitre 12 Dialogues base de données II
(Modifier la base de données)
Chapitre 13 Logistique logicielle et comparaison logicielle

Exercices
Solutions
Annexes

ã SAP AG 1999

(C) SAP AG BC400 1-5


Scénario de gestion

Aéroport de départ

Ce cours vous permettra de développer


plusieurs programmes destinés à assister Destination
des agences de voyage.
Certains de leurs besoins types nécessitent :
l d'établir des connexions de vol à des dates précises
Ville de départ l de procéder à des réservations sur des vols
spécifiques
l de déterminer des informations complémentaires de
vol, comme
l le prix Ville de destination
l la capacité.

ã SAP AG 1999

(C) SAP AG BC400 1-6


Déroulement du programme dans un programme ABAP

Contenu :
l Architecture client / serveur
l Programme type avec affichage de données sous forme
de liste
l Programme type avec affichage de données sur un
écran
l Quelles sont les composantes du programme ABAP
développées et dans quels chapitres ?

ã SAP AG 1999

(C) SAP AG BC400 2-1


Synthèse

Architecture
Architecture client
client // serveur
serveur

Programme
Programme type
type avec
avec affichage
affichage de
de données
données sous
sous forme
forme de
de liste
liste

Programme
Programme type
type avec
avec affichage
affichage de
de données
données sur
sur un
un écran
écran

Quelles
Quelles sont
sont les
les composantes
composantes du
du programme
programme ABAP
ABAP développées
développées

et
et dans
dans quels
quels chapitres
chapitres ??

ã SAP AG 1999

(C) SAP AG BC400 2-2


Architecture client / serveur

Présentation
Serveur
Niveau SAPGUI SAPGUI SAPGUI SAPGUI SAPGUI SAPGUI

Répartiteur Répartiteur
Application
Serveur
Niveau Processus Processus Processus Processus
de travail de travail de travail de travail

Processus Processus Processus Processus


Base de de travail de travail de travail de travail
données

ã SAP AG 1999

n Le système R/3 a une architecture logicielle modulaire qui suit les principes orientés logiciel
client/serveur.
n Le système R/3 affecte des présentations, des applications, et des enregistrements de données à
différents ordinateurs. Il sert de base à l'évolutivité du système R/3.
n Le niveau le plus bas est le niveau base de données. Les données y sont gérées grâce à un système
de gestion de base de données relationnelle (RDBMS). Outre les données de base et les données de
mouvement, les programmes et les métadonnées qui décrivent le système R/3 y sont également
stockés et gérés.
n Les programmes ABAP, qui comprennent aussi bien les applications fournies par SAP que celles que
vous développez vous-même, sont exécutés au niveau application. Ils exploitent des données
appelées au niveau base de données et y stockent de nouvelles informations.
n Le troisième niveau est le niveau présentation (SAPGUI). Ce niveau comprend l'interface
utilisateur par lequel un utilisateur final peut accéder à une application, entrer de nouvelles données
et recevoir les résultats d'un processus de travail.
n La répartition technique du logiciel est indépendante de sa localisation physique dans le système.
Dans le sens vertical, il est possible d'installer tous les niveaux les uns au-dessus des autres sur un
seul ordinateur ou sur des ordinateurs distincts. Dans le sens horizontal, les composantes des niveaux
fonctionnel et présentation peuvent être réparties sur un nombre x de stations. La distribution
horizontale des composantes des bases de données dépend toutefois du type de base installé.

(C) SAP AG BC400 2-3


Vue orientée utilisateur

Présentation
Serveur
Niveau

Processus de travail

Application Programme ABAP


Serveur
Niveau

Base de
données

ã SAP AG 1999

n Ce graphique peut être simplifié pour la plupart des sujets discutés pendant le cours. L'interaction
entre les programmes ABAP et leurs utilisateurs sera notre principal intérêt pendant ce cours. La
compréhension de la conception d'un programme ABAP passe avant celle des processus exacts
impliqués dans la répartition d'utilisateurs sur un serveur d'application. Nous allons donc travailler
avec un graphique simplifié qui n'indique pas formellement le répartiteur et le processus de travail.
Certaines diapositives seront, cependant, améliorées pour inclure ces détails lorsqu'ils s'appliquent à
la programmation ABAP.
n Les programmes ABAP sont traitées sur le serveur d'application. La conception de dialogues
utilisateur et de dialogues base de données est dès lors de grande importance lors de l'écriture de
programmes applicatifs.

(C) SAP AG BC400 2-4


Déroulement du programme : que voit l'utilisateur

Écran

Boîte noire
Écran de sélection

Liste

ã SAP AG 1999
Temps

n L'utilisateur s'intéresse principalement à la façon dont l'opération se déroule et dont les données
peuvent être introduites et affichées depuis l'opération. Les détails techniques, comme savoir si un
seul programme est exécuté ou si de multiples programmes sont appelés de manière implicite, ou les
différences techniques entre les types d'écran affichés, sont généralement moins importants pour
l'utilisateur. L'utilisateur ne doit pas nécessairement connaître le déroulement précis du programme
ABAP sur le serveur d'application. Le système R/3 comme les serveurs d'application et la base de
données sont représentés par une boîte noire pour l'utilisateur.
n Il existe, cependant, trois types d'écran techniquement distincts (écrans, écrans de sélection, et listes)
qui offrent différents services à l'utilisateur. Le travail du développeur est de déterminer quel type de
dialogue utilisateur convient le mieux aux besoins de l'utilisateur.

(C) SAP AG BC400 2-5


Interaction entre les niveaux du serveur

Lancement Programme ABAP


du programme
Bloc de
traitement
ABAP

Table de
base de
données
Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999

n Lorsque l'utilisateur exécute une action utilisateur (en choisissant, par exemple, Entrée, une touche
de fonction, une fonction du menu ou un bouton de commande), le contrôle passe du serveur de
présentation au serveur d'application et certaines parties du programme ABAP sont exécutées. Si un
dialogue utilisateur supplémentaire est lancé lors du programme ABAP, le système envoie un écran
au serveur de présentation et le contrôle est à nouveau transféré au serveur de présentation.

(C) SAP AG BC400 2-6


Synthèse

Architecture
Architecture client
client // serveur
serveur

Programme
Programme type
type avec
avec affichage
affichage de
de données
données sous
sous forme
forme de
de liste
liste

Programme
Programme type
type avec
avec affichage
affichage de
de données
données sur
sur un
un écran
écran

Quelles
Quelles composantes
composantes des
des programmes
programmes ABAP
ABAP sont
sont développées
développées

dans
dans quels
quels chapitres
chapitres ??

ã SAP AG 1999

n Dans cette partie du chapitre, l'utilisateur a choisi de lancer un programme là où un identificateur de


compagnie aérienne peut être introduit sur l'écran de sélection initial. Le programme utilise par la
suite ces informations pour retrouver le "nom complet de la compagnie aérienne" et la "devise locale
de la compagnie aérienne" dans la base de données et les affiche sous forme de liste pour l'utilisateur.

(C) SAP AG BC400 2-7


Programme type 1 : lancement du programme

Lancement Repository
du programme

Table de
base de
données

ã SAP AG 1999 Temps

n Chaque fois qu'un utilisateur se connecte au système, un écran s'affiche. À partir de cet écran,
l'utilisateur peut démarrer un programme en utilisant son chemin de menus.

(C) SAP AG BC400 2-8


Le système charge le contexte du programme

Lancement Programme ABAP


du programme
Repository
Écran de sélection

Objets de données

Table de
base de
données
Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n Si l'utilisateur a lancé un programme avec une action utilisateur, le contexte du programme est alors
chargé sur le serveur d'application. Le contexte du programme contient des zones de mémoire pour
les variables et les objets de données complexes, les informations d'écrans pour dialogues utilisateur
et les blocs de traitement ABAP. Le runtime system reçoit les informations de programme du
Repository, qui représente une partie spécifique de la base de données.
n Le programme type a un écran de sélection comme dialogue utilisateur, une variable et une structure
comme objets de données et un bloc de traitement ABAP. La liste utilisée pour afficher les données
est créée de manière dynamique au moment de l'exécution.
n Le déroulement ultérieur du programme est contrôlé par le runtime system ABAP.

(C) SAP AG BC400 2-9


Le runtime system envoie l'écran de sélection

Lancement Programme ABAP


du programme

Objets de données

Table de
base de
données
Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n Comme le programme contient un écran de sélection, le runtime system ABAP l'envoie au serveur
de présentation au début du traitement du programme. Le serveur de présentation contrôle le
déroulement du programme aussi longtemps que l'utilisateur remplit les zones de saisie.
n Les écrans de sélection permettent aux utilisateurs d'entrer des critères de sélection requis par le
programme.

(C) SAP AG BC400 2-10


Saisies d'écran de sélection insérées dans des
objets de données

Lancement Programme ABAP


du programme

Objets de données

Table de
base de
données
Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n Dès que l'utilisateur a terminé d'introduire des données dans l'écran de sélection, il ou elle peut lancer
un traitement supplémentaire en sélectionnant "Exécuter". Chaque saisie de données de l'écran de
sélection est automatiquement placée dans son objet de données correspondant du programme et le
runtime system ABAP reprend le contrôle du traitement. Notre programme type contient un seul bloc
de traitement ABAP. Le runtime system déclenche un traitement séquentiel de ce bloc de traitement
ABAP.
n Si les entrées effectuées par l'utilisateur ne possèdent pas le type correct, un message d'erreur
apparaît alors automatiquement. L'utilisateur doit corriger ses entrées.

(C) SAP AG BC400 2-11


Le programme demande un enregistrement de
données de la base de données

Lancement Programme ABAP


du programme

Objets de données

Table de
base de
données
Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n Le bloc de traitement ABAP possède un accès à la base de données en mode lecture qui y a été
programmé. Le programme transmet également à la base de données les informations indiquant à
quel tableau de la base de données elle doit accéder et quelle ligne du tableau elle doit lire.

(C) SAP AG BC400 2-12


La base de données renvoie un enregistrement de
données au programme

Lancement Programme ABAP


du programme

Objets de données

Table de
base de
données
Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n La base de données renvoie au programme l'enregistrement de données demandé et le runtime


system s'assure que ces données sont stockées dans les objets de données appropriés. Normalement,
une structure est la zone cible pendant l'accès à un enregistrement individuel. La structure contient
des variables pour toutes les zones requises par la base de données.

(C) SAP AG BC400 2-13


Le runtime system envoie une liste

Lancement Programme ABAP


du programme

Objets de données

Table de
base de
données
Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n La structure d'affichage de la liste suivante a aussi été programmée dans le bloc de traitement. Une
fois tous les traitements effectués, le runtime system envoie l'écran de synthèse au serveur de
présentation.

(C) SAP AG BC400 2-14


Synthèse

Architecture
Architecture client
client // serveur
serveur

Programme
Programme type
type avec
avec affichage
affichage de
de données
données sous
sous forme
forme de
de liste
liste

Programme
Programme type
type avec
avec affichage
affichage de
de données
données sur
sur un
un écran
écran

Quelles
Quelles sont
sont les
les composantes
composantes du
du programme
programme ABAP
ABAP développées
développées

et
et dans
dans quels
quels chapitres
chapitres ??

ã SAP AG 1999

n Dans cette partie du chapitre, l'utilisateur lance un deuxième programme type là où un identificateur
de compagnie aérienne peut être introduit sur l'écran de sélection initial. Ce programme utilise par la
suite ces saisies d'information sur l'écran de sélection pour retrouver le "nom complet de la
compagnie aérienne" et la "devise locale de la compagnie aérienne" dans la base de données et les
afficher sur un écran pour l'utilisateur.

(C) SAP AG BC400 2-15


Programme type 2 : lancement du programme

Lancement Programme ABAP


du programme
Objets de données Repository

Table de
base de
données
Écran Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n Lorsque l'utilisateur lance le programme, le contexte du programme est d'abord chargé. Pourtant,
notre programme type comporte cette fois trois blocs de traitement, un écran de sélection, un écran,
et une variable et deux structures pour objets de données.

(C) SAP AG BC400 2-16


Le runtime system ABAP envoie un écran

Lancement Programme ABAP


du programme Objets de données

Table de
base de
données
Écran Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n Comme le programme contient un écran de sélection, le runtime system ABAP l'envoie au serveur
de présentation au début du traitement du programme.

(C) SAP AG BC400 2-17


L'utilisateur quitte l'écran de sélection

Lancement Programme ABAP


du programme Objets de données

Table de
base de
données
Écran Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n Dès que l'utilisateur a terminé d'introduire des données dans l'écran de sélection, il ou elle peut lancer
un traitement supplémentaire en sélectionnant "Exécuter". Chaque saisie de données de l'écran de
sélection est alors automatiquement placée dans son objet de données correspondant du programme
et le runtime system ABAP reprend le contrôle du traitement. Le runtime system lance alors un
traitement séquentiel du bloc de traitement ABAP qui suit l'écran de sélection.

(C) SAP AG BC400 2-18


Le programme demande un enregistrement de
données à la base de données

Lancement Programme ABAP


du programme Objets de données

Table de
base de
données
Écran Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n Le bloc de traitement ABAP possède un accès à la base de données en mode lecture qui y a été
programmé. Le programme transmet également à la base de données les informations indiquant à
quel tableau de la base de données elle doit accéder et quelle ligne du tableau elle doit lire.

(C) SAP AG BC400 2-19


La base de données renvoie l'enregistrement de données

Lancement Programme ABAP


du programme Objets de données

Table de
base de
données
Écran Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999 Temps

n La base de données renvoie au programme l'enregistrement de données demandé et le runtime


system s'assure que ces données sont stockées dans les objets de données appropriés. Normalement,
une structure est la zone cible pendant l'accès à un enregistrement individuel. La structure contient
des variables pour toutes les zones requises par la base de données.

(C) SAP AG BC400 2-20


Le programme appelle l'écran

Lancement Programme ABAP


du programme Objets de données

Table de
base de
données
Écran Bloc de
traitement
ABAP

Process
Before
Output

Runtime system ABAP

ã SAP AG 1999 Temps

n À ce stade, le bloc de traitement ABAP lance le traitement de l'écran. Cette étape est souvent
exprimée simplement par "Le programme appelle l'écran". Cependant, en réalité, chaque écran
possède son propre bloc de traitement qui est traité de manière séquentielle avant que le runtime
system envoie l'écran au serveur de présentation (Process Before Output). Ceci permet d'utiliser
l'écran de manière très flexible.

(C) SAP AG BC400 2-21


Le runtime system ABAP envoie l'écran de sélection

Lancement Programme ABAP


du programme Objets de données

Table de
base de
données
Écran Bloc de
traitement
ABAP

Process
Before
Output

Runtime system ABAP

ã SAP AG 1999 Temps

n Une fois le bloc de traitement de l'écran traité, le runtime system ABAP envoie l'écran au serveur de
présentation. Pendant ce traitement, les données sont transportées vers les zones de l'écran depuis
une structure qui sert d'interface à l'écran.

(C) SAP AG BC400 2-22


L'utilisateur exécute une action utilisateur

Lancement Programme ABAP


du programme Objets de données

Table de
base de
données
Écran Bloc de
traitement
ABAP

Process
Before
Output

Process
After
Input

Runtime system ABAP

ã SAP AG 1999 Temps

n Dès que l'utilisateur exécute une action utilisateur (en sélectionnant par exemple Entrée, une touche
de fonction, une fonction de menus ou un bouton de commande), le contrôle est repris par le système
de durée d'exécution du serveur d'application. Les zones de dynpro sont transportées vers la structure
qui sert d'interface à l'écran et un bloc de traitement spécial appartenant à l'écran est lancé. Ce bloc
de traitement est toujours traité immédiatemment après une action utilisateur (Process After Input).

(C) SAP AG BC400 2-23


Le traitement du bloc de traitement ABAP recommence

Lancement Programme ABAP


du programme Objets de données

Table de
base de
données
Écran Bloc de
traitement
ABAP

Process
Before
Output

Process
After
Input

Runtime system ABAP

ã SAP AG 1999 Temps

n Une fois que le bloc de traitement "Process After Input" traité, le programme type continue de traiter
le bloc de traitement ABAP qui appelait en premier lieu l'écran.

(C) SAP AG BC400 2-24


Synthèse

Architecture
Architecture client
client // serveur
serveur

Programme
Programme type
type avec
avec affichage
affichage de
de données
données sous
sous forme
forme de
de liste
liste

Programme
Programme type
type avec
avec affichage
affichage de
de données
données sur
sur un
un écran
écran

Quelles
Quelles sont
sont les
les composantes
composantes du
du programme
programme ABAP
ABAP développées
développées

et
et dans
dans quels
quels chapitres
chapitres ??

ã SAP AG 1999

(C) SAP AG BC400 2-25


Table des matières

Chapitre 1 Introduction
Chapitre 2 Déroulement du programme dans un programme ABAP
Chapitre 3 Introduction à ABAP Workbench
Chapitre 4 Instructions et déclarations de données ABAP
Chapitre 5 Dialogues base de données I
(lecture à partir de la base de données)
Chapitre 6 Modularisation interne du programme
Chapitre 7 Dialogues utilisateur : liste
Chapitre 8 Dialogues utilisateur : écran de sélection
Chapitre 9 Dialogues utilisateur : écran
Chapitre 10 Interfaces

ã SAP AG 1999

(C) SAP AG BC400 2-26


Table des matières

Chapitre 11 Réutiliser les composantes


Chapitre 12 Dialogues base de données II
(Modifier la base de données)
Chapitre 13 Logistique logicielle et comparaison logicielle

Exercices
Solutions
Annexes

ã SAP AG 1999

(C) SAP AG BC400 2-27


Introduction à ABAP Workbench

Contenu :
l Repository et Workbench
l Analyse d'un programme existant
l Premier projet : adapter une copie d'un programme
existant pour remplir des besoins spécifiques

ã SAP AG 1999

(C) SAP AG BC400 3-1


Introduction à ABAP Workbench : objectifs

À la fin de ce chapitre, vous serez en mesure :

l d'utiliser les différents types de navigation


disponibles d'ABAP Workbench pour analyser un
programme existant
l d'apporter de simples modifications aux
dialogues utilisateur d'un programme existant en
utilisant les outils Éditeur et Screen Painter ABAP

ã SAP AG 1999

(C) SAP AG BC400 3-2


Synthèse : Introduction à ABAP Workbench

Repository
Repository et
et Workbench
Workbench

Analyser
Analyser un
un programme
programme existant
existant

Premier
Premier projet
projet :: adapter
adapter un
un programme
programme existant
existant
àà des besoins spécifiques
des besoins spécifiques

ã SAP AG 1999

(C) SAP AG BC400 3-3


Repository R/3

Présentation
Serveur
Niveau

Application Programme ABAP


Serveur
Niveau

Indépendant du mandant Dépendant du mandant

Base de Repository Tables de customizing


données Tables applicatives

ã SAP AG 1999

n La base de données, comme le Repository, contient des tables de customizing et des tables
applicatives qui sont généralement dépendant mandant.
n Le Repository contient tous les objets de développement, par exemple, des programmes, des
définitions de tables de base de données et de types globaux. Les objets de développement sont par
conséquent aussi connus comme objets du Repository. Les objets du Repository ne sont pas
dépendant mandant.. Vous pouvez donc les visualiser et les utiliser pour tout mandant.

(C) SAP AG BC400 3-4


Structure du Repository

par BC400-00

FI HR MM

SD WM

MM MM
MM

Cust.

Classes de développement

Modules de fonction

Programmes

Tables

...

ã SAP AG 1999

n Tous les objets de développement créés avec les outils de développement de ABAP Workbench sont
classés comme objets du repository et sont stockés de manière centrale dans le Repository R/3..
n Le Repository R/3 est une partie spéciale de la base de données centrale du système SAP.
n Le Repository s'organise selon l'application. Chaque application est encore subdivisée de façon
logique en classes de développement.
n Les objets du Repository sont souvent composés de sous-objets qui sont eux-mêmes des objets du
Repository.
n Chaque objet du Repository doit être affecté à une classe de développement lors de sa création.
n Vous pouvez utiliser le système d'information du Repository pour chercher des objets du
Repository selon plusieurs critères.

(C) SAP AG BC400 3-5


Hiérarchie des applications SAP

SAP Hiérarchie des applications


+ CA Composantes inter-applications

+ AC Gestion comptable - Généralités

+ FI Comptabilité financière
...
Comptabilité financière 'système de base' FBAS
...

+ FI-GL Gestion comptable grand livre

+ FI-LC Consolidation
...

+ TR Trésorerie

+ CO Contrôle de gestion

+ ...

Composantes applicatives
Système d'information
Classe de développement
Sous-arbre sélectionné

ã SAP AG 1999

n Vous pouvez visualiser la structure du Repository dans la hiérarchie des applications. Vous pouvez
naviguer vers la hiérarchie des applications à partir de l'écran initial en utilisant Outils-> ABAP
Workbench -> Synthèse-> Hiérarchie des applications. (Transaction SE81).
n Les composantes applicatives sont affichées selon une arborescence de la hiérarchie des applications.
En développant une composante, vous affichez toutes les classes de développement qui sont
affectées à cette composante.
n Vous pouvez sélectionner un sous-arbre et naviguer à partir de la hiérarchie des applications vers le
système d'information du Repository. Le système collecte ensuite toutes les classes de
développement pour le sous-arbre sélectionné et les transfère vers le système d'information.

(C) SAP AG BC400 3-6


Système d'information du Repository

Système d'information du Repository


Business Engineering
Dictionnaire ABAP
Objets de base
Tables de base de données
Vues
Éléments de données
Structures
Types de table
...
Autres objets
Zones
Programmation
Générateur de modules de fonction
Bibliothèque de programmes
Environnement de programme
Sous-objets du programme
Objets ABAP
Bibliothèque de classes
Composantes de classes
Composantes d'interfaces
Envir.
ã SAP AG 1999

n Vous pouvez utiliser le système d'information du Repository pour chercher des objets spécifiques du
Repository. Des critères de recherche sont disponibles pour les différents types d'objets du
Repository.
n Vous pouvez naviguer vers le système d'information du Repository en utilisant
Ÿ Le bouton de commande Système d'information dans la hiérarchie des applications
Ÿ Le chemin de menus Outils -> ABAP Workbench -> Synthèse-> Système d'information

Ÿ Transaction SE84 dans la zone de commande.

(C) SAP AG BC400 3-7


Outils de ABAP Workbench

Débogueur
Screen Painter
Menu Painter Object
FI HR MM
Navigator
SD WM
MM
Cust. Dictionnaire
ABAP
Éditeur ABAP
Générateur de
modules de
fonction
Générateur de classes

ã SAP AG 1999

n ABAP Workbench contient différents outils pour le traitement d'objets du Repository. Ces outils
vous fournissent une large gamme d'assistance qui couvre l'ensemble du cycle de développement du
logiciel.
Les outils les plus importants à la création et à l'édition d'objets du Repository sont :
n Éditeur ABAP pour l'écriture et l'édition du code de programme
n Dictionnaire ABAP pour le traitement des définitions de tables de base de données et la
récupération de types globaux
n Menu Painter pour la conception d'interface utilisateur (barre de menus, barre d'outils standard,
barre d'outils d'application, allocation des touches de fonction)
(voir Interfaces)
n Screen Painter pour la conception d'écrans (programmes dynamiques) de dialogues utilisateur
n Générateur de modules de fonction pour l'affichage et le traitement de modules de fonction
(routines avec des interfaces définis qui sont disponibles dans tout le système)
n Générateur de classes pour l'affichage et le traitement des classes centrales
n Il existe deux manières différentes d'utiliser ces outils :
Ÿ Soit vous appelez chaque outil individuel et traitez les objets correspondants du Repository.
Vous devez ensuite appeler l'outil suivant pour la série d'objets suivante...
Ÿ Soit vous travaillez avec Object Navigator: Cette transaction vous fournit une synthèse sous
forme d'arborescence de tous
les objets d'une classe de développement ou d'un programme.

(C) SAP AG BC400 3-8


Structure d'écran dans Object Navigator

Fermer navigateur Afficher liste d'objets

Domaine pour l'affichage Domaine pour l'affichage ou


d'une liste d'objets le traitement d'un objet du Repository
sous la forme d'une
hiérarchie

Clic du bouton Clic du bouton


droit de la souris Menu contextuel droit de la souris Menu contextuel

La taille du domaine d'affichage peut être changée

ã SAP AG 1999

n L'écran d'Object Navigator est divisé en deux domaines :


Ÿ Un domaine pour l'affichage d'une liste d'objets comme une hiérarchie
Ÿ La fenêtre d'objets, dans laquelle les objets peuvent être affichés et traités.
n Vous pouvez masquer le domaine de hiérarchie en utilisant le bouton de commande "Fermer
navigateur".
n Vous pouvez afficher la liste d'objets pour l'objet actuellement affiché dans la fenêtre d'objets en
utilisant l'icône "Liste d'objets".
n Vous pouvez séletionner des fonctions du menu contextuel dans les deux domaines d'écran. Vous
pouvez uniquement sélectionner les fonctions qui correspondent à l'affichage ou le traitement de
l'objet sur lequel le curseur est positionné. Cliquez sur le bouton droit de la souris pour afficher le
menu contextuel. (Cliquez sur le bouton de gauche si vous avez paramétré votre souris pour les
gauchers).

(C) SAP AG BC400 3-9


Fonctions de navigation du domaine de hiérarchie

Hiérarchie des applications


classe de développement
Classe de développement
Programme
Groupe de fonctions
Classe
BC400
Objets locaux

Liste d'objets précédente


BC400
Types d'objets de programme Liste d'objets suivante
Objets du dictionnaire
Programmes Liste d'objets supérieure
SAPBC400WBD_GETTING_STA
SAPBC400WBT_GETTING_STA Favoris
Groupes de fonctions Ajouter
BC400
Classes Traiter
CL_BC400 Programmes
Historique
Actualiser liste d'objets

ã SAP AG 1999

n Les objets du Repository sont organisés dans la hiérarchie.


n Chaque composante applicative consiste en de multiples classes de développement.
n Chaque classe de développement peut contenir plusieurs types différents d'objets du Repository
:
programmes, groupes de fonctions, objets du dictionnaire ABAP, ...
n Chaque objet du Repository peut comporter différents types d'objets :
Les programmes peuvent contenir des données globales, des types, des zones, des évènements,
...
Les groupes de fonctions peuvent contenir des données globales, des modules de fonction, ...
n Vous pouvez introduire le type de la liste d'objets et le nom d'objets dans la partie supérieure du
domaine de hiérarchie. La liste d'objets est ensuite affichée dans le domaine de hiérarchie.
n Un double-clic sur un sous-objet de la liste d'objets affiche la liste d'objet pour l'objet sélectionné
dans le domaine de hiérarchie.
n Un double-clic sur un objet qui n'a pas de liste d'objets affiche cet objet dans la fenêtre d'objets.
n Vous pouvez utiliser les icônes pour naviguer en historique ou en hiérarchie entre les listes d'objets.
n Vous pouvez ajouter des listes d'objets que vous traitez fréquemment dans vos favoris.

(C) SAP AG BC400 3-10


Affichage des objets de programme dans la fenêtre d'objets

SAPBC400WBT_GETTING_STARTED
Types d'objets de programme
Structures du dictionnaire
SBC400_CARRIER Éditeur
Zones
PA_CAR Éditeur
WA_BC400
Événements
START-OF-SELECTION Éditeur
Écrans
0100 Screen Painter
1000

Navigation : un double-clic sur un objet de programme existant


Navigation:
lance l'outil Workbench correspondant dans la fenêtre d'objets
et vous amène à l'endroit correct de l'objet.

Navigation
Navigationforward : : si un objet n'existe pas encore, vous créez
forward
l'objet en double-cliquant sur son nom.
ã SAP AG 1999

n Vous pouvez utiliser le menu contextuel pour afficher des objets à partir d'une liste d'objets. Le
système sélectionne alors automatiquement l'outil adéquat pour le traitement de l'objet sélectionné.
n Si l'objet de la liste d'objets que vous souhaitez n'est pas disponible dans le système, vous pouvez le
créer en double-cliquant. Ce qui s'appelle navigation forward.

(C) SAP AG BC400 3-11


Analyse d'un programme existant

Repository
Repository et
et Workbench
Workbench

Analyse
Analyse d'un
d'un programme
programme existant
existant

Déterminer
Déterminer le
le périmètre
périmètre fonctionnel
fonctionnel :: exécuter
exécuter un
un programme
programme

Analyse
Analyse statistique
statistique :: liste
liste d'objets
d'objets

Analyse
Analyse dynamique
dynamique :: mode
mode débogage
débogage

Analyse
Analyse du
du code
code source
source

Premier
Premier projet
projet :: adapter
adapter un
un programme
programme existant
existant
àà des
des conditions
conditions exceptionnelles
exceptionnelles

ã SAP AG 1999

(C) SAP AG BC400 3-12


Déterminer le périmètre fonctionnel : exécuter un
programme

Écran de sélection Écran Liste


Compagnie aérienne
ID
Compagnie
AA American Airlines USD
aérienne Nom
Devise locale

Système
F1
Statut
Info techniques

Nom du programme
Nom d'écran Nom de zone
(= numéro de dynpro) Type de zone

ã SAP AG 1999

n Il existe plusieurs manières de démarrer un programme :


Ÿ Vous pouvez démarrer un programme à partir de la liste d'objets de Object Navigator en utilisant
le menu contextuel ou en utilisant l'icône "Test".
Ÿ Si le programme possède un code de transaction, vous pouvez également l'ajouter au menu. Vous
cliquez alors sur l'option du menu avec la souris.
Ÿ Vous pouvez ajouter des programmes à la liste des favoris sur l'écran initial. Les programmes
peuvent également devenir disponibles en utilisant les groupes d'activités de l'écran initial. Vous
sélectionnez ensuite le programme dans la hiérarchie de l'écran initial.
n Vous pouvez déterminer le périmètre fonctionnel en exécutant le programme.
n Quel que soit l'écran, vous pouvez accéder aux informations sur le nom du programme et le numéro
d'écran en utilisant Système -> Statut. Un écran de sélection standard a le numéro d'écran 1000.
n Vous pouvez accéder aux informations concernant le nom de zone et le type de zone de n'importe
quelle zone de l'écran en utilisant F1 -> Info. techniques.

(C) SAP AG BC400 3-13


Vue statique des objets de programme : liste d'objets

SAPBC400WBT_GETTING_STARTED
Types d'objets de programme
Structures du dictionnaire
SBC400_CARRIER
Zones
PA_CAR
WA_BC400
Événements
START-OF-SELECTION
Écrans
0100
1000

ã SAP AG 1999

n Vous pouvez afficher une synthèse des objets de programme en utilisant la liste d'objets du
programme dans Object Navigator.
n La hiérarchie ne montre que les types d'objets pour lesquels des objets existent.
n Vous pouvez afficher les objets dans la liste secondaire de Object Navigator en doucle-cliquant ou en
utilisant le menu contextuel.

(C) SAP AG BC400 3-14


Démarrage de programmes

SAPBC400WBT_GETTING_STARTED Clic sur le bouton droit


Types d'objets de programme
Structures du dictionnaire Exécuter
Traitement direct
Zones
PA_CAR
Débogage
WA_BC400
Événements
START-OF-SELECTION
Écrans
0100
1000
Includes

ã SAP AG 1999

n Si vous démarrez un programme à partir de la liste d'objets de Object Navigator en utilisant le menu
contextuel, vous avez deux options.
Ÿ Choisir Exécuter -> Direct pour exécuter le programme directement.
Ÿ Choisir Exécuter -> Débogage pour exécuter le programme en mode débogage.

(C) SAP AG BC400 3-15


Déterminer l'utilisation séquentielle d'objets de
programme : mode débogage
X
SAP
Débogueur ABAP
Point de surveillance ❁
chws

Zones
Programme principal ZJJ_KURS_000 Point d'arithmétique fixe
Pas
Code source de à pas ZJJ_FORMS $ 15 - 30 #

SELECT SINGLE * FROM scarr


INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
" IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100.
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.
Variante 1 - 4 $ Variante
wa_sbc400-carrid LH

SY-SUBRC 0 SY-TABIX 0 SY-DBCNT 1

BIN (1) (000) ds0025 INS


o
ã SAP AG 1999

n Le démarrage du programme en mode débogage vous permet d'exécuter le programme ligne par
ligne en utilisant l'icône "Pas à pas". Vous pouvez afficher jusqu'à huit variables. Afin de tracer les
valeurs des variables, entrez les noms de zone dans la zone de saisie de gauche. Vous pouvez
également voir cette entrée en double-cliquant sur le nom de zone du code affiché.

(C) SAP AG BC400 3-16


Points d'arrêt en mode débogage

X
SAP
Débogueur ABAP
Point de surveillance ❁
chws

Zones
Programme principal ZJJ_KURS_000 Point d'arithmétique fixe
Continuer
Code source de ZJJ_FORMS $ 15 - 30 #

"SELECT SINGLE * FROM scarr


INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
STOP CALL SCREEN 100.
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.
Variante 1 - 4 $ Variante
wa_sbc400-carrid LH

SY-SUBRC 0 SY-TABIX 0 SY-DBCNT 1

BIN (1) (000) ds0025 INS


o
ã SAP AG 1999

n Vous pouvez apposer un point d'arrêt en double-cliquant en face d'une ligne de code source en mode
débogage. Si vous cliquez sur l'icône "Continuer", le programme sera exécuté jusqu'à l'endroit où le
point d'arrêt suivant est défini.
n Vous pouvez trouver des informations relatives aux points d'arrêt dans le chapitre Instructions et
déclarations de données ABAP.

(C) SAP AG BC400 3-17


Syntaxe générale ABAP

TABLES sbc400_carrier.
DATA wa_sbc400 TYPE sbc400_carrier.
PARAMETERS pa_car TYPE scarr-carrid.

START-OF-SELECTION
START-OF-SELECTION.
SELECT SINGLE * FROM scarr
INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
IF sy-subrc = 0.
IF
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100.
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

WRITE wa_sbc400-carrid COLOR COL_KEY.


WRITE wa_sbc400-carrname.
WRITE wa_sbc400-currcode.
ENDIF.
ENDIF

Mot-clé Options (dépendantes du mot-clé) Point (termine toutes


ABAP les instructions ABAP)

ã SAP AG 1999

n Les programmes ABAP sont composés d'instructions individuelles.


n Chaque instruction se termine par un point.
n Le premier terme de l'instruction est appelé un mot-clé.
n Les mots doivent toujours être séparés d'au moins un espace.
n Vous pouvez indenter les instructions.
n Les instructions peuvent occuper plus d'une ligne.
n Vous pouvez avoir de multiples instructions sur une seule ligne.

(C) SAP AG BC400 3-18


Commentaires et chaîne d'instructions

START-OF-SELECTION.
* Read data record from database table SCARR Commentaire

SELECT SINGLE * FROM scarr


INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100. " Process screen 100 Commentaire
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

WRITE:/
WRITE: / wa_sbc400-carrid COLOR COL_KEY,, Chaîne d’instructions
wa_sbc400-carrname,,
wa_sbc400-currcode..
ENDIF.

ã SAP AG 1999

n Des instructions consécutives comportant des mots-clés initiaux identiques peuvent être
condensées dans une seule instruction en chaîne.
Ÿ Dans des instructions en chaîne, la partie initiale de l'instruction contenant le mot-clé doit être
suivie par un deux-points.
Ÿ Les éléments individuels qui suivent le deux-points doivent toujours être séparés par des virgules.
Ÿ Des espaces vides sont autorisés avant et après toute ponctuation (deux-points, virgules, points).
Ÿ N'oubliez pas que le système continue de considérer les parties individuelles d'une instruction en
chaîne comme des instructions complètes indépendantes l'une de l'autre.
n Il existe deux manières d'insérer des commentaires dans un programme :
Ÿ Un astérisque (*) dans la colonne 1 vous permet de désigner toute la ligne comme commentaire.
Ÿ Les guillemets (") placés au milieu d'une ligne désignent le reste de la ligne comme commentaire.

(C) SAP AG BC400 3-19


Navigation dans l'Éditeur

Définition de table de base de données


dans le dictionnaire ABAP Définition de structure
(ou de zone structurée)
Do
ub Do
le- ub
Cl le-
START-OF-SELECTION. i c Cl
SELECT SINGLE * FROM scarr scarr ic
INTO CORRESPONDING FIELDS OF wa_sbc400 wa_sbc400
WHERE carrid = pa_car.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100
100. Double-Clic Définition d'écran
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400. (dans Screen
Painter)

WRITE: / wa_sbc400-carrid COLOR COL_KEY, STOP


wa_sbc400-carrname,
wa_sbc400-currcode.

ENDIF.

ã SAP AG 1999

n Vous pouvez afficher des informations détaillées sur de simples objets dans l'Éditeur en double-
cliquant :
Ÿ Un double-clic sur le nom de la table de base de données affiche la définition d'une table de base
de données en utilisant le dictionnaire ABAP dans la fenêtre d'objets de Object Navigator.
Ÿ Un double-clic sur un nom de zone affiche la partie du code source du programme où l'objet de
données est défini.
Ÿ Un double-clic sur un numéro d'écran affiche l'écran en utilisant le Screen Painter dans la fenêtre
d'objets de Object Navigator.
n Utilisez la fonction Retour pour revenir sur l'affichage du code source du programme dans l'Éditeur.
n Vous pouvez également mettre un point d'arrêt dans n'importe quelle ligne du code source dans
l'Éditeur. Ensuite, démarrez le programme sans sélectionner le mode débogage. Le programme
s'exécutera alors jusqu'à l'endroit où le point d'arrêt est défini. À cet endroit, le mode débogage est
lancé.

(C) SAP AG BC400 3-20


Documentation mots-clés

Aide

i Aide de l'Éditeur
Synthèse ABAP
Terme ABAP WRITE
START-OF-SELECTION. Nouveautés ABAP
SELECT SINGLE * FROM scarr
ABAP Docu and Examples
INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100.
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

WRITE
WRITE: / wa_sbc400-carrid COLOR COL_KEY,
wa_sbc400-carrname,
wa_sbc400-currcode.
F1
ENDIF.

Documentation mots-clés

ã SAP AG 1999

n Plusieurs manières de naviguer dans la documentation mots-clés existent pour une instruction ABAP
:
Ÿ Pressez F1 sur le mot-clé et affichez la documentation relative à l'instruction sur laquelle le
curseur est positionné.
Ÿ L'icône Information affiche une boîte de dialogue qui vous offre plusieurs vues de la
documentation mots-clés.

(C) SAP AG BC400 3-21


Code source de programme type

TABLES sbc400_carrier.
DATA wa_sbc400 TYPE sbc400_carrier. 1
PARAMETERS pa_car TYPE scarr-carrid.

START-OF-SELECTION.
SELECT SINGLE * FROM scarr
INTO CORRESPONDING FIELDS OF wa_sbc400 2
WHERE carrid = pa_car.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100. 3
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

WRITE: / wa_sbc400-carrid COLOR COL_KEY,


wa_sbc400-carrname, 4
wa_sbc400-currcode.
ENDIF.

ã SAP AG 1999

n Si vous désirez des informations plus précises sur des parties du code source, vous pouvez analyser
le code source. Les diapositives suivantes expliquent les instructions les plus importantes du
programme type.

(C) SAP AG BC400 3-22


Objets de données et écrans de sélection

TABLES sbc400_carrier.
DATA wa_sbc400 TYPE sbc400_carrier. 1
PARAMETERS pa_car TYPE scarr-carrid.

Lorsque vous générez un programme en utilisant la fonction "Activer",


le système génère automatiquement un
écran de sélection d'un type de zone de saisie pa_car.

Lorsque vous exécutez un programme, toutes les variables nécessaires,


structures, et écrans de sélection sont créés.

Programme ABAP
sbc400_carrier
wa_sbc400 Objets de données

pa_car

ã SAP AG 1999

n Il existe plusieurs instructions que vous pouvez utiliser pour définir des objets de données.
Ÿ L'instruction TABLES se réfère toujours à un type global d'une structure plate qui est définie dans
le dictionnaire ABAP. Le type de structure pour l'objet de données du programme est tiré du
dictionnaire. Le nom de l'objet de données est identique au nom du type de structure. Ils sont
généralement utilisés comme un interface à l'écran.
Ÿ L'instruction DATA est généralement utilisée pour définir des objets de données locaux. Le type
d'objets de données est spécifié en utilisant l'option TYPE.
Ÿ L'instruction PARAMETERS définit non seulement un objet de données élémentaires, mais aussi
une zone de saisie sur l'écran de sélection standard qui est traité lors du lancement du programme.
n Lorsque vous activez un programme, une version de chargement interne est générée. Un écran de
sélection est généré à partir de l'instruction PARAMETERS. Lorsque le programme démarre, les
zones de mémoire deviennent disponibles pour les objets de données.
n Vous trouverez des informations complémentaires sur les objets de données dans le chapitre intitulé
Instructions et déclarations de données ABAP, ou dans la documentation mots-clés.

(C) SAP AG BC400 3-23


Dialogues de base de données 1 :

Programme ABAP
Objets de données
pa_car Table de
pa_car
base de
données
wa_sbc400
wa_sbc400
SCARR

Bloc de
traitement
ABAP

SELECT SINGLE * FROM scarr


Système d'exécution
INTO CORRESPONDING FIELDS ABAP
OF wa_sbc400 2
CARRID = pa_car.
WHERE carrid pa_car
IF sy-subrc = 0.
...

ã SAP AG 1999

n L'instruction SELECT s'assure que les données se lisent à partir de la base de données. Afin de lire
un enregistrement à partir d'une table de base de données, les informations suivantes doivent être
transférées dans la base de données :
Ÿ À partir de quelle table de base de données se lisent les données ? (clause FROM)
Ÿ Combien de lignes se lisent ? L'option SINGLE indique qu'une seule ligne se lit.
Ÿ Quelle ligne se lit ? La clause WHERE indique quelles colonnes de la table de base de données ont
quelles valeurs. Pour une instruction SELECT SINGLE, la condition doit être formulée de sorte
qu'une ligne soit spécifiée sans aucune ambiguité.

(C) SAP AG BC400 3-24


Dialogues de base de données 2 :

Programme ABAP
Objets de données
pa_car
pa_car Table de
base de
wa_sbc400
wa_sbc400 données
SCARR

Bloc de
traitement
ABAP

SELECT SINGLE * FROM scarr


INTO CORRESPONDING FIELDS OF wa_sbc400 2
WHERE carrid = pa_car.
IF sy-subrc = 0.
...

ã SAP AG 1999

n Les données fournies par la base de données sont transformées en objets de données locales. La
clause INTO spécifie les objets de données dans lesquels vous souhaitez copier les données. Dans cet
exemple, les données sont copiées dans les composantes du même nom dans la structure
wa_sbc400.

(C) SAP AG BC400 3-25


Traitement des écrans

Programme ABAP
Objets de données

sbc400_carrier

Bloc de traitement ABAP

Process CALL SCREEN 100. 3


Before
Output

Process
After
Input

Runtime system ABAP

ã SAP AG 1999 Temps

n L'instruction CALL SCREEN appelle un écran.


n Un écran doit être créé en utilisant l'outil Screen Painter.
n Un écran est un objet du Repository indépendant, mais qui appartient au programme.
n Vous pouvez définir des zones de saisie sur un écran qui se réfèrent au dictionnaire ABAP. Les
écrans exécutent automatiquement des contrôles de cohérence sur toutes les saisies et fournissent
tous les dialogues d'erreur qui s'avéreraient nécessaires. Par conséquent, les écrans ne sont pas que
des simples modèles pour introduire des données ; ils sont en fait des programmes dynamiques
(dynpros).
n L'instruction TABLES déclare un objet de structure qui sert d'interface à l'écran. Toutes les données
de cette structure s'insèrent automatiquement dans leurs zones d'écran correspondantes lorsque
l'écran est appelé par l'instruction CALL SCREEN. Les données introduites par l'utilisateur à l'écran
sont transférées vers leurs zones correspondantes du programme après chaque action utilisateur
(après avoir choisi Saisir, par exemple).

(C) SAP AG BC400 3-26


Création de listes

START-OF-SELECTION.
SELECT SINGLE * FROM scarr
INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100.
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

WRITE
WRITE: / wa_sbc400-carrid COLOR COL_KEY,
wa_sbc400-carrname, 4
wa_sbc400-currcode.
ENDIF.

ã SAP AG 1999

n ABAP contient des instructions (WRITE, SKIP, ULINE) qui vous permettent de créer une liste.
n Les instructions WRITE affichent le contenu de zone, formaté selon leur type de données, sous forme
de liste.
n Des instructions WRITE consécutives affichent des données dans la même ligne d'édition. Les
messages continuent sur la ligne suivante lorsque la première est remplie.
n Vous pouvez placer une information de positionnement devant chaque information à éditer. Ceci
vous permet de déterminer des passages à la page/ligne suivante (/), des longueurs d'édition (l) et
des débuts de colonnes (p). Vous trouverez des informations complémentaires sur les options
d'édition dans la documentation mots-clés sous WRITE.
n L'édition de liste peut être affichée en couleurs.
n La liste complète apparaît automatiquement à la fin du bloc de traitement.

(C) SAP AG BC400 3-27


Synthèse : Introduction à ABAP Workbench

Repository
Repository et
et Workbench
Workbench

Analyser
Analyser un
un programme
programme existant
existant

Premier
Premier projet
projet :: adapter
adapter un
un programme
programme existant
existant
àà des besoins spécifiques
des besoins spécifiques

ã SAP AG 1999

(C) SAP AG BC400 3-28


Premier projet :

Programme source
Compagnie aérienne
ID LH
Compagnie LH LH Lufthansa DEM
Nom LUFTHANSA
aérienne
Devise locale DEM

Copie adaptée :
Compagnie aérienne
ID LH
Compagnie LH LH Lufthansa DEM
Nom LUFTHANSA
aérienne
Devise locale DEM WALTERS

Utilisateur WALTERS

ã SAP AG 1999

n Le premier projet est d'étendre un programme existant. Comme aucune extension n'est autorisée dans
le programme et que les modifications sont à éviter, la première étape est de copier le programme et
ensuite de le modifier.
n Vous devez allouer à un projet du système les modifications aux programmes existants, exactement
comme vous le feriez pour créer des copies de programmes ou des nouveaux programmes. Par
conséquent, les diapositives suivantes s'occupent d'abord de savoir comment un projet est représenté
dans le système R/3.

(C) SAP AG BC400 3-29


Transporter des objets du Repository

Ordre de
modification

FI HR MM

FI HR MM
SD WM
MM SD WM
Cust. MM
Cust.

Système de développement
Système de production
ã SAP AG 1999

n Les projets sont toujours implémentés dans un système de développement et transportés ensuite vers
le système suivant. Un critère décisif pour la combinaison de projets est d'aillleurs de savoir quels
objets du Repository doivent être transportés ensemble en raison de leurs dépendances. Vous
trouverez des informations complémentaires sur l'organisation d'un projet dans le chapitre intitulé
Logistique logicielle et adaption logicielle.
n Les objets du Repository sont automatiquement liés aux systèmes de correction et de transport
lorsqu'ils sont affectés à une classe de développement transportable (pas $TMP).
n Une fois le développement terminé, les objets du Repository sont transportés dans les systèmes de
test ou systèmes de production au moyen de certains chemins prédéfinis.
n L'outil Workbench Organizer (WBO) de ABAP Workbench organise toutes les tâches de
développement appartenant aux objets du Repository.

(C) SAP AG BC400 3-30


Exemple de projet : cours BC400

Horaire : Lundi Mardi Mercredi Jeudi Vendredi

Chef de projet :
CARSON

Équipe :

CARSON

BC400-00

BC400-01

BC400-02

BC400-03

...

Activités des employés (ici : exercices) Fin du développement

ã SAP AG 1999

n Chaque projet requiert les informations suivantes :


Ÿ Nom du chef de projet ?
Ÿ Quel périmètre fonctionnel doit être couvert par l'objet ? Quels objets du Repository ont été
modifiés ou créés ?
Ÿ Quelle est la période du projet ?
Ÿ Noms des participants au projet ?
n À titre d'exemple, nous allons organiser le cours BC400 comme un projet.
Ÿ Le professeur est le chef de projet.
Ÿ Les programmes doivent être développés pour chaque sujet. (Il s'agit de programmes types du
professeur et d'exercices de groupes d'exercices)
Ÿ Ce projet doit être terminé vendredi à 15h.
Ÿ Les noms d'utilisateur des participants (dans ce cas, des groupes d'exercices) sont BC400-XX.

(C) SAP AG BC400 3-31


Représentation du projet dans Workbench Organizer

Chef de projet :
CARSON
Workbench Organizer : demandes
Équipe :
Ordres de modification de l'utilisateur BC400-00
CARSON Modifiable Chef de projet
Transportable
BC400-00 Numéro de la modification IT3K900051 CARSON
IT3K900052 CARSON
BC400-01 Numéro de membre d'équipe
(affecté par le système) IT3K900053 BC400-00

BC400-02 (Tâche) Source de rapport


ZBC400_00_FLIGHTLIST
BC400-03 Objets du Repository Programme ABAP
modifié ou créé
IT3K900054 BC400-01
par BC400-00
...
IT3K900055 BC400-02
IT3K900056 BC400-03
IT3K900057

ã SAP AG 1999

n Au début d'un projet de développement, le chef de projet doit créér un ordre de modification. Le
chef de projet affecte tous les membres d'équipe du projet à l'ordre de modification. Le Workbench
Organizer affecte un numéro de projet à l'ordre de modification (<sid>K9<nnnnn>. Exemple :
C11K900001). <sid>est le numéro de système.
n Ensuite, le Workbench Organizer (WBO) crée une tâche pour chaque employé affecté à l'ordre de
modification. Dorénavant, lorsqu'un employé alloue un objet du Repository à l'ordre de modification,
l'objet du Repository sera automatiquement répertorié dans la tâche de l'employé. Dès lors, tous les
objets du Repository sur lesquels un employé travaille pendant un programme de développement
sont collectés dans son dossier tâche.
n Lors de la modification d'un objet du Repository, un développeur l'affecte à l'ordre de modification.
Contrairement aux divisions fonctionnelles logiques qui séparent les classes de développement, les
ordres de modification sont liés au projet. Donc, bien qu'un programme appartienne toujours à une
seule classe de développement, il peut, à différents moments, appartenir à des ordres de modification
différents.

(C) SAP AG BC400 3-32


Compléter le processus de développement

Horaire : ... Jeudi Vendredi L'ordre est libéré Fin du


Contrôle de qualité de développement
Chef de projet :
l'ensemble du projet
CARSON Documentation du projet

Équipe :

CARSON

BC400-00

BC400-01

BC400-02

BC400-03

...Contrôle de qualité de tout le


Repository par BC400-00
Documentation de la tâche complète

La tâche est libérée


ã SAP AG 1999

n Lorsque le développement est terminé, le développeur effectue un dernier contrôle de qualité et


libère la tâche. Les objets et les blocages d'objets sont transférés de la tâche vers l'ordre de
modification. Cependant, tous les employés affectés à l'ordre de modification peuvent toujours
modifier l'objet car le Workbench Organizer créera automatiquement une nouvelle tâche si cela
s'avère nécessaire.
n Lorsque le projet est terminé, le chef de projet vérifie la cohérence de l'ordre et le chef de projet
effectue l'ordre de modification. Les blocages des objets de l'ordre sont libérés.
n Les objets du Repository sont ensuite exportés vers le répertoire central des transports.
n Les objets ne sont pas importés automatiquement dans le système cible. Par contre, l'administrateur
système utilise le programme de contrôle du transport tp au niveau du système d'exploitation.
Ensuite, le développeur vérifie le protocole d'importation.

(C) SAP AG BC400 3-33


Copie de programmes

Info techniques
Créer
Modifier Programme source SAPBC400WBT_GETTING_STARTED
Afficher
Contrôler Programme cible ZBC400_00_GETTING_STARTED
Activer
Exécuter
Copier
... Copier

Infos techniques

! Source
! Éléments de texte
! Documentation
Variantes
Interfaces
! Écrans
Includes

Copier Ordres (Organizer)


ã SAP AG 1999

n Les noms de programme commençant par Y ou Z, ou par SAPMZ ou SAPMY, sont réservés aux
développements clients. Vous pouvez également avoir un espace nom réservé aux développements
clients. Vous trouverez des informations complémentaires sur les espaces noms clients pour
plusieurs objets du Repository dans la bibliothèque SAP sous Composantes de base -> Sytème de
transport et de modification (BC-CTS) -> Espaces noms BC et conventions de noms.
n Vous pouvez copier un programme à partir de la liste d'objets d'une classe de développement ou un
programme. À cette fin, placez simplement votre curseur sur le nom du programme que vous désirez
copier et cliquez sur le bouton droit de la souris. Choisissez Copier. Le système affiche une boîte de
dialogue dans laquelle vous pouvez introduire un nouveau nom pour votre copie. La confirmation de
vos entrées en utilisant le bouton de commande adéquat de la barrre d'outils d'application permet au
système d'afficher une boîte de dialogue dans laquelle vous pouvez sélectionner les sous-objets que
vous désirez copier avec le programme. Donc, vous devez décider quels sous-objets vous désirez
copier avec le programme AVANT de commencer la procédure de copie. Après la confirmation de
ces entrées, le système affiche encore une autre boîte de dialogue dans laquelle vous pouvez
sauvegarder des objets du Repository.
n Si vous copiez un programme qui contient des includes, une autre boîte de dialogue est affichée
avant celle-ci, dans laquelle vous pouvez choisir quels includes vous désirez copier et leur attribuer
de nouveaux noms.

(C) SAP AG BC400 3-34


Sauvegarde de programmes

Créer une entrée du catalogue d'objets

Objet R3TR PROG ZBC400_00_GETTING_STARTED

Les nouveaux programmes


Attributs
doivent être affectés à
Classe de développement ZBC400_00 une classe de développement
Personne responsable BC400-00

Système original IT3


Langue originale DE

Objet local

ã SAP AG 1999

n Affectez le programme à une classe de développement, afin d'être en mesure de le sauvegarder.


Votre nom est automatiquement entré dans le système comme personne responsable de la nouvelle
copie du programme. Vérifiez si toutes les entrées sont correctes et ensuite choisissez Sauvegarder.

(C) SAP AG BC400 3-35


Affectation d'un ordre de modification

Workbench Organizer : ordres transportables

Source de rapport
ZBC400_00_GETTING_STARTED

Ordre

IT3K900051 Ordre de modification transportable


Exercices pour les participants du cours BC400 en date
du 8 mai 2000
Workbench Organizer : ordres transportables
Mes ordres
Double-clic
Modifier des ordres impliquant l'utilisateur BC400-0 sur le numéro
Modifiable de l'ordre
Transportable
IT3K900051 CARSON
IT3K900052 CARSON
IT3K900053 BC400-00
IT3K900054 BC400-01

ã SAP AG 1999

n Tous les objets du Repository qui sont créés ou modifiés doivent être affectés à l'ordre de
modification de leur projet correspondant. Pour ce cours de formation, le formateur a créé un ordre
de modification pour le projet "Exercices pour les participants du cours BC400 du 8 mai 2000".
Chaque groupe a sa tâche dans cet ordre de modification Affectez tous vos objets du Repository
(classes de développement, programmes, etc.) à cet ordre de modification.
n Vous pouvez afficher tous les ordres de modifications dans lesquels vous avez une tâche en utilisant
le bouton de commande "Ordres propres".
n Pour des informations complémentaires sur l'organisation du projet d'un point de vue de gestion de
projet (y compris créer des tâches), référez-vous au chapitre sur la logistique logicielle.

(C) SAP AG BC400 3-36


Adaptatation des désignations

Types d'objets du programme


Double-clic
Sélection d'objets

Nom du programme ZBC400_00_GETTING_STARTED

Programme ABAP : attributs de programme ...


...

Attributs Titres

Adapter titre
Attributs

Modifier la langue
originale
en langue de travail

ã SAP AG 1999

n Vous pouvez adapter les désignations (= titre) comme suit :


Ÿ Double-cliquez sur les types d'objets de programme dans la liste d'objets d'Object Navigator.
Ÿ Choisissez les attributs.
Ÿ Cliquez sur l'icône "Modifier".
Ÿ Si la langue originale du programme source n'est pas identique à la langue de travail, une boîte de
dialogue apparaît pour vous demander si vous désirez modifier le titre dans la langue originale ou
si vous désirez modifier la langue originale.
Ÿ Vous pouvez désormais adapter le titre.
n Le titre modifié apparaît sous forme de désignation à côté du nom du programme dans la liste
d'objets d'Object Navigator.

(C) SAP AG BC400 3-37


Adaptation du code source

START-OF-SELECTION.
SELECT SINGLE * FROM scarr
INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100.
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

WRITE: / wa_sbc400-carrid COLOR COL_KEY,


wa_sbc400-carrname,
wa_sbc400-currcode.
ULINE.
WRITE wa_sbc400-uname.
ENDIF.
Contrôle de syntaxe

ã SAP AG 1999

n Pour adapter le code source, naviguez dans l'Éditeur (menu contextuel).


n Pour adapter la liste, ajoutez une instruction ULINE et une instruction WRITE. Vous trouverez des
informations complémentaires sur ces instructions dans la documentation mots-clés.
n Vous pouvez exécuter un contrôle de syntaxe après avoir modifié le code source.

(C) SAP AG BC400 3-38


Modification des écrans

ZBC400_00_GETTING_STARTED
Types d'objets de programme
Structures du dictionnaire
Zones
Événements
Écrans
0100 Clic sur le bouton droit Modifier
1000

Mise en page

Compagnie aérienne
ID
sbc400_carrier
Nom

Devise locale

Utilisateur Zone de saisie et


descripteur de zone

ã SAP AG 1999

n Vous pouvez modifier un écran en utilisant le Screen Painter. Pour modifier la mise en page, utilisez
d'abord le menu contextuel de l'écran dans la liste d'objets pour naviguer vers le Screen Painter et
ensuite l'icône "Mise en page" pour naviguer vers l'éditeur graphique d'agencement d'écran.
n Celui-ci contient une icône pour créer des zones de saisie/sortie se référant aux types globaux. Entrez
un type de structure qui est défini dans le dictionnaire ABAP. Toutes les zones de ce type de
structure sont affichées pour sélection. Vous ne pouvez pas sélectionner les zones qui sont déjà
contenues dans l'écran. Ceci est indiqué par un petit cadenas à côté de la zone.
n L'outil d'affichage et de gestion des types globaux est appelé le dictionnaire ABAP. Vous pouvez
trouver des informations complémentaires sur les types globaux dans le chapitre Instructions et
déclarations de données ABAP.

(C) SAP AG BC400 3-39


Sauvegarde et activation

l Contrôle
Contrôle de syntaxe : un bouton de commande vous permet
d'effectuer un contrôle de la syntaxe.
l Sauvegarde de programmes : enregistrement temporaire : le
code est enregistré dans le Repository et reste visible dans
tout le système. Au moment de l'exécution, la version active
est lancée.
l Activation du programme : le programme est visible dans tout
le système après l'activation et vous pouvez l'exécuter
ultérieurement.
l Contrôle
Contrôle du programme étendu : implique des vérifications
plus complètes et peut uniquement être exécuté avec des
programmes déjà activés.

ã SAP AG 1999

n Un contrôle de syntaxe lancé à partir de l'Éditeur se rattache au contenu actuel de l'Éditeur.


n Dès que vous avez sauvegardé le programme, ce code source est visible dans tout le système. Vous
pouvez utiliser le menu contextuel pour exécuter un contrôle de syntaxe qui englobe toutes les
composantes du programme. Le lancement du programme à partir du menu contextuel de la liste
d'objets s'assure que la version active est lancée.
n Dès que vous avez activé le programme, la version active peut être exécutée dans tout le système.
n Vous pouvez exécuter un contrôle de programme étendu pour des programmes activés en utilisant le
menu contextuel ou l'option du menu. Ces contrôles sont considérablement plus étendus que le
contrôle de syntaxe.

(C) SAP AG BC400 3-40


Introduction à ABAP Workbench : résumé du chapitre

Vous êtes maintenant capable :


l d'utiliser les différents types de navigation
disponibles de ABAP Workbench pour analyser
un programme existant
l d'apporter de simples modifications aux dialogues
utilisateur d'un programme existant en utilisant
les outils Éditeur et Screen Painter ABAP

ã SAP AG 1999

(C) SAP AG BC400 3-41


Exercices

(C) SAP AG BC400 3-42


(C) SAP AG BC400 3-43
Chapitre : ABAP Workbench
Sujet : Analyser un programme

À la fin de ces exercices, vous serez en mesure :


• d’utiliser les fonctions de navigation pour examiner la structure d’un
programme

Le programme SAPBC400WBT_GETTING_STARTED contient un


écran de sélection qui permet à l’utilisateur d’introduire le code d’une
compagnie aérienne. Les coordonnées de la compagnie aérienne
apparaissent ainsi à l’écran. Lorsque l’utilisateur appuie sur Enter, les
données s’affichent sous forme de liste.
Naviguez à travers le code du programme et les autres composantes afin
de comprendre la structure et le déroulement du programme.

Programme : SAPBC400WBT_GETTING_STARTED

1-1 Ouvrez une liste d’objets pour la classe de développement BC400. Trouvez le
programme SAPBC400WBT_GETTING_STARTED, et ouvrez sa liste d’objets.
Tout au long de l’exercice, assurez-vous que vous restez en mode affichage.

1-2 Exécutez le programme pour comprendre comment il fonctionne. Une zone de


saisie apparaît sur l’écran de sélection.
1-2-1 Quelles informations devez-vous fournir au programme ? (Utilisez le bouton
aide F1 pour la zone de saisie)
1-2-2 Quelles valeurs pouvez-vous introduire ? (Utilisez l’aide à la saisie F4)
1-2-3 Quelles informations le programme fournit-il ?
1-2-4 Quels types de dialogues utilisateur le programme contient-il ? Trouvez le
numéro de l’écran de sélection et l’écran dynpro en sélectionnant Système
→ Statut.

(C) SAP AG BC400 3-44


1-2-5 Quels sont les noms des zones de saisie sur l’écran de sélection et des zones
de sortie sur l’écran ? Pour trouver les noms, utilisez le bouton d’aide F1
pour chaque zone et sélectionnez Infos techniques.

1-3 Utilisez la liste d’objets dans Object Navigator pour examiner le programme.
1-3-1 Quels objets de données trouvez-vous ? (Utilisez la liste d’objets du
programme) Où sont-ils définis ? (Utilisez la navigation) Où sont-ils
utilisés ? (Utilisez les cas d’emploi).
1-3-2 Quels objets de données du programme ABAP correspondent à la zone de
saisie de l’écran de sélection ? (Cherchez dans la liste d’objets un objet de
données comportant le même nom que la zone que vous avez découverte à
l’étape 1-2-5.)
1-3-3 Quelles instructions traite l’écran ? (Regardez dans le code source ou
utilisez un cas d’emploi pour le numéro d’écran.)
1-3-4 Naviguez jusqu’à l’écran, et ensuite jusqu’à la structure graphique. Cliquez
sur une zone de sortie. Dans l’Éditeur d’agencement graphique, où apparaît
le nom de zone que vous avez découvert à l’étape 1-2-5 ?

1-4 Naviguez jusqu’au code source du programme.


1-4-1 Quelle instruction forme la liste ? Ouvrez la documentation mots-clés pour
cette instruction. Comment créez-vous un renvoi à la ligne automatique ?
1-4-2 Quelle instruction est responsable du dialogue base de données ? À partir de
quelle table de la base de données se lisent les données ? Naviguez jusqu’à
la définition de la table de base de données. Quels types de colonnes se
trouvent dans la table ?
1-4-3 Une seule ligne est lue à partir de la table de base de données. Dans quel
objet de données se trouve l’information indiquant quelle ligne doit être
lue ? Quand se complète la variable comportant les informations sur la ligne
à lire de la base de données ?

(C) SAP AG BC400 3-45


Chapitre : ABAP Workbench
Sujet : Adapter un programme à des besoins spécifiques

À la fin de ces exercices, vous serez en mesure :


• de copier des programmes et les modifier en utilisant l’Éditeur et
Screen Painter ABAP ;
• d’utiliser le contrôle de syntaxe pour identifier de simples erreurs.

Programme : ZBC400_##_GETTING_STARTED
Modèle : SAPBC400WBT_GETTING_STARTED
Solution modèle : SAPBC400WBS_GETTING_STARTED

2-1 Copiez le programme SAPBC400WBT_GETTING_STARTED avec toutes ses


composantes vers ZBC400_##_GETTING STARTED et affectez-le à votre classe
de développement ZBC400_## et l'ordre de modification de votre projet,
"BC400…". (## est votre numéro de groupe.)

2-2 Complétez le programme comme suit :


2-2-1 Ajoutez l’instruction 'ULINE.' au programme et effectuez un contrôle de
syntaxe. Faites délibérément une erreur de syntaxe et utilisez le contrôle de
syntaxe pour la retrouver. Activez le programme et redémarrez-le. Quelles
sont les modifications ? Lancez le contrôle étendu du programme.
2-2-2 Modifiez le programme de sorte que des zones de saisie apparaissent à
l’écran pour le nom d’utilisateur, l’heure et la date. Naviguez jusqu’au
Screen Painter en double-cliquant sur le numéro d’écran. Ceci vous amène à
la logique d’exécution de l’écran. Vérifiez que l’éditeur graphique est activé
(Utilitaires →Options). Lancez l’éditeur graphique en sélectionnant le
bouton de commande adéquat de la barre d’outils d’application. Vérifiez
que vous êtes en mode modification. Définissez les zones supplémentaires
conformément au dictionnaire ABAP. Comme structure de référence,
utilisez SBC400_CARRIER et sélectionnez les zones UNAME, UZEIT et
DATUM. Activez l’écran.

(C) SAP AG BC400 3-46


2-3 Affichez les zones supplémentaires dans la liste. Utilisez l’instruction
WRITE. Affichez les données sur une nouvelle ligne, séparée des autres
zones par une ligne horizontale. À cet effet, utilisez les mots-clés ABAP
SKIP et ULINE. Vérifiez les erreurs de syntaxe de votre programme,
ensuite activez-le, et démarrez-le.

(C) SAP AG BC400 3-47


Solutions

Chapitre : ABAP Workbench


Sujet : Analyser un programme

1-2 Analyse par l’exécution d’un programme :


1-2-1 Vous devez ajouter le code d’une compagnie aérienne au programme. Ces
informations peuvent être affichées à partir de la zone de saisie en utilisant
F1.
1-2-2 Les valeurs autorisées ici dépendent du contenu de la table de base de
données SCARR. Vous pouvez afficher l’aide à la saisie depuis la zone de
saisie en utilisant F4.
1-2-3 Le programme affiche des informations détaillées sur la compagnie aérienne
sélectionnée. Ces informations s’affichent d’abord à l’écran et ensuite sous
forme de liste.
1-2-4 Le programme contient un écran de sélection comportant le numéro de
dynpro 1000, un écran numéro 100 et une liste.
1-2-5 Le nom de zone de la zone de saisie sur l’écran de sélection est pa_car et
les noms des zones de sortie sur l’écran sont sbc400_carrier-
carrid, sbc400_carrier-carrname et sbc400_carrier-
currcode. Vous pouvez afficher les noms de zone en utilisant F1 →
Infos techniques, ensuite regardez la boîte portant l’intitulé Description de
zone pour batch input.

1-3 Analyse avec la liste d’objets du programme.


1-3-1 Le programme a les structures sbc400_carrier et wa_sbc400, et
l’objet de données élémentaire pa_car.
1-3-2 La variable pa_car appartient à la zone de saisie du même nom.
1-3-3 L’instruction CALL SCREEN 100 lance Dynpro 100.
1-3-4 Le nom de zone apparaît dans une zone de saisie au-dessus du domaine
réservé à la structure d’écran.
1-4
1-4-1 La liste est structurée en utilisant l’instruction WRITE. Le symbole / placé
après l’instruction WRITE crée un renvoi à la ligne automatique.
1-4-2 L’instruction SELECT est responsable du dialogue base de données. Les
données se lisent à partir de la table de base de données SCARR. Le nom de
la table de base de données est spécifié dans la clause FROM de l’instruction
SELECT. La table de base de données a les zones MANDT, CARRID,
CARRNAME, CURRCODE et URL.
1-4-3 Les informations sur la ligne à lire se trouvent dans l’objet de données
pa_car. Il se trouve dans la clause WHERE de l’instruction SELECT. La

(C) SAP AG BC400 3-48


valeur de saisie de l’écran de sélection remplit automatiquement l’objet de
données pa_car dès que l’utilisateur sélectionne la fonction Exécuter sur
l’écran de sélection.

(C) SAP AG BC400 3-49


Chapitre : ABAP Workbench
Sujet : Adapter un programme à des conditions
exceptionnelles

Solution modèle SAPBC400WBS_GETTING_STARTED

*&--------------------------------------------------------------*
*& Report SAPBC400WBS_GETTING_STARTED *
*&--------------------------------------------------------------*

REPORT sapbc400wbs_getting_started .

TABLES: sbc400_carrier.
DATA: wa_sbc400 TYPE sbc400_carrier.
PARAMETERS: pa_car TYPE scarr-carrid.

START-OF-SELECTION
* Sélectionner toutes les zones d’un enregistrement de données depuis
la table de base de données SCARR.
SELECT SINGLE * FROM scarr INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
* Au moins un enregistrement peut être sélectionné.
IF sy-subrc = 0.
* Copier des zones avec les noms correspondants.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100.
* Recopier les zones avec les noms correspondants.
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

* Éditer les données dans la liste.


WRITE: / wa_sbc400-carrid COLOR COL_KEY,
wa_sbc400-carrname,
wa_sbc400-currcode.
* Ajouter une ligne vide.

(C) SAP AG BC400 3-50


SKIP.
* Ajouter une ligne horizontale.
ULINE.
* Éditer le nom de l'utilisateur, l'heure et la date sur la liste
WRITE: / wa_sbc400-uname,
wa_sbc400-uzeit,
wa_sbc400-datum.
ENDIF.

Dynpro 100:
Nouvelles zones sur dynpro 100 : SBC400_CARRIER-UNAME
SBC400_CARRIER-UZEIT
SBC400_CARRIER-DATUM

(C) SAP AG BC400 3-51


Instructions ABAP et déclarations de données

Contenu :
l Types
l Objets de données
n Objets de données élémentaires
n Structures
n Tables internes
l Attributs des instructions ABAP

ã SAP AG 1999

(C) SAP AG BC400 4-1


Instructions ABAP et déclarations de données :
objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l de décrire les différents types de données


différents et leur utilisation
l de définir des objets de données élémentaires,
des structures et des tables internes
l d'utiliser le mode débogage pour observer
comment les valeurs des objets de données
individuels changent lors du traitement
l de programmer plusieurs opérations importantes
impliquant des objets de données, et
l de trouver des informations sur les nombreux
codes retour utilisés par les instructions ABAP et
de les évaluer dans des programmes.
ã SAP AG 1999

(C) SAP AG BC400 4-2


L'architecture client/serveur R/3

Programme
ABAP

Code
Source Runtime
ABAP system
ABAP

ã SAP AG 1999

n Le contenu de ce chapitre se concentre sur la définition des objets de données et des instructions
ABAP déterminées.

(C) SAP AG BC400 4-3


Synthèse : types

Types
Types

Objets
Objets de
de données
données
données

Attributs
Attributs des
des instructions
instructions ABAP
ABAP

ã SAP AG 1999

(C) SAP AG BC400 4-4


Utiliser les types

Les types décrivent les attributs de :

Zones d'entrée/sortie
Paramètres d'interface
pour des fonctions/méthodes
Paramètres d'interface
Objets de données pour des sous-programmes

Programme
ABAP ce
er fa de
t e
Code In ul ion
d t
Source Mo onc
ABAP f
Interface
Fonction
Sous- fonctions
programmes

ã SAP AG 1999

n Les types décrivent les attributs


Ÿ des zones de saisie et de sortie sur les écrans,
Ÿ des objets de données
Ÿ des paramètres d'interface : les contrôles de types sont exécutés chaque fois qu'une fonction ou
qu'un sous-programme est appelé, en accord avec le type du paramètre d'interface. Des conflits de
type sont déjà identifiés pendant le processus d'édition et les erreurs de syntaxe appropriées
affichées.

(C) SAP AG BC400 4-5


Types de données locaux et généraux

Les types peuvent être définis de manière locale dans un programme


ou de manière centrale dans le dictionnaire

Types locaux :
Attributs techniques uniquement Types globaux dans
le dictionnaire ABAP
Programme Attributs techniques
ABAP et sémantiques
ce
erfa de
t
Code In ules on
i
Source od ct
M f on
ABAP Interface
Groupe de
Sous- fonctions
programme

ã SAP AG 1999

n Les types locaux sont utilisés dans des programmes


Ÿ si seuls des attributs techniques sont nécessaires et qu'aucun attribut sémantique n'est requis et
Ÿ si les types sont uniquement utilisés localement dans un programme.
n Types globaux ( = types du dictionnaire ABAP) sont utilisés
Ÿ si vous souhaitez utiliser les types de manière externe
(par exemple, pour définir les paramètres d'interface des fonctions générales ou les objets de
données du programme qui servent d'interface à la base de données ou au serveur de présentation),
Ÿ si vous souhaitez également des informations sémantiques (par exemple, sur les écrans avec des
zones de saisie et de sortie).
n Vous trouverez des informations complémentaires sur le stockage central des informations
sémantiques dans ce chapitre.

(C) SAP AG BC400 4-6


Utilisation des types élémentaires du dictionnaire

Descripteur de zone
Zone de saisie Élément de données : type technique
Descripteur de zone
Documentation de
Compagnie zones
aérienne (Aide F1)
F1 Aide à la recherche
(Aide F4)
Aide
Identificateur de la compagnie aérienne Nom abrégé
Cette zone contient l'identificateur de la compagnie aérienne

ID Compagnie aérienne
Aide d'applications Info techniques
AA American Airlines
AF Air France
BA British Airways
DL Delta Airlines
LH Lufthansa
Variable de zone de saisie
NU Japan Transocean Air.
QF Quantas Airways
SA South African Air.
SQ Singapore Airlines
UA United Airlines
ã SAP AG 1999

n Les types élémentaires du dictionnaire sont appelés éléments de données. Ils contiennent des
informations aussi bien sémantiques que techniques (type technique, longueur, nombre de
décimales).
n Un élément de données peut contenir les informations sémantiques suivantes :
Ÿ Descripteur de zone : ce texte apparaît sur les écrans et les écrans de sélection à gauche, juste à
côté des zones de saisie et de sortie. Un descripteur de zone peut avoir l'une des trois longueurs
possibles. Vous devez sélectionner l'un des différents descripteurs de zone lorsque vous créez un
écran.
Ÿ Documentation de zone : la documentation de zone fournit à l'utilisateur toutes les informations à
introduire dans la zone. L'utilisateur obtient la documentation de zone pour une zone de saisie ou
de sortie lorsque le curseur y est positionné en appuyant sur la touche de fonction F1.
Ÿ Aide à la recherche : un élément de données peut être lié à une aide à la recherche. Cette aide à la
recherche définit l'aide aux valeurs fournie par la touche de fonction F4 ou l'icône correspondante.

(C) SAP AG BC400 4-7


Recherche des types du dictionnaire ABAP 1

DATA wa_flight_occ TYPE sbc400focc

ic
Cl
le -
F1

ub
Do
Aide

Élément de données Type de structure


Infos techniques S_CARR_ID SBC400FOCC
DoZones types de zone
ub
Infos techniques le -
Cli
c
Données de zone CARRID S_CARR_ID

ic
CONNID
Cl
Structure SBC400_CARRIER bl
e- ...
Nom de zone CARRID
u
Do

Élément de S_CARR_ID
données

ã SAP AG 1999

n Vous trouverez des informations complémentaires sur les types élémentaires du dictionnaire ABAP .
Ÿ pour les zones d'écran : utilisez F1 -> Infos techniques ou double-cliquez sur la zone de sortie
suivant le label de l'élément de données.
Ÿ pour les types locaux de programmes ou des objets de données : double-cliquez sur la zone.
n Les types techniques et les domaines techniques peuvent être directement affectés aux éléments de
données. Si vous souhaitez des informations complémentaires sur d'autres éléments de données se
référant au même domaine, vous pouvez naviguer jusqu'au domaine à partir de l'élément de données
en double-cliquant sur son nom et en exécutant ensuite la fonction Cas d'emploi.

(C) SAP AG BC400 4-8


Recherche des types du dictionnaire ABAP 2

Hiérarchie des applications


Sélectionner sous-arbre
Système d'information
Système d'information du Repository
Business Engineering
Dictionnaire ABAP Système d'information du Repository : éléments de données
Objets de base
Tables de base de données
Vues
Éléments de données Sélections standard
Structures
Types de table Élément de données
Domaines Courte description
Autres objets Descripteur de zone
Zones
Programmation Type de données
Objets ABAP Longueur
Environnement
Classe de
développement

ã SAP AG 1999

n Vous pouvez rechercher des éléments de données en utilisant la hiérarchie des applications et le
système d'information du Repository.
Ÿ Dans la hiérarchie des applications, sélectionner les composantes à scanner.
Ÿ Allez dans le système d'information.
Ÿ Choisissez Dictionnaire ABAP --> Objets de base --> Éléments de données et réduisez la
recherche.
n Si vous allez dans le système d'information à partir de la hiérarchie des applications, les classes de
développement des composantes applicatives sélectionnées sont automatiquement sélectionnées.
n Vous pouvez également aller directement dans le système d'information. Si vous ne sélectionnez pas
de classe de développement, l'ensemble du repository est scanné.

(C) SAP AG BC400 4-9


Types de données locaux dans les programmes

Aide à la déclaration
de types de données locaux

F1
<type>
TYPES <user_defined_type> TYPE <type>.
Types:
Do
u bl
e-
Aide à la déclaration Cl
ic
de types de données locaux
Navigation vers des
F1 déclarations de types de
données locaux
DATA
DATA:<data_object> TYPE <type>.Double-Clic
TYPE <type> ou des déclarations de
types de données du
dictionnaire ABAP
F1

Documentation mots-clés
pour types intégrés

ã SAP AG 1999

n Lorsque vous définissez des types ou des variables simples, vous pouvez vous référer à un type
prédéfini. Pour des informations complémentaires, référez-vous à la documentation mots-clés sous
TYPES ou DONNÉES.
Ÿ C Caractère
Ÿ N Texte numérique
Ÿ D Date (YYYYMMDD)
Ÿ T Heure (HHMMSS)
Ÿ X Octet (heXadecimal)
Ÿ I Integer
Ÿ P Nombre packé
Ÿ F Virgule flottante
Ÿ STRING Chaîne de caractères
Ÿ XSTRING Chaîne d'octets (X String)

(C) SAP AG BC400 4-10


Synthèse : Objets de données

Types
Types

Objets
Objets de
de données
données
données

Objets
Objets de
de données
données élémentaires
données élémentaires
élémentaires

Structures
Structures

Tables
Tables internes
internes

Attributs
Attributs des
des instructions
instructions ABAP
ABAP

ã SAP AG 1999

(C) SAP AG BC400 4-11


Définition d'objets de données

<user-defined-type>.

DATA: <varname> TYPE

<ABAP-dictionary-type>.

DATA: <varname> LIKE <data-object>.

ã SAP AG 1999

n Affectez des types d'objets de données en référant votre objet soit à un type ABAP intégré, soit à un
type défini par l'utilisateur, ou encore à un objet du dictionnaire ABAP.
n Si une variable v2 se réfère à une variable v1 en utilisant l'option LIKE ( DATA v2 LIKE v1.
), v2 hérite alors son type de v1.

(C) SAP AG BC400 4-12


Synthèse : Objets de données élémentaires

Types
Types

Objets
Objets de
de données
données
données

Objets
Objets de
de données
données élémentaires
données élémentaires
élémentaires

Structures
Structures

Tables
Tables internes
internes

Attributs
Attributs des
des instructions
instructions ABAP
ABAP

ã SAP AG 1999

(C) SAP AG BC400 4-13


Objets de données dans une liste d'objets d'un programme

SAPBC400WBT_GETTING_STARTED
Types d'objets de programme
Structures du dictionnaire
Zones Clic sur le bouton droit Créer
PA_CAR
WA_BC400 Clic sur le bouton droit
Modifier
Événements
Afficher
START-OF-SELECTION
Cas d'emploi
Écrans
0100
1000

ã SAP AG 1999

n Les objets de données élémentaires apparaissent dans la liste d'objets du programme sous le noeud
"Zones".
n À partir de la liste d'objets, vous pouvez utiliser le bouton droit de la souris pour naviguer dans la
partie du code source où l'objet de données est défini.
n Vous pouvez utiliser la fonction Cas d'emploi pour afficher toutes les lignes du code source où
l'objet de données est utilisé.

(C) SAP AG BC400 4-14


Définition d'objets de données élémentaires

Programme
carrid ABAP

counter
s_carr_id

DATA: carrid TYPE s_carr_id,


counter TYPE I.

ã SAP AG 1999

n Règles d'appelation des objets de données :


- un nom peut comporter 30 caractères maximum (lettres, nombres, ou symboles).
- les symboles suivants NE SONT PAS autorisés : ( ) +. , :
- SPACE est une zone prédéfinie.
n Pour des raisons de compatibilité, il est encore possible de construire des objets de données dans
l'instruction DATA sans devoir d'abord définir le type localement dans le programme avec une
instruction TYPES. Outre les informations du type, des valeurs par défaut sont également définies
pour les types génériques suivants :
Ÿ Avec des types de données P,N,C, et X, vous pouvez indiquer une longueur (en octets) entre
parenthèses après le nom du type. Si aucune longueur n'est indiquée, la longueur par défaut de ce
type de données est utilisée. Vous pouvez trouver les longueurs standard dans la documentation
mots-clés pour TYPES et DATA.
Ÿ Avec un type de données P, vous pouvez utiliser l'option DECIMALS pour déterminer le nombre
de décimales qui devrait être utilisé (jusqu'à un maximum de 14). Si cette option manque, le
nombre de décimales est mis à zéro.
Ÿ Si aucun type n'est indiqué, la zone deviendra automatiquement une zone de type C.

(C) SAP AG BC400 4-15


Littéraux et constantes

CONSTANTS <constants> TYPE <type> VALUE <literal>.

CONSTANTS: PI TYPE P DECIMALS 4 VALUE '3.1415',


BOSS(4) TYPE C VALUE 'Hugo'.

Littéral numérique

715, -431
Nombre entier (un signe moins est
placé en face de nombres négatifs)

Littéral alphanumérique

'abc', '2.17', '1.213E15', '0FFF', 'A''B'


Séquence de caractères terminée par
des guillemets simples, 255 caractères max.

ã SAP AG 1999

n Vous définissez les constantes en utilisant le mot-clé ABAP CONSTANTS. L'option VALUE est
requise pour les constantes. Elle définit leur valeur.
n ABAP reconnaît deux types de littéraux : littéraux numériques et littéraux alphanumériques. Ce
dernier se trouve toujours entre des guillemets ( " ).
n Les nombres entiers (précédés d'un signe moins s'ils sont négatifs) sont stockés comme des littéraux
numériques soit de type I (jusqu'à neuf chiffres compris) ou de type P (dix chiffres ou plus).
n Tous les autres littéraux (caractère, nombres avec décimales, nombres de virgule flottante) sont
stockés comme des littéraux alphanumériques de type de données C. Si un littéral est affecté à une
variable qui n'est pas de type C, une conversion de type est alors exécutée. Les règles de conversion
sont décrites dans la documentation mots-clés sous MOVE.
n Si vous souhaitez ajouter des guillemets ( " ) dans un littéral alphanumérique, vous devez les
introduire deux fois.
n Vous pouvez créer des littéraux alphanumériques traduisibles, ou symboles de texte, pour tous les
programmes ABAP. Utilisez la boîte de dialogue Types d'objets de programme pour obtenir l'écran
de gestion des symboles de texte.

(C) SAP AG BC400 4-16


Modification des variables : copie et initialisation

Déclarations de données :
CONSTANTS c_qf TYPE s_carr_id VALUE 'QF'.
DATA: gd_carrid1 TYPE s_carr_id,
gd_carrid2 TYPE s_carr_id VALUE 'LH',
counter type I.
gd_carrid1 gd_carrid2 counter
Lancement du programme c_qf QF
LH 0000

MOVE c_gf TO gd_carrid1. QF LH 0000

gd_carrid2 = gd_carrid1. QF QF 0000

ADD 1 TO counter. QF QF 0001

CLEAR
CLEAR: gd_carrid1,
gd_carrid2,
counter. 0000

Programme ABAP

Runtime system ABAP

Temps
ã SAP AG 1999

n Lorsqu'un programme est lancé, le contexte du programme est chargé dans l'aire de stockage du
serveur d'application et rendu disponible à tous les objets de données.
n Chaque zone élémentaire est considérée comme standard quand elle possède une valeur intiale
propre à son type. Vous pouvez paramétrer vous-même une valeur de départ pour une zone
élémentaire en utilisant l'option VALUE. Une fois l'option VALUE paramétrée, vous devez seulement
spécifier un objet de données fixe.
n Vous pouvez copier le contenu de zone d'un objet de données vers un autre objet de données avec
l'instruction MOVE. Si les deux objets de données ont des types différents, le type est
automatiquement converti si une règle de conversion existe. Si vous souhaitez copier le contenu de
zone d'une variable var1 vers une seconde variable var2, vous avez le choix entre deux variantes
de syntaxe :
Ÿ MOVE var1 TO var2.
Ÿ var2 = var1.
n Vous trouverez des informations détaillées sur la copie et les règles de conversion dans la
documentation mots-clés sous MOVEou dans le cours de formation BC402.
n L'instruction CLEAR réinitialise le contenu de zone d'une variable par la valeur initiale du type
déterminé. Vous trouverez des informations détaillées sur les valeurs initiales d'un type déterminé
dans la documentation mots-clés sous CLEAR.

(C) SAP AG BC400 4-17


Exécution des calculs

COMPUTE exécute des calculs (le mot-clé est facultatif)

Déclarations de données :
DATA: gd_max TYPE sbc400focc-seatsocc,
gd_occ TYPE sbc400focc-seatsmax,
gd_percentage TYPE sbc400focc-percentage.

COMPUTE gd_percentage = gd_occ * 100 / gd_max.

* Seconde possibilité du même calcul

gd_percentage = gd_occ * 100 / gd_max.

Programme ABAP

ã SAP AG 1999

n Vous pouvez faire précéder les calculs de l'instruction COMPUTE. Cette instruction est facultative.
Vous pouvez utiliser une des deux variantes de syntaxe suivantes :
Ÿ COMPUTE v_percentage = v_occupancy * 100 / v_maximum.
Ÿ v_percentage = v_occupancy * 100 / v_maximum.
n Vous trouverez des informations détaillées sur les opérations et les fonctions disponibles dans la
documentation mots-clés sous COMPUTE.

(C) SAP AG BC400 4-18


Évaluation du contenu d'une zone

CASE <data object1>.


WHEN <data object2>.
Instructions

WHEN <data object4> OR <data object5>.


Instructions

WHEN OTHERS.
Instructions
IF <logical expression>.
ENDCASE.
Instructions
ELSEIF <logical expression>.
Instructions
ELSEIF <logical expression>.
Instructions
ELSE.
Instructions
ENDIF.
ã SAP AG 1999

n Les instructions IF et CASE vous permettent d'effectuer des distinctions de cas :


n CASE ... ENDCASE:
Ÿ seule une des séquences des instructions s'exécute
Ÿ l'instruction WHEN OTHERS est facultative
n IF ... ENDIF:
Ÿ les expressions logiques possibles sont décrites dans la documentation mots-clés sous IF
Ÿ les instructions ELSE et ELSEIF sont facultatives
Ÿ si l'expression logique est vraie, la séquence d'instructions suivante s'exécute
Ÿ si l'expression logique n'est pas vraie, la section ELSE ou ELSEIF est traitée. S'il n'y a aucune
instruction ELSE ni d'instruction complémentaire ELSEIF, le programme continue après
l'instruction ENDIF
Ÿ vous pouvez inclure autant d'instructions ELSEIF que vous voulez entre IF et ENDIF. Une seule
séquence d'instructions sera exécutée.

(C) SAP AG BC400 4-19


Observation du flux de données dans le
débogueur : zone
X
SAP
Débogueur ABAP
Point de surveillance ❁
chws

Zones
Programme principal ZJJ_KURS_000 Point d'arithmétique fixe
Pas
Code source de à ZJJ_FORMS
pas $ 15 - 30 #

SELECT SINGLE * FROM scarr


INTO CORRESPONDING FIELDS OF wa_sbc400
WHERE carrid = pa_car.
" IF sy-subrc = 0.
MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.
CALL SCREEN 100.
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.
Noms de zones 1 - 4 $ Contenus de zones
pa_car LH

ã SAP AG 1999

n Vous pouvez retrouver le contenu de jusqu'à huit variables en mode débogage si vous indiquez les
noms de zone sur le côté gauche ou si vous créez l'entrée par un double-clic sur un nom de zone.
n Vous pouvez modifier les valeurs de zone au moment de l'exécution en écrasant la valeur actuelle et
en choisissant l'icône "Modifier".

(C) SAP AG BC400 4-20


Observation du flux de données dans le débogueur :
point de surveillance
Point de surveillance

Créer/modifier un point de surveillance


Point de surveillance locale (uniquement dans un programme déterminé)

Programme
Nom de zone
Opérateur relationnel

Zone de comparaison (valeur de comparaison si aucune sélection)

Comp. zone/valeur

No. Local Programme Nom de zone Opérateur Zone Comp. zone/valeur


1
2
3
...
10

Opérateur logique entre des points de surveillance OU ET

ã SAP AG 1999

n Pour la version 4.6, vous êtes autorisé à paramétrer jusqu'à dix points de surveillance et à les relier en
utilisant les opérateurs logiques AND et OR. Les points de surveillance sont des points d'arrêt attachés
à la zone. Vous pouvez créer les types suivants de points de surveillance :
Ÿ Variable <opérateur> valeur : le système arrête le traitement si l'expression logique est vraie. Le
témoin "zone de comparaison" n'est pas sélectionné et la valeur est insérée dans "Comp.
zone/valeur".
Ÿ Variable 1 <opérateur> variable 2 : le système arrête le traitement si l'expression logique est vraie.
Le témoin "zone de comparaison" est sélectionné et la variable 2 est insérée dans "Comp.
zone/valeur".
Ÿ Variable : le système arrête le traitement chaque fois que la valeur de la variable change.

(C) SAP AG BC400 4-21


Vue générale : structures

Types
Types

Objets
Objets de
de données
données
données

Objets
Objets de
de données
données élémentaires
données élémentaires
élémentaires

Structures
Structures

Tables
Tables internes
internes

Attributs
Attributs des
des instructions
instructions ABAP
ABAP

ã SAP AG 1999

(C) SAP AG BC400 4-22


Définition des structures avec une référence de type du
dictionnaire

Dictionnaire ABAP : Structure sdyn_conn


Nom de zone : Type de zone :
mandt s_mandt
carrid s_carr_id
connid s_conn_id
fldate s_date
... ...

Définition de structure

wa_spfli Programme
ABAP
sdyn_conn

Code source ABAP

DATA: wa_spfli TYPE spfli.


TABLES sdyn_conn.

ã SAP AG 1999

n Vous pouvez définir des objets de données structurés (également appélés structures) dans ABAP.
Ceci vous permet de combiner des variables correspondantes dans un seul objet. Les structures
peuvent s'imbriquer. Ceci signifie que d'autres structures ou même des tables peuvent devenir des
sous-objets de votre structure originale.
n Deux différents types de structure existent dans les programmes ABAP :
Ÿ des structures définies par
DATA <name> TYPE <structure_type>.
Ces types de structure servent de zones cibles pour les accès à la base de données ou pour les
calculs exécutés localement dans le programme. Vous pouvez déclarer ces types de structure soit
dans le dictionnaire ABAP soit localement dans le programme. Pour des informations
complémentaires sur la manière de déclarer des structures locales, référez-vous à la documentation
mots-clés sous TYPES.
Ÿ des structures définies par
TABLES <ABAP-Dictionary-Structure>.
Ces types de structure sont techniquement gérés dans leur propre domaine. Pour la version 4.0, les
structures TABLES doivent être utilisées uniquement comme des structures d'interface pour des
écrans.

(C) SAP AG BC400 4-23


Adressage des zones d'une structure

wa_scarr Programme
mandt carrid carrname currcode ABAP

Des zones de structure sont


toujours adressées selon
Code source ABAP
<structure>-<nom_de_zone>

DATA: wa_scarr TYPE scarr.

wa_scarr-carrid
wa_scarr-carrid = 'LH'.

SELECT SINGLE * FROM scarr


INTO wa_scarr
WHERE carrid = wa_scarr-carrid.
WRITE: /wa_scarr-carrid
wa_spfli-carrid,
wa_spfli-carrname.
wa_scarr-carrname.

ã SAP AG 1999

n Les zones d'une structure sont toujours adressées selon <Structure>-<Field_name>.

(C) SAP AG BC400 4-24


Affectation de valeurs zone à zone

MOVE-CORRESPONDING <rec1> TO <rec2>.

DATA: wa_sflight TYPE sflight,


wa_sbc400focc TYPE sbc400focc.
...
MOVE-CORRESPONDING
MOVE-CORRESPONDING wa_sflight
wa_sflight TO
TO wa_sbc400focc.
wa_sbc400focc.

MANDT CARRID CONNID FLDATE ... SEATSMAX SEATSOCC ...


401 LH 0400 20000513 ... 280 100 ... wa_sflight

CARRID CONNID FLDATE SEATSMAX SEATSOCC POURCENTAGE


LH 0400 20000513 280 100

wa_sbc400focc
ã SAP AG 1999

n Les instructions MOVE-CORRESPONDING <rec1> TO <rec2> transportent des valeurs zone


par zone entre les structures <rec1> et <rec2>. Ceci fonctionne uniquement si les composantes
portent des noms identiques.
n Le système cherche toutes les zones dans <rec1> dont les noms apparaissent également dans
<rec2> et transporte la zone
<rec1>-<field name> vers <rec2>-<field name> quand les noms sont identiques.
Toutes les autres zones restent inchangées.

(C) SAP AG BC400 4-25


Structures dans le débogueur

Débogueur ABAP
Watchpoint ❁
chws

Zones
Programme principal ZJJ_KURS_000 Point d'arithmétique fixe
Code source de ZJJ_FORMS $ 15 - 30 #

SELECT SINGLE * FROM Zonescarr


structurée wa_sbc400
INTO CORRESPONDING FIELDS OF wa_sbc400
Longueur (en octets)
WHERE carrid 58
= pa_car.
" IF sy-subrc = 0.
No. Nom de
MOVE-CORRESPONDING la composante
wa_sbc400 TO Type Longueur Contenu
sbc400_carrier.
CALL SCREEN 100.
1 MANDT C 3 100
MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.
2 CARRID C 3 AA
Variante 1 - 4 $ Variante
3 CARRNAME C 20 American Airlines
wa_sbc400 4 CURRCODE C 5 USD
Double-Clic 5 MARK C 1
6 UNAME C 12
7 UTIME T 6 000000
8 DATE D 8 00000000

ã SAP AG 1999

n Vous pouvez retrouver le contenu de zone d'une structure en introduisant le nom de la structure dans
la colonne de gauche. Si vous double-cliquez sur cette entrée, vous affichez la zone de vue de la
structure.

(C) SAP AG BC400 4-26


Vue générale : Tables internes

Types
Types

Objets
Objets de
de données
données
données

Objets
Objets de
de données
données élémentaires
données élémentaires
élémentaires

Structures
Structures

Tables
Tables internes
internes

Attributs
Attributs des
des instructions
instructions ABAP
ABAP

ã SAP AG 1999

(C) SAP AG BC400 4-27


Type de table

CARRID CONNID DISTANCE Type de lignes


Zones-clés Clé
Clé
AA 0017 2,572 Séquence

LH 0400 6,162 Clé unique / non-unique

LH 0400 6,162
Type de table
QF 0005 10,000 Accès avec index
SQ 0866 1,625 5
Type d'accès de données
UA 0007 2,572 UA 0007

Accès avec clé

Vous ne devez pas déterminer le nombre de lignes de votre table ;


le runtime system ABAP le détermine au moment de l'exécution
(extension de table dynamique).

ã SAP AG 1999

n Vous devez définir les informations suivantes afin de spécifier entièrement un type de table :
Ÿ Type de ligne : vous pouvez enregistrer les informations dans les colonnes requises, leurs noms et types, en
définissant un type de structure comme type de ligne.
Ÿ Clé : une clé correctement spécifiée doit définir quelles colonnes doivent être des colonnes-clé. Dans quel
ordre ? La clé doit-elle désigner un seul enregistrement de la table interne (clé unique) ? Les clés uniques ne
peuvent pas être définies pour tous les types de table.
Ÿ Type de table : il existe trois types de table : les tables standard, les tables triées et les tables d'adresses
calculées. C'est le type d'accès qu'on utilise principalement pour choisir le type de table.
n Le type d'accès définit comment ABAP accède aux entrées de tables individuelles. Deux types différents
d'accès de données existent dans ABAP, l'accès par index et l'accès avec une clé.
n L'accès par index implique l'utilisation de l'index d'enregistrement de données que le système gère pour
accéder aux données.
Ÿ Exemple: l'accès en mode lecture à un enregistrement de données comportant l'index 5 fournit le cinquième
enregistrement de données de votre table interne (quantité d'accès : un seul enregistrement de données).
n L'accès avec une clé implique l'utilisation d'un critère de recherche, généralement la clé de table ou la clé de
table générique, pour accéder aux données.
Ÿ Exemple : l'accès en mode lecture, utilisant un critère de sélection "UA 0007", à une table interne de clé
unique CARRID CONNID et aux données décrites ci-dessus fournit exactement un enregistrement de
données.

(C) SAP AG BC400 4-28


Types de table

TABLES

TABLE DES INDEX TABLE D'ADRESSES


CALCULÉES
CALCULÉES

TABLE STANDARD TABLE TRIÉE


TRIÉE

Accès avec n n
Index

Accès avec
Clé

Clé unique / NON- UNIQUE UNIQUE | NON-UNIQUE UNIQUE


non-unique

Type d'accès Principalement index Principalement clés Uniquement des clés

ã SAP AG 1999

n Un autre attribut de table interne est le type de table. Les tables internes peuvent être divisées en trois
types de table selon leur moyen d'accès aux données :
- les tables standard gèrent de manière interne un index linéaire. Ce type de table peut être
accédé en utilisant soit l'index de table soit des clés.
- les tables triées sont triées selon la clé et sauvegardées. Un index linéaire est ici aussi géré de
manière interne. Ce type de table peut être accédé en utilisant soit l'index de table soit des clés.
- les tables d'adresses de calculs ne gèrent pas d'index linéaire de manière interne. Vous pouvez
seulement y accéder en utilisant des clés.
n Le type de table que vous utilisez dépend généralement du moyen d'accès à ces entrées de table.
Utilisez des tables standard lorsque l'accès aux entrées s'effectue généralement avec l'index, utilisez
une table triée lorsque l'accès aux entrées s'effectue généralement avec des clés, et des tables
d'adresses calculées lorsque l'accès aux entrées s'effectue exclusivement avec des clés.
n Dans ce cours, nous discuterons uniquement de la syntaxe des tables standard.

(C) SAP AG BC400 4-29


Déclaration de tables internes en référence au Dictionnaire

Dictionnaire ABAP : type de table sbc400_t_sbc400focc

Type de ligne et accès Type de ligne SBC400FOCC


Type d'accès Table standard

Clé Définition-clé Composantes-clés


Type de clé non-unique
Composantes-clés CARRID
CONNID
FLDATE

Programme ABAP
itab_flightinfo

sbc400_t_sbc400focc .
DATA it_flightinfo type sbc400_t_sbc400focc

ã SAP AG 1999

n Les types de table peuvent être définis de manière locale dans un programme ou de manière centrale
dans le dictionnaire ABAP.
n Pour définir un objet de données de type table, spécifiez le type comme un type de table global ou un
type de table local.
n Vous trouverez des informations détaillées sur la déclaration de types de table dans la documentation
ou dans le cours BC402.

(C) SAP AG BC400 4-30


Traitement des enregistrements individuels

Ajouter APPEND
APPEND wa_itab to itab.

Insérer INSERT wa_itab INTO itab <condition>.

Lire READ TABLE itab INTO wa_itab <condition>.

Modifier MODIFY TABLE itab <condition>.

Supprimer DELETE itab <condition>.


DELETE

ã SAP AG 1999

n Vous pouvez exécuter les opérations suivantes sur des enregistrements individuels de tables internes
:
Ÿ APPEND ajoute le contenu d'une structure qui a le même type que la ligne d'une table interne.
Cette opération peut être utilisée uniquement avec des tables standard.
Ÿ INSERT insère le contenu d'une structure qui a le même type que la ligne de table interne. Pour
une table standard, cela provoque un APPEND ; pour une table triée, cela provoque une
insertion à la bonne place ; pour une table d'adresses calculées, cela provoque une
insertion suivant l'algorithme d'adresse calculée .
Ÿ READ copie le contenu d'une ligne de table interne vers une structure qui a le même type que
la ligne.
Ÿ MODIFY écrase une ligne de table interne avec le contenu d'une structure qui a le même type que
la ligne..
Ÿ DELETE supprime une ligne de table interne.
Ÿ COLLECT insère le contenu d'une structure qui a le même type que la ligne d'une table interne
vers une table interne sous une forme compressée. Cette instruction peut être utilisée
uniquement pour des tables dont les zones non clé sont toutes numériques. Les valeurs
numériques sont cumulées pour des clés identiques.
n Vous trouverez des informations détaillées sur les instructions ABAP décrites dans cette diapositive
dans la documentation mots-clés ABAP.

(C) SAP AG BC400 4-31


Traitement d'enregistrements par groupes

Loop: LOOP AT itab INTO wa_itab.


Pour toutes les
opérations
ENDLOOP.

Supprimer DELETE itab <condition>.

Insérer
lignes multiples
à partir d'une INSERT itab2 <condition2>
table interne FROM itab1 <condition1>.

Ajouter
Lignes multiples APPEND
INSERT itab2 <condition2>
à partir d'une FROM itab1 <condition1>.
table interne

ã SAP AG 1999

n Vous pouvez exécuter les opérations suivantes sur des ensembles d'enregistrements de tables internes
:
Ÿ LOOP ... ENDLOOP LOOP place une par une les lignes de table interne dans la structure
spécifiée dans la clause INTO. La structure doit avoir le même type que la ligne de table
interne. Toutes les opérations sur un enregistrement individuel peuvent être exécutées à
l'intérieur de la boucle. Dans ce cas, le système fournit les informations sur la ligne à
traiter dans l'opération d'enregistrement individuel.
Ÿ DELETE supprime les lignes de table interne qui définissent la condition <condition>.
Ÿ INSERT copie le contenu de plusieurs lignes d'une table interne vers une autre table
interne.
Ÿ APPEND ajoute le contenu de plusieurs lignes d'une table interne vers une autre table
standard.
n Vous trouverez des informations détaillées sur les instructions ABAP décrites dans cette diapositive
dans la documentation mots-clés pour tous les mots-clés ABAP utiles.

(C) SAP AG BC400 4-32


Autres options de traitement

Trier SORT
SORT itab <conditions>

Remise à la valeur initiale


du contenu
d'une table interne CLEAR
CLEAR itab.

ã SAP AG 1999

n Vous pouvez exécuter les opérations suivantes sur des tables internes :
Ÿ SORT trie des tables selon n'importe quelle colonne ou selon les colonnes par ordre croissant
ou décroissant. Les tables de type SORTED TABLE ne peuvent être retriées.
Ÿ CLEAR met le contenu de la table interne à la valeur initiale conforme au type de colonne.
Ÿ REFRESH fonctionne comme CLEAR.
Ÿ FREE supprime la table interne et libère la mémoire allouée à la table.

(C) SAP AG BC400 4-33


Exemple : remplir une table interne ligne par ligne

* Déclaration de table interne et d'espace de travail


DATA: it_flightinfo TYPE sbc400_t_sbc400focc.
DATA: wa_flightinfo TYPE sbc400focc.

it_flightinfo

wa_flightinfo

* Remplir une structure wa_flightinfo avec des valeurs


...
* Ajouter la structure wa_flightinfo dans une table
* interne
APPEND wa_flightinfo TO it_flightinfo.

ã SAP AG 1999

n Vous pouvez ajouter des lignes à une table standard en remplissant d'abord une structure avec les
valeurs requises et en l'ajoutant ensuite à la table interne avec l'instruction APPEND. Cette
instruction n'est valable que pour les tables standard.
n Utilisez l'instruction INSERT pour insérer des lignes dans des tables triées ou d'adresses calculées.
n INSERT fonctionne comme APPEND dans des tables standard.

(C) SAP AG BC400 4-34


Exemple : lecture du contenu de table interne à
l'aide d'une boucle
* Déclaration de table interne et d'espace de
travail
DATA: it_flightinfo TYPE sbc400_t_sbc400focc.
DATA: wa_flightinfo TYPE sbc400focc.

it_flightinfo

wa_flightinfo

LOOP AT it_flightinfo INTO wa_flightinfo.

WRITE: / wa_flightinfo-carrid,
wa_flightinfo-connid,
wa_flightinfo-fldate,
wa_flightinfo-seatsmax,
wa_flightinfo-seatsocc,
wa_flightinfo-percentage,
'%'.
ENDLOOP.
ENDLOOP.

ã SAP AG 1999

n Vous pouvez lire et traiter le contenu d'une table interne avec l'instruction LOOP. Dans cet exemple,
une ligne est chaque fois copiée de la table interne it_flightinfo vers la structure wa_flightinfo. Les
zones de la structure peuvent alors être traitées. Une liste est établie à partir des zones avec
l'instruction WRITE.
n Si vous souhaitez modifier le contenu de la table interne, modifiez d'abord la valeur des zones de
structure à l'intérieur de la boucle et écrasez ensuite la ligne de table interne comportant l'instruction
MODIFY.

(C) SAP AG BC400 4-35


Exemple : lecture de tables internes à l'aide l'index

LOOP AT it_flightinfo INTO wa_flightinfo


FROM 11 TO
FROM TO 5.
5.
WRITE: / wa_flightinfo-carrid,
wa_flightinfo-connid,
wa_flightinfo-fldate,
wa_flightinfo-seatsmax,
wa_flightinfo-seatsocc,
wa_flightinfo-percentage,
'%'.

ENDLOOP.

READ TABLE it_flightinfo INTO wa_flightinfo


INDEX 3.
WRITE: / wa_flightinfo-carrid,
wa_flightinfo-connid,
wa_flightinfo-fldate,
wa_flightinfo-seatsmax,
wa_flightinfo-seatsocc,
wa_flightinfo-percentage,
'%'.
ã SAP AG 1999

n L'option INDEX vous permet de limiter l'accès à un certain nombre de lignes. Vous pouvez exécuter
des opérations d'index uniquement dans les tables de type index. Les tables standard comme les
tables triées y sont gérées.
n L'exemple du haut montre la syntaxe pour le traitement de la boucle, qui scanne uniquement les cinq
premières lignes de la table interne.
n L'exemple du bas montre la syntaxe pour la lecture de la troisième ligne de la table interne.

(C) SAP AG BC400 4-36


Exemple : lecture des tables internes à l'aide de clés

LOOP AT it_flightinfo INTO wa_flightinfo


WHERE carrid
WHERE carrid == 'LH'
'LH'.
WRITE: / wa_flightinfo-carrid,
wa_flightinfo-connid,
wa_flightinfo-fldate,
wa_flightinfo-seatsmax,
wa_flightinfo-seatsocc,
wa_flightinfo-percentage,
'%'.

ENDLOOP.

READ TABLE it_flightinfo INTO wa_flightinfo


WITH TABLE KEY carrid = 'LH'
'LH'.
connid
connid == '0400'
'0400'
fldate == sy-datum.
fldate sy-datum.
IF sy-subrc = 0.
WRITE: / wa_flightinfo-seatsmax,
wa_flightinfo-seatsocc,
wa_flightinfo-percentage,
'%'.
ENDIF.

ã SAP AG 1999

n L'option WHERE vous permet de limiter l'accès à des lignes comportant certaines valeurs dans des
zones-clés. Les opérations-clés sont gérées pour tous les types de table. L'accès-clé aux tables triées
ou d'adresses calculées est plus efficace que l'accès-clé aux tables standard.
n L'exemple du haut montre la syntaxe pour le traitement de la boucle qui scanne uniquement les
lignes de la table interne dont la zone "carrid" a la valeur "LH". La table triée est la plus
appropriée pour ce type de traitement. Le traitement en boucle avec l'option WHERE est géré pour les
tables triées et les tables standard.
n L'exemple du bas montre la syntaxe pour la lecture d'une ligne de la table interne avec une clé
correctement spécifiée. Le code retour sy-subrc est remis à zéro si la table interne contient cette
ligne. La table d'adresses calculées est la plus appropriée pour l'accès avec clé à un enregistrement
individuel. Ce type d'accès est géré pour tous les types de table. Veuillez noter que toutes les zones-
clés doivent être définies en accès-clés avec l'option WITH TABLE KEY. Il est facile de confondre
cette option avec l'option WITH KEY, qui autorisait déjà l'accès-clé aux tables standard avant la
version 4.0, lorsqu'il n'était pas encore possible de définir de manière explicite les colonnes-clé.

(C) SAP AG BC400 4-37


Tables internes en mode débogage

Débogueur ABAP
Point de surveillance ❁
chws

Tableau
Programme principal ZJJ_KURS_000 Point d'arithmétique fixe
Code source de ZJJ_FORMS $ 15 - 30 #

LOOP AT it_flightinfo INTO wa_flightinfo.


" WRITE: / wa_flightinfo-carrid,
wa_flightinfo-connid,

Table interne it_flightinfo Type Standard


1 Carrid Connid Fldate Seatsmax Seatsocc Pourcentage
1 AA 0017 20000512 660 66 66
2 AA 0017 20000724 660 120 120
3 AA 0017 20000828 660 560 560
4 AA 0017 20001224 660 470 470
5 LH 0400 20000626 280 240 240
6 LH 0400 20000715 280 123 123
7 LH 0400 20001113 280 273 273
8 LH 0400 20001212 280 280 280

ã SAP AG 1999

n Vous pouvez retrouver le contenu d'une table interne en mode débogage en sélectionnant "Table" et
en indiquant le nom de table interne.

(C) SAP AG BC400 4-38


Tables internes avec lignes d'en-tête

DATA <itab> TYPE <itabtype> [WITH


[WITH HEADER
HEADER LINE]
LINE].

Espace de travail <wa> Ligne d'en-tête <itab>

Table interne <itab> Table interne <itab>


CARRID CONNID CARRID CONNID
AA 0017 AA 0017
LH 0400 LH 0400

APPEND <wa> TO <itab>. APPEND <itab>.


MODIFY <itab> INDEX <n> FROM <wa>. MODIFY <itab> INDEX <n>.

LOOP AT <itab> INTO <wa>. LOOP AT <itab>.


WRITE <wa>-<field>. WRITE <itab>-<field>.
ENDLOOP. ENDLOOP.

READ TABLE <itab> INDEX <n> INTO <wa>. READ TABLE <itab> INDEX <n>.
WRITE <wa>-<field>. WRITE <itab>-<field>.

ã SAP AG 1999

n Les tables internes peuvent être définies avec ou sans ligne d'en-tête. Une table interne avec ligne
d'en-tête consiste en un espace de travail (la ligne d'en-tête) et le corps actuel de la table, qui sont
tous deux adressés par le même nom. La manière dont le nom va être interprété dépend du contexte
dans lequel il est utilisé. Par exemple : en MOVE, le nom est interprété pour signifier la ligne d'en-
tête, alors qu'en SORT, il est interprété comme le corps de table.
n Vous pouvez déclarer une table interne avec une ligne d'en-tête en utilisant l'option WITH HEADER
LINE.
n Afin d'éviter toute confusion, il est recommandé de créer des tables internes sans lignes d'en-tête.
Cependant, vous pouvez utiliser une syntaxe abrégée pour certaines opérations dans des tables
internes avec lignes d'en-tête.

(C) SAP AG BC400 4-39


Synthèse : Attributs des instructions ABAP

Types
Types

Objets
Objets de
de données
données
données

Attributs
Attributs des
des instructions
instructions ABAP
ABAP

ã SAP AG 1999

(C) SAP AG BC400 4-40


Codes retour d'instruction ABAP

CONSTANTS c_ua Programme ABAP


TYPE s_carr_id sy-subrc
VALUE 'UA'.
0
READ TABLE itab Function de
INTO wa_itab base en
WITH TABLE KEY LECTURE
carrid = c_ua.
carrid ...

AA
AL Non disponible
LH
QF
itab
IF sy-subrc ne 0. 4 Code retour 4
* Message
...
ENDIF.

Runtime system ABAP

Temps
ã SAP AG 1999

n Un nombre d'instructions ABAP possèdent un code retour. De nombreuses exceptions sont détectées,
selon l'instruction. Si une telle exception apparaît, une valeur est stockée dans la zone sy-subrc et
l'instruction se termine. La documentation mots-clés pour une instruction déterminée décrit les
exceptions et leurs valeurs. Lorsque vous lancez un programme, une structure appelée sy est
automatiquement fournie comme objet de données. Cette structure contient plusieurs zones qui sont
remplies par le système. Vous pouvez accéder à ces zones à partir du programme. Une des zones de
cette structure est la zone subrc. Vous ne devez dès lors pas créer d'objet de données pour le code
retour.
n Dans cet exemple, une ligne devrait se lire à partir de la table interne itab avec un accès clé. Il n'y a
aucune ligne avec la clé requise au moment de l'exécution. L'instruction READ se termine alors et la
valeur 4 est placée dans la zone sy-subrc. La zone sy-subrc est testée dans le programme
immédiatement après l'instruction READ.

(C) SAP AG BC400 4-41


Messages utilisateur : synthèse

.
.
MESSAGE E050(BC400).
S078(BC400) WITH c_ua.

Table T100
S ID N° Texte du message

EN BC400 038 Aucune donnée n'existe pour cette sélection (insérez une autre valeur)
... ... ... ...
EN BC400 049 La compagnie aérienne & n'existe pas
EN BC400 078
078 Division
Entréepar pour zérola compagnie aérienne & n'existe pas
... ... ... ...

Entrée
Entrée pour la compagnie aérienne
aérienne UA n'existe pas
ã SAP AG 1999

n Il existe un type de dialogue spécial appelé le message utilisateur pour les situations d'erreur. Les
messages sont déclenchés par l'instruction MESSAGE.
n Les messages peuvent être trouvés dans la table T100. Ils sont organisés selon la langue, une classe
de messages et un numéro à trois chiffres.
n Les messages peuvent contenir jusqu'à 4 variables, identifiées comme &1, &2, &3, et &4. Si vous
souhaitez éditer le caractère & et que vous ne souhaitez pas l'utiliser comme une variable, doublez-le,
par exemple : "C'est un message avec &&".
n Dans les longs textes de message, utilisez &v1&, &v2&, &v3&, et &v4& pour leurs variables
correspondantes.
n Vous pouvez créer vos propres classes de messages en utilisant des noms de classes commençant par
Y ou par Z.

(C) SAP AG BC400 4-42


Syntaxe : instructions MESSAGE

Annn
Xnnn
MESSAGE Ennn WITH <field1> <field2> <field3> <field4>(<message-class>).
Wnnn
Innn
Snnn

ã SAP AG 1999

n Envoyez des messages avec l'instruction MESSAGE. La langue pour les messages dans la tabe T100
est automatiquement paramétrée comme la langue de travail de l'utilisateur. Vous pouvez définir la
classe de messages suivant le paramètre MESSAGE-ID de l'instruction REPORT. La classe de
messages est dès lors paramétrée pour l'ensemble du rapport. Introduisez le numéro de message dans
l'instruction MESSAGE.
n Introduisez le type de message juste en face du numéro de message à trois chiffres, ce dernier
détermine comment l'utilisateur du rapport réagit aux messages de dialogue (voir diapositive
suivante).
n Paramétrez les valeurs pour les variables (jusqu'à un maximum de quatre) suivant le paramètre
WITH. Les zones et les littéraux sont également autorisés. La zone au niveau i remplace donc la
variable &i du message. Si les variables du message sont identifiées par & ou $, ces caractères
génériques sont fournis avec des valeurs indépendantes de la position des zones de l'instruction
message.
n Outre l'utilisation d'une classe de messages avec l'instruction REPORT, vous pouvez également
ajouter une classe de messages différente à la commande MESSAGE en introduisant l'ID entre
parenthèses directement après le numéro de message. Cependant, cette classe de messages n'est
valable que pour un message individuel. Exemple : MESSAGE E004(UD).
n Utilisez la syntaxe suivante chaque fois que vous souhaitez envoyer un message dynamique :
MESSAGE ID <mid> TYPE <mtype> NUMBER <mnr> WITH <field1>
<field2> <field3> <field4>.
n Les zones système SY-MSGID, SY-MSGTY et SY-MSGNO sont fournies avec la classe de messages,
le type de messages et le numéro de message respectivement, et les zones système SY-MSGV1 à
SY-MSGV4 avec les zones des caractères génériques.

(C) SAP AG BC400 4-43


Comportement des messages au moment de l'exécution
Aide

i Aide à l'éditeur
Synthèse ABAP
Mot-clé ABAP
Nouvelles caractéristiques de ABAP
Documentation ABAP et exemples

Documentation ABAP et exemples


? Programmation ABAP - BC
? Introduction à ABAP
? Langage de programmation ABAP
? Dialogues utilisteur ABAP
Exemple de message simple
Démonstration de tous les types de messages
? ...
ã SAP AG 1999

n Il existe six différents types de messages : A, X, E, I, S ou W. Le comportement des messages au


moment de l'exécution dépend du contexte. Ces lettres ont la signification suivante :
A Abend Une fois le traitement terminé, l'utilisateur doit relancer la transaction
X Abend et Identique au message de fin, mais avec vidage d'une partie de la mémoire
short dump MESSAGE_TYPE_X
E Erreur Le comportement au moment de l'exécution dépend du contexte
W Warning Le comportement au moment de l'exécution dépend du contexte
I Information Le traitement est interrompu, le message s'affiche dans une boîte de dialogue
et le programme continue lorsque le message a été confirmé avec ENTRÉE.
S Suite Le message apparaît sur la barre d'état de l'écran suivant
n Vous trouverez un programme pour tester le comportement au moment de l'exécution dans les
programmes types de la documentation. Vous trouverez des programmes types avec un code de
tansaction ABAPDOCU dans l’Éditeur avec l'icône "Information" et la case d'option de
Documentation ABAP et exemples.

(C) SAP AG BC400 4-44


Instructions ABAP et déclarations de données :
résumé du chapitre

Vous êtes maintenant capable :


l de décrire les différents types de données
différents et leur utilisation
l de définir des objets de données élémentaires,
des structures et des tables internes
l d'utiliser le mode débogage pour observer
comment les valeurs des objets de données
individuels changent lors du traitement
l de programmer plusieurs opérations importantes
impliquant des objets de données, et
l de trouver des informations sur les différents
codes retour utilisés par les instructions ABAP et
de les évaluer dans des programmes.

ã SAP AG 1999

(C) SAP AG BC400 4-45


Exercices

Chapitre : Objets de données et instructions


Sujet : Structures et affectations de valeurs

À la fin de ces exercices, vous serez en mesure :


• d’utiliser le débogueur pour comprendre comment un programme
fonctionne et comment les données sont transférées entre les objets du
programme ;
• d’utiliser l’instruction MOVE-CORRESPONDING pour affecter des
valeurs entre les structures.

Déboguez le programme que vous avez écrit pendant les exercices


jusqu’au dernier chapitre (ou la solution modèle correspondante).

Programme : ZBC400_##_GETTING_STARTED
Solution modèle : SAPBC400WBS_GETTING_STARTED

1-1 Démarrez le programme ZBC400_##_GETTING_STARTED. Sur l’écran de


sélection, saisissez le code de la compagnie aérienne 'LH'. Dans la zone de
commande, saisissez '/h', ensuite sélectionnez Exécuter. Vous êtes maintenant en
mode débogage.

1-2 Vérifiez que toutes les données sont initiales. Pour cela, indiquez leur nom dans les
noms de zones (onglet Zones du débogueur). Examinez le contenu (initial), la
structure et le type des données en double-cliquant sur chacun d'eux.

1-3 Déroulez le programme en utilisant la fonction Pas à pas (F5). Quelles


composantes de la structure WA_SBC400 sont remplies par l’instruction
SELECT ? Quelle est la valeur de la zone système SY-SUBRC après l’instruction ?

1-4 Observez maintenant comment les zones sont copiées de WA_SBC400 vers
SBC400_CARRIER. Quelles valeurs de zone sont copiées ?

1-5 L’instruction CALL SCREEN 100 traite le dynpro 100. Sur l’écran, saisissez les
valeurs propres au nom d’utilisateur, la date et l’heure, et continuez le programme.
Observez maintenant comment les zones sont copiées de SBC400_CARRIER vers
WA_SBC400.
(C) SAP AG BC400 4-46
1-6 Pour terminer, observez comment l’instruction WRITE construit la liste. N’oubliez
pas qu’un bouton supplémentaire apparaît dans la barre d’outils d’application après
la première instruction WRITE, qui vous permet d’afficher à tout moment le
contenu actuel du buffer de liste.

1-7 Redémarrez le programme en mode débogage. Ajoutez un point d’arrêt à


l’instruction MOVE-CORRESPONDING.

1-8 Répétez l’étape 1-1. Définissez un point d'arrêt à l'instruction CALL SCREEN, et
un point de surveillance pour la zone SBC400_CARRIER-UNAME et testez-le.
Chaque fois que le programme s’arrête, utilisez la fonction "Continuer" (F8) du
débogueur pour poursuivre le traitement.

(C) SAP AG BC400 4-47


Chapitre : Objets de données et instructions
Sujet : Tables internes

À la fin de ces exercices, vous serez en mesure :


• de déclarer des tables internes avec référence à un type de table défini
dans le dictionnaire ABAP ;
• d’utiliser les instructions LOOP…ENDLOOP pour traiter des données
mises dans le buffer de la table interne.

Créez un programme pour afficher tous les vols sur une liste.
Pour ce faire, lisez le contenu de la table de base de données SPFLI dans
une table interne. Utilisez ensuite une structure LOOP … ENDLOOP
pour afficher les lignes de la table interne dans une liste.

Programme : ZBC400_##_ITAB_LOOP
Solution modèle : SAPBC400TSS_ITAB_LOOP

2-1 Créez un programme nommé ZBC400_##_ITAB_LOOP et sans TOP include.


Affectez votre programme à la classe de développement ZBC400_## et l'ordre de
modification pour votre projet “BC400…” (## est votre numéro de groupe).

2-2 Dans votre programme, créez une table interne avec la structure de ligne de la table
SPFLI.

2-3 Pour consulter les données de la table de base de données SPFLI et les placer dans
la table interne, utilisez l’instruction ABAP suivante dans votre programme :
SELECT * FROM SPFLI INTO TABLE <itab>.
<itab> est le nom de la table interne.

2-4 Affichez les données de la table interne dans une liste. Utilisez les instructions
LOOP … ENDLOOP.

(C) SAP AG BC400 4-48


Solutions

Chapitre : Objets de données et instructions


Sujet : Structures et affectations de valeurs

1-3 Quelles composantes de la structure SBC400_CARRID sont remplies par l’instruction


SELECT ?

MANDT, CARRID, CARRNAME, CURRCODE


Quelle valeur a SY-SUBRC après l’instruction SELECT ?
SY-SUBRC a la valeur 0, car la compagnie aérienne LH (Lufthansa) est gérée dans la
table SCARR.

1-4 Quelles valeurs de zone sont copiées ?

MANDT, CARRID, CARRNAME, CURRCODE

(C) SAP AG BC400 4-49


Chapitre : Objets de données et instructions
Sujet : Tables internes

Solution modèle SAPBC400TSS_ITAB_LOOP

*&-----------------------------------------------------------------*
*& Report SAPBC400TSS_ITAB_LOOP *
*& *
*&-----------------------------------------------------------------*

REPORT sapbc400tss_itab_loop .

DATA: it_spfli TYPE sbc400_t_spfli.


DATA: wa_spfli TYPE spfli.

START-OF-SELECTION.
* Lire toutes les zones des enregistrements de la table de base de
données SPFLI dans
* La table interne it_spfli.
SELECT * FROM spfli INTO TABLE it_spfli.
* Au moins un enregistrement sélectionné
IF sy-subrc = 0.
* Copier chaque enregistrement individuel de la table interne vers la
structure WA_SPFLI
* afin d’enregistrer des données sur la liste
LOOP AT it_spfli INTO wa_spfli.
WRITE: / wa_spfli-carrid,
wa_spfli-connid,
wa_spfli-cityfrom,
wa_spfli-cityto,
wa_spfli-deptime,
wa_spfli-arrtime.
ENDLOOP.

(C) SAP AG BC400 4-50


ENDIF.

(C) SAP AG BC400 4-51


Dialogues base de données I

Contenu :
l Informations sur les tables de base de données
l Lecture de tables de base de données
l Contrôle d'autorisations
l Lecture de tables de base de données multiples

ã SAP AG 1999

(C) SAP AG BC400 5-1


Dialogues base de données 1 : objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l d'obtenir des informations sur les tables de base


de données à partir du Dictionnaire ABAP
l de répertorier plusieurs moyens de trouver des
tables de base de données
l de programmer un accès en mode lecture à des
lignes et colonnes spécifiques d'une table de
base de données particulière
l d'appliquer des contrôles d'autorisation
l de répertorier les différents types de possibilités
d'accès en mode lecture pour des table de base
de données

ã SAP AG 1999

(C) SAP AG BC400 5-2


Informations sur les tables de base de données

Informations
Informations sur
sur les
les tables
tables de
de base
base de
de données
données

Lecture
Lecture de
de tables
tables de
de base
base de
de données
données

Contrôle
Contrôle d'autorisations
d'autorisations

Lecture
Lecture de
de tables
tables de
de base
base de
de données
données multiples
multiples

ã SAP AG 1999

(C) SAP AG BC400 5-3


Informations dans le Dictionnaire ABAP

Dictionnaire ABAP

Table transparente SPFLI :

Description des attributs de la


table de base de données SPFLI
SPFLI

ic
l
-c
le
Bloc de traitement ABAP
b
ou
D

spfli ...
SELECT SINGLE * FROM spfli

ã SAP AG 1999

n Les tables de base de données sont administrées dans le Dictionnaire ABAP. C'est ici que vous
trouvez les informations actuelles sur les attributs techniques de la table de base de données. La table
de base de données qui a été créée dans la base de données en utilisant le même type de ligne et nom
est appelée table transparente dans le Dictionnaire ABAP.
n Il existe différents moyens par lesquels vous pouvez naviguer vers les tables transparentes dans le
Dictionnaire ABAP :
Ÿ choisissez Outils->ABAP Workbench->Développement->Dictionnaire pour appeler le dictionnaire
ABAP directement et insérer le nom de la table transparente dans la zone de saisie appropriée, ou
Ÿ naviguez directement vers le Dictionnaire ABAP à partir de l'éditeur ABAP pendant le traitement
du programme :
vous pouvez double-cliquer sur le nom de la table transparente dans la clause FROM de
l'instruction SELECT.

(C) SAP AG BC400 5-4


Recherche sur des tables de base de données

Hiérachie des
Rechercher
Éditeur applications
des composantes
Sélectionner
réutilisables
Rechercher composantes
l'instruction d'application
SELECT Repository
Informations
Démarrer
Le système
en mode débogage
Insérer un point
d'arrêt dans
l'instruction SELECT
Sur Zones de structure
des zones d'écran dans le Dictionnaire ABAP
Liste F1 Double-clic
d'objets du Infos techniques sur un élément de
programme Double-clic données
Sous-programmes sur une zone Liste des cas d'emploi
d'écran dans les tables

Vous fournit les noms des


programmes qui accèdent à la Vous fournit une structure
ã SAP AG 1999 table de base de données connue dans le dictionnaire

n Pour rechercher des tables de bases de données :


Ÿ Hiérarchie des applications et Système d'information du Repository : vous pouvez choisir des
composantes applicatives dans la Hiérarchie des applications et passer directement dans le
Système d'information du Repository. Vous pouvez également rechercher des tables selon leurs
courtes descriptions (parmi d'autres critères).
n Si vous connaissez le nom d'un programme qui a accès aux tables de bases de données que vous
cherchez :
Ÿ Zone de saisie sur un écran : si vous connaissez un programme qui contient un écran avec des
zones de saisie connectées à la table recherchée, choisissez F1->Infos techniques et naviguez vers
le dictionnaire ABAP en double-cliquant sur le nom technique de la zone d'écran. Il s'agit
souvent d'une zone dans une structure. Double-cliquez sur l'élément de données et utilisez la
fonction Cas d'emploi pour rechercher des tables transparentes selon le type de zone.
Ÿ Débogueur : si vous connaissez le nom d'un programme qui a accès aux tables de bases de
données que vous cherchez, vous pouvez lancer ce programme en mode débogage et apposer un
point d'arrêt dans l'instruction SELECT.
Ÿ Editeur : recherchez l'instruction SELECT.
Ÿ Liste d'objets de Object Navigator : prélevez les sous-programmes qui forment les accès à la
base de données.
n Si vous connaissez une zone de structure du Dictionnaire ABAP :
Ÿ double-cliquez sur l'élément de données et utilisez la fonction Cas d'emploi pour rechercher des
tables transparentes selon le type de zone.

(C) SAP AG BC400 5-5


Modèle de système de réservation aérienne des cours ABAP

Ville de départ

Aéroport de départ

Tâches de l'agence de voyage :


l disponibilité des aéroports Destination
l disponibilité des compagnies aériennes à l'heure souhaitée
l disponibilité des vols à la date souhaitée
l informations de vol complémentaires : prix, capacité, ...
Ville de destination

ã SAP AG 1999

n Tous les cours ABAP utilisent le même modèle de données de système de réservation aérienne. À ce
stade, nous vous présenterons un simple aperçu du modèle de données de vol ; vous trouverez des
informations détaillées à ce sujet tout au long du cours.
n En tant que voyageur désireux d'aller d'un endroit à l'autre, vous attendez de votre agence de voyages
qu'elle soit en mesure de vous fournir les informations suivantes :
Ÿ Quel est le vol le plus direct et le plus pratique ?
Ÿ Quel est l'horaire des vols à la date qui m'intéresse ?
Ÿ Comment rendre des conditions de voyage optimales ? Par exemple, quel est le vol le moins cher,
la connexion la plus rapide et la plus adaptée ...?
n L'agence de voyages a un point de vue légèrement différent. Toutes les données techniques
nécessaires pour réaliser un modèle sont organisées et enregistrées dans les tables d'une base de
données centrale, en fonction de la structure de la base concernée. La quantité d'informations
stockées dépasse largement les besoins d'une agence de voyages. L'agence veut avant tout savoir
quel client a effectué une réservation, à quelle date, combien le passager a payé, etc. Ces différentes
vues et leurs exigences respectives démontrent la nécessité d'utiliser des programmes d'organisation
de données qui répondent à tous les besoins des utilisateurs.

(C) SAP AG BC400 5-6


Modèle de données

BC_TRAVLAG T
Agence de CR
voyages
BC_GEOCITY T
Ville
A BC_CITAIRP T BC_COUNTER T

Affectation Agence CR
Ville - commerciale
A
BC_AIRPORT T aéroport
Aéroport R BC_CUSTOM T

R Client

BC_CARRIER T BC_PLANFLI T BC_SFLIGHT T BC_BOOKING T


H H H
Compagnie Liste des vols Vol Réservations
aérienne

Heure
ã SAP AG 1999

n Toutes les informations logiquement interdépendantes contiennent des entités. Le modèle de données
ABAP comporte des entités individuelles :
Ÿ toutes les villes ;
Ÿ tous les aéroports ;
Ÿ toutes les compagnies aériennes ;
Ÿ tous les itinéraires de vol ;
Ÿ tous les vols.
n Ces éléments sont tous liés les uns aux autres par des rapports prédéterminés :
Ÿ les routes aériennes relient forcément deux aéroports ;
Ÿ un itinéraire se caractérise par une compagnie aérienne, un aéroport de départ, un aéroport de
destination et un horaire de départ ;
Ÿ sur une destination donnée, il peut exister des vols à de nombreuses dates au cours d'une année ;
mais la route aérienne correspondante doit nécessairement exister au préalable pour que le vol soit
créé ;
Ÿ tous les aéroports situés à proximité des villes sont affectés aux villes.
n Ce modèle permet de gérer toutes les données nécessaires, sans redondance ; il est conçu pour qu'une
agence de voyages accède à des informations intéressantes du point de vue de sa clientèle.

(C) SAP AG BC400 5-7


Réalisation dans le Dictionnaire ABAP :

SCARR SPFLI SFLIGHT SBOOK

Compagnie aérienne Liste des vols Vol Réservations


MANDT MANDT MANDT MANDT
CARRID CARRID CARRID CARRID
CARRNAME CONNID CONNID CONNID
..... AIRPFROM FLDATE FLDATE
AIRPTO SEATSMAX BOOKID
DEPTIME SEATSOCC CUSTOMID
..... ..... COUNTER
AGENCYNUM
.....
H

11001 11001 11001 11001


Compagnie H Liste des vols H Vol H Réservations
aérienne

Heure
ã SAP AG 1999

n Tous les exemples et exercices contenus dans les cours ABAP ainsi que toute la documentation
présentent le modèle de système de réservation aérienne de SAP. Tous les objets du Repository du
modèle se trouvent dans la classe de développement BC_DATAMODEL.
n Voici quelques-unes des tables de données de vol le plus fréquemment employées dans les
formations ABAP :
Ÿ SPFLI : table des liaisons aériennes ;
Ÿ SFLIGHT : table des vols ;
Ÿ SBOOK : table des réservations.

(C) SAP AG BC400 5-8


Zones-clés et index secondaires

Index

Zones Clé ... Type de zone ... Courte description ...


MANDT ! S_MANDT ...
CARRID ! S_CARR_ID ...
CONNID ! S_CONN_ID ...
COUNTRYFR LAND1 ...
CITYFROM S_FROM_CIT ...
AIRPFROM S_FROMAIRP ...
COUNTRYTO LAND1 ...
CITYTO S_TO_CITY ...
AIRPTO S_TOAIRP ...
FLTIME S_FLTIME ...
DEPTIME S_DEP_TIME ...
ARRTIME S_ARR_TIME ...
DISTANCE S_DISTANCE ...
DISTID S_DISTID ...
FLTYPE S_FLTYPE ...

ã SAP AG 1999

n Toutes les informations relatives aux attributs techniques de la table sont accessibles quand vous
naviguez jusqu'à sa définition dans le Dictionnaire ABAP.
n Les informations suivantes sont intéressantes pour augmenter la performance des accès à la base de
données :
Ÿ zones clés : si les enregistrements demandés à la base de données sont retrouvés selon les zones de
clés, l'optimiseur de la base de données peut exécuter l'accès en utilisant un index primaire. Des
cases à cocher sont disponibles pour toutes les zones-clé ;
Ÿ index secondaires : vous pouvez également utiliser des index secondaires pour sélectionner des
enregistrements. Le bouton de commande "Index" permet des les afficher dans une boîte de
dialogue. Vous pouvez choisir un index en double-cliquant simplement dessus. Le système affiche
ensuite un écran comportant des informations complémentaires sur cet index.

(C) SAP AG BC400 5-9


Lecture de tables de base de données

Informations
Informations sur
sur les
les tables
tables de
de base
base de
de données
données

Lecture
Lecture de
de tables
tables de
de base
base de
de données
données

Contrôle
Contrôle d'autorisations
d'autorisations

Lecture
Lecture de
de tables
tables de
de base
base de
de données
données multiples
multiples

ã SAP AG 1999

(C) SAP AG BC400 5-10


SELECT : vue d'ensemble

Quelles colonnes ?SELECT <result> FROM <table> Quelle(s) table(s) ?


INTO <destination> Vers quelles zones ?

WHERE <condition> Quelles lignes ?

Ligne individuelle
} Lignes multiples
}
Colonne
spécifique

ã SAP AG 1999

n L'instruction SELECT d'Open SQL lit des données dans la base.


n Elle repose sur une logique complexe que vous utilisez pour accéder à de nombreux types de table.
n L'instruction consiste en une série de clauses, chacune d'elle possédant une tâche différente.
- La clause SELECT spécifie : si le résultat de la sélection doit se présenter sur une ou plusieurs
lignes ;
les zones qui doivent être incluses dans le résultat ;
si le résultat peut contenir deux lignes identiques ou plus.
- La clause INTO spécifie l'objet de donnés interne du programme dans lequel vous souhaitez
placer les données sélectionnées.
- La clause FROM spécifie la source des données (table de base de données ou vue).
- La clause WHERE spécifie les conditions que les résultats de la sélection doivent remplir. En
fait, il détermine donc quelles sont les lignes à inclure dans la table de résultats.
- Vous trouverez des informations sur les autres clauses dans l'index de l'Éditeur ABAP, au mot-
clé SELECT.

(C) SAP AG BC400 5-11


Requête adressée à la base de données

Programme ABAP

Objets de
pa_car
données

wa_
wa_scarr

Bloc de
traitement
ABAP Conversion
spécifique
SELECT ... Open SQL de base de Base de données SQL
données

Interface de
scarr
base de
données
Système d'exécution ABAP

ã SAP AG 1999

n Les instructions Open SQL composent un sous-ensemble de Standard SQL qui est entièrement
intégré dans le langage ABAP. Vous les utilisez pour accéder à la base de données selon une
procédure uniforme à partir de vos programmes, quel que soit le système de base de données. Les
instructions Open SQL sont converties en instructions SQL spécifiques de la base de données par
l'interface de base de données.

(C) SAP AG BC400 5-12


Traitement des enregistrements individuels

Programme ABAP

pa_car Table
Objets de données
de base de
wa_
wa_scarr données
SCARR

Bloc de traitement ABAP


SELECT SINGLE *
FROM scarr
INTO wa_scarr
WHERE carrid = pa_car.
IF sy-subrc = 0.
... Table de
base de scarr
données

Système d'exécution ABAP

ã SAP AG 1999

n L'instruction SELECT SINGLE* vous permet de lire une ligne individuelle à partir d'une table de
base de données. Toutes les zones-clés doivent alors comporter la clause WHERE. Elle informe
l'interface de base de données que toutes les colonnes appartenant à cette ligne doivent être lues. Si
vous souhaitez uniquement une sélection spécifique de colonnes, vous pouvez y insérer une
structure.
n Vous devez introduire le nom de la structure dans laquelle vous désirez que l'interface de base de
données copie un enregistrement de données après la clause INTO. Cette structure doit être
identique à celle des colonnes de la table, qui sont lues et alignées à gauche.
n Si vous utilisez l'option CORRESPONDING FIELDS OF dans la clause INTO, vous pouvez
remplir l'espace de travail cible composante par composante. Le système ne retient que celles qui
portent le même nom que les colonnes de la table. Si vous n'indiquez pas l'option, il complète
l'espace de travail à partir de la gauche, indépendamment de sa structure.
n Si le système trouve l'entrée de table répondant aux conditions spécifiées, SY-SUBRC adopte la
valeur 0.
n L'option SINGLE informe la base de données qu'une ligne individuelle doit être lue. La base de
données termine la recherche une fois cette ligne trouvée. SELECT SINGLE apporte donc une
meilleure performance d'accès à un enregistrement individuel qu'une boucle SELECT, si vous
fournissez les valeurs de toutes les zones-clés.

(C) SAP AG BC400 5-13


Boucles SELECT

Objets de données Programme ABAP


pa_car Table de
base de données
wa_sbc400focc
wa_sbc400focc SFLIGHT

Bloc de traitement ABAP


SELECT
SELECT carrid connid fldate
seatsocc seatsmax
FROM sflight
INTO wa_sbc400focc
WHERE carrid = pa_car.
Instructions pour chaque enregistrement lu
ENDSELECT
ENDSELECT.
IF sy-subrc = 0. Interface de
... base de
données

Système d'exécution ABAP

ã SAP AG 1999

n Si vous n'utilisez pas l'option SINGLE dans l'instruction SELECT, le système lit plusieurs
enregistrements multiples de la base de données. La liste des zones détermine les colonnes dont les
données doivent être lues.
n Le nombre de lignes à lire peut être limité par la clause WHERE. Elle effectue des restrictions soit
selon les zones-clés de la table de base de données, soit selon un index secondaire. Vous trouverez
des informations complémentaires sur les zones-clés et les index secondaires dans le Dictionnaire
ABAP. Double-cliquez sur la clause FROM de la table pour y accéder.
n Cette clause ne doit comporter que le nom des zones de table que vous voulez lire. Le nom de la
table à laquelle vous voulez accéder se trouve dans la clause FROM. (Exemple d'une instruction
correcte : SELECT ... FROM spfli WHERE carrid = ... , exemple d'une instruction
incorrecte : SELECT ...FROM spfli WHERE spfli-carrid = ... )
n De multiples conditions logiques peuvent être ajoutées dans la clause WHERE en utilisant AND ou
OR.
n La base de données envoie les données à l'interface sous forme de piles. Le système d'exécution
ABAP copie ligne par ligne les enregistrements de données dans la zone cible en utilisant une
boucle. Il effectue également le traitement séquentiel de toutes les instructions situées entre SELECT
et ENDSELECT.
n SY-SUBRC = 0, lorsque le système a pu sélectionner au moins une entrée. Une fois l'instruction
SELECT exécutée dans chaque passage de boucle, la zone de système SY-DBCNT contient le
nombre de lignes lues. Après l'instruction ENDSELECT, il contient le nombre total de lignes lues.

(C) SAP AG BC400 5-14


Accès à des tableaux

Objets de données Programme ABAP


pa_car
Table de
base de données
itab_
itab_focc SFLIGHT

Bloc de traitement ABAP


SELECT carrid connid fldate
seatsmax seatsocc
FROM sflight
INTO TABLE itab_focc
WHERE carrid = pa_car.

Interface de
IF sy-subrc = 0. base de
... données

Système d'exécution ABAP

ã SAP AG 1999

n L'option INTO TABLE <itab> copie le contenu de l'interface de base de données dans la table
interne itab. Cette opération s'appelle ARRAY FETCH.
n Comme les ARRAY FETCH ne constituent pas une boucle, aucune instruction ENDSELECT n'est
utilisée.
n SY-SUBRC = 0, lorsque le système a lu au moins une entrée de table.
n Pour plus d'informations sur les array fetch et sur les tables internes, reportez-vous au chapitre
Tables internes.

(C) SAP AG BC400 5-15


Clauses INTO

Programme ABAP

DATA wa_sbc400focc TYPE sbc400focc.

SELECT SINGLE carrid connid fldate seatsmax seatsocc


FROM sflight
INTO wa_sbc400focc
wa_sbc400focc
WHERE carrid = pa_car
AND connid = pa_con
AND fldate = pa_date.
Même type que
la colonne lue

ã SAP AG 1999

n La clause INTO spécifie les objets de données dans lesquels vous souhaitez placer les données de la
table. Vous pouvez :
Ÿ définir dans votre programme une structure plate qui comporte les zones dans le même ordre que
la liste des zones de la clause SELECT. Ensuite, indiquez le nom de la structure dans la clause
INTO. Le contenu est copié par position. Les noms de zones de structure ne sont pas pris en
compte.
Ÿ indiquer un ensemble d'objets de données individuels dans la clause INTO. Par exemple :
DATA: gd_carrid TYPE sflight-carrid,
gd_connid TYPE sflight-connid,
gd_fldate TYPE sflight-fldate,
gd_seatsmax TYPE sflight-seatsmax,
gd_seatsocc TYPE sflight-seatsocc.
START-OF-SELECTION.
SELECT carrid connid fldate seatsmax seatsocc
FROM sflight
INTO (gd_carrid, gd_connid, gd_fldate, gd_seatsmax, gd_seatsocc)
WHERE ...

(C) SAP AG BC400 5-16


INTO CORRESPONDING FIELDS

Programme ABAP

DATA wa_sdyn_conn TYPE sdyn_conn.

SELECT SINGLE carrid connid deptime


FROM spfli
INTO CORRESPONDING FIELDS OF wa_sdyn_conn
WHERE carrid = pa_car
AND connid = pa_con.
Même nom que
la colonne lue

mandt carrid connid ... deptime

mandt carrid connid ... deptime


ã SAP AG 1999

n Si vous utilisez la clause INTO CORRESPONDING FIELDS, les données sont placées dans les
zones de structure du même nom.
n Avantages de cette construction :
Ÿ la structure ne doit pas être structurée comme la liste des zones et ne doit pas être alignée à gauche
;
Ÿ elle est facile à gérer, car l'extension de la liste des zones n'exige pas d'autres modifications du
programme, pour autant qu'une zone de la structure a le même nom et type.
n Désavantages de cette construction :
Ÿ INTO CORRESPONDING FIELDS est plus intensif au moment de l'exécution que INTO. La
durée d'exécution peut par conséquent se prolonger.
n Si vous souhaitez placer des données dans des colonnes de table interne de même nom en utilisant
une création de tableaux, utilisez INTO CORRESPONDING FIELDS OF TABLE <itab>.

(C) SAP AG BC400 5-17


Contrôles d'autorisation

Informations
Informations sur
sur les
les tables
tables de
de base
base de
de données
données

Lecture
Lecture de
de tables
tables de
de base
base de
de données
données

Contrôle
Contrôle d'autorisations
d'autorisations

Lecture
Lecture de
de tables
tables de
de base
base de
de données
données multiples
multiples

ã SAP AG 1999

(C) SAP AG BC400 5-18


Contrôles d'autorisations dans des programmes ABAP

Fiches
utilisateur
Écran de BC400-00
sélection CONTRÔLE
D'AUTORISATION Profil1
Profil2
Profil S_CARRID
Autorisation pour
Non SY-SUBRC Autorisation
Note
= 0 Object S_CARRID
? Autorisation pour
Oui Autorisation
Object S_CARRID
SELECT
Profil4
Autorisation pour
Autorisation
Object S_TCODE

ã SAP AG 1999

n Vous devez exécuter un contrôle d'autorisation avant d'accéder à la table de base de données. Vous
devez programmer vous-même ces contrôles d'autorisation. AUTHORITY-CHECK vérifie d'abord
s'il existe pour l'utilisateur une autorisation contenant toutes les valeurs requises. Vous contrôlez
ensuite la valeur du code dans la zone système SY-SUBRC. Si cette valeur est à 0, l'utilisateur a
l'autorisation requise et le programme peut continuer. Si cette valeur n'est pas à 0, l'utilisateur ne
possède pas l'autorisation requise ; vous devez afficher un message et choisir l'action appropriée.
n Vous apprendrez plus loin à rendre les zones d'écran de sélection disponibles pour la saisie, si vous
effectuez le contrôle d'autorisation juste après l'écran de sélection. Vous apprendrez aussi à éditer un
message lorsque l'utilisateur n'a pas l'autorisation requise.

(C) SAP AG BC400 5-19


Objets d'autorisation et autorisations

"Afficher" autorisation
pour Objet S_CARRID
CARRID: *

ACTVT: Afficher
Objet : S_CARRID
CARRID (compagnie aérienne)

ACTVT (Activité)
"Modifier" autorisation
pour Objet S_CARRID
Activités : CARRID: LH
Créer = 01
Modifier = 02 ACTVT: Modifier
Afficher = 03

ã SAP AG 1999

n Toutes les données du système SAP doivent être protégées contre les accès non autorisés.
n Lorsque l'utilisateur gère des données de base, l'administrateur système lui donne une autorisation.
Pendant ce processus, vous devrez déterminer exactement à quelles données les utilisateurs ont
l'autorisation d'accéder et quel type d'accès doit être autorisé. Par exemple, vous voulez peut-être
permettre aux utilisateurs d'afficher des données pour toutes les compagnies aériennes, mais
uniquement de modifier des données pour certaines zones sélectionnées. Dans ce cas, le système doit
chercher une combinaison des zones "activité" et "compagnie aérienne" chaque fois qu'il exécute un
contrôle d'autorisation.
n Les objets d'autorisation définissent simplement la combinaison des zones qui doivent être adressées
simultanément et servir de modèles pour les autorisations et les contrôles d'autorisation. Ils
s'organisent en classes d'objets dans le but de simplifier leur recherche et leur gestion ; une ou
plusieurs classes d'objets peuvent exister dans chaque application. Vous appelez la transaction de
gestion de l'objet d'autorisation à partir du menu "Développement" de ABAP Workbench. Une liste
complète de tous les objets de développement, triée selon la classe et comprenant leurs zones
correspondantes et la documentation, fait partie de cette transaction.

(C) SAP AG BC400 5-20


AUTHORITY-CHECK

Paramétrer toutes
les autorisations
AUTHORITY-CHECK pour Objet S_CARRID
Object S_CARRID Contrôle
ID 'CARRID' FIELD 'LH' ACTVT
ID 'ACTVT' FIELD '02'.
03 x x x x x
Résultats
IF sy-subrc ne 0. d'état 02 x
* Appropriate system reaction
01
* to failed check

ENDIF. CARRID
AA AZ DL LH UA

ã SAP AG 1999

n Pour effectuer des contrôles d'autorisation dans des programmes, vous devez spécifier l'objet et les
valeurs dont l'utilisateur a besoin pour accéder à cet objet. Ne précisez pas le nom de l'autorisation.
n Notre exemple contrôle si l'utilisateur est autorisé pour l'objet S_CARRID, qui a la valeur "LH"
dans la zone CARRID (compagnie aérienne) et la valeur "02" pour "Modifier" dans la zone ACTVT
(activité). Vous trouverez les abréviations des activités possibles dans les tables TACT et TACTZ,
mais également dans les objets appropriés.
n Important : l'instruction Authority-Check exécute le contrôle d'autorisation et retourne une valeur
de code retour adéquate dans SY-SUBRC. Lorsque vous contrôlez ce code retour, vous pouvez
spécifier les conséquences d'une autorisation manquante (par exemple : terminer le programme, ou
afficher un message et ignorer certaines lignes du code).

(C) SAP AG BC400 5-21


Insertion d'AUTHORITY-CHECK dans des programmes

Modèle
Insérer instruction

...
...
AUTHORITY-CHECK S_CARRID
...
...

AUTHORITY-CHECK OBJECT 'S_CARRID'


Le système Vous insérez
génère ID CARRID FIELD '__________' des variables
le code ABAP ID ACTVT FIELD '__________'. et des
paramètres
IF SY-SUBRC
IF SY-SUBRC NE
NE 0.
0.

ENDIF. Processus
code retour
ã SAP AG 1999

n Vous devez spécifier toutes les zones de l'objet dans AUTHORITY-CHECK, sinon vous recevez un
code retour différent de zéro. Si vous ne voulez pas exécuter le contrôle d'une zone déterminée,
entrez DUMMY après le nom de zone. Par exemple : lors de l'appel d'une transaction pour modifier les
données de vol, il est normal de vérifier si l'utilisateur est autorisé à modifier les entrées d'une
compagnie aérienne déterminée : AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'ACTVT' FIELD '02' ID 'CARRID' DUMMY.
n Principaux codes de retour dans AUTHORITY-CHECK :
- 0 : l'utilisateur dispose d'une autorisation contenant les valeurs nécessaires ;
- 4 : l'utilisateur ne dispose pas de l'autorisation requise ;
- 8 : le contrôle n'a pas abouti car les zones de l'objet n'ont pas toutes été spécifiées.
n Vous trouverez une liste complète des codes de retour dans la documentation, au mot-clé
AUTHORITY-CHECK.
n Vous pouvez également spécifier une zone individuelle après l'option FIELD, mais pas de table de
sélection. Pour effectuer un contrôle AUTHORITY-CHECK sur toutes les valeurs d'une table de
sélection, utilisez les modules fonction.

(C) SAP AG BC400 5-22


Lecture de tables de base de données multiples

Informations
Informations sur
sur les
les tables
tables de
de base
base de
de données
données

Lecture
Lecture de
de tables
tables de
de base
base de
de données
données

Contrôle
Contrôle d'autorisations
d'autorisations

Lecture
Lecture de
de tables
tables de
de base
base de
de données
données multiples
multiples

ã SAP AG 1999

(C) SAP AG BC400 5-23


Synthèse : lecture de tables de base de données multiples

Utilisez les composantes fournies par SAP


qui englobent
Objet la recherche de données

Méthodes des
classes générales

BAPI
Objet de
gestion
ce
r fa s
te e
In dul on
Base de o cti
M n
données fo
logique Groupe de
fonctions

ã SAP AG 1999

n Utilisez les composantes réutilisables disponibles qui englobent la recherche de données complexes.
Quatre techniques possibles :
Ÿ méthodes de classes générales ;
Ÿ méthodes d'objets de gestion ;
Ÿ modules fonction ;
Ÿ des bases de données logiques sont des programmes de recherche de données fournis par SAP qui
renvoient les données de manière hiérarchique dans une séquence logique.
n Vous trouverez des informations sur les nombreuses techniques dans le chapitre Réutiliser les
composantes.

(C) SAP AG BC400 5-24


Dictionnaire ABAP : vues

SPFLI SCARR
Mandt Carrid Connid ... Cityfrom ... Mandt Carrid Carrname ...

VUE
Mandt Carrid Connid Cityfrom Carrname

ã SAP AG 1999

n Les vues s'appliquent à différentes tables du Dictionnaire ABAP. Elles contiennent des zones issues
d'une très grande table ou de plusieurs tables.
n Utilisez les vues pour regrouper les informations des zones de différentes tables, les présenter sous
une forme spécifique et travailler dans le système R/3.
n Vous utilisez principalement les vues pour la programmation en ABAP et pour l'aide en ligne (F4).
n Si aucune des composantes appropriées à vos objectifs n'est disponible, vous pouvez exécuter un
accès complexe à la base de données à l'aide des instructions ABAP-OPEN- SQL. Vous devez
comparer les mérites de ces nombreuses techniques. Comme l'utilisation d'une technique inadéquate
peut donner lieu à de considérables problèmes de performance, vous trouverez des informations
complémentaires sur la performance optimale des accès à la base de données dans la documentation
ou dans le cours BC490 Analyse des performances ABAP.

(C) SAP AG BC400 5-25


Dialogues base de données 1 : résumé du chapitre

Vous êtes maintenant capable :


l d'obtenir des informations sur les tables de base
de données à partir du Dictionnaire ABAP
l de répertorier plusieurs moyens de trouver des
tables de base de données
l de programmer un accès en mode lecture à des
lignes et colonnes spécifiques d'une table de base
de données particulière
l d'appliquer des contrôles d'autorisation
l Répertorier les différents types de possibilités
d'accès en mode lecture pour des tables de base
de données.

ã SAP AG 1999

(C) SAP AG BC400 5-26


Exercices

Chapitre : Dialogues base de données 1


Sujet : Boucles SELECT

À la fin de ces exercices, vous serez en mesure :


• d’utiliser l'instruction ABAP SELECT...ENDSELECT pour lire
les données de la table de base de données dans votre programme.

Créez un programme qui affiche tous les vols d’une compagnie aérienne
sélectionnée dans une liste. Dans le programme, vous devez également
calculer le taux de remplissage de chaque vol et ensuite l’afficher.
Les données de vol se trouvent dans la table de base de données
SFLIGHT.

Programme : ZBC400_##_SELECT_SFLIGHT
Solution modèle : SAPBC400DDS_SELECT_SFLIGHT

1-1 Créez le programme ZBC400_##_SELECT_SFLIGHT sans TOP include.


Affectez votre programme à la classe de développement ZBC400_## et à l'ordre
de modification pour votre projet "BC400…" (## est votre numéro de groupe).

1-2 Créez une structure en référence à la structure SBC400FOCC, qui est définie dans
le Dictionnaire ABAP. Pour découvrir les composantes de cette structure,
consultez sa définition dans le Dictionnaire ABAP.

1-3 Limitez les lignes de la sélection de base de données par une clé primaire. Pour
connaître les zones clé, regardez la définition de SFLIGHT du Dictionnaire
ABAP. La zone MANDT est automatiquement complétée par le système.
Programmez un écran de sélection dans lequel l’utilisateur peut entrer une valeur
pour la deuxième zone-clé (CARRID).

1-4 Lisez tous les vols de la table de base de données SFLIGHT qui correspondent à la
compagnie aérienne indiquée dans l’écran de sélection par l’utilisateur. Utilisez un
bloc SELECT … ENDSELECT. Entrez les données ligne par ligne dans la
structure que vous avez créée à l’exercice 1-2. Assurez-vous que vous lisez
uniquement les zones de la table de base de données pour lesquelles il existe
également une zone cible dans la structure. Veillez à spécifier les zones-clé dans la
sélection, de sorte que la base de données puisse utiliser l’index primaire.
(C) SAP AG BC400 5-27
1-5 Dans la boucle SELECT, calculez le pourcentage d’occupation en utilisant la zone
correspondante de l’espace de travail. Affectez le résultat à la zone POURCENTAGE
de votre structure.

1-6 Créez une liste affichant les informations consultées dans la base de données, et le
pourcentage d’occupation de chaque vol.

(C) SAP AG BC400 5-28


Chapitre : Dialogues base de données 1
Sujet : Boucles SELECT et chargement des tables internes

À la fin de ces exercices, vous serez en mesure :


d’utiliser l'instruction ABAP SELECT … ENDSELECT pour lire les
données d’une table de base de données de votre programme et de
remplir une table interne.

La tâche est identique à celle de l’exercice 1. Affichez sur la liste les


données triées en fonction du pourcentage d’occupation. Pour ce faire,
vous devez remplir une table interne avec les données demandées et
ensuite les trier selon la zone d’occupation.

Programme : ZBC400_##_SELECT_SFLIGHT_ITAB
Solution modèle : SAPBC400DDS_SELECT_SFLIGHT_TAB

2-1 Copiez votre programme ZBC400_##_SELECT_SFLIGHT ou la solution modèle


SAPBC400DDS_SELECT_SFLIGHT vers le nom
ZBC400_##_SELECT_SFLIGHT_ITAB. Affectez votre programme à la classe
de développement ZBC400_## et à l'ordre de modification pour votre projet
"BC400…" (## est votre numéro de groupe).

2-2 Outre votre structure qui se réfère au type du Dictionnaire ABAP SBC400FOCC,
créez une table interne avec le type ligne SBC400FOCC. Utilisez les Cas d’emploi
pour le type de ligne du Dictionnaire ABAP SBC400FOCC pour y trouver un type
de table adéquat.

2-3 Remplissez la table interne ligne par ligne en utilisant une instruction APPEND dans
la boucle SELECT.

2-4 Triez la table interne sur le taux de remplissage.

2-5 Affichez le contenu trié de la table interne dans une liste. Pour ce faire, utilisez une
structure LOOP … ENDLOOP.

(C) SAP AG BC400 5-29


FACULTATIF :

Solution modèle : SAPBC400DDS_SELECT_ARRAY_FETCH

2-6 Copiez le programme ZBC400_##_SELECT_SFLIGHT_ITAB vers le


programme ZBC400_##_ARRAY_FETCH_SFLIGHT.

2-7 Remplacez la boucle SELECT par un ARRAY FETCH et complétez la table interne
avec les données appropriées de la table SFLIGHT. La colonne du pourcentage
d’occupation contient uniquement des valeurs initiales.

2-8 Calculez le pourcentage d’occupation pour chaque ligne de la table interne en


utilisant une boucle, et modifiez la ligne en utilisant une instruction MODIFY. Pour
découvrir comment utiliser MODIFY dans une boucle, référez-vous à la
documentation mot-clé.

(C) SAP AG BC400 5-30


Chapitre : Dialogues base de données 1
Sujet : Contrôles d’autorisations

À la fin de ces exercices, vous serez en mesure :


• d’effectuer des contrôles d’autorisations.

Modifiez vos programmes ZBC400_##_SELECT_SFLIGHT et


ZBC400_##_SELECT_SFLIGHT_ITAB de sorte que les données
puissent être consultées à partir de la base de données et affichées dans la
liste seulement si l’utilisateur dispose de l’autorisation pour la compagnie
aérienne demandée.

Programme : ZBC400_##_AUTHORITY_CHECK
Solution modèle : SAPBC400DDS_AUTHORITY_CHECK,
SAPBC400DDS_AUTHORITY_CHECK_2 et
SAPBC400DDS_AUTHORITY_CHECK_3

3-1 Modifiez vos programmes ZBC400_##_SELECT_SFLIGHT et


ZBC400_##_SELECT_SFLIGHT_ITAB comme suit :

3-2 ajoutez un contrôle d’autorisation qui contrôle l’objet S_CARRID ; vérifiez que
la base de données n’est pas accessible à l’utilisateur qui ne dispose pas
d’autorisation de la compagnie aérienne saisie dans l’écran de sélection ; vérifiez
au contraire que le programme affiche un message d’erreur approprié.

3-3 Redémarrez votre programme. Sur l’écran de sélection, essayez d’entrer AA pour la
compagnie aérienne, ensuite UA.

(C) SAP AG BC400 5-31


Solutions

Chapitre : Dialogues base de données 1


Sujet : Boucles SELECT

Solution modèle : Programme SAPBC400DDS_SELECT_SFLIGHT

*&--------------------------------------------------------------*
*& Report SAPBC400DDS_SELECT_SFLIGHT
*
*&--------------------------------------------------------------*
REPORT sapbc400dds_select_sflight .

DATA: wa_flight TYPE sbc400focc.


PARAMETERS: pa_car TYPE s_carr_id.

START-OF-SELECTION.
* Sélectionner tous les enregistrements de la table de base de
données SFLIGHT correspondant
* à carrier PA_CAR
SELECT carrid connid fldate seatsmax seatsocc FROM sflight
INTO CORRESPONDING FIELDS OF wa_flight
WHERE carrid = pa_car.
* Calculer l’occupation de chaque vol
wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax.
* Créer liste
WRITE : / wa_flight-carrid COLOR COL_KEY,
wa_flight-connid COLOR COL_KEY,
wa_flight-fldate COLOR COL_KEY,
wa_flight-seatsocc,
wa_flight-seatsmax,
wa_flight-percentage,'%'.
ENDSELECT.

(C) SAP AG BC400 5-32


Chapitre : Dialogues base de données 1
Sujet : Boucles SELECT et chargement des tables internes

Solution modèle : Programme SAPBC400DDS_SELECT_SFLIGHT_TAB

*&--------------------------------------------------------------*
*& Report SAPBC400DDS_SELECT_SFLIGHT_TAB *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400dds_select_sflight_tab .

DATA: wa_flight TYPE sbc400focc,


it_flight TYPE sbc400_t_sbc400focc.
PARAMETERS: pa_car TYPE s_carr_id.

START-OF-SELECTION.

* Sélectionner tous les enregistrements de la table de base de


données SFLIGHT correspondant
* à carrier PA_CAR
SELECT carrid connid fldate seatsmax seatsocc FROM sflight
INTO CORRESPONDING FIELDS OF wa_flight
WHERE carrid = pa_car.
* Calculer l’occupation de chaque vol
wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax.
* Créer table interne
APPEND wa_flight TO it_flight.
ENDSELECT.
* Trier table interne
SORT it_flight by percentage.

* Créer liste à partir de la table interne triée

(C) SAP AG BC400 5-33


LOOP AT it_flight into wa_flight.

WRITE: / wa_flight-carrid COLOR COL_KEY,


wa_flight-connid COLOR COL_KEY,
wa_flight-fldate COLOR COL_KEY,
wa_flight-seatsocc,
wa_flight-seatsmax,
wa_flight-percentage,'%'.
ENDLOOP.

(C) SAP AG BC400 5-34


Chapitre : Dialogues base de données 1
Sujet : Création de tableaux (facultatif)

FACULTATIF:

Solution modèle : Program SAPBC400DDS_SELECT_ARRAY_FETCH

*&--------------------------------------------------------------*
*& Report SAPBC400DDS_SELECT_ARRAY_FETCH *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400dds_select_array_fetch .

DATA: wa_flight TYPE sbc400focc,


it_flight TYPE sbc400_t_sbc400focc.
PARAMETERS: pa_car TYPE sflight-carrid.
*----------------------------------------------------------------
* Facultatif:
* Création de tableaux pour compléter les 5 premières colonnes de la
table interne,
*----------------------------------------------------------------
SELECT carrid connid fldate seatsmax seatsocc FROM sflight
INTO CORRESPONDING FIELDS OF TABLE it_flight
WHERE carrid = pa_car.

* Un enregistrement au moins est sélectionné


IF sy-subrc = 0.
*Calculer le pourcentage dans une boucle et modifier la table interne
à compléter
* 6e colonne de la table interne
LOOP AT it_flight INTO wa_flight.
wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax.
MODIFY it_flight from wa_flight.
ENDLOOP.
(C) SAP AG BC400 5-35
SORT it_flight by percentage.

* Nouvelle boucle sur la table interne pour écrire le contenu des


enregistrements sur une liste
LOOP AT it_flight INTO wa_flight.

WRITE : / wa_flight-carrid COLOR COL_KEY,


wa_flight-connid COLOR COL_KEY,
wa_flight-fldate COLOR COL_KEY,
wa_flight-seatsocc,
wa_flight-seatsmax,
wa_flight-percentage,'%'.
ENDLOOP.

ENDIF.

(C) SAP AG BC400 5-36


Chapitre : Dialogues base de données 1
Sujet : Contrôles d’autorisations

Solution modèle :

Programmes SAPBC400DDS_AUTHORITY_CHECK,
SAPBC400DDS_AUTHORITY_CHECK_2 et
SAPBC400DDS_AUTHORITY_CHECK_3

*&--------------------------------------------------------------*
*& Report SAPBC400DDS_AUTHORITY_CHECK *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400dds_authority_check_#.
CONSTANTS actvt_display TYPE activ_auth value '03'.
DATA: wa_flight TYPE sbc400focc,
...
PARAMETERS: pa_car TYPE sflight-carrid.
START-OF-SELECTION.
* Authority-Check: l’utilisateur est-il autorisé à lire les données
pour la compagnie aérienne
* PA_CAR?
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD pa_car
ID 'ACTVT' FIELD actvt_display.

CASE sy-subrc.
* L’utilisateur est autorisé
WHEN 0.
* SELECT loop or Array Fetch ...
* L’utilisateur ne possède pas l'autorisation ou autre erreur de
authority-check
WHEN OTHERS.
WRITE: / 'Authority-Check Error'(001).
ENDCASE.

(C) SAP AG BC400 5-37


(C) SAP AG BC400 5-38
Modularisation interne du programme

Contenu :
l Blocs événements ABAP
l Sous-programmes

ã SAP AG 1999

(C) SAP AG BC400 6-1


Modularisation interne du programme : objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure de :

l d'expliquer le fonctionnement d'un programme


contenant des événements au moment de
l'exécution en utilisant INITIALIZATION et
START-OF-SELECTION comme exemples
l d'encapsuler des fonctions dans un sous-
programme simple avec un interface.

ã SAP AG 1999

(C) SAP AG BC400 6-2


Éléments possibles d'un programme ABAP

Bloc
événement
Définitions de
Bloc zone et type local
événement
Écran de sélection

Process
Bloc Module Before
événement Output

Interface Module Process


Bloc Sous-
After
Input Écran
événement programmes

ã SAP AG 1999

n Un programme ABAP est un ensemble de blocs de traitement. Un bloc de traitement est une section
passive du code du programme qui est traitée de manière séquentielle à son démarrage.
n Les blocs de traitement représentent les plus petites unités en ABAP. Il est impossible de les
décomposer et donc de les imbriquer.
n De nombreux types de blocs de traitement ABAP existent :
Ÿ les blocs événements sont des blocs de traitement ABAP appelés par le processeur ABAP. Ils
peuvent logiquement appartenir au programme exécutable, à l'écran de sélection, à la liste ou à
l'écran. Ce chapitre traite des blocs événements qui appartiennent au programme exécutable. Vous
trouverez des informations sur les blocs événements qui appartiennent à l'écran de sélection, à la
liste ou à l'écran dans les chapitres sur les dialogues utilisateur.
Ÿ le traitement des sous-programmes se déclenche par une instruction ABAP. Les paramètres
peuvent être transférés aux sous-programmes en utilisant une interface, et les sous-programmes
peuvent contenir des variables locales.
Ÿ les modules sont des blocs de traitement ABAP propres au traitement des dynpros. Par
conséquent, les modules seront traités dans le chapitre Dialogues utilisateur : dynpros.
n Les zones de mémoire sont accessibles pour tous les objets de données générales d'un programme,
lorsque celui-ci est lancé. Les instructions de déclaration ABAP ne sont dès lors pas des
composantes des blocs de traitement ABAP mais sont rassemblées à partir du code source général en
utilisant une recherche lorsque le programme est généré. Les objets de données locales des sous-
programmes en sont des exceptions.

(C) SAP AG BC400 6-3


Exemple : programme ABAP comportant des blocs
événements et un écran de sélection

Définitions de zone et de type local

PARAMETERS pa_date LIKE sy-datum


Écran de sélection DEFAULT sy-datum.
généré par
generates

INITIALIZATION Bloc événement

pa_date = pa_date - 7.

START-OF-SELECTION. Bloc événement

WRITE pa_date.

ã SAP AG 1999

n Les programmes étudiés jusqu'à présent ne comportaient qu'un seul bloc de traitement, qui s'ajoutait
à la déclaration des données. Dans de tels cas, il est inutile de déclarer le bloc de façon explicite.
Cependant, dans des programmes plus complexes, plusieurs blocs de traitement différents sont
nécessaires, et leur type et nom sont spécifiés.
n Notre programme est un exemple de blocs événements. Il contient une valeur de saisie pour une date
sur un écran de sélection. La valeur par défaut est la date de la semaine précédente. L'instruction
PARAMETERS ne peut remplir cette valeur, car un calcul est requis. L'option DEFAULT de
l'instruction PARAMETERS permet à l'objet de données de remplir la valeur par défaut au démarrage
du programme. Les valeurs par défaut peuvent être des littéraux ou des zones de la structure sy. Le
système d'exécution complète la zone sy-datum par la date effective au démarrage du programme.
Utilisez l'événement INITIALIZATION pour modifier des variables à l'exécution, mais avant
l'envoi de l'écran de sélection standard. START-OF-SELECTION est un bloc événement pour créer
des listes.
n Les déclarations globales sont reconnues par le système grâce au mot-clé déclaratif qu'elles utilisent.
Elles constituent un bloc de traitement logique (indépendamment de leur emplacement dans le code
source). Lorsque vous générez le programme, le système recherche dans le code source les
instructions déclaratives. Toutefois, pour plus de lisibilité, regroupez ces déclarations au début du
programme. L'instruction PARAMETERS représente un des éléments du langage déclaratif. Lorsque
le programme est généré, un écran de sélection comportant des informations sur l'objet de données
élémentaire du type spécifié est également généré.

(C) SAP AG BC400 6-4


Comportement d'un programme type pendant l'exécution

Programme ABAP pa_date


Lancement
du
programme 20000101
INITIALIZATION.
pa_date = pa_date - 7. 19991225

??
Mémoire-
START-OF-SELECTION.
tampon
de liste
WRITE pa_date. pour
liste de base

Système d'exécution ABAP

Temps
ã SAP AG 1999

n Les événements les plus simples sont ceux destinés à un programme exécutable (type 1).
n Le processeur ABAP appelle des blocs événements dans une séquence désignée pour générer et
traiter des listes.
n le bloc événement INITIALIZATION est le premier à être appelé ;
n un écran de sélection est ensuite envoyé au serveur de présentation ;
n dès que vous quittez l'écran de sélection, START-OF-SELECTION est appelé ;
n si le bloc événement START-OF-SELECTION contient des instructions ABAP WRITE, SKIP
ou ULINE, un buffer de liste est rempli ;
n un buffer de liste est ensuite envoyé au serveur de présentation sous forme de liste.

(C) SAP AG BC400 6-5


Blocs événements dans des programmes exécutables

l Introduit par un mot-clé


Programme ABAP
événementiel
l Un événement est
INITIALIZATION. délimité par le début du
bloc de traitement
suivant
l À différents blocs
événements
correspondent
différentes tâches
START-OF-SELECTION. l Le processeur ABAP
détermine l'ordre de
traitement des
événements
l Bloc événement par
Système d'exécution ABAP défaut :
START-OF-SELECTION
Temps
ã SAP AG 1999

n Les événements sont des blocs de traitement appelés par le processeur ABAP. Celui-ci détermine
l'ordre de traitement des événements.
n Un programme exécutable comporte différents événements correspondant aux tâches de création de
listes.

(C) SAP AG BC400 6-6


Blocs événements : syntaxe

REPORT ...

PARAMETERS: pa_date LIKE sy-datum DEFAULT sy-datum.

INITIALIZATION.
INITIALIZATION. " Default values for selection screen
pa_date = pa_date - 7.

START-OF-SELECTION.
START-OF-SELECTION. " Start of data processing
WRITE pa_date.

Le traitement des blocs événements du


code source ne dépend pas de l'ordre
par lequel ils sont appelés dans le runtime system. call

ã SAP AG 1999

n Dans les programmes ABAP, chaque événement est introduit par un mot-clé événementiel. Il se
termine lorsque le bloc de traitement suivant démarre. Aucune instruction ABAP ne conclut un
événement de manière explicite.
n Les événements sont appelés par le processeur ABAP. L'ordre dans lequel vous les placez dans un
programme importe peu : le système les appelle toujours dans un ordre donné.
n START-OF-SELECTION est le premier événement pour générer une liste. Le processeur ABAP
l'appelle si vous sélectionnez le bouton "Exécuter".
n INITIALIZATION est un événement que vous utilisez pour définir un grand nombre de valeurs par
défaut. Ce bloc événement vous permet de paramétrer des valeurs par défaut qui ne peuvent être
déterminées qu'à l'exécution. Dans l'exemple ci-dessus, la date "Il y a une semaine" est calculée et
placée dans l'objet de données pa_date. Le processeur ABAP envoie ensuite au serveur de
présentation un écran de sélection comportant par défaut la valeur calculée. La valeur peut, bien sûr,
être encore modifiée par l'utilisateur.

(C) SAP AG BC400 6-7


Programme comportant des sous-programmes

l Fonctions encapsulées
l Programmes mieux
structurés qui peuvent
Bloc de
traitement
être lus et compris plus
Interface facilement
Sous-
programmes
l Gestion de programmes
Interface
plus facile
Sous-
programmes l Peut être réutilisé de
manière locale dans le
programme
l Bloc de traitement avec
interface

ã SAP AG 1999

n Les sous-programmes sont des blocs de traitement comportant une interface définie qui peuvent être
appelés par n'importe quel bloc de traitement en utilisant une instruction ABAP. Ils permettent
l'encapsulation interne de programmes.

(C) SAP AG BC400 6-8


Sous-programmes dans une liste d'objets

SAPBC400PBD_FORMS
Types d'objets du programme
Structures du Dictionnaire
Zones
Événements
Sous-programmes
AUTHORITY_SCARRID
FILL_ITAB Cliquer sur le bouton droit
WRITE_ITAB Modifier
Afficher
Cas d'emploi

ã SAP AG 1999

n Vous pouvez naviguer vers les sous-programmes à partir d'une liste d'objets du programme.
n Les cas d'emploi d'un sous-programme affichent toutes les lignes du programme qui appellent le
sous-programme.

(C) SAP AG BC400 6-9


Exemple de syntaxe : interface du sous-programme

*&--------------------------------------------------------------------*
*& Form FILL_ITAB
*&--------------------------------------------------------------------*
* Filling internal table with records of sflight with
* carrid = p_carrid, calculate percentage
*---------------------------------------------------------------------*
* -->P_carrid carrier id
* <--P_IT_FLIGHT internal standard table with line type sbc400focc
*---------------------------------------------------------------------*
fill_itab USING
FORM fill_itab value( p_carrid) TYPE s_carr_id
CHANGING p_it_flight TYPE sbc400_t_sbc400focc.

...

ENDFORM. " FILL_ITAB

ã SAP AG 1999

n Vous devez déterminer le périmètre fonctionnel d'un sous-programme et examiner son nom, son
interface et les commentaires. Si le sous-programme contient la fonctionnalité requise, vous avez
ensuite besoin des informations suivantes pour être en mesure d'appeler le sous-programme :
Ÿ nom du sous-programme
Ÿ les paramètres d'interface auxquels il a accès (uniquement en mode lecture) : les paramètres
sont répertoriés après l'option USING. Le type et l'ordre des paramètres d'interface sont
importants.
Ÿ les paramètres d'interface qu'il modifie : les paramètres sont répertoriés après l'option
CHANGING. Le type et l'ordre des paramètres d'interface sont importants.

(C) SAP AG BC400 6-10


Appel de sous-programmes : déroulement à l'exécution

Programme ABAP

Bloc événement

PERFORM fill_itab
USING pa_carr
CHANGING itab.
p_carrid
p_it_flight

fill_itab

Système d'exécution ABAP

Temps
ã SAP AG 1999

n Lorsqu'un sous-programme est appelé, tous les paramètres d'interface doivent être remplis par des
valeurs. Il existe une distinction entre les paramètres suivants :
Ÿ après USING sont indiqués les paramètres que le sous-programme doit seulement lire ;
Ÿ après CHANGING sont indiqués les paramètres que le sous-programme modifie.
n Si le sous-programme est appelé à partir du bloc de traitement ABAP par une instruction PERFORM,
le système interrompt le bloc de traitement pour traiter le sous-programme de manière séquentielle.
Lorsque la dernière ligne du sous-programme (ENDFORM.) est atteinte, le système exécute le
traitement qui suit l'instruction PERFORM.
n Vous pouvez retrouver le déroulement au moment de l'exécution en mode débogage. Vous avez
plusieurs options :
Ÿ traiter le programme entier, sous-programmes inclus, ligne par ligne, en utilisant Pas à pas ;
Ÿ exécuter un bloc de traitement ligne par ligne en utilisant Exécuter. Les sous-programmes sont
alors exécutés comme un tout ;
Ÿ quitter le traitement pas à pas d'un sous-programme et retourner au programme appelant en
utilisant Retour.

(C) SAP AG BC400 6-11


Appel par valeur et par référence

a1 a2 a3
Paramètres effectifs

fv1 fv2 fr3 Param ètres formels


Paramètres

START-OF-SELECTION.
Appel par référence
:
PERFORM form1 USING a1
PERFORM
CHANGING a2 a3.
Appel par valeur
FORM form1 USING VALUE(fv1)
CHANGING VALUE(fv2)
fr3 .
:
Appel par valeur et par résultat ENDFORM.
ENDFORM.

ã SAP AG 1999

n La méthode utilisée pour transmettre les paramètres d'interface se trouve dans l'interface du sous-
programme. Les paramètres peuvent être appelés soit par référence soit par valeur.
n Appel par référence : l'adresse du paramètre effectif est transmis. Dans le sous-programme, la
variable est adressée en utilisant le nom du paramètre formel. Les modifications ont un effet
immédiat sur la variable globale. Si seul le nom du paramètre formel est spécifié dans l'interface du
sous-programme, le paramètre est alors appelé par référence.
n Appel par valeur : lorsque le sous-programme est appelé, une variable locale est créée avec le nom
du paramètre formel et la valeur du paramètre effectif est copiée vers le paramètre formel. Deux
types d'appel par valeur existent :
Ÿ Appel par valeur : le paramètre formel est transmis dans l'interface après la clause USING
comprenant l'option VALUE( <nom paramètre>). Lorsque le sous-programme est appelé, le
paramètre effectif est copié vers le paramètre formel. Les modifications apportées au paramètre
formel affectent uniquement la copie locale, et non le paramètre effectif.
Ÿ Appel par valeur : le paramètre formel est transmis dans l'interface après la clause CHANGING
comprenant l'option VALUE( <nom paramètre>). Lorsque le sous-programme est appelé, le
paramètre effectif est copié vers le paramètre formel. Les modifications initialement effectuées sur
le paramètre formel affectent uniquement la copie locale. Lorsque l'instruction ENDFORM est
atteinte, la valeur du paramètre formel est recopiée dans le paramètre effectif.

(C) SAP AG BC400 6-12


Exemple de syntaxe : appel des sous-programmes

PARAMETERS pa_car TYPE s_carr_id.


DATA: it_flight TYPE sbc400_t_sbc400focc.
.
.
.
PERFORM fill_itab USING pa_car
pa_car Paramètre
.
CHANGING it_flight
it_flight .
it_ de saisie
.
.
FORM fill_itab
USING VALUE(p_carrid)
VALUE(p_carrid
VALUE(p_carrid)
) TYPE s_carr_id Paramètres formels
CHANGING p_it_flight
p_it
p_it_
_flight TYPE sbc400_t_sbc400focc.

DATA ls_flight TYPE sbc400focc. " local structure

SELECT carrid connid fldate seatsmax seatsocc FROM sflight


INTO CORRESPONDING FIELDS OF TABLE p_it_flight
WHERE carrid = p_carrid.
...
ENDFORM.

Une erreur de syntaxe s'affiche si les types de paramètres effectifs


ne sont pas compatibles avec la manière dont le paramètre formel
est typé
ã SAP AG 1999

n Les paramètres de l'interface sont dits "formels" ; les paramètres transmis au sous-programme sont
dits "effectifs".
n Le nombre de paramètres effectifs doit être identique à celui des paramètres formels. Les paramètres
optionnels ne sont pas autorisés. Les paramètres sont affectés dans l'ordre de leur liste.
n Lorsque vous appelez un sous-programme par PERFORM, le système vérifie si le type des
paramètres effectifs de l'instruction PERFORM est compatible avec celui des paramètres formels.
Différents types de contrôles sont exécutés pour différents types.
n Contrôle complet du type :
n TYPE D, F, I, T ou <type dictionnaire>. Ces types sont entièrement spécifiés. Le
système contrôle si le type de données du paramètre effectif est identique à celui du paramètre
formel dans son intégralité.
n Contrôle partiel par types génériques :
n TYPE C, N, P ou X : le système contrôle si le paramètre effectif est de type C, N, P ou
X. La longueur du paramètre et le nombre de décimales dans l'option DECIMALS (type P) sont
transférés du paramètre effectif vers le paramètre formel.
n TYPE <type générique du dictionnaire > : le paramètre formel hérite de toutes
les informations non spécifiées concernant un type générique du Dictionnaire, depuis un
paramètre formel.
n L'interface se définit dans la routine FORM. Dans l'instruction PERFORM, USING et CHANGING
n'ont qu'une valeur informative.

(C) SAP AG BC400 6-13


Modularisation du programme interne : résumé du chapitre

Vous êtes maintenant capable :


l Expliquer comment un programme contenant des
blocs événements fonctionne au moment de
l'exécution en utilisant INITIALISATION et
START-OF-SELECTION comme exemples
l d'encapsuler des fonctions dans un sous-
programme simple avec une interface.

ã SAP AG 1999

(C) SAP AG BC400 6-14


Exercices

Chapitre : Modularisation interne du programme


Sujet : Sous-programmes

À la fin de ces exercices, vous serez en mesure :


• de créer des sous-programmes ;
• d’utiliser l’interface de sous-programme pour transférer des données.

Modifiez votre programme ZBC400_##_SELECT_SFLIGHT_ITAB


(ou la solution modèle correspondante) de sorte que le contrôle
d’autorisation et la sortie de données soient tous deux encapsulés dans les
sous-programmes.

Programme : ZBC400_##_FORMS
Solution modèle : SAPBC400PBS_FORMS

1-1 Copiez votre programme ZBC400_##_SELECT_SFLIGHT_ITAB ou la solution


modèle correspondante SAPBC400DDS_AUTHORITY_CHECK_2 vers le nouveau
programme ZBC400_##_FORMS. Affectez votre programme à la classe de
développement ZBC400_## et à l'ordre de modification pour votre projet
"BC400…". (## est votre numéro de groupe.)

1-2 Encapsulez le contrôle d’autorisation dans un sous-programme. Transmettez le


code de la compagnie aérienne et la valeur requise pour la zone d’autorisation
ACTVT dans l’interface. Retransférez SY-SUBRC, qui est paramétré par le contrôle
d’autorisation, vers le programme principal via l’interface. Spécifiez les types de
paramètres pour l’interface du sous-programme. Les types possibles du
Dictionnaire ABAP sont :
Code de la compagnie aérienne Élément de données
S_CARR_ID
Code retour : Zone
système SY-SUBRC
Valeur de la zone d’autorisation ACTVT : Élément de données
ACTIV_AUTH

(C) SAP AG BC400 6-15


1-3 Modifiez les parties du programme qui dépendent du résultat du contrôle
d’autorisation : vous ne pouvez désormais plus demander la valeur de SY-SUBRC.
Par contre, découvrez la valeur du paramètre d’interface correspondant à partir du
sous-programme.

1-4 Facultatif:
Encapsulez l'édition des données dans un sous-programme. Appelez le sous-
programme après la boucle SELECT. Transmettez la table interne contenant les
données consultées en utilisant l’interface. Spécifiez les types des paramètres
d’interface. Affichez les données à partir du sous-programme en utilisant une
structure LOOP… ENDLOOP . Pour ce faire, créez la zone de travail de table
demandée comme un objet de données local dans le sous-programme. Pour
spécifier le type de la structure locale, utilisez l’instruction ABAP DATA: <WA >
LIKE LINE OF <ITAB>.

(C) SAP AG BC400 6-16


Solutions

Chapitre : Modularisation du programme interne


Sujet : Sous-programmes

Solution modèle SAPBC400PBS_FORMS

*&--------------------------------------------------------------*
*& Report SAPBC400PBS_FORMS *
*& *
*&--------------------------------------------------------------*
REPORT sapbc400pbs_forms.
CONSTANTS actvt_display TYPE activ_auth VALUE '03'.
DATA: wa_flight TYPE sbc400focc,
it_flight TYPE sbc400_t_sbc400focc.
PARAMETERS: pa_car TYPE sflight-carrid.
DATA: returncode LIKE sy-subrc.
START-OF-SELECTION.
* Authority-Check:
PERFORM authority_scarrid USING pa_car actvt_display
CHANGING returncode.
CASE returncode.
* L’utilisateur est autorisé
WHEN 0.
SELECT carrid connid fldate seatsmax seatsocc FROM sflight
INTO CORRESPONDING FIELDS OF wa_flight
WHERE carrid = pa_car.
wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax.
APPEND wa_flight TO it_flight.
ENDSELECT.
PERFORM write_list USING it_flight.
* L’utilisateur n’est pas autorisé ou autre erreur de authority-check
WHEN OTHERS.
WRITE: / 'Authority-Check Error'(001).
ENDCASE.

(C) SAP AG BC400 6-17


*&--------------------------------------------------------------*
*& Form AUTHORITY_SCARRID
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* -->P_PA_CARRID text
* -->P_LD_ACTVT text
* <--P_RETURN text
*---------------------------------------------------------------*
FORM authority_scarrid USING value(p_carrid) TYPE s_carr_id
value(p_ld_actvt) TYPE activ_auth
CHANGING p_return LIKE sy-subrc.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD p_carrid
ID 'ACTVT' FIELD p_ld_actvt.
p_return = sy-subrc.
ENDFORM. " AUTHORITY_SCARRID

*&--------------------------------------------------------------*
*& Form WRITE_LIST
*&--------------------------------------------------------------*
* text
*---------------------------------------------------------------*
* -->P_IT_FLIGHT text
*---------------------------------------------------------------*
FORM write_list USING p_it_flight TYPE sbc400_t_sbc400focc.
DATA: wa LIKE LINE OF p_it_flight.
LOOP AT p_it_flight INTO wa.
WRITE: / wa-carrid COLOR COL_KEY,
wa-connid COLOR COL_KEY,
wa-fldate COLOR COL_KEY,
wa-seatsocc,
wa-seatsmax,
wa-percentage,'%'.
ENDLOOP.
ENDFORM. " WRITE_LIST

(C) SAP AG BC400 6-18


Dialogues utilisateur : listes

Contenu :
l Attributs et avantages des listes
l Listes de base
l Liste des événements
l Listes interactives
l Exemple de syntaxe : listes détaillées

ã SAP AG 1999

(C) SAP AG BC400 7-1


Dialogues utilisateur : listes : objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l de décrire les attributs et les avantages d'une liste


l d'écrire un programme qui affiche les détails
d'une ligne à partir de votre liste de base vers une
liste interactive dès que l'utilisateur double-clique
sur cette ligne
l d'expliquer le comportement de votre programme
à l'exécution pendant l'événement AT LINE-
SELECTION

ã SAP AG 1999

(C) SAP AG BC400 7-2


Listes

Écran
Fonctions multilingues
CA ID PRICE
AA 2602 2400
AA 2602 2500

Total 7800

Imprimer

ã SAP AG 1999

n Le principal objectif d'une liste est d'éditer des données d'une manière qui peut être facilement
comprise par l'utilisateur ; cette édition prend souvent la forme d'un tableau. Dans R/3, elles
répondent à des besoins de gestion spécifiques :
n elles sont indépendantes de langue. Les textes et intitulés apparaissent dans la langue de travail
dès que la traduction adéquate est disponible ;
n elles peuvent éditer des valeurs monétaires dans de nombreuses devises ;
n L'édition de listes s'effectue :
n à l'écran : c'est ici que vous ajoutez couleurs et icônes,
n sur une imprimante,
n sur Internet/intranet : conversion automatique en format HTML ;
n vous pouvez également sauvegarder des listes dans le système R/3 ou les éditer pour un
traitement par un logiciel commercial externe (un tableur, par exemple).

(C) SAP AG BC400 7-3


Commandes de listes

Retour/Terminer/Annuler

Défiler

Imprimer

Rechercher (dans liste)

Système ... Sauvegarder


:
Liste
:

ã SAP AG 1999

n L'interface standard des listes offre les commandes suivantes :


Ÿ Retour ;
Ÿ Terminer ;
Ÿ Annuler ;
Ÿ Imprimer ;
Ÿ Rechercher (dans liste) ;
Ÿ Sauvegarder : sauvegarde la liste comme un fichier du bureau, dans un arbre de reporting, ou dans
le Bureautique ;
Ÿ Envoyer : envoie la liste sous forme de courrier électronique.
n Vous trouverez des informations complémentaires pour l'adaptation des interfaces de liste standard à
vos besoins individuels dans le chapitre sur Dialogues : interfaces.

(C) SAP AG BC400 7-4


Intitulés de page

À partir d'une liste : À partir de l'Éditeur ABAP :

Système ... Éléments de texte

: Titre/intitulés
Liste
:

Intitulé de liste
Sauvegarder
Intitulé de colonne

ã SAP AG 1999

n Chaque liste comporte un intitulé et jusqu'à quatre lignes d'intitulé de colonnes. Il existe deux
manières différentes d'utiliser ces outils :
n à partir de l'Éditeur : fonctions de gestion d'éléments de texte ;
n à partir de la liste elle-même. Si vous sauvegardez, activez et exécutez ensuite votre programme
pour créer la liste, vous pouvez introduire aussi bien les intitulés de liste que de colonnes en
choisissant le chemin de menus Système -> Liste -> Intitulés de liste. L'avantage principal de cette
méthode est que la liste reste affichée à l'écran. Cela facilite l'introduction des intitulés de colonnes.

n Lorsque vous relancerez le programme, les nouveaux intitulés apparaîtront automatiquement dans la
liste.
n Si vous ne saisissez pas d'intitulé, le titre du programme est sélectionné par défaut.

(C) SAP AG BC400 7-5


Fonctions multilingues

Programme

Code source Éléments de texte


Titre/en-têtes
Titre/en-têtes

Intitulé de liste EN Creation Date


DE Erstellungsdatum
FR Date de création
WRITE:/ /15text-001,
text-001,
35 sy-datum, Symboles de texte
/15 text-002,
35 sy-uname. 001 EN Creation Date
DE Erstellungsdatum
FR Date de création
:
002 EN Created by

Creation date: 01.01.1998


Created by: WITTMANN

ã SAP AG 1999

n Les titres et intitulés font partie des éléments de texte d'un programme. Vous pouvez traduire tous
les éléments de texte dans d'autres langues. Ils s'affichent dans la langue définie sur l'écran de
connexion.
n Les symboles de texte forment un autre type d'élément de texte. Ceux-ci sont des objets de données
de littéraux alphanumériques spécifiques. Il s'agit de littéraux alphanumériques spéciaux que vous
traduisez sans modification du code source. Avec les symboles de texte, vous créez des listes non
tributaires d'une langue spécifique.
n Vous les écrivez de deux façons :
Ÿ TEXT-<xxx> (où xxx est une chaîne de caractères de trois caractères de long) ;
Ÿ '<text>'(<xxx>) (où xxx est une chaîne de caractères de trois caractères de long).

(C) SAP AG BC400 7-6


Listes d'un programme exécutable

Lancement du
programme

Programme ABAP

Objets de données

Table de
base de
données
START-OF-SELECTION
Mémoire
tampon
de liste

Système d'exécution ABAP

ã SAP AG 1999

n Dans des programmes exécutables (type 1), les listes sont automatiquement affichées quand leurs
blocs événements correspondants sont traités. Ces blocs de traitement doivent cependant contenir
une instruction de création de liste. Celles-ci sont WRITE, SKIP, et ULINE.
n Les événements sont appelés dans un ordre adapté au traitement des listes :
n avant d'envoyer l'écran de sélection : INITIALIZATION ;
n après avoir quitté l'écran de sélection : START-OF-SELECTION.
n Toutes les éditions produites à partir de l'événement START-OF-SELECTION, de sous-
programmes ou de modules fonction, et traitées avant l'affichage d'une liste, sont temporairement
stockées dans le buffer de liste.
n Une fois tous les blocs événements de création de liste (par exemple START-OF-SELECTION)
traités, toutes les données du buffer de liste sont éditées sous la forme d'une liste.

(C) SAP AG BC400 7-7


Listes détaillées

Programme ABAP
Objets de données Table de
base de
données
Mémoire START-OF-SELECTION
tampon
pour
liste de
base

AT LINE-SELECTION
Mémoire
tampon
pour liste
détaillée

Système d'exécution ABAP

ã SAP AG 1999 Temps

n Dans des programmes exécutables, vous pouvez utiliser le bloc événement AT LINE-SELECTION
pour créer des listes détaillées.
n Le système d'exécution ABAP :
Ÿ affiche la liste de base quand les événements appropriés sont traités (par exemple, après START-
OF-SELECTION). Dans ce cas, la zone système sy-lsind contient la valeur 0 ;
Ÿ traite le bloc événement AT LINE-SELECTION chaque fois que vous double-cliquez sur une
entrée. Si vous utilisez un statut standard, celui-ci apparaît automatiquement chaque fois que vous
choisissez l'icône Sélectionner, le poste du menu Sélectionner dans le menu Traiter, ou la touche
de fonction F2 ;
Ÿ affiche les listes détaillées quand l'événement AT LINE-SELECTION est traité et augmente la
valeur contenue dans sy-lsind de un ;
Ÿ affiche la liste détaillée à partir du niveau précédent de la hiérarchie de liste (n-1) chaque fois que
vous sélectionnez l'icône flèche verte à partir de la liste détaillée effective(n).

(C) SAP AG BC400 7-8


Exemple : une liste détaillée simple

Programme de démonstration ...


Liste de base
Liste de base
sy-lsind 0

Listes détaill
détaillées
ées
Liste détaillée 1
sy-lsind 1

Listes détaill
détaillées
ées Liste détaillée 2

sy-lsind 2 Jusqu'à vingt


listes détaillées

ã SAP AG 1999

n Fonctionnement des listes présentées dans notre exemple :


- la liste de base présente la mention "Liste de base" et la zone système sy-lsind ;
- vous pouvez appeler la liste détaillée 1 grâce à un double-clic ou en sélectionnant son icône
correspondante à partir de la barre d'outils d'application ou son entrée de menu, ou encore en
utilisant la touche de fonction F2. La "liste détaillée" apparaît ensuite et la zone système sy-
lsind a la valeur 1 ;
- en répétant cette action, vous devriez appeler la liste détaillée 2, là où la zone système sy-
lsind contient la valeur 2 (qui représente le niveau effectif de la liste détaillée) ;
- En répétant cette action, vous augmentez la valeur sy-lsind de un jusqu'à une valeur de
vingt (le nombre maximum possible de listes détaillées) ;
- En sélectionnant la flèche verte, l'utilisateur redescend d'une liste vers la liste de base.

(C) SAP AG BC400 7-9


Syntaxe : une liste détaillée simple

REPORT sapbc400udd_secondary_list_a.

START-OF-SELECTION.
WRITE: / text-001 COLOR col_heading, Symboles de texte :
/ 'sy-lsind',
sy-lsind color 2. 001 Listes de base

002 Listes détaillées


AT
AT LINE-SELECTION.
LINE-SELECTION.
WRITE: / text-002 COLOR col_heading.
ULINE.
WRITE: / 'sy-lsind',
sy-lsind color 4.

ã SAP AG 1999

n Une liste détaillée peut se programmer comme suit :


n vous créez une liste de base en remplissant le buffer de la liste de base dans un bloc événement
approprié (dans ce cas START-OF-SELECTION) en utilisant soit WRITE, SKIP, ou ULINE
;
n utilisez le bloc événement AT LINE-SELECTION lorsque vous programmez des listes
détaillées. Chaque fois que vous utilisez WRITE, SKIP, ou ULINE dans ce bloc évenement,
vous remplissez le buffer de liste du niveau n+1 ;
n vous pouvez programmer la navigation entre les listes détaillées en testant la zone sy-lsind
dans le bloc événement AT LINE-SELECTION.

(C) SAP AG BC400 7-10


Exemple de listes détaillées

Liste des vols


Vol Départ Destination Horaire
LH 0400 FRA Francfort JFK New York 10:10:00
LH 0402 FRA Francfort JFK New York 13:30:00
...
SQ 0002 SIN Singapour SFO San Francisco 09:30:00
Détail : vols

Vous avez choisi LH 0402


Date du vol Max. Occ.

19.12.1998 380 240


20.12.1998 380 270
24.12.1998 380 380

ã SAP AG 1999

n Nous allons maintenant écrire un programme en utilisant les listes de base et les listes détaillées.
n La liste de base de votre programme doit contenir des données de vol telles que le numéro de vol, la
compagnie aérienne, la ville et l'aéroport de départ, ainsi que les heures de départ et d'arrivée. Toutes
ces informations figurent dans la table SPFLI.
n L'utilisateur doit être en mesure d'accéder aux informations sur n'importe quel vol en double-cliquant
sur l'identificateur de compagnie aérienne et le numéro de vol. La date du vol s'affiche, ainsi que le
nombre de réservations. Ces données se trouvent dans la table SFLIGHT. Vous devez utiliser les
zones-clés SPFLI dans cette liste détaillée afin de lire les données adéquates dans SFLIGHT. Ces
opérations sont décrites dans les pages suivantes.
n Le programme type est nommé SAPBC400UDD_EXAMPLE_2 et fait partie de la classe de
développement BC400.

(C) SAP AG BC400 7-11


Zone HIDE

HIDE <objet de données>.

Buffer de liste de base Zone HIDE

Ligne Ligne wa_spfli- wa_spfli-


carrid connid
... ... ... ...
5 LH 0400 FRA JFK 10:10:00 5 LH 0400
6 LH 0402 FRA JFK 13:30:00 6 LH 0402
... ... ... ... ...
11 SQ 0002 SIN SFO 09:30:00 11 SQ 0002

REPORT sapbc400udd_example_2.
...
START-OF-SELECTION.
SELECT * FROM spfli INTO wa_spfli.
WRITE:/ wa_spfli-carrid, wa_spfli-connid,
wa_spfli-airpfrom, wa_spfli-airpto,
wa_spfli-deptime.
HIDE: wa_spfli-carrid, wa_spfli-connid.
ã SAP AG 1999
ENDSELECT.

n Lorsque l'événement AT LINE-SELECTION est traité, les objets de données d'un programme
contiennent les mêmes valeurs que celles affichées auparavant dans la liste de base. Cependant, une
liste détaillée nécessite souvent des données sélectionnées dans la liste de base elle-même. Vous
pouvez utiliser la zone HIDE pour stocker certaines données de la ligne que vous avez sélectionnée
et les insérer automatiquement où vous en avez besoin dans l'objet de données correspondant d'une
liste détaillée. Lorsque vous créez une liste de base, déterminez au préalable les informations à
classer en fonction de la position de leur ligne.
n Pour cela, utilisez le mot-clé ABAP HIDE, suivi de la liste des objets de données voulus. Le système
mémorise automatiquement le nom et le contenu de l'objet de données, selon la position de sa ligne
dans la liste.

(C) SAP AG BC400 7-12


Sélection de ligne

Zone HIDE

Ligne wa_spfli-carrid wa_spfli-connid


Vol Départ Destination Horaire
LH 0400 FRA JFK 10:10:00 ... ... ...
LH 0402 FRA JFK 13:30:00 5 LH 0400
... 6 LH 0402
SQ 0002 SIN SFO 09:30:00 ... ... ...
11 SQ 0002

?? LH 0402 ?? ?? ?? wa_spfli
REPORT sapbc400udd_example_2.

AT LINE-SELECTION.
WRITE: text-001, Symboles de texte :
wa_spfli-carrid,
wa_spfli-connid. 001 Correspondances

ã SAP AG 1999

n Dès que l'événement interactif (AT LINE-SELECTION dans cet exemple) est appelé en plaçant le
curseur sur une ligne et en double-cliquant ou sélectionnant ensuite l'icône Sélectionner, les valeurs
de cette ligne stockées dans la zone HIDE sont recopiées dans les zones correspondantes.

(C) SAP AG BC400 7-13


Sélection de lignes : syntaxe

REPORT sapbc400udd_example_2.
...
Symboles de texte :
AT LINE-SELECTION.
IF sy-lsind = 1. 001 Correspondances
WRITE: text-001,
wa_spfli-carrid,
wa_spfli-connid.

SELECT fldate seatsmax seatsocc


FROM sflight
INTO CORRESPONDING FIELDS OF wa_sflight
WHERE carrid = wa_spfli-carrid
AND connid = wa_spfli-connid.

WRITE:/ wa_sflight-fldate,
wa_sflight-seatsmax,
wa_sflight-seatsocc.
ENDSELECT.
ENDIF.

ã SAP AG 1999

n Vous créez une liste détaillée en remplissant le buffer de la liste détaillée dans le bloc événement AT
LINE-SELECTION en utilisant soit WRITE, SKIP, ou ULINE. Dans ce programme type, les
zones-clés pour la compagnie aérienne s'affichent et ses vols disponibles dans la table SFLIGHT
sont lues en utilisant une boucle SELECT. Veuillez noter que les informations spécifiques des lignes
de la compagnie aérienne sont disponibles uniquement en double-cliquant sur les objets de données
appropriés ; ceux-ci avaient été placés dans la zone HIDE lors de la création de la liste de base.

(C) SAP AG BC400 7-14


Dialogues utilisateur : listes : résumé du chapitre

Vous êtes maintenant capable :


l de décrire les attributs et les avantages d'une liste
l d'écrire un programme qui affiche les détails
d'une ligne à partir de votre liste de base vers une
liste interactive dès que l'utilisateur double-clique
sur cette ligne
l d'expliquer le déroulement de votre programme à
l'exécution pendant l'événement AT LINE-
SELECTION

ã SAP AG 1999

(C) SAP AG BC400 7-15


Dialogues utilisateur – listes : exercices

Chapitre : Dialogues utilisateur : listes


Sujet : Listes détaillées

À la fin de ces exercices, vous serez en mesure :


• de créer une liste détaillée dans votre programme.

Modifiez votre programme ZBC400_##_SELECT_SFLIGHT ou la


solution modèle correspondante comme suit :
quand vous avez sélectionné un vol sur la liste de base (double-cliquez ou
appuyez sur F2 sur la ligne de liste appropriée), affichez une liste
détaillée contenant toutes les réservations du vol sélectionné.

Programme : ZBC400_##_DETAIL_LIST
Solution modèle : SAPBC400UDS_DETAIL_LIST

1-1 Copiez votre programme ZBC400_##_SELECT_SFLIGHT ou la solution modèle


correspondante SAPBC400DDS_AUTHORITY_CHECK vers le nouveau
programme ZBC400_##_DETAIL_LIST. Affectez votre programme à la classe
de développement ZBC400_## et à l'ordre de modification pour votre projet
"BC400…" (## est votre numéro de groupe).

1-2 Assurez-vous que les zones-clés de la base de données SFLIGHT vous sont
accessibles pour la construction de la liste détaillée lorsque l’utilisateur sélectionne
un vol à partir d’une liste de base (double-cliquez ou appuyez sur F2 sur la ligne de
liste correspondante). (HIDE)

1-3 Ajoutez l'événement AT LINE-SELECTION à votre programme pour vous


permettre de construire la liste détaillée.

1-4 Dans la première ligne de cette liste, affichez les informations-clé à partir de la
ligne sélectionnée sur la liste de base. Sous cette ligne, affichez une ligne de
soulignement et une ligne vierge.

1-5 Affichez toutes les réservations pour le vol sélectionné à partir de la table de base
de données SBOOK. Utilisez une structure pour afficher les zones suivantes de la
table de base de données SBOOK sur la liste détaillée :

(C) SAP AG BC400 7-16


BOOKID,
CUSTOMID,
CUSTTYPE
CLASS,
ORDER_DATE,
SMOKER,
CANCELLED,
LOCCURAM,
LOCCURKEY.

1-6 Affichez les zones BOOKID et CUSTOMID dans la couleur COL_KEY.

1-7 Assurez-vous que le montant de devise LOCCURAM correspond au format de la


devise LOCCURKEY. Utilisez le complément CURRENCY <currency_key>
dans l’instruction WRITE.

Exemple:
WRITE: wa_sflight-price CURRENCY wa_sflight-currency,
wa_sflight-currency.

(C) SAP AG BC400 7-17


Solutions

Chapitre : Dialogues utilisateur : listes


Sujet : Listes détaillées

Solution type SAPBC400UDS_DETAIL_LIST

*&--------------------------------------------------------------*
*& Report SAPBC400UDS_DETAIL_LIST *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400uds_detail_list.
CONSTANTS actvt_display TYPE activ_auth VALUE '03'.
DATA: wa_flight TYPE sbc400focc,
wa_sbook TYPE sbook.
PARAMETERS: pa_car TYPE sflight-carrid.

START-OF-SELECTION.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD pa_car
ID 'ACTVT' FIELD actvt_display.
CASE sy-subrc.
WHEN 0.
SELECT carrid connid fldate seatsmax seatsocc FROM sflight
INTO CORRESPONDING FIELDS OF wa_flight
WHERE carrid = pa_car.
wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax.
WRITE : / wa_flight-carrid COLOR COL_KEY,
wa_flight-connid COLOR COL_KEY,
wa_flight-fldate COLOR COL_KEY,
wa_flight-seatsocc,
wa_flight-seatsmax,
wa_flight-percentage,'%'.
* Cacher les valeurs de zones-clés correspondant à la ligne effective

(C) SAP AG BC400 7-18


HIDE: wa_flight-carrid, wa_flight-connid,
wa_flight-fldate.
ENDSELECT.
WHEN OTHERS.
WRITE: / 'Authority-Check Error'(001).
ENDCASE.

* Le programme continue si une ligne est sélectionnée sur la liste de


base
AT LINE-SELECTION.
IF sy-lsind = 1.

* Les zones-clés sont retransférées de la zone mémoire HIDE vers des


objets de données ABAP
WRITE: / wa_flight-carrid,
wa_flight-connid,
wa_flight-fldate.
ULINE.
SKIP.
* Sélectionner des réservations, qui dépendent d’un vol sélectionné
SELECT bookid customid custtype class order_date
smoker cancelled loccuram loccurkey
FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook
WHERE carrid = wa_flight-carrid
AND connid = wa_flight-connid
AND fldate = wa_flight-fldate.
* Créer une liste détaillée
WRITE: / wa_sbook-bookid,
wa_sbook-customid,
wa_sbook-custtype,
wa_sbook-class,
wa_sbook-order_date,
wa_sbook-smoker,
wa_sbook-cancelled,
wa_sbook-loccuram CURRENCY wa_sbook-loccurkey,
wa_sbook-loccurkey.
ENDSELECT.
ENDIF.

(C) SAP AG BC400 7-19


Dialogues utilisateur : écrans de sélection

Contenu :
l Attributs et avantages des écrans de sélection
l Définir des écrans de sélection
l Évaluer une entrée utilisateur pour limiter la sélection de
base de données
l Événements d'écran de sélection
l Exemple de syntaxe : contrôles de saisie
supplémentaires avec dialogue d'erreur

ã SAP AG 1999

(C) SAP AG BC400 8-1


Dialogues utilisateur : écrans de sélection :
objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l de décrire les attributs et les avantages des


écrans de sélection
l d'écrire un programme qui permet à l'utilisateur
de saisir des plages de valeurs dans un écran de
sélection qui peuvent être utilisées pour limiter le
nombre d'enregistrements remontés de la base de
données
l d'écrire un programme qui comporte des
contrôles de saisie supplémentaires sur son
écran de sélection renvoyant cet écran en cas
d'erreur

ã SAP AG 1999

(C) SAP AG BC400 8-2


Écran de sélection

Programme ABAP

Table de
base de
Objets de données données

Bloc de
traitement
ABAP

Runtime system ABAP

ã SAP AG 1999

n Utilisez ces écrans pour saisir les critères de sélection requis par le programme.
n Si vous créez une liste contenant des données d'une très grande table de base de données, vous
pouvez utiliser un écran de sélection pour limiter la quantité de données sélectionnée. Au moment de
l'exécution, spécifiez une plage de valeurs pour une des zones-clés ; seules les données comprises
dans cette plage sont lues dans la base et affichées dans la liste. Ceci réduit considérablement la
charge du réseau.

(C) SAP AG BC400 8-3


Écran de sélection

Contrôles
Contrôles de type
Fonctions multilingues

Entrée
Entrée
valeur
...
Variantes

Aide à la recherche

ã SAP AG 1999

n Les écrans de sélection sont des masques de saisie. L'utilisateur y entre des sélections, ce qui réduit
la quantité de données à lire dans la base. L'utilisateur peut :
Ÿ sélectionner des zones individuelles ;
Ÿ introduire des entrées complexes : plages de valeurs, opérations, modèles ;
Ÿ sauvegarder comme variantes des zones de sélection remplies ;
Ÿ utiliser l'aide à la saisie et les aides à la recherche en sélectionnant la touche de fonction F4 ou le
bouton de commande des entrées possibles.
n Vous pouvez traduire les textes de sélection dans d'autres langues pour les afficher dans la langue de
travail choisie par l'utilisateur.
n Le système effectue automatiquement un contrôle des types. En cas de saisie d'une valeur d'un type
incorrecte, un message d'erreur s'affiche. La zone concernée est alors prête à accepter la nouvelle
saisie.

(C) SAP AG BC400 8-4


Saisie de sélections

Compagnie
SELECT-OPTIONS ... aérienne LH to ...

PARAMETERS ... Ville de départ

Gérer les options de sélection


sélection

Compagnie aérienne
Valeur individuelle
Supérieur ou égal
Inférieur
Inférieur ou égal
Supérieur
SIGN OPTION LOW Valeurs simples
Inférieur
I GE LH Plages de valeurs
Différent
Exclusion de valeurs simples
Exclusion de plages de valeurs
Sélectionner

Exclure de la sélection

ã SAP AG 1999

n Les écrans de sélection vous permettent de saisir des sélections complexes tout comme des sélections
de valeurs individuelles. Les options de sélection programmables sont les suivantes :
n définition d'options de sélection ;
n saisie de plusieurs valeurs ou de plages de valeurs ;
n définition de critères d'exclusion.
n Chaque écran de sélection contient un icone Informations. Sélectionnez cet icone pour afficher des
informations complémentaires.

(C) SAP AG BC400 8-5


Aide à la recherche

DATA: wa LIKE spfli. Compagnie


PARAMETERS pa_car TYPE spfli-carrid. aérienne
SELECT-OPTIONS so_conn FOR wa-connid. Vol n° à

ID No. Aéroport Aéroport Heure de


de départ d'arrivée départ
LH 0400 FRA JFK 10:10:00

LH 0402 FRA JFK 13:30:00

Zone de tables
Zones de structure

Aide à la recherche
Aide à la recherche
Tables de contrôle

Élément de données
Dictionnaire ABAP

ã SAP AG 1999

n Si vous référencez une zone de saisie d'après un objet du Dictionnaire ABAP doté d'une aide à la
recherche, le système fournit automatiquement une aide sur les valeurs possibles.
n Pour adapter cette aide à vos besoins, il est possible de définir une aide à la recherche dans le
Dictionnaire ABAP.

(C) SAP AG BC400 8-6


Textes de sélection

Fonctions multilingues
Programme

Code source Éléments de texte


Titre/en-têtes
REPORT bc400td_selection_screen.
: Symboles de texte
SELECT-OPTIONS so_carr FOR ...
PARAMETERS pa_city TYPE ... Textes de sélection

SO_CARR EN Airline carrier


DE

PA_CITY EN Departing from


Compagnie DE
LH à ...
aérienne

Ville de départ

ã SAP AG 1999

n Sur l'écran de sélection, le nom des variables figure à côté des zones de saisie. Cependant, vous
pouvez les remplacer par des textes de sélection, que vous pouvez ensuite traduire dans toutes les
langues souhaitées. Les textes de sélection sont affichés dans la langue de travail de l'utilisateur.

(C) SAP AG BC400 8-7


Variantes

Compagnie
aérienne AA à LH ...

Ville de départ

Variante
CARRIER_AA_TO_LH:
zone de saisie Hide
Compagnies aériennes
AA à LH

Ville de départ

ã SAP AG 1999

n Vous pouvez définir et stocker des variantes pour tout écran de sélection. Lancez le programme et
sélectionnez Variantes -> Sauvegarder comme variante.
n Les variantes facilitent l'utilisation des écrans de sélection grâce aux fonctions suivantes :
n pré-affectation de valeurs aux zones de saisie ;
n masquage de zones de saisie ;
n sauvegarde de ces paramètres en vue d'une réutilisation
n Une variante peut renvoyer à plusieurs écrans de sélection.
n Les variantes sont dépendantes du mandant.
n En cliquant sur l'icone Informations d'un écran de sélection, vous obtenez des renseignements
complémentaires sur les variantes. Consultez également le cours BC405 Reporting dans ABAP
Workbench.

(C) SAP AG BC400 8-8


Instruction PARAMETERS

Programme ABAP
pa_car
Référence
Dictionnaire
Zones et types définis localement ABAP
PARAMETERS pa_car
TYPE s_carr_id.
Écran de s_carr_id
sélection

Bloc de
traitement
ABAP

Système d'exécution ABAP

ã SAP AG 1999

n Dans un programme exécutable, une seule instruction PARAMETERS suffit pour générer un écran de
sélection standard.
n L'instruction PARAMETERS <nom> TYPE <type> comme l'instruction PARAMETERS <nom>
LIKE <objet de données> génèrent toutes deux une zone de saisie simple sur l'écran de
sélection, et un objet de données <nom> du type spécifié.
n Si l'utilisateur saisit une valeur et choisit "Exécuter", cette valeur est placée dans l'objet de données
interne <nom> du programme. Le système n'autorise que les entrées de type approprié.

(C) SAP AG BC400 8-9


Transport de données

Programme ABAP
pa_car
pa_car
pa_car

Zones et types définis localement


pa_car
PARAMETERS pa_car
TYPE s_carr_id.
Écran de
sélection
Écran de
sélection

Bloc de
traitement
ABAP

Système d'exécution ABAP

ã SAP AG 1999 Temps

n Quand le bloc événement INITIALIZATION a été traité, l'écran de sélection est envoyé au serveur
de présentation. PARAMETERS permet de transporter les valeurs définies de l'objet de données dans
les zones de saisie du même nom de l'écran de sélection.
n L'utilisateur peut alors modifier les valeurs des zones de saisie. Si l'utilisateur clique ensuite sur la
fonction "Exécuter", les valeurs des zones de saisie sont transportées vers les objets de données
portant le même nom du programme et peuvent être évaluées dans les blocs de traitement ABAP.

(C) SAP AG BC400 8-10


Utilisation de Parameters dans l'instruction SELECT 1

REPORT ...
DATA wa_spfli TYPE spfli.
PARAMETERS pa_car TYPE s_carr_id.
...
SELECT
SELECT carrid connid cityfrom cityto ...
FROM spfli
INTO CORRESPONDING FIELDS OF wa_spfli
pa_car
WHERE carrid = pa_car.
WRITE: / wa_spfli-carrid, wa_spfli-connid,
wa_spfli-fldate, ... .
ENDSELECT
ENDSELECT.

ã SAP AG 1999

n Si vous avez utilisé l'instruction PARAMETERS pour affecter à une zone de saisie la fonction de zone
clé d'une table, vous pouvez limiter la sélection de données en indiquant la clause WHERE dans
l'instruction SELECT.
n Dans notre exemple, seuls les enregistrements de données dont la zone-clé CARRID a la même
valeur que celle contenue dans l'objet de données pa_car lors de l'exécution sont lus dans la table
SPFLI.

(C) SAP AG BC400 8-11


OPTIONS SELECT

option Programme ABAP


Sign low high
so_carr

gd_carrid

Zones et types définis localement


DATA gd_carrid TYPE s_carr_id.
Écran de SELECT-OPTIONS so_carr
SELECT-OPTIONS
sélection FOR gd_carrid.

Bloc de
traitement
ABAP

Système d'exécution ABAP

ã SAP AG 1999

n L'instruction SELECT-OPTIONS <nom> FOR <objet de données> définit une option de


sélection : elle place deux zones de saisie sur l'écran de sélection, qui est de même type que celui
défini dans la référence. Cela permet alors à l'utilisateur de saisir une plage de valeurs ou des
sélections complexes. L'instruction définit également une table interne <nom> comportant les quatre
colonnes suivantes :
n sign : détermine si la valeur ou la plage de valeurs concernée doit être incluse ou non dans
la sélection ;
n option : contient l'opérateur. Vous trouverez la liste des opérateurs possibles dans la
documentation mot-clé de l'instruction SELECT-OPTIONS ;
n low : contient soit la limite inférieure d'une plage de valeurs, soit une valeur unique ;
n high : contient la limite supérieure d'une plage de valeurs.
n La table de sélection <nom> renvoie toujours à un objet de données déjà déclaré. Celui-ci sert de
zone cible pendant la sélection de base de données, tandis que la table de sélection regroupe les
valeurs possibles. Une version spéciale de la clause WHERE existe pour la sélection de base de
données. Elle détermine si la base de données contient ou non la zone correspondante dans sa réserve
de valeurs possibles.

(C) SAP AG BC400 8-12


Transport de données

Programme ABAP
so_carr
so_
so_carr

wa_scarr
gd_carrid

Zones et types définis localement


DATA gd_carrid TYPE s_carr_id.
Écran de SELECT-OPTIONS so_carr
so_carr
so_carr
sélection FOR gd_carrid.
Écran de
sélection

Bloc de
traitement
ABAP

Système d'exécution ABAP

ã SAP AG 1999 Temps

n Si vous saisissez plusieurs valeurs ou plages de valeurs et choisissez "Exécuter", le système les place
dans la table interne.

(C) SAP AG BC400 8-13


Utilisation de Parameters dans l'instruction SELECT 2

REPORT ...
DATA WA_SPFLI TYPE SPFLI.
SELECT-OPTIONS so_carr FOR wa_spfli-carrid.
...
SELECT carrid connid cityfrom cityto ...
FROM spfli
INTO CORRESPONDING FIELDS OF wa_spfli
so_carr
WHERE carrid IN so_carr.
WRITE: / wa_spfli-carrid, wa_spfli-connid,
wa_spfli-cityfrom, wa_spfli-cityto, ... .
ENDSELECT
ENDSELECT.

ã SAP AG 1999

n Notre exemple indique comment délimiter une plage de sélection dans une base de données pour une
option de sélection.
n Interprétation des conditions déclarées par SELECT-OPTIONS dans une table interne :
n si la table interne est vide : la condition <zone> IN <selname> est toujours vraie ;
n si elle ne contient que des conditions d'inclusion simples i1, ..., in : le résultat est la
condition complexe ( i1 OR ... OR in ) ;
n si la table interne ne contient que des conditions d'exclusion simples e1, ..., em : le résultat est
la condition combinée ( NOT e1 ) AND ... AND ( NOT em );
n si la table interne réunit les conditions d'inclusion simples i1, ..., in et les conditions
d'exclusion simples e1, ..., em, le résultat est la condition combinée ( i1 OR ... OR
in ) AND ( NOT e1 ) AND ... AND ( NOT em ).

(C) SAP AG BC400 8-14


Événements d'écran de sélection

Lancement du
programme
Programme ABAP

INITIALIZATION.

AT SELECTION-SCREEN.

Non
Oui START-OF-SELECTION

Système d'exécution ABAP


ã SAP AG 1999 Temps

n Dans un programme exécutable, le système d'exécution ABAP génère un écran de sélection standard
si vous avez écrit au moins une instruction PARAMETERS ou SELECT-OPTIONS. L'écran de
sélection appartient à l'événement AT SELECTION-SCREEN.
n L'écran de sélection s'affiche après l'événement INITIALIZATION.
n Lorsque vous appuyez sur la touche Entrée ou sur une touche de fonction, cliquez sur un bouton de
commande ou bien choisissez une fonction de menu, le système effectue un contrôle de type. Si les
entrées ne sont pas du type adéquat, il affiche un message d'erreur et attend une nouvelle entrée. Une
fois le type corrigé, il déclenche l'événement AT SELECTION-SCREEN.
n Le déroulement ultérieur du programme dépend de l'action utilisateur :
Ÿ si l'utilisateur sélectionne F8 ou "Exécuter", l'événement suivant est appelé, dans ce cas, START-
OF-SELECTION ;
Ÿ si l'utilisateur sélectionne toute autre fonction, l'écran de sélection se réaffiche.

(C) SAP AG BC400 8-15


Dialogues d'erreur dans AT SELECTION-SCREEN

Lancement
du programme Programme ABAP

INITIALIZATION.

AT SELECTION-SCREEN.

MESSAGE e001.

Non
Oui START-OF-SELECTION

Système d'exécution ABAP


ã SAP AG 1999 Temps

n Utilisez l'événement AT SELECTION-SCREEN chaque fois que vous souhaitez programmer des
contrôles supplémentaires à un écran de sélection standard.
n Toute action utilisateur lance l'événement AT SELECTION-SCREEN. Si un dialogue d'erreur se
déclenche, le système revient à l'écran de sélection et toutes les zones de saisie sont de nouveau
accessibles. Un message s'affiche dans la ligne d'état.
n Pour des informations complémentaires sur l'instruction MESSAGE, référez-vous également à la
documentation mots-clés.
n Des informations complémentaires se trouvent dans la documentation mots-clés à AT
SELECTION-SCREEN.

(C) SAP AG BC400 8-16


AT SELECTION-SCREEN : syntaxe

PARAMETERS: pa_car TYPE s_carr_id.

* Premier événement traité après avoir quitté l'écran de


sélection
AT SELECTION-SCREEN.
AT SELECTION-SCREEN.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD pa_car
ID 'ACTVT' FIELD actvt_display.
IF sy-subrc <> 0.
MESSAGE e045(bc400)
* Remontrer WITH pa_car.
l'écran de sélection et indiquer message dans
barre d'état
MESSAGE e045(bc400) WITH pa_car.
ENDIF.

ã SAP AG 1999

n Comme exemple de contrôle de saisie supplémentaire avec dialogue d'erreur, une zone de saisie pour
l'identificateur de la compagnie aérienne doit être ajoutée au programme.
n Un contrôle d'autorisation est exécuté sur l'écran de sélection :
Ÿ si l'utilisateur possède l'autorisation d'affichage pour la compagnie aérienne sélectionnée, le
programme continue ;
Ÿ si l'utilisateur ne possède pas l'autorisation d'affichage, l'écran de sélection se réaffiche et un
message d'erreur apparaît dans la barre d'état.

(C) SAP AG BC400 8-17


Dialogue utilisateur : écrans de sélection : résumé
du chapitre

Vous êtes maintenant capable :


l de décrire les attributs et les avantages des
écrans de sélection ;
l d'écrire un programme qui permet à l'utilisateur de
saisir des plages de valeurs dans un écran de
sélection qui peuvent être utilisées pour limiter le
nombre d'enregistrements de données retrouvés à
partir de la base de données ;
l d'écrire un programme qui comporte des
contrôles de saisie supplémentaires sur son écran
de sélection renvoyant cet écran en cas d'erreur.

ã SAP AG 1999

(C) SAP AG BC400 8-18


Écran de sélection : exercices

(C) SAP AG BC400 8-19


(C) SAP AG BC400 8-20
Chapitre : Écran de sélection

À la fin de ces exercices, vous serez en mesure :


• d’utiliser l’instruction ABAP SELECT-OPTIONS pour saisir des
valeurs complexes sur un écran de sélection standard ;
• de tenir compte de valeurs complexes dans une sélection de base de
données ;
• de programmer un message d’erreur pour un écran de sélection
standard.

Complétez votre programme ZBC400_##_DETAIL_LIST ou la


solution modèle correspondante comme suit.
Fournissez à l’utilisateur un moyen de saisir une plage de valeurs
complexes pour le numéro de vol. Tenez compte des valeurs dans votre
sélection de base de données.
De plus, modifiez votre programme pour que l’utilisateur puisse
continuer après l'écran de sélection seulement si le contrôle d’autorisation
pour la compagnie aérienne souhaitée réussit.

Programme : ZBC400_##_SEL_SCREEN
Solution modèle : SAPBC400UDS_SEL_SCREEN

1-1 Copiez votre programme ZBC400_##_DETAIL_LIST ou la solution modèle


correspondante SAPBC400_UDS_DETAIL_LIST vers le programme
ZBC400_##_SEL_SCREEN. Affectez votre programme à la classe de
développement ZBC400_## et à l'ordre de modification pour votre projet
"BC400…" (## est votre numéro de groupe).

1-2 Complétez votre écran de sélection pour permettre à l’utilisateur de saisir une plage
de valeurs complexes pour le numéro de vol CONNID.

1-3 Utilisez la sélection de valeurs complexes pour filtrer les données sélectionnées à
partir de la table de base de données SFLIGHT.

1-4 Modifiez votre programme pour que l’utilisateur ne puisse pas continuer après
l’écran de sélection si le contrôle d’autorisation sur l’objet d’autorisation
S_CARRID échoue. Si le contrôle d’autorisation échoue, affichez un message

(C) SAP AG BC400 8-21


d’erreur appropié à partir de la classe de messages BC400, et permettez à
l’utilisateur de saisir une valeur différente sur l’écran de sélection.

(C) SAP AG BC400 8-22


Solutions

(C) SAP AG BC400 8-23


(C) SAP AG BC400 8-24
Chapitre : Écran de sélection

Solution modèle : programme SAPBC400UDS_SEL_SCREEN

*&--------------------------------------------------------------*
*& Report SAPBC400UDS_SEL_SCREEN *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400uds_sel_screen.

CONSTANTS actvt_display TYPE activ_auth VALUE '03'.

DATA: wa_flight TYPE sbc400focc,


wa_sbook TYPE sbook.
PARAMETERS: pa_car TYPE sflight-carrid.

* Zone de données pour restrictions complexes appliquées à


l’identificateur de connexion
SELECT-OPTIONS: so_con FOR wa_flight-connid.

* Premier évènement traité après avoir quitté l’écran de sélection


AT SELECTION-SCREEN.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD pa_car
ID 'ACTVT' FIELD actvt_display.
IF sy-subrc <> 0.

* Retourner à l’écran de sélection et afficher un message dans la


barre d’état
MESSAGE e045(bc400) WITH pa_car.
ENDIF.
START-OF-SELECTION.
SELECT carrid connid fldate seatsmax seatsocc FROM sflight

(C) SAP AG BC400 8-25


INTO CORRESPONDING FIELDS OF wa_flight
WHERE carrid = pa_car
AND connid IN so_con.
wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax.
WRITE : / wa_flight-carrid COLOR COL_KEY,
wa_flight-connid COLOR COL_KEY,
wa_flight-fldate COLOR COL_KEY,
wa_flight-seatsocc,
wa_flight-seatsmax,
wa_flight-percentage,'%'.
HIDE: wa_flight-carrid, wa_flight-connid, wa_flight-fldate.
ENDSELECT.

AT LINE-SELECTION.
IF sy-lsind = 1.
WRITE: / wa_flight-carrid, wa_flight-connid, wa_flight-fldate.
ULINE.
SKIP.
SELECT bookid customid custtype class order_date
smoker cancelled loccuram loccurkey
FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook
WHERE carrid = wa_flight-carrid
AND connid = wa_flight-connid
AND fldate = wa_flight-fldate.
WRITE: / wa_sbook-bookid,
wa_sbook-customid,
wa_sbook-custtype,
wa_sbook-class,
wa_sbook-order_date,
wa_sbook-smoker,
wa_sbook-cancelled,
wa_sbook-loccuram CURRENCY wa_sbook-loccurkey,
wa_sbook-loccurkey.
ENDSELECT.
ENDIF.

(C) SAP AG BC400 8-26


Dialogues utilisateur : dynpros

Contenu :
l Attributs et avantages des dynpros
l Créer des dynpros
l Layout
l Attributs de zone
l Logique d'exécution
l Transport de données
l Utiliser les boutons de commande et évaluer les actions
utilisateur

ã SAP AG 1999

(C) SAP AG BC400 9-1


Dialogues utilisateur : dynpros : objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l de décrire les attributs et les avantages des


dynpros
l d'écrire un programme qui :
l affiche les données sur un dynpro
l permet à l'utilisateur de modifier certaines de
ces données
l permet à l'utilisateur d'influencer le traitement
ultérieur du programme en utilisant des
boutons de commande

ã SAP AG 1999

(C) SAP AG BC400 9-2


Avantages des dynpros

Déroulement Contrôles
Contrôles de type
du programme
flexible

100 120

200 140
Aide à la recherche
300

Contrôles
Contrôles de cohérence
cohérence
avec saisie de données
données

ã SAP AG 1999

n Les dynpros sont plus que de simples moniteurs dotés de zones de saisie et d'édition.
n Vous utilisez les dynpros intégrés au Dictionnaire ABAP pour effectuer des contrôles de cohérence
automatiques sur leurs zones de saisie. Ces contrôles portent sur les saisies, les types, les clés et les
valeurs fixes. Ils reposent tous sur les informations contenues dans le Dictionnaire ABAP.
n Vous pouvez effectuer des contrôles complémentaires spécifiques du programme. Des techniques
adaptées aux dynpros vous permettent de vérifier l'ordre dans lequel ces contrôles sont effectués.
n Lorsqu'une erreur est détectée, la zone concernée est appelée et réaffichée pour une nouvelle saisie.
Le layout des dynpros est également très flexible. Les zones de saisie, les zones de sortie, les cases
d'option, les cases à cocher, et même les boutons de commande peuvent être placés sur les dynpros.
Ils permettent aux utilisateurs de déterminer la direction dans laquel le programme va procéder.
n Les programmes contenant des dynpros se caractérisent donc par une grande souplesse.

(C) SAP AG BC400 9-3


Utilisation des dynpros

Code de transaction
100 120

200 140

CALL SCREEN 100.

300

ã SAP AG 1999

n Vous pouvez appeler un dynpro à partir de n'importe quel bloc de traitement ABAP.
n Pour lier entre eux plusieurs dynpros et les appeler à partir d'un programme, appelez le premier.
- Certains programmes ABAP se composent uniquement de dynpros et des blocs de traitement
correspondants. Dans ce cas, le premier dynpro est appelé directement en utilisant un code de
transaction.

(C) SAP AG BC400 9-4


Exemple de dynpro

Liste des vols

Vol Départ
Départ Destination
LH 0400 FRA Francfort JFK New York
LH 0402 FRA Francfort JFK New York
...
SQ 0002 SIN Singapour SFO San Francisco Dynpro
Modifier données
données de vol
Compagnie aérienneLH
Numéro de vol 0400

Aéroport de départ FRA


Destination JFK
Modifier
dans la Durée du vol 8:24
base de données Heure de départ 10:10:00

Sauvegarder Retour

ã SAP AG 1999

n Dans les prochains chapitres, vous allez développer un programme de modification des données de
vol standard.
n Appelez le dynpro par un double-clic sur une des entrées de la liste de base "Liste des vols". Ce
dynpro affiche les données contenues dans la ligne sélectionnée, ainsi que des informations
complémentaires sur la compagnie aérienne. Vous pouvez modifier l'horaire de vol ainsi que
l'heure de départ.
n Pour revenir à la liste de base sans modifier de données, sélectionnez "Retour".
n Pour enregistrer les modifications dans la base de données, sélectionnez "Sauvegarder".
n Il est possible de modifier la base de données en utilisant des modules de fonction. Consultez le
chapitre Dialogues de base de données II pour en apprendre davantage sur ce processus.

(C) SAP AG BC400 9-5


Composantes d'un dynpro

Screen
Painter

Attributs Layout Attributs Commande d'exécution


de dynpro de dynpro de zone

Numéro de dynpro Compagnie Nom de zone PROCESS BEFORE OUTPUT.


Courte description aérienne Longueur MODULE CLEAR_OK_CODE.
Type de dynpro de zone
Dynpro suivant Saisie PROCESS AFTER INPUT.
... x
Sortie MODULE USER_COMMAND_0100.
...

ã SAP AG 1999

n Procédure de création d'un dynpro :


n spécification des propriétés (Attributs de dynpro) ;
n spécification de la structure (dans l'Éditeur pleine page) ;
n définition des attributs pour les éléments du dynpro (Liste de zones) ;
n programmation de sa logique d'exécution.

(C) SAP AG BC400 9-6


Étape 1 : création d'un dynpro

Liste des vols

Vol Départ
Départ Destination
LH 0400 FRA Francfort JFK New York
LH 0402 FRA Francfort JFK New York
...
SQ 0002 SIN Singapour SFO San Francisco
Dynpro
Modifier données
données de vol
Compagnie aérienne
Numéro de vol

Aéroport de départ
Destination

Durée du vol
Heure de départ

ã SAP AG 1999

n Pour créer un dynpro, vous commencez par définir sa structure et les attributs de ses zones. Les
zones Compagnie aérienne, Numéro de vol, Aéroport de départ, et Aéroport d'arrivée doivent se
présenter comme des zones d'édition, Temps de vol et Heure de départ comme des zones de saisie.
n Vous devez être en mesure d'appeler votre dynpro en double-cliquant sur une ligne de la liste de base
et de retourner à la liste de base en sélectionnant la touche de fonction appropriée sur le dynpro.

(C) SAP AG BC400 9-7


Création d'un dynpro : attributs

ABAP
Créer un objet
:
AT LINE-SELECTION. Dynpro 100 n'existe pas.
: Voulez-vous créer l'objet ?
100. Double-clic
CALL SCREEN 100
: Oui Non Annuler

Screen
Painter Attributs de dynpro
Courte description Affichage de données supplémentaires

Type de dynpro
Normal
Sous-dynpro
Boîte de dialogue modale

Dynpro suivant 0

ã SAP AG 1999

n Vous créez un dynpro de plusieurs façons :


n par la Navigation forward, à partir de l'Éditeur ABAP, cliquez sur le numéro de dynpro et
accédez automatiquement au Screen Painter ; accédez automatiquement au Screen Painter ;
n par la liste d'objets de Object Navigator.
n Lorsque vous créez le premier dynpro, le système vous demande de saisir ses attributs. Entrez une
courte description de votre dynpro, choisissez le type Normal, puis saisissez le numéro de dynpro
suivant dans la zone de saisie Dynpro suivant.
n Si vous tapez 0 ou que vous laissez la zone Dynpro suivant vide, le système effectue d'abord un
traitement complet du dynpro, puis reprend le traitement du programme au point qui suit
immédiatement l'appel du dynpro. N'oubliez pas que la valeur 0 est supprimée de la zone de saisie
Dynpro suivant, puisqu'elle est identique à la valeur initiale de la zone.
n Dans notre exemple, vous appelez votre dynpro à partir d'une liste de base. CALL SCREEN 100
doit donc faire partie de l'événement AT LINE-SELECTION.

(C) SAP AG BC400 9-8


Zones de saisie d'une structure du Dictionnaire

T sdyn_conn
Compagnie aérienne
Numéro de vol
X
Aéroport de départ
Destination

Durée du vol
Heure de départ

ã SAP AG 1999

n Vous affectez des attributs aux zones d'un dynpro de deux façons :
n à partir du Dictionnaire, en utilisant les types et les attributs de zone fournis dans les
structures du Dictionnaire ABAP. Toutes les informations relatives à l'objet sont accessibles, y
compris des informations sémantiques sur ses éléments de données et ses liens avec des clés
externes. Le nom de la zone du Dictionnaire est automatiquement affecté à la zone du dynpro.
n à partir d'un programme, en utilisant les attributs de zone d'objets de données préalablement
définis dans un programme. Pour cela, une copie activée du programme doit déjà exister. Le
nom de l'objet de données est automatiquement affecté à la zone du dynpro.
n Vous pouvez définir facilement des éléments du dynpro tels que zones de saisie ou d'édition, textes
de mots-clés, bordures, etc., à partir de l'interface du Screen Painter graphique. Choisissez un
élément dans la colonne de gauche, puis placez-le sur le dynpro avec la souris.
n Pour effacer un élément du dynpro, sélectionnez-le avec la souris, puis choisissez "Effacer".
n Pour déplacer un élément du dynpro, cliquez dessus et faites glisser.

(C) SAP AG BC400 9-9


Modification des attributs de zone

Attributs

T
Nom SDYN_CONN-CARRID
Compagnie aérienne Texte
Numéro de vol Ligne Colonne
X
Aéroport de départ
Destination
FCode FType
Durée du vol Dict Prog Disp
Heure de départ
Zone de saisie
Zone d'édition
Zone requise
...

ã SAP AG 1999

n Pour gérer les attributs de zone d'un dynpro, sélectionnez une zone et choisissez Attributs.
n Vous pouvez définir certaines zones comme obligatoires. ("Zone obligatoire"). Si la zone est initiale,
un point d'interrogation s'affiche en cours d'exécution.
n Si les zones obligatoires ne sont pas toutes remplies lors de l'exécution et qu'une action utilisateur
s'effectue, un dialogue d'erreur se déclenche et toutes les zones de saisie se réaffichent pour une
nouvelle entrée.

(C) SAP AG BC400 9-10


Attributs de zones : liste d'éléments

Screen Painter : liste d'él


d'éléments
éments

Type de zone Textes/modèles Attr. gén. vLg


Afficher attr. Modif. taille Références

Nom de zone Type de zone ... I O O seult.

SBOOK-CARRID TEXT
SDYN_CONN-CARRID 5Text 14 16 16 .1
.. CHAR

SDYN_CONN-CARRID I/O ...


.
.
.

ã SAP AG 1999

n Pour éditer les attributs de zones d'un dynpro, choisissez Liste des zones.
n La liste de zones s'affiche alors sous forme de table.
n Vous pouvez également accéder à cette fonction sous un format différent depuis le Screen Painter
graphique.

(C) SAP AG BC400 9-11


Étape 2 : affichage des données

Liste des vols

Vol Départ
Départ Destination
LH 0400 FRA Francfort JFK New York
LH 0402 FRA Francfort JFK New York
...
SQ 0002 SIN Singapour SFO San Francisco Dynpro
Modifier données
données de vol
Compagnie aérienne LH
Numéro de vol 0400

Aéroport de départ FRA


Destination JFK

Durée du vol 8:24


Heure de départ 10:10:00

ã SAP AG 1999

n Dans la 2ème étape vous allez apprendre à programmer le transport de données d'une liste de base
vers votre dynpro.
n Pour l'utilisateur, le programme fonctionne comme suit :
n en double-cliquant sur une des lignes de la liste de base, vous accèdez à un dynpro. Celui-ci
affiche les principales informations concernant le vol qui l'intéresse. L'horaire et la durée du vol
s'affichent dans une zone de saisie et peuvent donc être modifiés ;
n l'utilisateur peut revenir à la liste de base de plusieurs façons.
n Sachant cela, cette partie du chapitre traitera :
n des conditions requises pour le transport automatique de données d'un programme vers une zone
de dynpro ;
n de la définition de l'interface du dynpro et de la programmation de transport de données vers les
objets de données de l'interface.

(C) SAP AG BC400 9-12


Interfaces de dynpro

Programme ABAP
Objets de données
wa_spfli
sdyn_conn
sdyn_
sdyn_conn
Zones et types définis localement

DATA wa_spfli TYPE spfli.


TABLES sdyn_conn.
sdyn_conn

Process
Before
Output

Process Bloc de
After traitement
Input ABAP
Dynpro 100

Runtime system ABAP

ã SAP AG 1999

n L'instruction TABLES déclare un objet de données interne servant d'interface au dynpro. Elle
renvoie toujours à une structure définie dans le Dictionnaire ABAP.
n Si une instruction TABLES et une zone de dynpro renvoient toutes deux à la même structure du
Dictionnaire, les données de cet objet sont transportées vers les zones de dynpro chaque fois que
celui-ci est appelé. Toute nouvelle saisie ou tout changement effectué sur le dynpro sont ensuite
transférés vers l'objet de données.
n Le Dictionnaire ABAP contient des structures dont les zones correspondent à différentes tables. Ces
tables correspondent à leur tour à une vue commerciale de différentes applications. Les programmes
créés dans le cadre de ce cours emploient une structure pour la gestion des données de base
(sdyn_conn), et une autre pour les réservations (sdyn_book). Si vous utilisez vos propres
structures comme interfaces, vous rendrez vos programmes plus faciles à comprendre et éviterez les
erreurs.

(C) SAP AG BC400 9-13


Transport de données du programme vers le dynpro

Programme ABAP
Objets de données
wa_spfli
sdyn_conn
sdyn_
sdyn_conn
Zones et types définis localement

DATA wa_spfli TYPE spfli.


TABLES sdyn_conn

Process CALL SCREEN 100.


Before
Output

Process Bloc de
After traitement
Input ABAP
Screen 100

Runtime system ABAP

ã SAP AG 1999 Temps

n Le transport de données s'effectue automatiquement entre les zones de dynpro et les zones du
programme qui portent le même nom.
n Immédiatement avant l'envoi d'un dynpro au serveur de présentation (après que tous les
modules événements PBO ont été traités), le système copie le contenu des zones de l'espace de
travail ABAP dans leurs zones correspondantes de l'espace de travail du dynpro.
n Les instructions ABAP facilitent le transport de données entre les objets de données du programme
et l'espace de travail désigné comme interface du dynpro.

(C) SAP AG BC400 9-14


Transport de données du dynpro vers le programme

Programme ABAP
Objets de données
wa_spfli
sdyn_conn
sdyn_
sdyn_conn
Zones et types définis localement

DATA wa_spfli TYPE spfli.


TABLES sdyn_conn

Process CALL SCREEN 100.


Before
Output

Process Bloc de
After traitement
Input ABAP
Screen 100

Runtime system ABAP

ã SAP AG 1999 Temps

n Le transport de données s'effectue automatiquement entre les zones de dynpro et les zones du
programme qui portent le même nom.
n Immédiatement après une action utilisateur (avant que le premier module PAI ne soit traité), le
système copie le contenu des zones de l'espace de travail du dynpro dans leurs zones
correspondantes de l'espace de travail ABAP.
n Les instructions ABAP facilitent le transport de données entre l'espace de travail désigné comme
interface du dynpro et les objets de données du programme.

(C) SAP AG BC400 9-15


Flux de données

Structure : wa_spfli sdyn_conn


Liste Dynpro :
Zones : de base Zone HIDE Zone d'édition Zone de saisie
MANDT
CARRID ! ! !
CONNID ! ! !
COUNTRYFR
CITYFROM
AIRPFROM ! !
COUNTRYTO
CITYTO
AIRPTO ! !
FLTIME ! !
DEPTIME ! !
ARRTIME
DISTANCE
DISTID
FLTYPE

Avant d'appeler le dynpro :


SELECT SINGLE * FROM spfli ...
ã SAP AG 1999

n Au dernier niveau de développement, le programme doit permettre à l'utilisateur de modifier les


données de la base. L'utilisateur doit être en mesure de modifier les zones FLTIME et DEPTIME.
Pour permettre à l'utilisateur de modifier les données de plusieurs compagnies aériennes, une liste de
base des compagnies aériennes pour lesquelles l'utilisateur est autorisé à modifier les données doit
s'afficher. L'utilisateur arrive sur le dynpro de modification par un double-clic. Une fois les
modifications effectuées, l'utilisateur retourne à la liste de base. Cependant, une nouvelle liste de
base n'est pas créée. Les données modifiées ne doivent donc pas apparaître dans la liste de base.
n Pour garantir une mise à jour des données affichées sur le dynpro, l'enregistrement est relu depuis la
base de données au début de AT LINE-SELECTION.
n Avantages de cette méthode :
Ÿ pour la liste de base, seules les colonnes de la table de base de données affichées dans la liste
doivent être lues. La performance peut être améliorée pour de longues listes ;
Ÿ les données affichées sur le dynpro sont toujours à jour, même si l'enregistrement sélectionné vient
seulement d'être modifié par le programme. Ceci ne serait pas le cas si toutes les données du
dynpro étaient mémorisées dans la zone HIDE lors de la création de la liste de base ;
Ÿ les modifications effectuées dans la base de données en utilisant le dynpro n'aboutissent pas à des
valeurs incorrectes dans la liste de base, car les zones modifiables ne sont pas dans la liste ;
Ÿ en prévision d'un concept de blocage : la durée de blocage peut être raccourcie. Vous trouverez
des informations complémentaires sur ce sujet dans le chapitre Dialogues de base de données II ;
Ÿ le programme peut être complété : des informations supplémentaires sur l'enregistrement de
données peuvent s'afficher à l'écran sans devoir apporter de nombreuses modifications.

(C) SAP AG BC400 9-16


Syntaxe pour le niveau 2

START-OF-SELECTION.
*
SELECT carrid connid airpfrom cityfrom airpto cityto
INTO CORRESPONDING FIELDS OF wa_spfli
FROM spfli.
WRITE: / wa_spfli-carrid COLOR COL_KEY,
wa_spfli-connid COLOR COL_KEY,
... .
* zones-clés mises en buffer
HIDE:
HIDE: wa_spfli-carrid,
wa_spfli-carrid, wa_spfli-
wa_spfli-connid.
connid.
ENDSELECT.
AT LINE-SELECTION.
SELECT SINGLE * FROM spfli
INTO spfli
SELECT SINGLE * FROM wa_spfli
WHEREwa_spfli
INTO carrid = wa_spfli-carrid
AND carrid
WHERE connid==wa_spfli-carrid
wa_spfli-connid.
MOVE-CORRESPONDING wa_spfli
AND connid to sdyn_conn.
= wa_spfli-connid.

CALL SCREEN 100.


ã SAP AG 1999

n Pour afficher des données sur le dynpro, la structure TABLES doit comporter les données actuelles
avant que le dynpro ne soit envoyé au serveur de présentation. L'exemple ci-dessus montre une
manière d'y parvenir.
n L'instruction HIDE s'utilise pour placer des zones-clés des tables de base de données se référant à la
ligne de liste dans la zone HIDE. Les données effectives de la ligne sélectionnée deviennent ensuite
disponibles dans les zones wa_spfli-carrid et wa_spfli-connid à l'événement AT
LINE-SELECTION.
n L'enregistrement de données est lu depuis la base de données en utilisant SELECT SINGLE. Ceci
garantit que la structure contienne les données à jour, même si l'utilisateur vient de les modifier. Elle
doit être du même type que la ligne de table, pour que les zones correctes soient accessibles pour
toutes les données de l'enregistrement.
n Les zones correspondantes sont copiées vers la structure TABLES sdyn_conn en utilisant MOVE-
CORRESPONDING. Le système transporte automatiquement les données de la structure vers les
zones du dynpro.

(C) SAP AG BC400 9-17


Étape 3 : définition des boutons de commande

Liste des vols


Message 1 dans
Vol Départ
Départ Destination barre d'état
LH 0400 FRA Francfort JFK New York
LH 0402 FRA Francfort JFK New York
...
SQ 0002 SIN Singapour SFO San Francisco Dynpro
Modifier données
données de vol C
Compagnie aérienne LH
Message 2 Numéro de vol 0400
dans barre
d'état Aéroport de départ FRA
Destination JFK

Durée du vol 8:24


Heure de départ 10:10:00

Sauvegarder Retour

ã SAP AG 1999

n Dans l'étape 3, vous allez apprendre comment définir des codes fonction pour des boutons de
commande. Ces fonctions assurent le traitement de différents types de logique de programme, selon
le choix opéré.
n Pour l'utilisateur, le programme fonctionne comme suit :
n en double-cliquant sur une des lignes de la liste de base, vous accèdez à un dynpro. Celui-ci
affiche les principales informations concernant le vol qui l'intéresse. L'horaire et la durée de vol
peuvent être modifiés ;
n en sélectionnant le bouton de commande "Retour", l'utilisateur revient à la liste de base sans que
la base de données soit modifiée. Le message "Le dynpro a été quitté sans aucune modification"
s'affiche dans la barre d'état de la liste de base ;
n sélectionnez "Sauvegarder" pour écrire toutes vos modifications dans la base de données.
sélectionnez "Sauvegarder" pour écrire toutes vos modifications dans la base de données. Nous
reviendrons plus profondément sur cette étape dans le chapitre Dialogues de base de données II.
Dans la partie suivante, le bouton de commande est déjà préparé. Vous devez retourner à la liste
de base après avoir sélectionné le bouton de commande et un message doit s'afficher dans la
barre d'état ;
n Après avoir pressé Entrée, le dynpro s'affiche à nouveau.
n Les modifications de la base de données sont traitées dans le chapitre Dialogues de base de données
II.
n Sachant cela, cette partie du chapitre traitera de :
Ÿ la logique d'exécution dans des blocs événements PBO et PAI ;
Ÿ l'utilisation des modules PBO et PAI en tant que blocs de traitement ABAP pour la programmation
de dynpros ;
Ÿ la manière de vérifier comment le programme continue en fonction du bouton de commande
sélectionné par l'utilisateur.
(C) SAP AG BC400 9-18
(C) SAP AG BC400 9-19
Définition de boutons de commande / affectation
de codes de fonction

Attributs

T
Nom BOUTON2
Compagnie aérienne Texte Retour
Numéro de vol Ligne
X Colonne

Aéroport de départ
Destination
FCode RETOUR FType
Durée du vol Dict Prog Disp
Heure de départ
Zone de saisie
Sauvegarder Retour Zone de sortie
...

ã SAP AG 1999

n Pour définir la fonction de boutons de commande spécifiques, vous devez affecter à ces boutons un
code de fonction. Vous pouvez le faire soit sur le dynpro des attributs, soit dans la liste des zones du
Screen Painter graphique.

(C) SAP AG BC400 9-20


Affectation d'un nom à la zone OK_CODE

Éditeur
ABAP

TABLES: sdyn_conn.
DATA:
DATA: ok_code
ok_code like
LIKE sy-ucomm.
sy-ucomm.

Screen
Painter

Screen Painter : liste d'él


d'éléments
éments

Attributs généraux
Nom de zone Texte de zone Code de fonction
BOUTON1 Sauvegarder SAUVEGARDER
BOUTON2 ... Retour ... RETOUR
OK OK_CODE

ã SAP AG 1999

n La zone OK_CODE est un objet de données qui intègre le code de fonction correspondant après
chaque action utilisateur.
n Le nom de zone OK_CODE doit toujours figurer sur la dernière ligne de la liste de zones du dynpro.
n Si vous définissez un objet de données correspondant portant le même nom dans l'espace de
déclaration d'un programme, le système place dans cet objet le code de fonction du bouton choisi au
moment de l'exécution. La zone sy-ucomm sert de zone de référence.

(C) SAP AG BC400 9-21


Modules

Objets de données Programme ABAP

100
PBO
CALL SCREEN 100.

MODULE
<name>. MODULE <name>
OUTPUT.
ENDMODULE.
PAI
MODULE
<name>. MODULE <name>
INPUT.
ENDMODULE.

Runtime system ABAP

ã SAP AG 1999Temps

n L'instruction ABAP CALL SCREEN <nnnn> interrompt le traitement du bloc de traitement et


appelle un dynpro.
n À chaque dynpro correspondent deux blocs événement :
n PROCESS BEFORE OUTPUT (PBO) est traité immédiatement avant l'affichage d'un
dynpro. La fonction des modules appelés à ce stade est, par exemple, d'insérer des valeurs
recommandées dans les zones de saisie.
n PROCESS AFTER INPUT (PAI) est traité immédiatement après une action utilisateur. Toute
logique de programme influencée par une action utilisateur doit être traitée au PAI. Vous
trouverez plus de détails à ce sujet à l'étape 3.
n Note : le code des événements PBO et PAI s'écrit en utilisant Screen Painter et non l'Éditeur
ABAP. Ces deux blocs d'événements constituent la logique d'exécution d'un dynpro.
Lorsque vous programmez cette logique, utilisez la syntaxe Dynpro ABAP. Parmi ces commandes,
MODULE <nom module ABAP> est la plus importante. Elle appelle un module, qui est un bloc
de traitement ABAP spécifique.
n Les modules sont des blocs de traitement ABAP ne comportant aucune interface, appelés
uniquement depuis la logique d'exécution du dynpro. Les modules commencent par l'instruction
ABAP MODULE et se terminent par ENDMODULE.
n La logique de programme, qui appartient logiquement à un dynpro spécifique, doit normalement être
exécutée aux événements PBO et PAI du dynpro.

(C) SAP AG BC400 9-22


Dynpro suivant statique = 0

Objets de données Programme ABAP

100
CALL SCREEN 100.
PBO

PAI

Attributs de dynpro
Dynpro
suivant 0 Dynpro suivant 0

Runtime system ABAP

ã SAP AG 1999Temps

n Si vous entrez 0 dans la zone Dynpro suivant ou si vous la laissez vide, le système traite d'abord la
totalité du dynpro, puis reprend le traitement du programme au point où le dynpro a été appelé.

(C) SAP AG BC400 9-23


Dynpro suivant statique = numéro de dynpro

Objets de données Programme ABAP

100
CALL SCREEN 100.
PBO

PAI

Attributs de dynpro
Dynpro
suivant 100 Dynpro suivant 100

Runtime system ABAP

ã SAP AG 1999Temps

n Si vous paramétrez à 100 le dynpro suivant du dynpro 100, le système traite à nouveau ce dynpro
après avoir fini de traiter le module PAI.

(C) SAP AG BC400 9-24


Paramétrer dynamiquement Dynpro suivant

Objets de données Programme ABAP

100
CALL SCREEN 100.
PBO

PAI
SET SCREEN 0.
SET SCREEN 0.

0
Attributs de dynpro
Dynpro
suivant 100 Dynpro suivant 0

Runtime system ABAP

ã SAP AG 1999Temps

n Vous pouvez utiliser l'instruction ABAP SET SCREEN <nnnn> dans un module PAI pour
substituer de manière dynamique la valeur paramétrée dans l'attribut Dynpro suivant.
n Les zones Numéro de dynpro et Dynpro suivant comportent souvent le même numéro de dynpro.
Dans ce cas, lorsque vous choisissez Entrée, un contrôle de zone est effectué et le système revient au
même dynpro. Afin de quitter ce dynpro, vous devez définir un bouton de commande qui
déclenchera un changement Dynpro suivant dans le module PAI.

(C) SAP AG BC400 9-25


Logique du programme

Screen
Painter Éditeur
ABAP
PROCESS BEFORE OUTPUT.
MODULE clear_ok_code. MODULE clear_ok_code OUTPUT.
CLEAR ok_code .
ENDMODULE.

Sauvegarder Retour MODULE user_command_0100 INPUT.


* LOGIQUE DE PROGRAMME
PROCESS AFTER INPUT.
CASE ok_code.
MODULE user_command_0100. WHEN 'BACK'. ...
WHEN 'SAVE'. ...
ENDCASE.
ENDMODULE.

ã SAP AG 1999

n A l'aide de la zone OK_CODE,différentes logiques de programme peuvent maintenant être exécutées


par les modules PAI en fonction du choix de l'utilisateur.
n Si une zone OK_CODE n'est pas réinitialisée, des erreurs risquent de se produire car les boutons de
commande ne sont pas tous dotés d'un code de fonction. Il existe deux manières d'y parvenir :
Ÿ initialisez la zone OK_CODE dans le module PBO. Elle est alors mise à sa valeur initiale au
moment du PAI, à moins que l'utilisateur ait exécuté une action utilisateur à laquelle est affecté un
code de fonction. Dans ce cas, la zone OK_CODE contient le code de fonction ;
Ÿ utilisez une zone auxiliaire, et dans un module du PAI, copiez le contenu de la zone OK_CODE
dans la zone auxiliaire. Réinitialisez alors la zone OK_CODE. Dans ce cas c'est la zone auxiliaire
qui doit être testée dans le module PAI pour évaluer le code de fonction.

(C) SAP AG BC400 9-26


Navigation forward : création de modules
Screen Créer un objet
Painter
PBO module USER_COMMAND_100 n'existe pas.
PROCESS AFTER INPUT. Souhaitez-vous créer l'objet ?
MODULE user_command_0100.
Double-C Oui Non Annuler
lic

Créer module PAI


Module PAI USER_COMMAND_0100

Inclure sélection
Inclure
ZBC400_00_DYNPRO Programme principal
Éditeur
ABAP

MODULE user_command_100 INPUT.

ENDMODULE.
ã SAP AG 1999

n Vous pouvez implémenter des appels tels que MODULE dans la logique d'exécution d'un dynpro
(événements PBO et PAI). Vous utilisez toutefois ABAP pour créer les modules.
n Il y a deux possibilités pour créer un module :
n par la navigation, faites un double-clic sur le nom du module à partir de l'Éditeur du Screen
Painter ;
n par Object Navigator, affichez votre programme, choisissez "Module PBO" ou "Module PAI'
dans Objets de programme et créez un nouvel objet de développement en cliquant sur l'icone
Créer.
n Vous pouvez appeler un même module depuis plusieurs dynpros. (Possible réutilisation)
n N'oubliez pas que les modules appelés aux événements PBO doivent être définis en utilisant
l'instruction MODULE ... OUTPUT. Les modules définis par MODULE ... INPUT ne peuvent être
appelés qu'à des événements PAI.

(C) SAP AG BC400 9-27


Utilisation de la fonction "Sauvegarder"

DATA: ok_code LIKE sy-ucomm.

.
.

MODULE USER_COMMAND_100 INPUT.


CASE ok_code.
WHEN
WHEN 'BACK'.
'BACK'.
SET SCREEN 0.
MESSAGE s057(BC400).
WHEN
WHEN 'SAVE'.
'SAVE'.
* L'appel d'un module de fonction pour sauvegarder les
modifications est laissé
* pour des raisons didactiques jusqu'au chapitre "Dialogues de
base de données II"
SET SCREEN 0.
MESSAGE s058(BC400).
ENDCASE.
ENDMODULE.

ã SAP AG 1999

n Dans cet exemple, deux boutons de commande doivent déclencher la modification de la valeur
affichée dans Dynpro suivant :
n "Retour" rétablit automatiquement cette valeur à 0. L'utilisateur est renvoyé au dernier dynpro
appelé avant celui-ci.
n "Sauvegarder" appelle l'affichage d'un message S. L'utilisateur accède alors à une liste de base
ou à une liste détaillée identique à celle affichée lorsque "Retour" est sélectionné.

(C) SAP AG BC400 9-28


Dialogues utilisateur : dynpros : résumé du chapitre

Vous êtes maintenant capable :

l de décrire les attributs et les avantages des


dynpros
l d'écrire un programme qui :
l affiche les données sur un dynpro
l permet à l'utilisateur de modifier certaines de
ces données
l permet à l'utilisateur d'influencer le traitement
ultérieur du programme en utilisant des
boutons de commande

ã SAP AG 1999

(C) SAP AG BC400 9-29


Exercices

(C) SAP AG BC400 9-30


(C) SAP AG BC400 9-31
Chapitre : Dynpro
Sujet : Création de dynpros

À la fin de ces exercices, vous serez en mesure :


• de créer des dynpros ;
• d’appeler des dynpros existants à partir du programme.

Le programme SAPBC400UDT_DYNPRO_1 affiche toutes les


réservations effectuées par une agence sous forme de liste.
Complétez le programme comme suit :
Le double-clic sur une ligne dans la liste de base doit appeler un dynpro ;
ce dynpro doit contenir des zones de saisies pour des données de
réservations spécifiques qui ne sont pas affichées sur la liste ; ce dynpro
doit également contenir des zones d’édition pour des données de
réservations qui sont déjà affichées sur la liste ; quelle que soit l’action
utilisateur effectuée sur le dynpro, la liste de base doit se réafficher.

Programme : ZBC400_##_DYNPRO
Solution modèle : SAPBC400UDS_DYNPRO_1
Modèle : SAPBC400UDT_DYNPRO_1

1-1 Copiez le modèle SAPBC400UDT_DYNPRO_1 vers votre programme


ZBC400_##_DYNPRO. Affectez le programme à la classe de développement
ZBC400_## et à l'ordre de modification pour votre projet "BC400…" (remplaçant
## par votre numéro de groupe).

1-2 Familiarisez-vous avec le programme. Testez le programme en utilisant le numéro


d’agence 1## (## est votre numéro de groupe).

1-3 La sélection d’une ligne de la liste de base (en double-cliquant ou en appuyant sur
F2) doit appeler un dynpro. Créez ce dynpro (numéro de dynpro 100) en utilisant la
fonction Navigation forward.

1-4 Pour les attributs, affectez le numéro de dynpro 0 comme numéro du dynpro
suivant, de sorte que l’utilisateur retourne à la liste de base après n’importe quelle
action utilisateur sur le dynpro 100.

(C) SAP AG BC400 9-32


1-5 Créez des zones de saisie/d’édition sur le dynpro. Lorsque vous affectez des types
de zone, référez-vous à la structure SDYN_BOOK du Dictionnaire ABAP.

• Les zones-clés de la table de réservation CARRID, CONNID, FLDATE, et


BOOKID doivent être copiées avec leurs labels.

• Le nom client NAME doit se copier sans label et doit s’afficher à côté du
numéro client.

• Les zones CUSTOMID CUSTTYPE, SMOKER, CLASS, LOCCURAM et


LOCCURKEY doivent être copiées avec leurs labels.

1-6 Gérez les attributs de zone de dynpro :

• les zones CARRID, CONNID, FLDATE, BOOKID et CUSTOMID doivent


s’afficher comme des zones d’édition (attribut Zone d’édition) ;

• le nom client NAME doit s’afficher à côté du numéro client sans texte (attribut
Édition uniquement) ;

• les zones CUSTOMID CUSTTYPE, SMOKER, CLASS, LOCCURAM et


LOCCURKEY sont des zones de saisie/édition (attribut zone de saisie/zone
d’édition).

(C) SAP AG BC400 9-33


Chapitre : Dynpro
Sujet : Transport de données

À la fin de ces exercices, vous serez en mesure :


• de compléter les zones de dynpro avec des données du programme.

Complétez votre programme ZBC400_##_ DYNPRO :


un double-clic sur une ligne de la liste de base doit afficher les détails de
la réservation sélectionnée au dynpro. Si l’utilisateur modifie des données
au dynpro, ces modifications doivent alors être disponibles dans le
programme dès que l’utilisateur quitte le dynpro.

Programme : ZBC400_##_DYNPRO
Solution modèle : SAPBC400UDS_DYNPRO_2

2-1 Complétez votre programme, ZBC400_##_DYNPRO, ou copiez la solution modèle


adéquate SAPBC400UDS_DYNPRO_1 et nommez-la ZBC400_##_DYNPRO_2.
Affectez votre programme à la classe de développement ZBC400_## et à l'ordre
de transport pour ce projet, BC400… (en remplaçant ## par votre numéro de
groupe).

2-2 Utilisez une zone de travail comme interface entre le programme et le dynpro.
Puisque vous avez fait référence à une structure du Dictionnaire pour les zones du
dynpro, vous devez utiliser l’instruction TABLES.

2-3 Assurez-vous que les zones-clés de la table de base de données SBOOK et le nom
client sont toujours renseignés (HIDE: ...) dans l’événement AT LINE-
SELECTION après sélection d’une ligne de la liste de base (double-cliquez ou
appuyez sur F2).

2-4 Le programme doit ensuite être complété afin de modifier les données de la base de
données. Assurez-vous que l’utilisateur dispose d’une autorisation de modification
pour la compagnie aérienne choisie.
Pour vous assurer qu’un double-clic sur une ligne de la liste de base permet
d’afficher des données à jour, l’enregistrement de données doit être consulté à partir
de la table de base de données SBOOK avant le traitement du dynpro.

(C) SAP AG BC400 9-34


Pour cela, avant d’appeler le dynpro, copiez les données les plus récentes de la
réservation sélectionnée de la table SBOOK vers une structure qui possède la même
structure de ligne que la table de base de données. Si l’enregistrement de données
ne peut être lu, le système doit afficher le message d’information 176 de la classe de
messages BC400. Si l’enregistrement est lu avec succès, appelez le dynpro.

2-5 Juste avant d'appeler le dynpro, copiez les données appropriées vers la zone de
travail TABLES, qui sert d’interface au dynpro.

Chapitre : Dynpro
Sujet : Transport de zone et traitement dynpro suivant

(C) SAP AG BC400 9-35


À la fin de ces exercices, vous serez en mesure :
• de créer des boutons de commande sur des dynpros ;
• de traiter le code système lancé lorsque l’utilisateur clique sur un
bouton de commande et contrôle le déroulement du programme ;
• de définir de manière dynamique le dynpro suivant.

Complétez votre programme ZBC400_##_ DYNPRO:


l’utilisateur doit pouvoir choisir entre deux boutons de commande sur le
dynpro qui contrôle le déroulement du programme.

Programme : ZBC400_##_DYNPRO
Solution modèle : SAPBC400UDS_DYNPRO_3

3-1 Complétez votre programme, ZBC400_##_DYNPRO, ou copiez la solution modèle


adéquate SAPBC400UDS_DYNPRO_2 et nommez-la ZBC400_##_DYNPRO_3.
Affectez votre programme à la classe de développement ZBC400_## et à la tâche
déjà créée pour vous (en remplaçant ## par votre numéro de groupe).

3-2 Définissez deux boutons de commande sur le dynpro qui permettent à l’utilisateur
soit de retourner à la liste de base (PUSH_BACK), soit de sauvegarder les
modifications dans les données (PUSH_SAVE) :

Nom du bouton de Texte Code de fonction


commande
PUSH_BACK Retour RETOUR
PUSH_SAVE Sauvegarder SAUVEGARDER
ou icône
ICON_SYSTEM_SAVE

3-3 Désignez la zone OK_CODE du dynpro et déclarez un objet de données du même


nom (et du type correspondant) dans le programme.
3-4 Naviguez dans la logique d’exécution. Créez un module pour le traitement du code
de fonction (en utilisant Navigation forward) lors de PROCESS AFTER INPUT :

Code de fonction Action Dynpro suivant


RETOUR Aucun Liste
SAUVEGARDER D'abord : Liste

(C) SAP AG BC400 9-36


Code de fonction Action Dynpro suivant
N° du message
d’informations
060(BC400)
Autres Aucun Dynpro 100

3-5 Assurez-vous qu’appuyer sur "Entrée" provoque toujours l’affichage du dynpro


100, indépendamment de l’historique de navigation. À cette fin, utilisez l’une ou
l’autre des deux méthodes pour initialiser OK_CODE.

(C) SAP AG BC400 9-37


Solutions

(C) SAP AG BC400 9-38


Chapitre : Dynpro
Sujer : Création de dynpros

Solution modèle : Programme SAPBC400UDS_DYNPRO_1

*&--------------------------------------------------------------*
*& Report SAPBC400UDS_DYNPRO_1 *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400uds_dynpro_1.
CONSTANTS: actvt_display TYPE activ_auth VALUE '03',
actvt_change TYPE activ_auth VALUE '02'.

PARAMETERS: pa_agnum TYPE s_agncynum.


DATA: wa_cust TYPE sbc400cust,
it_cust TYPE sbc400_t_sbc400cust.
DATA: wa_sbook TYPE sbook.

START-OF-SELECTION.
SELECT id name FROM scustom INTO TABLE it_cust.
SELECT carrid connid fldate bookid customid
FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook
WHERE agencynum = pa_agnum.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD wa_sbook-carrid
(C) SAP AG BC400 9-39
ID 'ACTVT' FIELD actvt_display.
IF sy-subrc = 0.
READ TABLE it_cust INTO wa_cust
WITH TABLE KEY id = wa_sbook-customid.
WRITE: / wa_sbook-carrid COLOR COL_KEY,
wa_sbook-connid COLOR COL_KEY,
wa_sbook-fldate COLOR COL_KEY,
wa_sbook-bookid COLOR COL_KEY,
wa_cust-name COLOR COL_KEY.
ENDIF.
ENDSELECT.

* Le programme continue après avoir sélectionné une réservation sur


la * liste de base.
AT LINE-SELECTION.
IF sy-lsind = 1.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD wa_sbook-carrid
ID 'ACTVT' FIELD actvt_change.
IF sy-subrc = 0.
CALL SCREEN 100.
ELSE.
MESSAGE s047(bc400) WITH wa_sbook-carrid.
ENDIF.
ENDIF.

(C) SAP AG BC400 9-40


Chapitre : Dynpro
Sujet : Transport de données

Solution modèle : programme SAPBC400UDS_DYNPRO_2

*&--------------------------------------------------------------*
*& Report SAPBC400UDS_DYNPRO_2 *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400uds_dynpro_2.
CONSTANTS: actvt_display TYPE activ_auth VALUE '03',
actvt_change TYPE activ_auth VALUE '02'.

TABLES: sdyn_book.
PARAMETERS: pa_agnum TYPE s_agncynum.
DATA: wa_cust TYPE sbc400cust,
it_cust TYPE sbc400_t_sbc400cust.
DATA: wa_sbook TYPE sbook.
START-OF-SELECTION.
SELECT id name FROM scustom INTO TABLE it_cust.

SELECT carrid connid fldate bookid customid


FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook
WHERE agencynum = pa_agnum.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD wa_sbook-carrid
ID 'ACTVT' FIELD actvt_display.
IF sy-subrc = 0.
READ TABLE it_cust INTO wa_cust
WITH TABLE KEY id = wa_sbook-customid.
WRITE: / wa_sbook-carrid COLOR COL_KEY,
wa_sbook-connid COLOR COL_KEY,
wa_sbook-fldate COLOR COL_KEY,

(C) SAP AG BC400 9-41


wa_sbook-bookid COLOR COL_KEY,
wa_cust-name COLOR COL_KEY.

* Masquer des zones-clés de la table de base de données SBOOK et nom


client
HIDE: wa_sbook-carrid, wa_sbook-connid, wa_sbook-fldate,
wa_sbook-bookid, wa_cust-name.
ENDIF.
ENDSELECT.
CLEAR wa_sbook.

AT LINE-SELECTION.
IF sy-lsind = 1.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD wa_sbook-carrid
ID 'ACTVT' FIELD actvt_change.
IF sy-subrc = 0.
SELECT SINGLE * FROM sbook INTO wa_sbook
WHERE carrid = wa_sbook-carrid
AND connid = wa_sbook-connid
AND fldate = wa_sbook-fldate
AND bookid = wa_sbook-bookid.

IF sy-subrc <> 0.
MESSAGE i176(bc400).
ELSE.
MOVE-CORRESPONDING wa_sbook TO sdyn_book.
MOVE wa_scust-name TO sdyn_book-name.
CALL SCREEN 100.
ENDIF.
ELSE.
MESSAGE s047(bc400) WITH wa_sbook-carrid.
ENDIF.
ENDIF.
CLEAR wa_sbook.

(C) SAP AG BC400 9-42


Chapitre : Dynpro
Sujet : Transport de zone et traitement dynpro suivant

Solution modèle : Programme SAPBC400UDS_DYNPRO_3

*&--------------------------------------------------------------*
*& Report SAPBC400UDS_DYNPRO_3 *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400uds_dynpro_3.
CONSTANTS: actvt_display TYPE activ_auth VALUE '03',
actvt_change TYPE activ_auth VALUE '02'.

TABLES: sdyn_book.
PARAMETERS: pa_agnum TYPE s_agncynum.
DATA: wa_cust TYPE sbc400cust,
it_cust TYPE sbc400_t_sbc400cust.
DATA: wa_sbook TYPE sbook.
DATA: ok_code LIKE sy-ucomm, save_ok LIKE ok_code.

START-OF-SELECTION.
SELECT id name FROM scustom INTO TABLE it_cust.
SELECT carrid connid fldate bookid customid
FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook
WHERE agencynum = pa_agnum.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD wa_sbook-carrid
ID 'ACTVT' FIELD actvt_display.
IF sy-subrc = 0.
READ TABLE it_cust INTO wa_cust
WITH TABLE KEY id = wa_sbook-customid.
WRITE: / wa_sbook-carrid COLOR COL_KEY,
wa_sbook-connid COLOR COL_KEY,

(C) SAP AG BC400 9-43


wa_sbook-fldate COLOR COL_KEY,
wa_sbook-bookid COLOR COL_KEY,
wa_cust-name COLOR COL_KEY.
* Masquer des zones-clés de la table de base de données SBOOK et nom
client
HIDE: wa_sbook-carrid, wa_sbook-connid, wa_sbook-fldate,
wa_sbook-bookid, wa_cust-name.
ENDIF.
ENDSELECT.
CLEAR wa_sbook.

AT LINE-SELECTION.
IF sy-lsind = 1.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD wa_sbook-carrid
ID 'ACTVT' FIELD actvt_change.
IF sy-subrc = 0.
SELECT SINGLE * FROM sbook INTO wa_sbook
WHERE carrid = wa_sbook-carrid
AND connid = wa_sbook-connid
AND fldate = wa_sbook-fldate
AND bookid = wa_sbook-bookid.

IF sy-subrc <> 0.
MESSAGE i176(bc400).
ELSE.
MOVE-CORRESPONDING wa_sbook TO sdyn_book.
MOVE wa_scust-name TO sdyn_book-name.
CALL SCREEN 100.
ENDIF.
ELSE.
MESSAGE s047(bc400) WITH wa_sbook-carrid.
ENDIF.
ENDIF.
CLEAR wa_sbook.

*&--------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&--------------------------------------------------------------*

(C) SAP AG BC400 9-44


* déroulement de dynpro dynamique dépendant d’une action
utilisateur
*---------------------------------------------------------------*
MODULE user_command_0100 INPUT.
save_ok = ok_code .
* Effacer la zone OK-Code afin de l’initialiser sur dynpro
* suivant
CLEAR ok_code .
CASE save_ok.
WHEN 'BACK'.
SET SCREEN 0.
WHEN 'SAVE'.
MOVE-CORRESPONDING sdyn_book TO wa_sbook.
* La sauvegarde des données modifiées sera exécutée ultérieurement
message i060(bc400).
SET SCREEN 0.
WHEN OTHERS.
SET SCREEN 100.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT

(C) SAP AG BC400 9-45


Interfaces

Contenu :
l Création d'interfaces dans le Menu Painter
l Titres
l Barres de menus
l Barres d'outils standard
l Barres d'outils d'application

ã SAP AG 1999

(C) SAP AG BC400 10-1


Interfaces : objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l de créer un titre GUI


l de créer des statuts GUI pour listes et dynpros qui
contiennent :
l des barres de menus
l des barres d'outils standard
l des barres d'outils d'application
l des affectations de touches de fonction

ã SAP AG 1999

(C) SAP AG BC400 10-2


Synthèse : objets d'écran

Données de base du vol Traiter Saut Système Aide

Titre GUI
SET TITLEBAR <n>.

Barre de menus Statut GUI


Aide F1 Barre d'outils
SET PF-STATUS <n>.
Sélection F2 standard
Retour F3 B. d'outils d'applic.
. Affectation de
. touches de fonction
.

ã SAP AG 1999

n Toutes les interfaces utilisateur comprennent les outils/objets suivants :


n une barre de titre contenant le titre de l'écran, de l'écran de sélection ou de la liste affichée ;
n une barre de menus déroulants ;
n des menus contenant les fonctions exécutables du programme en cours. Un menu peut comporter des
sous-menus. Les menus "Système" et "Aide" se trouvent sur chaque écran du système R/3 et
contiennent toujours les mêmes fonctions. Aucun de ces menus ne peut être modifié ni masqué.
n une barre d'outils standard dont les icônes correspondent aux fonctions les plus fréquemment
utilisées. La barre d'outils standard de R/3 contient toujours les mêmes icônes, auxquelles sont
affectées des fonctions standard. Les fonctions qui ne sont pas accessibles depuis une interface
déterminée sont grisées ;
n des affectations de touches de fonction, qui s'affichent d'un clic avec le bouton droit de la souris.
En principe, vous devez pouvoir activer toutes les fonctions de menu à l'aide de ces touches ;
n une barre d'outils d'application dont les icônes et les boutons de commande donnent accès aux
fonctions les plus fréquemment utilisées sur l'écran actif.
n Chaque programme est créé avec une interface contenant l'ensemble des objets/outils énumérés ci-
dessus. Ensuite, vous créez des vues différentes (statuts GUI) de cette interface pour les écrans, les
écrans de sélection et les listes du programme.

(C) SAP AG BC400 10-3


Exemple d'interface de programme

SAP R/3
Liste
Données de vol de base Traiter Saut Système Aide
! é ! é ! ê ! ê
é ê
Imprimer Ctrl+P
Sauv. dans fich. PC MAJ+F8
Sauvegarder
Terminer MAJ+F3

Modifier les heures devol Dynpro


Données de vol de base Traiter Saut Système Aide 0100
! é ! é ! ê ! ê
é ê
Imprimer
Sauvegarder dans fichier PC
Sauvegarder Ctrl+S
Terminer

ã SAP AG 1999

n Pour terminer, vous allez définir une interface utilisateur pour le programme exemple. Les différents
statuts doivent présenter les caractéristiques suivantes :
n la liste et l'écran doivent avoir la même barre de menus. Seules les fonctions exécutables sont en
caractères noirs ;
n dans la barre d'outils standard, seules les fonctions exécutables sont en couleur. La fonctionnalité du
dynpro ne sera modifiée en aucun cas ;
n la barre d'outils d'application figurant dans la liste de base doit comporter une icône "Choisir", tout
comme le statut de la liste standard ;
n l'écran doit avoir son propre titre.

(C) SAP AG BC400 10-4


Principaux éléments d'interface

Titre 100

Barres de menus
B. d'outils d'applic. Affectation
Affectation de
de touches
touches
Barres de menus
Données de base du B. d'outils d'applic. de
de fonction
fonction
vol Données de base du vol Affectation de touches
de fonction ;
Données de base du vol
Données de base du vol

Traiter Barre de menus

Saut

Liste des fonctions

SAUVE- PRI %PC RW %EX Liste


RETOUR CHOISIR des
GARDER
P+ P++ P-- P- fonctions

ã SAP AG 1999

n Toutes les interfaces utilisateur de programme comprennent les sous-objets suivants :


n une barre de titre contenant le titre de l'écran, de l'écran de sélection ou de la liste affichée ;
n une barre de menus déroulants ;
n des menus liés aux fonctions de l'interface, que vous appelez par transactions et qui possèdent tous
des mots-clés explicites. Les menus en cascade peuvent être définis par référence à un autre menu de
la liste de menus et non à un code de fonction ;
n des affectations de touches : fonctions affectées aux icônes de la barre d'outils standard et aux
touches de fonction (touches F) ;
n Les touches de fonction importantes peuvent aussi être affectées à des icônes et à des boutons de
commande dans la barre d'outils d'application ;
n des fonctions (par exemple, Remplacer, Rechercher ou Couper) affectées aux codes de fonction
employés dans le programme pour évaluer les actions utilisateur. Toutes les fonctions d'une interface
sont énumérées dans une liste de fonctions. Il existe des codes de fonction standard pour les listes.
n Les programmes peuvent présenter plusieurs barres de menus, affectations de touches et barres
d'outils d'application. Dans notre modèle de programme, vous ne devez créer qu'un objet dans
chaque catégorie. La barre de menus doit comporter trois menus.

(C) SAP AG BC400 10-5


Statuts : vues de l'interface utilisateur

Statut
Statut "LISTE"
"LISTE"

Liste

Barres de menus B. d'outils d'applic. Affectation de touches


Données de base du vol Données de base du vol de fonction
Données de base du vol

Liste des fonctions

inactive SAUVE- PRI %PC RW %EX Liste


RETOUR CHOISIR des
GARDER
P+ P++ P-- P- fonctions

ã SAP AG 1999

n Le statut est la forme que prend une barre de menus, une barre d'outils standard ou une barre d'outils
d'application sur un dynpro donné du programme. Il détermine quelles fonctions sont actives
(exécutables) ou inactives pour un dynpro déterminé. Vous pouvez changer de statut pour un dynpro
au PBO : par exemple, vous utilisez la fonction "Afficher/Modifier" de l'Éditeur ABAP pour passer
d'un statut à l'autre.
n D'un point de vue technique, un statut sert toujours de référence à une barre de menus, une barre
d'outils standard et une barre d'outils d'application.
n Nous allons maintenant définir le statut d'une liste.

(C) SAP AG BC400 10-6


Création d'un statut GUI pour une liste

START-OF-SELECTION.

SET PF-STATUS "LISTE" D.


oub
le-c
Création d'un objet lic

Statut GUI Le statut LISTE n'existe pas.


Voulez-vous créer cet objet ?
Création d'un statut
Oui Non
Programme
Annulr Cance
xxxxx
Statut LISTE

Attributs de statut
Courte description Statut pour liste des vols
Type de statut
Statut de dialogue
Boîte de dialogue
Menu contextuel

ã SAP AG 1999

n Pour créer et gérer les statuts, vous pouvez utiliser une de ces trois possibilités :
Ÿ la liste d'objets de Object navigator ;
Ÿ la navigation, dans l'Editeur ABAP ;
Ÿ le Menu Painter.
n Lorsque vous créez un statut, vous définissez de nouvelles barres de menus, barres d'outils
d'application et des affectations de touches (top down) ou vous utilisez des objets préexistants de
votre interface (bottom up), ou vous associez ces deux méthodes.
n Un nom de statut ne doit pas dépasser 20 caractères. (Les lettres doivent être en majuscules).
n En choisissant un type de statut, vous déterminez si un statut donné se réfère à un écran normal ou à
une boîte de dialogue. Les fonctions que vous utilisez dépendent de votre choix.
n Utilisez l'instruction SET PF-STATUS '<NOM>' pour rétablir le statut de la liste de base en le
programmant dans un des blocs de traitement traités avant l'envoi de cette liste.

(C) SAP AG BC400 10-7


Ajustement des statuts

Ajuster modèle de statut

Inclure modèle dans


Conception
Statut BASE
orientée utilisateur
Modèle de statut ...

Statut de liste
Écran de sélection
...

Barres de menus Liste de sélection de ligne

Liste Traiter Saut

B. d'outils d'applic.
Affectation de Liste de sélection de ligne
touches de fonction
ã SAP AG 1999

n La fonction "Ajuster modèle" du menu Autres fonctions vous permet d'inclure des codes de
fonction standardisés dans votre statut. Cette fonction vous permet également d'inclure des objets
d'un statut de votre choix à votre statut existant. Il vous permet de choisir des normes pour des statuts
de liste et d'écrans de sélection, ou d'utiliser tout autre statut d'un autre programme ABAP.

(C) SAP AG BC400 10-8


Création d'un statut : affectation des touches

Barres de menus Barre de menus des données de base

B. d'outils d'applic. Barre d'outils d'application des données de base

CHOISIR
Positions 1-7

Affectation de
touches de fonction Affectation de touches des données de base

Barre d'outils standard

SAUVEGARDER RETOUR %EX RW PRI %SC P-- P-

Affectation recommandée des touches de fonction

F2 PICK Choisir
F4
Maj-F8

Affectation libre des touches de fonction


F5
F6
F7
F8
F9
Maj-F1
ã SAP AG 1999

n Pour affecter un code à une touche de fonction, entrez-le dans l'une des sections d'affectation de
touches. Les statuts de type "Liste" acceptent également des codes de fonction standard.
n Les affectations de touches se répartissent comme suit :
n barre d'outils standard : certains codes de fonction prédéfinis sont obligatoires pour les
fonctions Sauvegarder, Retour, Terminer, Annuler, Imprimer, ainsi que pour les icônes de
défilement et pour la touche Entrée. Affectez simplement ces codes à l'icône de la barre d'outils
standard ; ils seront automatiquement affectés aussi aux boutons de commande correspondants ;
n affectation recommandée des touches de fonction ;
n affectation libre des touches de fonction.
n Vous pouvez également définir des boutons sur une barre de boutons pour toutes les touches de
fonctions les plus fréquemment utilisées. Ces boutons se présentent sous forme d'icônes ou de
boutons portant un texte.

(C) SAP AG BC400 10-9


Création de statuts : barres de menus

Barres de menus Barre de menus des données de vol

Données de vol Traiter Saut


de base
Code Enoncé Code Enoncé Code Enoncé
PRI Imprimer CHOISIR Choisir RETOUR Retour

%PC Sauveg. ds fichier PC %SC Trouver


SAUVEG. Sauvegarder %SC+ Retrouver
%EX Terminer RW Annuler
B. d'outils d'applic. Barre d'outils d'application des données de base

affectation de Affectation de touches des données de base


touches de fonction

ã SAP AG 1999

n Pour votre barre de menus, certaines normes s'appliquent. Toutefois, celles-ci peuvent être
modifiées.
n Les barres de menus peuvent contenir jusqu'à huit menus. Vous en définissez six au maximum : les
menus Système et Aide s'ajoutent automatiquement.

(C) SAP AG BC400 10-10


Exemple d'interface de programme

Titre 100
Liste
Écran
0100
Statut "LISTE" Statut "ÉCRAN"
"ÉCRAN"

Barres de menus
Données de base Écran
du vol 0100

Données de base
B. d'outils d'applic. Affectation de touches
du vol
Données de base du vol de fonction
Traiter Données de base du vol

Saut
Liste des fonctions
inactive
Liste des
SAUVE- PRI %PC RW %EX
fonctions
RETOUR CHOISIR
GARDER standard
P+ P++ P-- P-

ã SAP AG 1999

n Pour terminer l'interface utilisateur de notre programme, il faut créer, en plus du statut de la liste de
base, un titre et un statut pour le dynpro. Le statut du dynpro doit renvoyer aux mêmes barre de
menus, barre d'outils d'application et affectations de touches que le statut de la liste. La seule
différence réside dans le fait qu'ici, toutes les fonctions standard sont "inactives", à l'exception de
"RETOUR" et de "SAUVEGARDER".
n Une interface comporte les objets suivants :
n fonctions ;
n menus ;
n barres de menus ;
n affectation de touches de fonction ;
n barre d'outils d'application ;
n statut ;
n titres.

(C) SAP AG BC400 10-11


Création des titres GUI d'un écran

MODULE status_0100 OUTPUT.


* SET PF-STATUS 'xxxxxxxx'.
'100'
SET TITLEBAR '100'.
ENDMODULE. Dou
bl e-c
lic
Création d'un objet

Statut GUI Le titre 100 n'existe pas.


Voulez-vous créer cet objet ?

Oui Non Annuler

Création d'un titre


Code du titre
Programme xxxxx Titres

Code du titre 100 Connexions de vol

Sauvegarder
Modifier les heures de vol
Titres

Continuer
ã SAP AG 1999

n Vous pouvez créer et gérer les titres dans l'une de ces trois possibilités :
n la liste d'objets du Repository Browser ;
n la navigation, dans l'Éditeur ABAP ;
n le Menu Painter.
n Pour définir le titre d'un dynpro, utilisez l'instruction SET TITLEBAR <nnn> de ABAP dans un
module PBO. nnn est une séquence numérotée de trois caractères. Si vous créez le module PBO
status_nnnn à l'aide de la navigation, cette instruction est automatiquement générée dans le
module et mise en commentaire. Pour l'activer, effacez l'astérisque et saisissez le numéro du titre.
Vous pouvez ensuite créer le titre en utilisant la navigation forward.

(C) SAP AG BC400 10-12


Création de statuts GUI d'un écran

MODULE status_0100 OUTPUT.


SET PF-STATUS "ÉCRAN"
'SCREEN'.
Dou
SET TITLEBAR '100'. ble
-cli
ENDMODULE. c
Création d'un objet

Statut GUI Le statut ÉCRAN n'existe pas.


Voulez-vous créer cet objet ?
Création d'un statut
Oui Non Annulr Cance
Programme xxxxx

Statut ÉCRAN

Attributs de
statut
Statut pour liste des vols
Désignation
Statut de dialogue
Type de statut Boîte de dialogue
Menu contextuel

ã SAP AG 1999

n Pour la création d'un statut d'écran :


n créez un module PBO contenant l'instruction SET PF-STATUS '<NOM>'. NOM peut contenir
huit chiffres ou lettres majuscules. Cette instruction est prégénérée dès que vous créez le module
status_nnnn à l'aide de la navigation ;
n utilisez la navigation pour créer le statut ;
n choisissez le type de statut "Dialogue" ;
n appuyez sur F4 (aide) pour afficher les affectations de touches de fonction et la barre de menus ;
n choisissez les fonctions que vous voulez activer. Dans notre exemple, il s'agit de "RETOUR" et de
"SAUVEGARDER".
n Dans le module PAI, ces codes de fonction sont évalués en tant que simples codes des boutons de
commandes d'un écran. Pour inclure d'autres codes de fonction, développez le module PAI dans
lequel les codes de fonction sont traités. (dans l'exemple USER_COMMAND_0100).

(C) SAP AG BC400 10-13


Insertion d'éléments existants

Barres de menus ÉCRAN


Barre d'outils ÉCRAN
d'application
Affectation de ÉCRAN
touches de
fonction

Liste des fonctions

Affiche des objets


existants et vous
permet de les
sélectionner
pour les insérer

ã SAP AG 1999

n Le statut de l'écran doit renvoyer aux mêmes barre de menus et affectations de touches que le statut
de la liste. Utilisez l'icône montrée ci-dessus pour afficher toutes les barres de menus et toutes les
affectations de touches de fonction déjà définies. Notre modèle de programme ne possède qu'une
seule barre de menus et qu'une seule affectation de touches de fonction que vous pouvez sélectionner
par un double-clic.
n Le statut contient les mêmes objets que le statut de la liste de base, mais ceux-ci sont d'abord inactifs.
Activez les fonctions que vous devez utiliser dans le module PAI USER_COMMAND_0100,
comme suit :
Ÿ sélectionnez le mode de modification en double-cliquant sur le bouton Afficher/Modifier ;
Ÿ placez le curseur sur le code de fonction que vous voulez activer et sélectionnez l'icône
Actif/Inactif de la barre de boutons.

(C) SAP AG BC400 10-14


Interfaces : résumé du chapitre

Vous êtes maintenant capable :


l de créer un titre GUI
l de créer des statuts GUI pour listes et écrans qui
contiennent :
l des barres de menus
l des barres d'outils standard
l des barres d'outils d'application
l des affectations de touches de fonction

ã SAP AG 1999

(C) SAP AG BC400 10-15


Exercices

(C) SAP AG BC400 10-16


(C) SAP AG BC400 10-17
Chapitre : Interfaces

À la fin de ces exercices, vous serez en mesure :


• de créer les interfaces utilisateur d’un programme ;
• d’inclure un statut et un titre GUI dans un programme.

Complétez votre programme ZBC400_##_ SCREEN.


Le système affiche dans la barre de titre les textes appartenant à la liste et
à l’écran. Vous devez spécifier le statut correct pour la liste et l’écran.

Programme : ZBC400_##_DYNPRO
Solution modèle : SAPBC400UDS_DYNPRO_4

1-1 Complétez votre programme, ZBC400_##_DYNPRO, ou copiez la solution modèle


adéquate SAPBC400UDS_DYNPRO_3 et nommez-la ZBC400_##_DYNPRO_4.
Affectez votre programme à la classe de développement ZBC400_## et à l'ordre
de transport pour ce projet, BC400… (en remplaçant ## par votre numéro de
groupe).

1-2 Définissez d’abord un statut pour la liste. Utilisez la navigation pour créer le statut
(type : statut de dialogue). Ajoutez l’instruction ABAP appropriée dans le bloc de
traitement START-OF-SELECTION.
Le statut que vous vous créez doit correspondre au statut de la liste standard. Pour
créer vos propres affectations de touches de fonction, barre de boutons et barre de
menus, sélectionnez Autres fonctions -> Ajuster modèle-> Statut de liste et ajoutez
vos codes de fonction. Remplacez le nom de la liste de menus de gauche Liste par
Écritures.
Ajoutez le code de fonction SAUVEGARDER. L’utilisateur doit être en mesure de
lancer cette fonction en sélectionnant l’icône Sauvegarder dans la barre d’outils
standard, ou Écritures dans le menu.
Désactivez le code de fonction SAUVEGARDER de ce statut.

1-3 Affectez un statut (type : statut de dialogue) à l’écran. Dans l’événement PROCESS
BEFORE OUTPUT, appelez un module qui comprenne l’instruction ABAP
appropriée.
(C) SAP AG BC400 10-18
Ne créez pas de nouvelles affectations de touches de fonction, barre de boutons ou
barre de menus. Au contraire, renvoyez-les aux objets que vous avez créés dans le
dernier exercice (1-2).
Activez les codes de fonction SAUVEGARDER et RETOUR. Sauvegardez l’interface.

1-4 Affectez un titre GUI à la liste de base et à l’écran (à l’aide de la navigation) et


générez l’interface.

(C) SAP AG BC400 10-19


Solutions

(C) SAP AG BC400 10-20


(C) SAP AG BC400 10-21
Chapitre : Interfaces

1-2 Dans le texte du programme source, ajoutez l’instruction SET PF-STATUS 'LISTE' à
l’événement START-OF-SELECTION.
(Note : le texte situé entre les deux apostrophes doit apparaître en majuscules).
• Dans la ligne SET PF-STATUS 'LISTE' du programme, double-cliquez sur le nom du statut
LISTE.

Le système affiche une boîte de dialogue contenant les mots "Le statut
interface GUI ‘LISTE’ n’existe pas". Voulez-vous le créer ?
Sélectionnez pour confirmer.
Introduisez une courte description.
Sélectionnez le type de statut Statut de dialogue.
• Sélectionnez : Autres fonctions → Ajuster modèle → Statut de liste
• Adaptez le nom de la barre de menus et des affectations de touches de fonction
à vos propres besoins.
• Double-cliquez sur la barre de menus. Sélectionnez le mode Modification. Modifiez le
nom de la liste de menus par Écritures. Sélectionnez pour fermer la boîte de
dialogue.
• Double-cliquez sur l’affectation de la touche de fonction. Introduisez le code de
fonction SAUVEGARDER de la barre d’outils standard à côté de l’icône
• Pour rendre la fonction accessible dans le menu Écritures :
• double-cliquez sur Écritures ;
• créez une nouvelle ligne dans le menu ;
• introduisez le code SAUVEGARDER ;
• confirmez vos entrées ;
• sélectionnez pour fermer la boîte de dialogue.
• Placez le curseur sur le code de fonction SAUVEGARDER et désactivez la fonction
en utilisant .
• Activez le statut.
1-3 Affichez l’écran 100 en mode modification (en sélectionnant le numéro d’écran
dans la liste d’objets du programme et en utilisant le bouton droit de la souris). Dans la logique
d’exécution de l’événement PROCESS BEFORE OUTPUT, ajoutez l’instruction :
MODULE set_status_0100.

(C) SAP AG BC400 10-22


• Utilisez la navigation pour créer ce module. Double-cliquez sur le nom du
module ; choisissez Oui pour confirmer les options de la boîte de dialogue.
Dans la boîte de dialogue suivante, choisissez Programme principal et ajoutez
le texte source suivant :
*&----------------------------------------*
*& Module SET_STATUS_0100 OUTPUT
*&----------------------------------------*

MODULE set_status_0100 OUTPUT.


SET PF-STATUS 'DYNPRO'.
ENDMODULE.
• Utilisez la navigation pour créer le statut. Double-cliquez sur 'DYNPRO' dans
l’instruction SET PF-STATUS 'DYNPRO'.
• Choisissez Oui pour confirmer les options dans la boîte de dialogue.
• Dans la boîte de dialogue suivante, introduisez une courte description et
choisissez Statut de dialogue.
• Placez le curseur sur la barre de menus et choisissez l’icône . Créez la
référence à la barre de menus existante par un double-clic.
• Placez le curseur sur la touche de fonction et choisissez l’icône . Créez la
référence de l’affectation de la touche de fonction existante par un double-clic.
• Activez les deux fonctions SAUVEGARDER et RETOUR en plaçant le curseur
sur le code de fonction du menu ou de l’affectation de touche de fonction et
choisissez .
• Sauvegardez vos entrées et activez le statut.
• Activez l’écran.

(C) SAP AG BC400 10-23


1-4 Complétez le texte source du programme dans
START-OF-SELECTION.:

SET PF-STATUS 'LIST'.


SET TITLEBAR 'LIST'.
Utilisez la navigation pour créer le titre et saisissez le texte dans la boîte de dialogue
qui apparaît.
Complétez le texte source du module SET_STATUS_0100 :
*&------------------------------------------*
*& Module SET_STATUS_0100 OUTPUT
*&------------------------------------------*
MODULE set_status_0100 OUTPUT.
SET PF-STATUS 'DYNPRO'.
SET TITLEBAR 'DYNPRO'.
ENDMODULE.
Utilisez la navigation pour créer le titre et saisissez le texte dans la boîte de dialogue
qui apparaît.
Activez le statut et le programme.

Texte source du programme SAPBC400UDS_DYNPRO_4


*&--------------------------------------------------------------*
*& Report SAPBC400UDS_DYNPRO_4 *
*& *
*&--------------------------------------------------------------*

REPORT sapbc400uds_dynpro_3.
CONSTANTS: actvt_display TYPE activ_auth VALUE '03',
actvt_change TYPE activ_auth VALUE '02'.

TABLES: sdyn_book.
PARAMETERS: pa_agnum TYPE s_agncynum.
DATA: wa_cust TYPE sbc400cust,
it_cust TYPE sbc400_t_sbc400cust.
DATA: wa_sbook TYPE sbook.
DATA: ok_code LIKE sy-ucomm, save_ok LIKE ok_code.

(C) SAP AG BC400 10-24


START-OF-SELECTION.

SELECT id name FROM scustom INTO TABLE it_cust.


SELECT carrid connid fldate bookid customid
FROM sbook INTO CORRESPONDING FIELDS OF wa_sbook
WHERE agencynum = pa_agnum.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD wa_sbook-carrid
ID 'ACTVT' FIELD actvt_display.
IF sy-subrc = 0.
READ TABLE it_cust INTO wa_cust
WITH TABLE KEY id = wa_sbook-customid.
WRITE: / wa_sbook-carrid COLOR COL_KEY,
wa_sbook-connid COLOR COL_KEY,
wa_sbook-fldate COLOR COL_KEY,
wa_sbook-bookid COLOR COL_KEY,
wa_cust-name COLOR COL_KEY.
* Masquer des zones-clés de la table de base de données SBOOK et nom
client
HIDE: wa_sbook-carrid, wa_sbook-connid, wa_sbook-fldate,
wa_sbook-bookid, wa_cust-name.
ENDIF.
ENDSELECT.
* Définir le titre et le statut de la liste
Définir la barre de titres 'LISTE' avec pa_agnum.
Définir le statut PF 'LISTE'.
CLEAR wa_sbook.

AT LINE-SELECTION.
IF sy-lsind = 1.
AUTHORITY-CHECK OBJECT 'S_CARRID'
ID 'CARRID' FIELD wa_sbook-carrid
ID 'ACTVT' FIELD actvt_change.
IF sy-subrc = 0.
SELECT SINGLE * FROM sbook INTO wa_sbook
WHERE carrid = wa_sbook-carrid
AND connid = wa_sbook-connid
AND fldate = wa_sbook-fldate
AND bookid = wa_sbook-bookid.

(C) SAP AG BC400 10-25


IF sy-subrc <> 0.
MESSAGE i176(bc400).
ELSE.
MOVE-CORRESPONDING wa_sbook TO sdyn_book.
MOVE wa_scust-name TO sdyn_book-name.
CALL SCREEN 100.
ENDIF.
ELSE.
MESSAGE s047(bc400) WITH wa_sbook-carrid.
ENDIF.
ENDIF.
CLEAR wa_sbook.

*&-------------------------------------------------------*
*& Module SET_STATUS_0100 OUTPUT
*&-------------------------------------------------------*
module set_status_0100 output.
* set title and status of screen 100
set titlebar 'DYNPRO'.
set pf-status 'DYNPRO'.
endmodule. " SET_STATUS_0100 OUTPUT

*&-------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&-------------------------------------------------------*
* Le déroulement d’un écran dynamique dépend d’une action
utilisateur.
*--------------------------------------------------------*
MODULE user_command_0100 INPUT.

(C) SAP AG BC400 10-26


save_ok = ok_code .
* Effacer la zone OK-Code afin de l’initialiser sur écran
* suivant
CLEAR ok_code .
CASE save_ok.
WHEN 'BACK'.
SET SCREEN 0.
WHEN 'SAVE'.
MOVE-CORRESPONDING sdyn_book TO wa_sbook.
* La sauvegarde de l’enregistrement de données modifiées sera
* exécutée ultérieurement.
message i060(bc400).
SET SCREEN 0.
WHEN OTHERS.
SET SCREEN 100.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT

(C) SAP AG BC400 10-27


Réutilisation des composantes

Contenu :
l Groupes de fonctions et modules de fonction
l Objets et méthodes
l Objets de gestion et BAPI
l Bases de données logiques

ã SAP AG 1999

(C) SAP AG BC400 11-1


Réutilisation des composantes : objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l de trouver et utiliser des modules de fonction


l d'afficher une liste simple en utilisant ALV Grid
Controls (objets des classes globales du
Générateur de classes)
l d'utiliser un BAPI et trouver des BAPI en utilisant
le BAPI Browser
l d'utiliser une base de données logique pour créer
une liste hiérarchique d'informations de vol

ã SAP AG 1999

(C) SAP AG BC400 11-2


Techniques d'encapsulation de la logique applicative

Réutiliser les composantes


encapsulées
Objet dans la logique
applicative

Groupe de
fonctions
ABAP : Objet de
gestion
possibilités
techniques

Base de données
logique
Réutilisation
des composantes

ã SAP AG 1999

n Le système R/3 offre plusieurs techniques que vous pouvez utiliser pour permettre la réutilisation de
la logique applicative.
n Modules de fonction : peuvent être appelés à partir de tout programme ABAP. Les paramètres sont
également transférés à l'interface. Les modules de fonction apparentés sont organisés en groupes de
fonctions. Une logique de programme et des dialogues utilisateur peuvent être encapsulés dans les
modules de fonction ;
n des objets : vous pouvez utiliser l'extension compatible "objets ABAP" pour créer des instances
d'objets à l'exécution, avec référence aux classes centrales ;
n des BAPI : méthodes d'objets de gestion, qui sont disponibles grâce au Business Object Repository
(BOR) ;
n des bases de données logiques : programmes d'acquisition de données qui peuvent s'associer à des
programmes exécutables. Elles transfèrent les données à l'aide de structures de hiérarchie logiques.
Elles permettent l'accès à des écrans de sélection et contiennent des contrôles d'autorisation.

(C) SAP AG BC400 11-3


Groupes de fonctions et modules de fonction

Groupes
Groupes de
de fonctions
fonctions et
et modules
modules de
de fonction
fonction

Objets
Objets et
et méthodes
méthodes

Objets
Objets de
de gestion
gestion et
et BAPI
BAPI

Bases
Bases de
de données
données logiques
logiques

ã SAP AG 1999

(C) SAP AG BC400 11-4


Groupes de fonctions et modules de fonction

À la fin de ce cours, vous serez en mesure :

l de décrire les différentes manières de trouver un


module de fonction
l de découvrir des informations importantes sur un
module de fonction en utilisant le Générateur de
modules de fonction
l d'écrire un programme comportant un dialogue
utilisateur standard formé dans un module de
fonction

ã SAP AG 1999

(C) SAP AG BC400 11-5


Groupe de fonctions

e ion Mo In
fr ac onct du te
e f le rfa
In t d e 1 d c
le FM e fo e
odu FM 2 ncti
M on
Sous-

FM3 nction
Mod

Paramètres d'import
programmes
ule d 5

Interface

e
Inter

de f
Paramètres d'export

r fac
F
e fon
M

ule
face

Inte
Paramètres de modification

Mod
ction

Module de fonction
FM4 Exceptions
Interface

ã SAP AG 1999

n Un groupe de fonctions est un programme ABAP de type F, c'est-à-dire créé exclusivement afin de
contenir des modules de fonction. Les modules de fonction sont des unités modulaires dotées
d'interfaces ; ils peuvent être appelés depuis tout programme ABAP. Ceux qui agissent sur les
mêmes objets sont organisés en groupes de fonctions.
n Chaque groupe de fonctions peut contenir :
Ÿ des objets de données, visibles et modifiables par tous les modules de fonction du groupe. Ces
objets de données restent actifs aussi longtemps que le groupe de fonctions reste actif ;
Ÿ des sous-programmes, qui peuvent être appelés depuis tout module de fonction du groupe ;
Ÿ des dynpros, qui peuvent être appelés depuis tout module de fonction du groupe.

(C) SAP AG BC400 11-6


Module de fonction

Groupe de fonctions Objets de données


globaux
Sous-
programmes Module de
Interface
fonction
Gestion

Objets de données
locaux
Code source

Interface
Paramètres
Paramètres d'import Paramètres
Paramètres d'export Paramètres
Paramètres de modification Exceptions

sy-subrc
ã SAP AG 1999

n Les modules de fonction sont des unités modulaires dotées d'interfaces. L'interface peut contenir les
éléments suivants :
Ÿ les paramètres d'import sont des paramètres transférés au module de fonction. En général, ils
sont affectés à des types standard du Dictionnaire ABAP. Ils peuvent également être facultatifs ;
Ÿ les paramètres d'export passent du module de fonction vers le programme appelant. Ils sont
toujours facultatifs ; pour cette raison, ils peuvent ne pas être transmis par le programme appelant.
Ÿ les paramètres de modification sont transférés vers le module de fonction où ils peuvent être
modifiés. Après traitement du module de fonction, le résultat est renvoyé au programme appelant.
Ces paramètres peuvent être facultatifs ;
Ÿ les exceptions sont utilisées pour intercepter des erreurs. Si une erreur déclenche une exception
dans un module de fonction, celui-ci s'arrête. Vous pouvez affecter des exceptions à des nombres
du programme appelant pour positionner la zone système SY-SUBRC à cette valeur. Le
programme peut alors traiter ce code retour.
n Chaque module de fonction peut contenir des objets de données locaux et accéder à des objets de
données globaux appartenant à son groupe de fonctions. Il peut appeler tous les sous-programmes et
les écrans de ce groupe de fonctions.

(C) SAP AG BC400 11-7


Groupe de fonctions : flux de données

n
fa ce ctio Mo In
du te
er fo n
le rfa
Int de 1 d c
le FM e fo e
odu FM 2 ncti
M on

FM3 nction
M od

e fo
ule d 5

e
rfac
Inter
F

le d
e fo
M

Inte
face

u
Mod
nc
tion

Module de fonction
FM4
Interface

ã SAP AG 1999

n Après appel du module de fonction, les données générales restent dans le groupe de fonctions. Ce
groupe de fonctions reste actif tant que le programme appelant reste actif. Donc, si un module de
fonction qui modifie les données globales du groupe de fonctions est appelé, les autres modules de
fonction de ce même groupe de fonctions peuvent accéder à ces données lors de leur appel par le
programme.

(C) SAP AG BC400 11-8


Exemple : la boîte de dialogue Annuler

<Titre spécifique au contexte>

! "Les données seront perdues."


<Titre spécifique au contexte>

Oui Non

ã SAP AG 1999

n Dans de nombreux programmes, une boîte de dialogue apparaît lorsque l'utilisateur a choisi Annuler.
Cette boîte de dialogue contient toujours la phrase : "Les données seront perdues." Les deux lignes
qui la suivent sont spécifiques du contexte, tout comme le titre. L'utilisateur a le choix entre deux
options : "Oui" ou "Non".
n Cette boîte de dialogue est encapsulée dans le module de fonction.

(C) SAP AG BC400 11-9


Exigence : module de fonction pour dialogue standard

ligne de texte
STO1 titre

! <ligne de texte>

! <ligne de texte>
réponse réponse
Oui Non

Programme
ABAP

ã SAP AG 1999

n Vous pouvez éviter la programmation de cette boîte de dialogue si vous trouvez un module de
fonction existant contenant les propriétés suivantes :
Ÿ des paramètres d'import pour le titre et les lignes de texte de deux variables ;
Ÿ un paramètre d'export pour enregistrer la réponse ("Oui" ou "Non") de l'utilisateur ;
Ÿ la capacité à appeler un écran du groupe de fonctions qui affiche les lignes de texte des deux
variables et le titre, et qui contient les boutons "Oui" et "Non".

(C) SAP AG BC400 11-10


Recherche du module de fonction

Éditeur Hiérarchie
Rechercher des composantes
l'instruction Sélectionner
CALL FUNCTION des
Démarrer en composantes
applicatives
mode débogage
du système
Insérer un point Sur un écran appelé par le d'information
d'arrêt dans module de fonction du Repository
l'instruction F1
CALL FUNCTION Info techniques
ou CALL SCREEN Nom de l'écran et
du programme principal
Sur l'écran Regarder un groupe de
sur lequel l'utilisateur fonctions dans Object
choisit "Annuler" Navigator
Examine logique Cas d'emploi pour numéro
d'exécution d'écran
dans l'événement
Process After
Input
Vous savez qu'un certain programme
ã SAP AG 1999 utilise le module de fonction

n Scénario : vous créez un programme dans Object Navigator et quittez l'écran des attributs. Vous
voulez savoir s'il est enregistré sous une forme réutilisable.
n 1. Première méthode : dans le débogueur, apposez un point d'arrêt dans CALL SCREEN. En cas de
réussite, le bloc de traitement actuel (sous-programme, module de fonction ou bloc événement) sera
répertorié sous " CALLS"en mode débogage. Vous pouvez alors examiner l'appel et les paramètres
transmis à l'interface.
n 2. Deuxième méthode : dans le débogueur, apposez un point d'arrêt à CALL FUNCTION. En cas de
réussite, le bloc de traitement actuel (sous-programme, module de fonction ou bloc événement) sera
répertorié sous " CALLS"en mode débogage. Vous pouvez alors examiner l'appel et les paramètres
transmis à l'interface.
n 3. Troisième méthode : cliquez sur une zone de texte de la boîte de dialogue standard, appuyez
ensuite sur F1 et choisissez Infos techniques. Naviguez jusqu'à l'écran et afficher les cas d'emploi
pour des programmes, regardez ensuite les modules de fonction qui l'utilisent.
n 4. Quatrième méthode : dans la boîte de dialogue Sauvegarder, affichez l'aide (F1) et ensuite Infos
techniques. Naviguez jusqu'à l'écran pour examiner la logique d'exécution et ses modules.
n 5. Cinquième méthode : dans la hiérarchie des composantes, indiquez la composante qui vous
intéresse (dans ce cas, Services de base), sélectionnez-la, naviguez jusqu'au système d'information du
Repository, et regardez sous Programmation -> Générateur de modules de fonction -> Modules de
fonction et sélectionnez Unqt libérés.

(C) SAP AG BC400 11-11


Interface de module de fonction

Module de fonction POPUP_TO_CONFIRM_LOSS_OF_DATA

Attributs Import Export Modification Exceptions Code source

Transmettre
Paramètres ... Ref. type ... Facultatif Valeur Description
LIGNE DE TEXTE 1 !
Les paramètres Nicht Optionale
LIGNE DE TEXTE 2 ! !
obligatoires Parameter des
TITRE
d'un module de fonction !
START_COLUMN Constructors
doivent être transmis ! !
START_ROW
à l'instruction müssen bei
! !
CALL FUNCTION CREATE OBJECT
versorgt werden

ã SAP AG 1999

n Dès que vous trouvez un module de fonction, vous devez en découvrir davantage sur son interface.
n Les paramètres obligatoires du module de fonction doivent être transmis à l'instruction CALL
FUNCTION. Pour savoir comment traiter les autres paramètres, référez-vous à la documentation sur
le module de fonction et sur les paramètres d'interface.
n Si la documentation n'est pas suffisamment précise, ou si elle n'est pas disponible dans votre langue
de travail, vous pouvez analyser le code source du module de fonction en sélectionnant l'onglet Code
source.

(C) SAP AG BC400 11-12


Documentation et test

Documentation

• Courte description
• Fonction
• Exemple
• Notes
• Informations complémentaires
• Paramètre Test
• Exceptions
• Groupe de fonctions
Paramètres d'export

Module de fonction Exception


Paramètres d'import

ã SAP AG 1999

n Vous pouvez tester les modules de fonction par l'environnement de test. Vous spécifiez les
paramètres d'IMPORT dans un modèle de saisie. Le résultat est transmis aux paramètres d'EXPORT,
puis s'affiche.
n En cas d'erreur, le système identifie l'exception déclenchée.
n La durée d'exécution du module de fonction s'affiche en micro-secondes. Ces valeurs sont soumises
aux mêmes conditions que l'analyse de durée d'exécution. Par conséquent, recommencez plusieurs
tests en utilisant les mêmes données.
n Vous pouvez enregistrer les données de test dans un répertoire prévu à cet effet.
n Pour tester les modules dotés de paramètres de table, utilisez la fonction test du Générateur de
modules de fonction.
n Vous pouvez créer des séquences de tests.

(C) SAP AG BC400 11-13


Syntaxe : appel du module de fonction

PAI MODULE user_command_0100 input.


save_ok_code = ok_code.
clear ok_code.
CASE save_ok_code.
WHEN 'CANCEL'.
CALL FUNCTION
ligne de texte
'POPUP_TO_CONFIRM_LOSS_OF_DATA'
titre
EXPORTING
textline = gd_textline
réponse title = gd_title
IMPORTING
answer = gd_answer.

case answer.
WHEN

WHEN
...
ENDCASE.
Programme ABAP

ã SAP AG 1999

n Pour appeler un module de fonction dans un programme ABAP, utilisez l'instruction CALL
FUNCTION. Le nom du module de fonction s'affiche entre quotes. Après EXPORTING, le
système affecte les paramètres transmis au module de fonction. Après IMPORTING, le système
affecte les paramètres transférés du module de fonction au programme. La plupart des modules de
fonction gèrent des exceptions supplémentaires. Dès lors, après EXCEPTIONS, les exceptions sont
affectées à des valeurs qui seront utilisées dans la zone système sy-subrc, en cas d'erreur du
système. Le système affiche les noms des paramètres d'interface à gauche, les objets de données du
programme à droite.

(C) SAP AG BC400 11-14


Insertion d'appel de module de fonction dans un programme

Modèle
Insérer instruction

CALL FUNCTION POPUP_TO_CONFIRM_LOSS_OF_DATA


...
...
...
...

Le système
génère le CALL FUNCTION
code ABAP 'POPUP_TO_CONFIRM_LOSS_OF_DATA'
EXPORTING Entrer
ligne de texte = paramètres
titre = effectifs
IMPORTING
réponse =
CASE SY-SUBRC.
Traiter
ã SAP AG 1999
code retour

n Pour ce faire, utilisez un modèle d'instruction de l'Éditeur ABAP (bouton de commande "Modèle"),
puis saisissez le nom du module de fonction.
n Le système génère alors l'instruction ABAP CALL FUNCTION '<nom module de
fonction>', qui comprend l'interface du module de fonction, et l'insère dans le programme à
l'emplacement du curseur.
n Entrez les paramètres effectifs, et écrivez les instructions qui traiteront toute éventuelle exception.
Affectez la valeur des paramètres d'interface de façon explicite par le nom du paramètre effectif.
Pour le programme appelant, les paramètres à transmettre au module de fonction sont exportés ; ceux
à transmettre du module de fonction au programme sont importés. Il n'est pas obligatoire d'affecter
un paramètre effectif à un paramètre optionnel. Dans ce cas, mettez la ligne concernée en
commentaire.
n N'oubliez pas que, lors de l'affectation des paramètres d'un module de fonction, le paramètre du
module de fonction se trouve toujours à gauche, tandis que le paramètre effectif est à droite.

(C) SAP AG BC400 11-15


Objets et méthodes

Groupes
Groupes de
de fonctions
fonctions et
et modules
modules de
de fonction
fonction

Objets
Objets et
et méthodes
méthodes

Objets
Objets de
de gestion
gestion et
et BAPI
BAPI

Bases
Bases de
de données
données logiques
logiques

ã SAP AG 1999

(C) SAP AG BC400 11-16


Objets et méthodes : objectifs du cours

À la fin de ce cours, vous serez en mesure :

l de trouver des informations importantes sur les


classes et leurs méthodes en utilisant le
Générateur de classes
l d'écrire un programme qui affiche une liste simple
en utilisant ALV Grid Control, et qui contient :
l des variables de référence
l l'instruction CREATE OBJECT
l l'appel des méthodes
l un domaine container sur un dynpro

ã SAP AG 1999

(C) SAP AG BC400 11-17


Avantages de la programmation orientée objets

l Processus de développement de logiciel intégré


n Communication facilitée entre utilisateurs et développeurs
l Encapsulation
n Des programmes plus clairs et plus faciles à gérer
l Polymorphisme
l Héritage

ã SAP AG 1999

n Processus de développement de logiciel intégré : chaque phase du processus de développement


(analyse, spécification, conception et implémentation) est décrite dans le même "langage". D'une
manière idéale, les modifications apportées à la conception pendant l'implémentation s'appliquent
rétrospectivement au modèle de données.
n Encapsulation (masquage d'informations) : capacité de masquer l'implémentation d'un objet à
partir d'autres composantes du système. Les composantes ne peuvent définir des hypothèses sur le
statut interne d'un objet, et ne dépendent pas de l'utilisation d'une implémentation particulière pour
communiquer avec l'objet.
n Polymorphisme : dans la POO (programmation orientée objets), les objets de classes différentes
réagissent différemment au même message.
n Héritage : définit la relation d'implémentation entre les classes ; par exemple, une classe (la sous-
classe) partage la structure et le comportement déjà définis dans une ou plusieurs superclasses.

(C) SAP AG BC400 11-18


Réalité / fonctions / objets

Modèle Maison
Réalité Arbre

Méthode
Méthode
Données Méthode Données Méthode
Méthode
Méthode

Grue

Méthode Bateau
Données Méthode
Méthode Méthode
Données Méthode
Méthode

l Les objets sont des abstractions de la réalité


l Chaque objet forme une unité contenant aussi
bien des données que ses fonctions associées

ã SAP AG 1999

n Les objets sont au centre de l'approche orientée objet et représentent des entités concrètes ou
abstraites de la réalité. Ils sont définis selon leurs propriétés, qui sont elles-mêmes décrites par leur
structure interne et leurs attributs (données). Le comportement d'objet est décrit par des méthodes et
des événements (fonctions).
n Chaque objet forme une capsule, qui contient son caractère comme son comportement. Les objets
doivent permettre au modèle du domaine d'un problème d'être repris de la manière la plus précise
dans le modèle de conception pour sa solution.

(C) SAP AG BC400 11-19


Objets ABAP : objet d'exemple "Vol"

bookid, réservation effectuée,


pas de siège libre

carrid
carrid, Méthode connid
connid, publique : fldate
fdate Réserver customid

cas d'erreur

Attributs privés :
sièges libres Méthode
passagers publique :
Annuler
Vol annulé

carrid
connid
fldate
Cas d'erreur bookid
customid

ã SAP AG 1999

n À titre d'exemple, considérez l'objet "vol".


n L'objet contient des attributs privés propres aux vols :
Ÿ attributs-clés : la combinaison Compagnie aérienne, vol et date de départ fournissent un
identificateur unique pour chaque vol. Chaque numéro de vol contient également : l'aéroport de
départ, l'heure de départ et l'aéroport de destination ;
Ÿ liste des réservations : la liste des personnes qui ont réservé sur le vol et leurs numéros de
réservation ;
Ÿ informations sur le vol, telles que le type d'avion et le nombre maximum de sièges.
n Méthodes privées : l'objet peut calculer le nombre de sièges libres à partir des attributs privés, la
"liste des réservations" et "le nombre maximum de sièges vides".
n L'objet contient une interface à deux méthodes :
Ÿ la méthode "Réserver" : si cette méthode est appelée de l'extérieur de l'objet et qu'elle a transféré
les données nécessaires à l'interface, elle utilise les attributs privés pour déterminer s'il reste des
sièges vides ou non sur le vol. Si c'est le cas, le nouveau client s'ajoute à liste des réservations et
un message de confirmation est transmis au programme appelant. Sinon, le système renvoie
l'information que la réservation ne peut s'effectuer car le vol est déjà complet.
Ÿ la méthode "Annuler": si cette méthode est appelée de l'extérieur de l'objet et qu'elle a transféré les
données nécessaires à l'interface, elle utilise les attributs privés pour déterminer si le client est
inclus ou non sur la liste des réservations. Dans ce cas, sa réservation est annulée et un message de
confirmation retourne au programme appelant. Si le client n'apparaît pas sur la liste des
réservations, le système affiche un message d'erreur.

(C) SAP AG BC400 11-20


Scénario d'exemple : nouvelle réservation d'un vol

N'annulez le premier vol que si la nouvelle réservation s'effectue correctement.

=> Deux instances requises, une pour chaque vol

AA
0016
28.08.1999 LH
0400
28.08.1999

ã SAP AG 1999

n Généralement, lorsque les clients modifient une réservation par une agence de voyages, ils veulent
être certains d'avoir une place sur leur nouveau vol avant d'annuler le premier.
n Techniquement, ce sont deux objets du même type, mais dotés d'attributs-clés différents.

(C) SAP AG BC400 11-21


Les objets sont des instances d'une classe

Classe "vol" :
modèle
d'objets

Objet vol 2 :
Objet vol 1 :
Instance de
Instance de
Classe "vol"
Classe "vol"

ã SAP AG 1999

n En programmation orientée objets, l'implémentation d'une telle classe est définie comme un objet
type. Les instances de cette classe se créent au moment de l'exécution. Le système crée ainsi des
objets d'un type d'objets (et donc, de la classe).

(C) SAP AG BC400 11-22


Déroulement du programme dans un programme ABAP

ref1 ref2
CREATE OBJECT ref1 AA
EXPORTING ... 0016 Vol
28.08.1999

CREATE OBJECT ref2 LH


EXPORTING ... 0400 Vol
28.08.1999
CALL METHOD ref2->book
EXPORTING ...
IMPORTING
bookid = gd_bookid
overbooked = flag
EXCEPTIONS ...
...
IF NOT gd_bookid IS INITIAL.
CALL METHOD ref1->cancel
EXPORTING ...
IMPORTING ...
EXCEPTIONS ...
...
ENDIF. Programme ABAP

ã SAP AG 1999

n Un programme ABAP qui modifie les réservations par des objets possède le déroulement de
programme suivant :
n Le programme démarre et le contexte du programme se charge. Les zones de mémoire deviennent
disponibles pour tous les objets de données globales du programme. Des variables de référence
deviennent également accessibles pour chaque objet. Lorsque vous démarrez le programme, vous
pouvez voir le résumé des objets de données devenus disponibles en développant les sous-arbres
Zones et Structures du dictionnaire de la liste d'objets du programme. Vous pouvez également
naviguer dans le texte source où les objets de données ont été définis en utilisant, par exemple, une
instruction DATA ou TABLES. Les variables de référence sont définies par une instruction DATA:
<ref> TYPE REF TO <classe>.
n Les objets sont générés au moment de l'exécution, une fois l'instruction CREATE OBJECT traitée.
Cette instruction appelle une méthode spéciale nommée CONSTRUCTOR de manière implicite. Tous
les paramètres requis par le constructeur doivent être sépcifiés dans l'instruction CREATE
OBJECT. Notre exemple vous montre que seuls les attributs-clés doivent être transmis à
l'instruction.
n Dès que l'instruction CALL METHOD est traitée, la méthode est appelée. L'appel d'une méthode est
très différent de l'appel d'une fonction. En effet, l'objet dans lequel la méthode doit être traitée doit
être déclaré de manière explicite. Le système spécifie une variable de référence qui indique l'objet.
Le nom de la variable de référence est suivi de -> et du nom de la méthode.

(C) SAP AG BC400 11-23


Domaines fonctionnels des objets ABAP

l Intégration Office
l Business Add-ins (nouveau concept d'extension de
système)
l Contrôles
l Projets pilotes (déjà orientés objet)

ã SAP AG 1999

n Dans la version 4.6, les plus importants aspects du système d'extensions orientées objet du langage
ABAP sont :
n Intégration office : le système offre une nouvelle interface orientée objets, qui vous permettra
d'utiliser toutes les fonctions de produit Office R/3 ;
n Business Add-ins : une technologie d'extensions orientée objet, qui combine des avantages de
technologies existantes. Si vous incluez des Business Add-ins dans des programmes standard, vous
pouvez compléter le programme par des méthodes spéciales, sans devoir effectuer de modification ;
n Contrôles : le système R/3 vous permet de créer des custom controls en utilisant des objets ABAP.
Le serveur d'application est le client, qui pilote les custom controls (serveur) sur le frontend. Le
Central Control Framework exécute cette tâche ;
n Les projets pilotes sont déjà orientés objet.

(C) SAP AG BC400 11-24


Controls : éléments techniques I

ALV Grid Control : qu'est-ce qu'un control?

l Composantes logicielles binaires indépendantes


l installées localement sur le frontend et qui utilisent
SAPGUI
l Elles déplacent les fonctions du serveur d'application
vers le frontend
l Elles ont une classe d'objets dédiée dans ABAP OO
l Elles sont conçues pour être réutilisables

ã SAP AG 1999

n Le Central Control Framework exécute cette tâche


n Le système R/3 vous permet de créer des custom controls en utilisant des objets ABAP. Le serveur
d'application est le client, qui pilote les custom controls (serveur) sur le frontend.

n Si des custom controls doivent être inclus sur le frontend, le SAPGUI réagit en leur servant de
conteneur. Les custom controls peuvent être des contrôles ActiveX et JavaBeans.
n Le système doit utiliser les Remote Function Call (RFC) pour le transfert de méthodes afin de créer
et d'utiliser un contrôle (ABAP OO) sur le frontend.

(C) SAP AG BC400 11-25


Exemple : ALV Grid Control

Détails Trouver Addition Télédécharger


Trier Filtrer Imprimer Afficher variante

Barre d'outils

AA 17 2000-01-17 USD 513,69 A321


AA 17 2000-02-20 USD 513,69 A321
AA 17 2000-03-11 USD 513,69 747-400
AA 64 2000-05-19 USD 369,00 747-400
LH 400 2000-01-13 DEM 1234,56 A310-300
LH 400 2000-02-26 DEM 1234,56 A310-300
LH 400 2000-03-21 DEM 1234,56 A310-300
LH 402 2000-03-04 DEM 1234,56 A319
LH 402 2000-05-28 DEM 1234,56 A319

ã SAP AG 1999

n Sur le control, vous pouvez ajuster la largeur de colonne aux données affichées en la faisant glisser
ou en utilisant la fonction "Largeur optimale". Vous pouvez également modifier l'ordre des colonnes
si vous en sélectionnez une et que vous la faites glisser jusqu'à son nouvel emplacement.
n Les fonctions standard sont disponibles dans la barre d'outils du control. L'affichage des détails
affiche les zones de la ligne sur laquelle le curseur est positionné dans une boîte de dialogue modale.
n La fonction de tri de ALV Control est disponible pour toutes les colonnes demandées. Vous pouvez
paramétrer des critères de tri complexes pour trier les colonnes dans un ordre croissant ou
décroissant.
n Vous pouvez utiliser la fonction "Rechercher" pour rechercher une chaîne (recherche générique sans
*) par ligne ou par colonne dans un domaine déterminé.
n Vous pouvez utiliser la fonction "Cumul" pour demander les totaux d'une ou plusieurs colonnes
numériques. Vous pouvez utiliser la fonction "Sous-total" pour structurer des listes de niveaux de
groupe : sélectionnez les colonnes (colonnes non numériques uniquement) que vous voulez utiliser et
le control correspondant. Pour les fonctions "Imprimer" et "Télédécharger", ce ne sont pas seulement
les informations affichées à l'écran qui sont traitées, mais toute la liste.
n Vous avez également la possibilité de paramétrer des variantes d'affichage. Pour sauvegarder des
variantes, voir "Techniques avancées".

(C) SAP AG BC400 11-26


Programme utilisant ALV Grid Control

Process
Before
Output

Process
Domaine After
Input
Écran 100

START-OF-
Custom SELECTION.:
Container
Control

ALV Grid Control

ã SAP AG 1999

n Un conteneur SAP peut contenir d'autres controls (par exemple, SAP ALV Grid Control, Tree
Control, SAP Picture Control, SAP Splitter Control, etc.). Il gère ces controls de manière logique
dans une collection d'objets et fournit un domaine physique pour l'affichage.

n Chaque control existe dans un conteneur. Comme les conteneurs sont eux-mêmes des controls, ils
peuvent s'imbriquer les uns dans les autres. Un conteneur est le parent des controls qu'il contient.

(C) SAP AG BC400 11-27


Objets et classes pour ALV Grid Control

Domaine
CL_GUI_CUSTOM_CONTAINER

CL_GUI_ALV_GRID

Custom
Container Custom ALV Grid
Control container control

Générateur de classes

ALV Grid Control

ã SAP AG 1999

n Vous trouverez dans le Générateur de classes des types d'objets pour la gestion des custom controls
et de ALV Grid Control. Au moment de l'exécution, le système crée deux objets : un du type
CL_GUI_CUSTOMER_CONTAINER et un du type CL_GUI_ALV_GRID. Ces objets contiennent
les méthodes nécessaires à la gestion des controls. Vous trouverez des informations complémentaires
sur les types d'objets (classes) et leurs méthodes associées dans le Générateur de classes.

(C) SAP AG BC400 11-28


CL_GUI_CONTROL_CONTAINER

CL_GUI_CUSTOM_CONTAINER
Superclasses
Méthodes
Constructeur

Classe CL_GUI_CUSTOM_CONTAINER

Attributs Interfaces Attributs Méthodes Événements Int. Types

Paramètres pour la méthode CONSTRUCTEUR C


Paramètre Transmettre Facultatif ... Ref. type ... Description
PARENT ! !
NOM_CONTENEUR Les paramètres
!
... non optionnels de la
! !
méthode Constructeur
! !
doivent être transmis
lorsque vous utilisez
CREATE OBJECT

ã SAP AG 1999

n Vous pouvez naviguer dans le Générateur de classes en introduisant le nom de la classe dans la zone
de saisie Classe sur l'écran initial de Object Navigator et en choisissant Afficher. Le système affiche
une arborescence pour la classe choisie. Double-cliquez sur le noeud racine pour afficher le domaine
de travail du Générateur de classes. Choisissez l'onglet Méthodes et sélectionnez la méthode pour
laquelle vous souhaitez des informations complémentaires. Choisissez le bouton Paramètres pour
afficher des informations complémentaires sur les paramètres d'interface.
n CL_GUI_CUSTOM_CONTAINER contient seulement la méthode CONSTRUCTOR. Lorsque vous
créez un objet dans un programme en utilisant CREATE OBJECT, vous devez transférer le
paramètre non optionnel CONTAINER_NAME. Le nom du domaine du conteneur à l'écran doit être
transmis à ce paramètre.

(C) SAP AG BC400 11-29


CL_GUI_ALV_GRID

CL_GUI_ALV_GRID
Superclasses
Interfaces Paramètres non facultatifs
Attributs I_PARENT TYPE REF TO
Méthodes CL_GUI_CONTAINER
...
Constructeur

...

REFRESH_TABLE_DISPLAY Paramètres non facultatifs


IT_OUTTAB TYPE
... TABLE STANDARD

SET_TABLE_FOR_FIRST_DISPLAY
Vous devez transmettre le type
... de ligne de la table interne, p. ex.
type de structure du dictionnaire
Redéfinition to I_STRUCTURE_NAME
Événements

ã SAP AG 1999

n CL_GUI_ALV_GRID contient de nombreuses méthodes. Pour afficher une table interne de type de
ligne de structure du Dictionnaire ABAP en utilisant ALV Grid Control, vous devez connaître
uniquement les détails de trois méthodes :
n CONSTRUCTOR: la variable de référence indiquant l'objet (avec lequel le control du conteneur
communique) doit être transférée au constructeur ;
n la première fois que le contenu d'une table est affiché en utilisant ALV Grid Control, l'affichage est
implémenté par la méthode SET_TABLE_FOR_FIRST_DISPLAY. La table interne est transférée
au paramètre it_outtab. Dans ce cas, le transfert du paramètre non optionnel it_outtab ne
suffit pas. Les informations relatives à la structure de lignes doivent également être transférées à
l'objet. Dans le cas de zones numériques comportant une unité, les relations entre les zones doivent
être transférées - soit de manière explicite en utilisant une liste des zones, soit de manière implicite -
à condition que la table interne soit du type de structure du Dictionnaire ABAP. Dans ce dernier cas,
le nom de la structure du Dictionnaire est transmis au paramètre I_STRUCTURE_NAME ;
n REFRESH_TABLE_DISPLAY peut être appelé si la table interne a déjà été affichée en utilisant Grid
Control, et si le contenu de cette table diffère de celui indiqué à l'écran. Dans ce cas, le frontend
connaît déjà le type de ligne de la table interne et les zones de référence.

(C) SAP AG BC400 11-30


Création d'un élément d'écran de Custom Control

Screen Painter : Layout


Barre d'outils

Domaine

Domaine d'écran :
Type : CUSTOM CONTROL
Nom : CONTENEUR_1
C Reformatage Taille minimale
Vertical : "X" 10
Horizontal : "X" 20

ã SAP AG 1999

n Pour réserver un domaine de l'écran à un contrôle EnjoySAP, ouvrez le Screen Painter et choisissez
le bouton Mise en page.
n Dans la barre d'outils à gauche de la zone d'édition, choisissez le bouton Custom Control. (Celui-ci
fonctionne comme le bouton Sous-écran).
Ÿ Dans la zone d'édition de l'écran, spécifiez la taille et la position du domaine de l'écran comme suit
: cliquez à l'endroit où vous voulez placer le coin supérieur gauche du custom control et gardez le
bouton de la souris appuyé. Faites glisser le curseur là où vous voulez placer le coin inférieur droit.
Dès que vous lâchez le bouton de la souris, le coin inférieur droit se fixe à une position.
Ÿ Vous pouvez modifier à tout moment la taille et la position de la zone en glissant-déplaçant les
handles. Cette zone se comporte alors à nouveau comme une zone de sous-écran..
n Entrez un nouveau nom pour l'élément d'écran (CONTENEUR_1 dans notre exemple).
n Utilisez Redimentionnement vertical et Redimensionnement horizontal pour spécifier si la zone du
custom control doit être redimensionnée ou non lorsque l'écran principal est redimensionné. Vous
pouvez également paramétrer des valeurs minimales à ces attributs en utilisant Ligne Min. et
Colonne min.. Vous déterminez la taille maximale de la zone à sa création.

(C) SAP AG BC400 11-31


Exemple de syntaxe : définition de variables de référence

DATA: gdt_spfli TYPE sbc400_t_spfli.

gdt_spfli

DATA: container_r
container_r TYPE
TYPE REF
REF TO
TO cl_gui_custom_container,
cl_gui_custom_container,
grid_r TYPE REF TO cl_gui_alv_grid, container _r
grid_r TYPE REF TO cl_gui_alv_grid,
grid_r

DATA: ok_code TYPE sy-ucomm.


ok_code

START-OF-SELECTION.
perform fill_itab USING gdt_spfli.

CALL SCREEN 100.

ã SAP AG 1999

n Le programme requiert deux variables de référence :


n container_r, indique l'objet qui communique avec le container control. Elle est typée avec la
classe globale cl_gui_custom_container ;
n grid_r, indique l'objet qui communique avec ALV Grid control. Elle est typée avec la classe
globale cl_gui_alv_grid.

(C) SAP AG BC400 11-32


Exemple de syntaxe : CREATE OBJECT

MODULE create_control OUTPUT.


IF container_r IS INITIAL.
CREATE
CREATEOBJECT
OBJECTcontainer_r
container_r
EXPORTING
EXPORTINGcontainer_name
container_name=='CONTAINER_1'.
'CONTAINER_1'.
container_r

CREATE OBJECT
CREATE OBJECT grid_r
grid_r
EXPORTING i_parent = =container_ref.
EXPORTING i_parent container_r.
grid_r
CALL METHOD
grid_r->set_table_for_first_display
EXPORTING i_structure_name = 'SPFLI'
CHANGING it_outtab = gdt_spfli.
ELSE.
CALL METHOD
grid_r->refresh_table_display
EXPORTING i_soft_refresh = 'X'.
ENDIF.

ENDMODULE.

ã SAP AG 1999

n CREATE OBJECT crée un objet à l'exécution. Vous devez seulement indiquer la variable de
référence, comme elle est du même type d'objet que la classe.
n Pour générer l'objet qui communique avec le container control, vous devez inclure uniquement le
nom de la zone conteneur à l'écran, pour autant que ce soit dans un module PBO du dynpro dans
lequel la zone conteneur est définie. Si l'instruction CREATE OBJECT est exécutée dans un autre
bloc de traitement ABAP, vous devez inclure le numéro de l'écran conteneur et le nom du
programme.

(C) SAP AG BC400 11-33


Exemple de syntaxe : appel des méthodes

MODULE create_control OUTPUT.


If container_r IS INITIAL.
CREATE OBJECT container_r
EXPORTING container_name = 'CONTAINER_1'.
container_r
CREATE OBJECT grid_r
EXPORTING i_parent = container_ref.

grid_r
CALL METHOD
grid_r->set_table_for_first_display
EXPORTING i_structure_name = 'SPFLI'
CHANGING it_outtab = gdt_spfli.
ELSE.
CALL METHOD
grid_r->refresh_table_display
EXPORTING i_soft_refresh = 'X'.
ENDIF.

ENDMODULE.

ã SAP AG 1999

n Pour afficher les données dans un ALV Grid Control, vous devez les disposer dans une table interne.
Le système appelle ensuite la méthode qui reçoit le contenu et la structure de la table interne. La
méthode s'appelle set_table_for_first_display. À condition que la table interne soit du
type de structure du Dictionnaire ABAP, le nom de cette structure est transféré au paramètre
i_structure_name. La méthode reçoit les informations dont elle a besoin - noms de colonne,
types de colonne, et liens de colonne pour des zones de devise - directement du Dictionnaire ABAP.
n Si seul le contenu de la table interne est modifié pendant l'exécution du programme, il doit appeler la
méthode refresh_table_display avant le renvoi de l'écran dans la zone conteneur.

(C) SAP AG BC400 11-34


Objets de gestion et BAPI

Groupes
Groupes de
de fonctions
fonctions et
et modules
modules de
de fonction
fonction

Objets
Objets et
et méthodes
méthodes

Objets
Objets de
de gestion
gestion et
et BAPI
BAPI

Bases
Bases de
de données
données logiques
logiques

ã SAP AG 1999

(C) SAP AG BC400 11-35


Objets de gestion et BAPI : objectifs du cours

À la fin de ce cours, vous serez en mesure :

l de trouver des informations importantes sur les


objets de gestion et leur BAPI en utilisant le BAPI
Explorer et le Générateur d'objets

ã SAP AG 1999

(C) SAP AG BC400 11-36


BAPI

l Business Application Programming Interface

l Un BAPI est une interface définie contenant les


traitements et les données d'un système applicatif,
implémenté comme les méthodes d'un objet du
Business Object Repository (BOR).

BAPI

ã SAP AG 1999

n Un BAPI est un point d'entrée du système R/3, point auquel le système R/3 fournit un accès aux
objets de gestion et aux traitements.
n Chaque objet du BOR peut avoir différentes méthodes, une ou plusieurs d'entre elles peuvent être
exécutées comme des BAPI.
n Les BAPI peuvent avoir les fonctions suivantes :
- création d'un objet ;
- recherche des attributs d'un objet ;
- modification des attributs d'un objet.

(C) SAP AG BC400 11-37


Où s'utilisent les BAPI ?

Systèmes-satellite R/3 et
scénarios répartis (ALE)

Business
Workflow

Visual Basic/JAVA...
Internet /
Intranet
Composante Composante
de gestion B
de gestion

Composition
des Composante Développement
de gestion
composantes R/3 spécifique client et
partenaires
ã SAP AG 1999

n Un BAPI est une interface qui peut s'utiliser dans de nombreuses applications. Par exemple :
- les composantes applicatives Internet permettent l'accès à des fonctions R/3 individuelles sur
Internet ou Intranet pour des utilisateurs sans expérience R/3 ;
- la composition des composantes R/3 permet une communication entre les objets de gestion et
les différentes composantes R/3 (applications) ;
- VisualBasic/JAVA/C++ : des clients externes (par exemple, des GUI alternatifs) peuvent
accéder directement aux objets de gestion et à leurs traitements.

(C) SAP AG BC400 11-38


Exemple d'un objet de gestion FlightBooking

Méthodes :
FlightBooking.GetList
FlightBooking.GetDetail
FlightBooking.CreateFromData
FlightBooking.Cancel
Compagnie aérienne
Numéro de correspondance
Date du vol
Numéro de réservation

ã SAP AG 1999

n Un exemple d'objet de gestion du modèle du cours s'appelle FlightBooking. Il contient une


réservation. Chaque réservation s'identifie uniquement par ses informations-clés : Compagnie
aérienne, Numéro de correspondance (numéro de vol), Date du vol, Numéro de
réservation. Vous avez les méthodes suivantes pour cet objet :
Ÿ FlightBooking.GetDetail renvoie les informations détaillées de la réservation ;
Ÿ FlightBooking.CreateFromData crée une réservation ;
Ÿ FlightBooking.Cancel ;
Ÿ FlightBooking.GetList renvoie une liste comportant les détails de toutes les réservations
de ce vol. Elle affiche généralement plus de détails pour chaque réservation que GetDetail.

(C) SAP AG BC400 11-39


BAPI Explorer

Hiérarchique Alphabétique Détail Documentation Outils Projet

Hiérarchie des
composantes

Composante applicative

Objet de gestion

Attributs-clés
Des informations
Méthodes API complémentaires sur
les sous-composantes sont
disponibles dans les autres
outils ABAP Workbench

Domaine de hiérarchie

ã SAP AG 1999

n Le BAPI Explorer Information vous permet d'afficher des informations complémentaires sur les
objets de gestion et les BAPI qui leur appartiennent. L'écran se divise en deux parties : un domaine
de hiérarchie et une fenêtre de détails. Le domaine de hiérarchie affiche la hiérarchie des
composantes. Vous pouvez développer une composante applicative pour trouver les objets de gestion
qui lui appartiennent. Si vous développez un objet de gestion individuel, le système affiche un sous-
arbre, vous indiquant quels attributs-clés et quelles méthodes API en dépendent. (API représente
Application Programming Interface).

(C) SAP AG BC400 11-40


BAPI Explorer - légende

Type d'objet de gestion


Type d'interface
Attribut-clé
Méthode spécifique de l'instance
Méthode non spécifique de l'instance
Paramètres d'import
Paramètres d'export
Paramètres de modification

ã SAP AG 1999

n Des symboles s'utilisent pour indiquer les objets de gestion, les attributs-clés et les BAPI. Vous
pouvez afficher la clé de ces symboles en utilisant le bouton Afficher légende.

(C) SAP AG BC400 11-41


Objets de gestion dans le BAPI Explorer

Hiérarchique Alphabétique Détail Documentation Outils Projet

FlightBooking
Compagnie aérienne
N° correspondance
Date du vol Attributs-clés
N° réservation

Cancel
CreateFromData Méthodes API
GetDetail
GetList

FlightCustomer
FlightConnection

ã SAP AG 1999

n Si vous développez le sous-arbre d'un objet de gestion dans le BAPI Explorer, le système affiche :
Ÿ les attributs-clés, qui fournissent un identificateur unique à chaque objet de gestion ;
Ÿ les méthodes spécifiques de l'instance, liées à l'instance identifiée par les attributs-clés ; le type
d'objet de gestion FlightBooking a une méthode spécifique à l'instance, GetDetail (qui renvoie
une structure comportant les détails d'une réservation). Les valeurs des attributs-clés doivent être
transférées à cette méthode ;
Ÿ les méthodes non spécifiques de l'instance, appelées par toutes les instances d'un type d'objet.
FlightBooking en possède une, GetList (qui renvoie une liste de toutes les réservations, pour
lesquelles un objet de gestion existe déjà au moment de l'exécution).

(C) SAP AG BC400 11-42


BAPI dans le BAPI Explorer

Hiérarchique Alphabétique Détail Documentation Outils Projet

Sélection d'outils
FlightBooking
Compagnie aérienne Générateur d'objets
N° correspondance Générateur de modules de fonction
Date du vol Dictionnaire ABAP
N° réservation Contrôles de cohérence BAPI
Création de liste BAPI

Cancel
CreateFromData
Entrée données réserv.
Retour Structure du Dictionnaire
BAPISBDTIN
Données de réservation
GetDetail Afficher
GetList
FlightCustomer
FlightConnection

ã SAP AG 1999

n Si vous développez la sous-structure d'une méthode, le système renvoie les noms de ses paramètres
d'import et d'export. Vous trouverez des informations complémentaires sur le typage des paramètres
d'interface en choisissant l'onglet Outils,et ensuite le Dictionnaire ABAP. Les paramètres d'interface
BAPI sont toujours typés par des types du Dictionnaire ABAP.
n Les BAPI ont généralement un paramètre d'export appelé RETURN. Celui-ci peut être soit une
structure, soit une table interne. Le paramètre RETURN contient des informations sur les erreurs
effectuées pendant le traitement du BAPI. Les BAPI n'ont pas d'exceptions.

(C) SAP AG BC400 11-43


Générateur d'objets

Type d'objet

Données de base Vue complète de


l'objet de gestion
Interfaces
Interfaces

Zones-clés

Attributs

Méthodes

Événements

ã SAP AG 1999

n Pour afficher des informations complètes sur un type d'objet de gestion, utilisez l'outil Générateur
d'objets. Le système affiche une arborescence pour le type d'objet de gestion, y compris des
méthodes non API.
n Pour rechercher un objet de gestion, utilisez l'outil Business Object Repository (BOR). Cet outil
affiche la hiérarchie des composantes et tous les objets de données qui en dépendent. Vous pouvez
naviguer de cette arborescence vers le Générateur d'objets. Le système affiche automatiquement
l'objet adéquat.

(C) SAP AG BC400 11-44


BAPI standard

l GetList
n Renvoie le contenu des zones-clés pour l'objet choisi
l GetDetail
n Renvoie les informations détaillées (attributs) pour l'objet
demandé
l CreateFromData
n Crée un nouvel objet dans R/3 et renvoie les informations le
concernant

ã SAP AG 1999

n Les BAPI de noms standardisés contiennent des méthodes standard. Cette page vous propose les
trois plus importantes.

(C) SAP AG BC400 11-45


Implémentation des BAPI comme modules de fonction

Hiérarchique Alphabétique Détail Documentation Outils Projet

Sélection d'outils
FlightBooking
Compagnie aérienne Générateur d'objets
N° correspondance Générateur de modules de fonction
Date du vol Dictionnaire ABAP
N° réservation Contrôles de cohérence BAPI
Création de liste BAPI

Annuler
CreateFromData
GetDetail
Module de fonction BAPI_SBOOK_GETDETAIL
Retour
Données de réserv.
GetList
Afficher
FlightCustomer
FlightConnection

ã SAP AG 1999

n Dans la version 4.6, les BAPI sont implémentés par des modules de fonction. Vous pouvez afficher
le module de fonction du BAPI choisi en utilisant le BAPI Explorer :
Ÿ sélectionnez le BAPI dans le domaine de hiérarchie ;
Ÿ dans la fenêtre d'affichage des informations détaillées, choisissez l'onglet Outils ;
Ÿ choisissez le Générateur de fonctions, le système affiche le nom du module de fonction ;
Ÿ choisissez Afficher.

(C) SAP AG BC400 11-46


Appel d'un BAPI depuis un programme ABAP

Programme ABAP
PROGRAM ...
R/3
TABLES ...
DATA ... Business Object
Repository
MODULE init OUTPUT.
CALL FUNCTION 'BAPI_...' ... Objet de gestion A :
ENDMODULE. Méthode 1 = M1
Méthode 2 = M2
MODULE read_data INPUT.
CALL FUNCTION 'BAPI_...' ...
ENDMODULE. Modules de fonction :
BAPI_A_M1
MODULE confirm_reservation.
CALL FUNCTION 'BAPI_...'...
'BAPI_...' ... BAPI_A_M2
IF ... .
CALL
CALLFUNCTION
FUNCTION'BAPI_...'
'BAPI_...'...
...
ENDIF.
ENDMODULE.

ã SAP AG 1999

n Si vous voulez utiliser un BAPI dans un système R/3, vous pouvez directement appeler le module de
fonction qui le comporte. Vous constaterez que les informations relatives aux erreurs sont transférées
au programme en utilisant le paramètre d'interface RETURN. Les modules de fonction BAPI ne
contiennent pas d'exceptions ni de dialogues utilisateur. Leur fonction unique est d'encapsuler la
logique applicative.

(C) SAP AG BC400 11-47


BAPI : gestion des exceptions

l Aucune exception
l Les erreurs sont gérées par des paramètres d'export
(structures ou tables)
n Nom du paramètre : RETURN
n Structure du Dictionnaire ABAP (selon la version) :
BAPIRETURN, BAPIRETURN1,
BAPIRET1, BAPIRET2, BAPIRET2_FIX

ã SAP AG 1999

n Tout BAPI possède un paramètre d'interface, RETURN, qui contient les informations sur les cas
d'erreur. Ce paramètre est toujours d'un type du Dictionnaire ABAP. Vous devez donc inclure une
structure d'un type identique dans votre programme.

(C) SAP AG BC400 11-48


Bases de données logiques

Groupes
Groupes de
de fonctions
fonctions et
et modules
modules de
de fonction
fonction

Objets
Objets et
et méthodes
méthodes

Objets
Objets de
de gestion
gestion et
et BAPI
BAPI

Bases
Bases de
de données
données logiques
logiques

ã SAP AG 1999

(C) SAP AG BC400 11-49


Bases de données logiques : objectifs du cours

À la fin de ce cours, vous serez en mesure :

l de décrire le comportement au moment de


l'exécution d'un programme exécutable qui utilise
une base de données logique simple, comprenant
les effets sur :
l la structure de la base de données logique
l l'instruction NODES
l les blocs de traitement événements GET

ã SAP AG 1999

(C) SAP AG BC400 11-50


Lecture de données logiquement dépendantes

Exemple : base de données logique


F1S

SPFLI

SFLIGHT

SBOOK

ã SAP AG 1999

n Utilisez des bases de données logiques pour lire dans les bases de données des informations
logiquement cohérentes. Chaque base de données logique possède une structure comportant une
hiérarchie des tables et des vues à lire.
n Vous pouvez relier une seule base de données logique à chaque programme de type 1. Celle-ci
envoie ensuite à votre programme des entrées aux tables et aux vues. Seules les instructions de
traitement de données doivent donc être programmées.

(C) SAP AG BC400 11-51


Les bases de données logiques

l sont des programmes spéciaux d'acquisition de données


livrés par SAP
l présentent les données lues au programme utilisateur dans
un ordre hiérarchique logique
l accèdent aux bases de données de manière optimisée
l proposent un écran de sélection dynamique
l contrôlent les autorisations

Vous
Vous pouvez associer une base de données logique à
chaque programme
programme de de type
type 1,
1, àà l'aide
l'aide des
des attributs
attributs de
de ce
ce
dernier.
dernier.
Pour
Pour le
le traitement
traitement des
des enregistrements,
enregistrements, vous utilisez des
événements spécifiques.
spécifiques.
ã SAP AG 1999

n Chaque base de données logique est encapsulée dans un programme conçu pour les accès fréquents à
ses informations.
n Ces accès ont été optimisés à l'aide d'Open SQL.
n Lorsque vous travaillez avec une base de données logique, vous ne devez pas programmer d'écran de
sélection car celui-ci est généré automatiquement.
n Le système contrôle les autorisations conformément au concept d'autorisation de SAP.

(C) SAP AG BC400 11-52


Contrôle d'une BD logique depuis un programme

Données de Programme
la BD logique
NODES sflight.

SPFLI
GET sflight ... SFLIGHT
:
SBOOK

ã SAP AG 1999

n L'instruction NODES <noeud> exécute deux fonctions :


n elle définit un objet de données (une structure) comme un espace de travail de table qui a la
même structure que la structure <noeud> du Dictionnaire ABAP, qui est un noeud de la
structure hiérarchique de la base de données logique. A l'exécution, cette structure reçoit des
enregistrements que la base de données logique a lus et fournis au programme ;
n elle détermine le niveau de détail de l'écran de sélection : l'écran défini dans la base de
données logique ne doit contenir que les zones de saisie des informations-clés nécessaires au
programme. L'instruction NODES vous permet de garantir l'accès aux informations des tables
appropriées de l'écran de sélection.
n Les bases de données logiques effectuent une lecture de haut en bas, en fonction de leur structure. Le
niveau de données lues dépend des événements GET d'un programme. Le niveau est déterminé par
l'événement GET maximal (d'une vue structurelle de la base de données logique).

(C) SAP AG BC400 11-53


Événements et bases de données logiques

Programme Base de
NODES: SPFLI, données
SFLIGHT. logique

START-OF-SELECTION.

GET spfli.
SPFLI

Runtime
system
GET sflight. SFLIGHT ABAP

SBOOK
Liste de base

END-OF-SELECTION.

ã SAP AG 1999

n Pour inclure une base de données logique à un programme de type 1, vous utilisez les attributs de ce
programme.
n Chaque noeud de la hiérarchie de base de données logique vous envoie un événement GET (en plus
des autres événements). (GET SPFLI, GET SFLIGHT, GET SBOOK dans notre exemple).
n Vous utilisez des événements GET pour programmer le traitement des enregistrements.
n Au moment de l'exécution, les événements qui créent des listes sont traités dans l'ordre suivant :
n START-OF-SELECTION.
n GET SPFLI et GET SFLIGHT, appelés de nombreuses fois dans une logique SELECT
imbriquée, en fonction de la structure de la base de données logique.
n END-OF-SELECTION, appelé après tous les événements GET et immédiatement avant l'envoi
de la liste au serveur de présentation.

(C) SAP AG BC400 11-54


Exemple : séquencement des événements

REPORT bc400d_logical_database.
NODES: spfli, sflight.

START-OF-SELECTION. START-OF-SELECTION
WRITE: / 'START-OF-SELECTION' GET SPFLI DL 1699
color 3. GET SFLIGHT 25.08.1998

GET spfli FIELDS carrid connid. GET SFLIGHT 27.09.1998


WRITE: / 'GET SPFLI' color 1, GET SPFLI LATE
spfli-carrid,
spfli-connid. GET SPFLI DL 1984

GET SFLIGHT 25.08.1998


GET sflight FIELDS fldate.
WRITE: / 'GET SFLIGHT' color 2, GET SFLIGHT 27.09.1998
sflight-fldate. GET SFLIGHT 29.09.1998

GET spfli LATE. GET SPFLI LATE


WRITE :/ 'GET SPFLI LATE'. END-OF-SELECTION

END-OF-SELECTION.
WRITE: 'END-OF-SELECTION'
color 3.
ã SAP AG 1999

n Au moment de l'exécution, les événements qui créent des listes sont traités dans l'ordre suivant :
n START-OF-SELECTION.
n GET spfli : le premier enregistrement de la table SPFLI correspondant aux critères de
sélection est placé dans l'espace de travail spfli, puis l'événement est traité ;
n GET sflight : le premier enregistrement de SFLIGHT correspondant aux critères de
sélection et à la clé de l'enregistrement SPFLI en cours est placé dans l'espace de travail
sflight, puis l'événement est traité ;
n GET sflight : l'enregistrement suivant dans la table SFLIGHT est placé dans l'espace de
travail sflight, puis l'événement est traité de nouveau ;
n GET sflight est appelé jusqu'à ce qu'aucun nouvel enregistrement ne soit plus trouvé ;
n GET spfli LATE est appelé avant que l'enregistrement du SPFLI suivant ne soit placé
dans l'espace de travail spfli ;
n GET spfli : l'enregistrement correspondant suivant de SPFLI est placé dans l'espace de
travail spfli ;
n ...
n END-OF-SELECTION est appelé immédiatement avant l'envoi de la liste.

(C) SAP AG BC400 11-55


Résumé

NODES: spfli, sflight.


ABAP : attributs de programme
START-OF-SELECTION.
Attributs WRITE: / 'START-OF-SELECTION'
Type 1 color 3.

Application S GET spfli FIELDS carrid connid.


WRITE: / 'GET SPFLI' color 1,
Log. Datenbank F1S
spfli-carrid,
spfli-connid.

GET sflight FIELDS fldate.


WRITE: / 'GET SFLIGHT' color 2,
sflight-fldate.
SPFLI
GET spfli LATE.
SFLIGHT WRITE :/ 'GET SPFLI LATE'.

SBOOK END-OF-SELECTION.
WRITE: 'END-OF-SELECTION'
color 3.
ã SAP AG 1999

n Les BD logiques sont incluses dans les programmes de type 1 en tant qu'attributs. Une seule BDL
peut être associée à un programme.
n Pour indiquer à la BD logique les zones dont vous avez besoin, utilisez l'option FIELDS de GET.
Si elle gère cette action, toutes les zones spécifiées seront lues.
n Pour placer les données d'une table dans une liste non fournie par votre BD logique, utilisez SELECT
pour programmer un accès supplémentaire à cette base.

(C) SAP AG BC400 11-56


Réutilisation des composantes

Vous êtes maintenant capable :

l de trouver et utiliser des modules de fonction


l d'afficher une liste simple en utilisant ALV grid
control (objets des classes globales du
Générateur de classes)
l d'utiliser un BAPI et trouver des BAPI en utilisant
le BAPI Browser
l d'utiliser une base de données logique pour créer
une liste hiérarchique d'informations de vol

ã SAP AG 1999

(C) SAP AG BC400 11-57


Exercices

(C) SAP AG BC400 11-58


(C) SAP AG BC400 11-59
Chapitre : Réutilisation des composantes
Sujet : Modules de fonction

À la fin de ces exercices, vous serez en mesure :


• de rechercher un module de fonction ;
• d’insérer un appel de module de fonction dans un programme.

Complétez votre programme ZBC400_##_SELECT_SFLIGHT ou la


solution modèle correspondante comme suit :
si la fonction Annuler est sélectionnée à l’écran, le système doit traiter
une boîte de dialogue standard à l’intérieur du module de fonction.

Programme : ZBC400_##_DYNPRO
Solution modèle : SAPBC400UDS_DYNPRO_5

1-1 Complétez votre programme, ZBC400_##_DYNPRO, ou copiez la solution modèle


adéquate SAPBC400UDS_DYNPRO_1 et nommez-la ZBC400_##_DYNPRO_2.
Afffectez votre programme à la classe de développement ZBC400_## et à l'ordre
de transport pour ce projet, BC400… (en remplaçant ## par votre numéro de
groupe).
1-2 Utilisez la méthode expliquée dans ce cours pour rechercher le module de fonction
de la boîte de dialogue standard qui est généralement lancé lorsque l’utilisateur
choisit Annuler.
1-3 Informez-vous sur les interfaces du module de fonction, lisez la documentation, et
utilisez l’environnement de test pour tester le module de fonction.
1-4 Dans le statut GUI de l’écran, activez la fonction "Annuler".
1-5 Complétez le module USER_COMMAND_0100 pour tester le code de fonction de la
fonction Annuler. Insérez ensuite l’appel de module de fonction en utilisant la
fonction "modèle" de l’Éditeur ABAP. Faites en sorte que le système réagisse à la
saisie utilisateur comme suit :
- si l’utilisateur souhaite annuler, mettez dynamiquement à 0 l'écran suivant ;
- si l’utilisateur ne souhaite pas annuler, mettez dynamiquement à 100 l'écran suivant.

(C) SAP AG BC400 11-60


Chapitre : Réutilisation des composantes
Sujet : Objets ABAP et ALV Grid Control

À la fin de ces exercices, vous serez en mesure :


• d’éditez une liste simple en utilisant ALV Grid Control.

Écrivez un programme qui édite le contenu d’une table de base de


données SPFLI en utilisant ALV Grid Control.

Programme : ZBC400_##_ALV_GRID
Solution modèle : SAPBC400RUS_ALV_GRID

2-1 Copiez le programme, SAPBC400RUT_ALV_GRID en le nommant


ZBC400_##_ALV_GRID. Affectez votre programme à la classe de
développement ZBC400_## et à l'ordre de modification pour votre projet
"BC400…" (en remplaçant ## par votre numéro de groupe). Le modèle de
programme contient la définition d’une table interne du même type de ligne que la
table de base de données SPFLI et un dialogue utilisateur (écran 100).
2-2 Testez le programme.
2-3 Remplissez la table interne avec des enregistrements de la table de données SPFLI
en utilisant un array-fetch.
2-4 Naviguez dans le Générateur de classes et découvrez :
2-4-1 Pour la classe : CL_GUI_CUSTOM_CONTAINER, quels paramètres de
la méthode CONSTRUCTOR sont obligatoires ?
2-4-2 Pour la classe : CL_GUI_ALV_GRID, quels paramètres de la méthode
CONSTRUCTOR sont obligatoires ?
2-5 Créez un domaine de container control à l’écran. Donnez un nom à ce domaine.
2-6 Définissez deux variables de référence, l’une pour la classe
CL_GUI_CUSTOM_CONTAINER et l’autre pour la classe CL_GUI_ALV_GRID.

(C) SAP AG BC400 11-61


2-7 Transmettez la variable de référence du custom container dans le paramètre
obligatoire. Assurez-vous que l'objet soit généré seulement si PROCESS BEFORE
OUTPUT s’exécute pour la première fois.
2-8 À la première exécution de PROCESS BEFORE OUTPUT, appelez la méthode
SET_TABLE_FOR_FIRST_DISPLAY ; transférez le nom du type de ligne de la
table interne dans le paramètre I_STRUCTURE_NAME ; transportez la table interne
dans le paramètre IT_OUTTAB
2-9 Si PBO s’exécute plus d’une fois, vous devez appeler la méthode
REFRESH_TABLE_DISPLAY. Transmettez 'X' en paramètre
I_SOFT_REFRESH. Lors du PROCESS BEFORE OUTPUT du dynpro 100,
appelez un module pour générer les objets. Créez une instance du custom container
en utilisant l'instruction CREATE OBJECT. Transmettez le nom du domaine
conteneur (du dynpro 100) au paramètre obligatoire de la méthode CONSTRUCTOR.
Créez une instance de ALV.

(C) SAP AG BC400 11-62


Solutions

(C) SAP AG BC400 11-63


(C) SAP AG BC400 11-64
Chapitre : Réutilisation des composantes
Sujet : Modules de fonction

1-2 Le module de fonction s’appelle ‘POPUP_TO_CONFIRM_LOSS_OF_DATA’.


1-3 Les paramètres d’interface suivants existent :
Paramètres d’import obligatoires :
TEXTLINE1 (max 70 car.) : première ligne de la fenêtre de dialogue
TITLE (max. 35 car.) : titre de la fenêtre de dialogue
Paramètres d’import facultatifs :
TEXTLINE2 (max. 70 car.) : première ligne de la fenêtre de dialogue
START_COLUMN (Typ SY-CUCOL) : première colonne de la fenêtre de
dialogue
START_ROW (Typ SY-CUCOL) : première ligne de la boîte de dialogue
Paramètres d’export :
ANSWER (Type C) : saisie de l’utilisateur
“Y” = utilisateur a confirmé l’étape de traitement
“N” = utilisateur a annulé l’étape de traitement
1-4 Le code de fonction de la fonction Annuler est RW.
1-5
*&--------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&--------------------------------------------------------------*
MODULE user_command_0100 INPUT.
save_ok = ok_code .
CLEAR ok_code .
CASE save_ok.
WHEN 'BACK'.
SET SCREEN 0.
WHEN 'RW'.
CALL FUNCTION 'POPUP_TO_CONFIRM_LOSS_OF_DATA'
EXPORTING
textline1 = text-001
title = text-002
IMPORTING
answer = answer.
case answer.
when 'N'.
leave to screen 100.
when 'J'.

(C) SAP AG BC400 11-65


leave to screen 0.
endcase.
WHEN 'SAVE'.
MESSAGE i060(bc400).
SET SCREEN 0.
WHEN OTHERS.
SET SCREEN 100.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT

(C) SAP AG BC400 11-66


Chapitre : Réutilisation des composantes
Sujet : Objets ABAP et ALV Grid Control

Programme : ZBC400_##_ALV_GRID
Solution modèle :

2-3 START-OF-SELECTION.

* fill internal table


SELECT * FROM spfli
INTO TABLE gdt_spfli.
* WHERE ...
CALL SCREEN 100.

2-4-1 Le paramètre suivant de la méthode CONSTRUCTOR (pour la classe :


CL_GUI_CUSTOM_CONTAINER)est obligatoire.

CONTAINER_NAME : le nom du conteneur de contrôle à l’écran


2-4-2 Le paramètre suivant de la méthode CONSTRUCTOR (pour la classe :
CL_GUI_CUSTOM_CONTAINER)est obligatoire : I_PARENT:
conteneur-parent : le nom de la variable de référence qui indique l’objet
de la classe CL_GUI_CUSTOM_CONTAINER doit être transmis à ce
paramètre.
2-5 Créez un domaine de contrôle conteneur à l’écran. Appelez le domaine de
conteneur CONTAINER_1
2-6 Introduisez les instructions suivantes dans la section de déclarations de
données :

DATA:
container_r TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
grid_r TYPE REF TO CL_GUI_ALV_GRID.

2-7 à 2-9 :
Logique d'exécution :

(C) SAP AG BC400 11-67


PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
module create_control.
*
PROCESS AFTER INPUT.
module copy_ok_code.
MODULE USER_COMMAND_0100.

Module PBO dans le programme :


*&---------------------------------------------------------------------*
*& Module CREATE_CONTROL OUTPUT
*&---------------------------------------------------------------------*

MODULE create_control OUTPUT.


IF container_r IS INITIAL.
CREATE OBJECT container_r
EXPORTING container_name = 'CONTAINER_1'.

CREATE OBJECT grid_r


EXPORTING i_parent = container_r.

CALL METHOD grid_r->set_table_for_first_display


EXPORTING i_structure_name = 'SPFLI'
CHANGING it_outtab = gdt_spfli.
ELSE.
CALL METHOD grid_r->refresh_table_display
EXPORTING i_soft_refresh = 'X'.
ENDIF.
ENDMODULE. " CREATE_CONTROL OUTPUT

(C) SAP AG BC400 11-68


Dialogues base de données II

Contenu :
l Processus de traitement élémentaire
l LUW BD : unité logique de travail Base de données
l Regroupement des modifications d'une base de données
l Concept de blocage

ã SAP AG 1999

(C) SAP AG BC400 12-1


Dialogues base de données II : objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l d'expliquer pourquoi vous devez effectuer les


modifications de BD dans une seule unité logique
de travail (Logical Unit of Work) de base de
données
l de décrire le concept de blocage SAP

ã SAP AG 1999

(C) SAP AG BC400 12-2


Architecture client/serveur de R/3

Présentation

Application
Dispatcher

Work Work Work


process process process

Base de données

Work processes de la base de données

ã SAP AG 1999

n Le système R/3 de SAP repose sur une architecture client/serveur à trois niveaux : base de données,
serveur d'application et serveur de présentation.
n Cette architecture, qui répartit les requêtes des utilisateurs (dispatcher), est la base d'un système à
multi-utilisateurs, hautement performant et économique.
n Les utilisateurs équipés d'ordinateurs relativement lents accèdent aux work processes d'un petit
nombre de serveurs d'application beaucoup plus rapides (et plus onéreux). À chaque work process du
serveur d'application correspond un work process du serveur de base de données.
n Le dispatcher attribue un work process aux clients, et ce, au niveau du serveur de présentation et
pendant une durée déterminée. À son tour, le work process du serveur d'application utilise un work
process de la base de données. Quand le système a traité la saisie utilisateur dans une étape de
dialogue, les données-contexte de l'utilisateur et du programme sont copiées hors du work process,
laissant ainsi la place libre à un autre utilisateur.
n Cette architecture à trois niveaux est beaucoup plus évolutive qu'une architecture client-serveur
volumineuse réunissant en un seul niveau les serveurs de présentation et d'application. Comme elle
nécessite moins d'opérations en antémémoire, elle est plus économique.

(C) SAP AG BC400 12-3


Processus de traitement élémentaire

Processus de
traitement élémentaire

Traitement Traitement Traitement


étape 1 étape 2 ... étape n

LUW SAP

ã SAP AG 1999

n Une LUW SAP (unité logique de travail) est une série d'étapes logiques réunies dans un processus
de gestion R/3.
n Les étapes de la chaîne de traitement du processus de gestion doivent être logiquement liées.
n Les LUW SAP fonctionnent selon le principe du "tout ou rien" : le système effectue toutes les étapes
ou aucune.
n Le processus de gestion représenté dans une LUW doit être élémentaire. Ainsi, le processus
intervenant depuis la commande d'un client jusqu'à la facturation est trop complexe pour tenir dans
une seule LUW. Dans ce cas, scindez-le en segments indépendants plus petits qui forment chacun
une "transaction" dans le système R/3. Le caractère "élémentaire" de votre processus dépend de sa
nature et de la façon dont vous l'aurez conçu.

(C) SAP AG BC400 12-4


LUW BD : unité logique de travail Base de données

Stade de modification de données Stade intermédiaire


insert, update, delete

Stade Stade
cohérent 1 cohérent 2

COMMIT
ROLLBACK

ã SAP AG 1999

n Une LUW base de données est une suite d'opérations indissociables qui fait passer la base de
données d'un état cohérent à un autre état cohérent.
n Le système exécute une LUW BD soit intégralement, soit pas du tout.
n Les LUW BD se terminent par un commit de base de données. C'est seulement au COMMIT que
sont écrites définitivement les modifications de la base de données. Jusqu'au déclenchement du
COMMIT, vous pouvez annuler toutes vos modifications en provoquant un ROLLBACK.

(C) SAP AG BC400 12-5


Regroupement des modifications d'une base de
données dans une LUW SAP

LUW SAP

Dialogues utilisateur

Programme
ABAP

Modifications de la BD

LUW BD

ã SAP AG 1999

n Pour représenter un processus de gestion dans le système R/3 au moyen d'une LUW SAP, il faut des
dialogues utilisateur et un dialogue base de données. Une transaction garantit que les données
échangées entre le programme et l'utilisateur dans les dialogues utilisateur sont traitées dans la base
selon le principe du tout ou rien. Tous les changements de la LUW SAP doivent donc être traités
dans une seule LUW BD.
n Généralement, une LUW SAP contient plusieurs LUW BD.
n L'objectif de la programmation d'une transaction est de regrouper les segments du dialogue base de
données dans une seule LUW BD.

(C) SAP AG BC400 12-6


Commits implicites

Étape de dialogue

PBO PAI Modifications de


PAI PBO
base de données

COMMIT COMMIT COMMIT


implicite implicite explicite

LUW BD LUW BD LUW BD

ã SAP AG 1999

n Les commits implicites se déclenchent :


- à la fin d'une étape de dialogue ;
- en cas de dialogue d'erreur ;
- en cas d'appel d'un module de fonction dans un autre processus de travail (remote function call,
RFC).

(C) SAP AG BC400 12-7


Concept de blocage SAP

Blocage a réussi

Demande de blocage Table des blocages

Objet bloqué
Durée
Durée

ã SAP AG 1999

(C) SAP AG BC400 12-8


Concept de blocage SAP

Blocage a réussi

Demande de blocage Table des blocages

Demande de blocage

Blocage a échoué

Objet bloqué
Durée
Durée

ã SAP AG 1999

(C) SAP AG BC400 12-9


Concept de blocage SAP

1 3

Blocage a réussi Levée du blocage


Demande de blocage Table des blocages

Demande de blocage

Blocage a échoué

Objet bloqué
Durée
Durée

ã SAP AG 1999

(C) SAP AG BC400 12-10


Concept de blocage SAP

1 3

Blocage a réussi Levée du blocage


Demande de blocage Table des blocages

Demande de blocage Blocage a réussi

Blocage a échoué Demande de blocage

2 4

Objet bloqué Objet bloqué


Durée
Durée

ã SAP AG 1999

n Un blocage au niveau du serveur base de données ne vaut que pour une seule LUW BD. Il ne
s'applique donc pas à un objet portant sur la totalité d'une LUW SAP.
n Cela est dû au fait que le système R/3 comporte un mécanisme de blocage spécifique totalement
indépendant du système de blocage de base de données.
n Selon le concept de blocage SAP, les programmes placent les entrées dont ils ont besoin dans une
table de blocages.
n Vous pouvez écrire une entrée de blocage seulement si les entrées de table correspondantes ne sont
pas déjà bloquées. Le code retour indique au programme si le blocage a été correctement défini.
Testez le code retour de programme et réagissez en conséquence. Si un autre utilisateur a déjà bloqué
les entrées de table, affichez un message d'erreur.
n Avant de définir un blocage, vous devez spécifier l'objet de blocage approprié dans le Dictionnaire
ABAP. Cet objet indique les arguments servant à bloquer des entrées de la table.
n Lorsque vous activez un objet de blocage, le système génère deux modules de fonction : ENQUEUE
et DEQUEUE.
n Le mécanisme de blocage SAP ne définit que des blocages logiques. Il n'a donc d'effet que si tous
les programmes applicatifs sont conformes à ses principes.

(C) SAP AG BC400 12-11


Programme d'exemple : blocage et déblocage

REPORT SAPBC400TCD_ENQUEUE_DEQUEUE.
...
AT LINE-SELECTION.
PERFORM authorization_check USING wa_spfli-carrid '02'
CHANGING subrc.
IF subrc <> 0. MESSAGE e047(BC400) WITH wa_spfli-carrid. ENDIF.

CALL FUNCTION 'ENQUEUE_ESSPFLI'


EXPORTING carrid = wa_spfli-carrid
connid = wa_spfli-connid
EXCEPTIONS
foreign_lock = 1
system_failure = 2
others = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SELECT SINGLE * FROM spfli INTO wa_spfli
WHERE carrid = wa_spfli-carrid
AND connid = wa_spfli-connid.
MOVE-CORRESPONDING wa_spfli TO sdyn_conn.
CALL SCREEN 100.
CALL FUNCTION 'DEQUEUE_ ESSPFLI' ...

ã SAP AG 1999

n Dans notre programme d'exemple, il est normal d'écrire une entrée de blocage, avant que
l'enregistrement de données ne soit lu et l'écran traité.
n Vous écrivez une entrée de blocage en appelant un module de fonction ENQUEUE pour un objet de
blocage approprié. Vous trouverez quels objets de blocage accèdent à une table de base de données
dans les Cas d'emploi de celle-ci du Dictionnaire ABAP. Les modules de fonction "blocage" et
"déblocage" de l'objet de blocage sélectionné requièrent uniquement les conventions de nom
ENQUEUE_<Nom de l'objet de blocage> et DEQUEUE_<Nom de l'objet de blocage>. En règle
générale, vous devez uniquement transférer les zones-clés de l'interface. Les valeurs par défaut sont
transmises à tous les autres paramètres.

(C) SAP AG BC400 12-12


Programme d'exemple : mises à jour de la base de données

REPORT SAPBC400TCD_ENQUEUE_DEQUEUE.
...
MODULE user_command_0100 INPUT.
CASE ok_code.
...
WHEN 'SAVE'.
MOVE-CORRESPONDING sdyn_conn TO wa_spfli.
CALL FUNCTION 'BC400_UPDATE_FLTIME'
EXPORTING
iv_carrid = wa_spfli-carrid
iv_connid = wa_spfli-connid
iv_fltime = wa_spfli-fltime
iv_deptime = wa_spfli-deptime
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
MESSAGE a149.
ELSE.
MESSAGE s148.
LEAVE TO SCREEN 0.
ENDIF.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT

ã SAP AG 1999

n Notre programme d'exemple montre une seule mise à jour concernant une seule table. Vous pouvez
donc mettre à jour la base de données directement depuis un work process de dialogue, la technique
la plus facile. Les instructions ABAP qui mettent à jour la base de données sont toutes exécutées
dans une seule LUW BD. Vous ne devez JAMAIS inclure un dialogue utilisateur entre deux mises à
jour de la BD. NOTE : ceci inclut les messages d'erreur. En cas d'erreur, le programme doit être
interrompu par un message "Fin anormale" pour qu'un rollback s'exécute automatiquement.
n Des mises à jour de base de données plus complexes sont exécutées par des modules mise à jour.
Pour plus d'informations, reportez-vous à BC414 Programmation des mises à jour de la base de
données.

(C) SAP AG BC400 12-13


Dialogues base de données II : résumé du chapitre

Vous êtes maintenant capable :


l d'expliquer pourquoi vous devez effectuer les
modifications de BD dans une seule unité logique
de travail (Logical Unit of Work) de base de
données
l de décrire le concept de blocage SAP

ã SAP AG 1999

(C) SAP AG BC400 12-14


Logistique et modification du logiciel : contenu

l Développement de logiciel orienté équipe ou


projet, dans le Workbench Organizer
l Modification du logiciel SAP standard

ã SAP AG 1999

(C) SAP AG BC400 13-1


Logistique et modification du logiciel : objectifs du chapitre

À la fin de ce chapitre, vous serez en mesure :

l de gérer un projet dans le système R/3 en utilisant


le Workbench Organizer
l de décrire les options permettant de compléter et
de modifier les fonctions de programmes
existants

ã SAP AG 1999

(C) SAP AG BC400 13-2


Logistique logicielle et modification de R/3

Logistique logicielle
Logistique logicielle

Modificationde
Modification deRR//33

ã SAP AG 1999

(C) SAP AG BC400 13-3


Fin du développement

Planning : ...
Fin du développement
Chef de projet :

Tâches de contrôle de qualité :


Équipe : • Contrôle de syntaxe
• Activation d'objets inactifs
Documentation de tâche

BC400-00
Les tâches sont libérées

BC400-01
Projet de contrôle
contrôle de qualité
qualité
• Contrôle
Contrôle de syntaxe
BC400-02 • Objets inactifs
• Cohérence
Cohérence de tâche
tâche
BC400-03 Documentation du projet

BC400-04
L'ordre de modification est libér
libéré
é
...

ã SAP AG 1999

(C) SAP AG BC400 13-4


Originaux et copies

Système
Système de développement
développement Système
Système suivant

Objet client Objet client

Original Copie
Transport
Développement

Objet SAP Objet SAP Objet SAP

Original Copie Copie

ã SAP AG 1999

n Le Workbench Organizer note automatiquement le système dans lequel vous créez un objet du
Repository. L'original de cet objet du Repository se trouve donc dans ce système.
n La version initiale d'un objet n'existe que dans un seul système. Les autres systèmes n'en contiennent
que des copies.
n Le fait qu'il existe un système initial pour un objet garantit que celui-ci n'est modifié que dans le
système d'intégration. C'est dans ce système que vous développez ; tous les objets qui s'y trouvent
sont donc des originaux. Vous y modifiez les objets du Repository.
n Si vous transportez ensuite vos objets du Repository dans un système de consolidation, ce dernier en
contiendra des copies. Bien qu'il soit possible, dans des cas exceptionnels, de modifier des copies,
faites-le toujours dans le système d'intégration avant de transporter les nouvelles versions dans
d'autres systèmes. Ainsi, l'état des objets reste cohérent d'un système à l'autre.
n Les originaux ne sont jamais écrasés durant un transport.

(C) SAP AG BC400 13-5


Corrections et réparations

Système
Système de développement
développement Système
Système suivant

Objet client Objet client


Original
Copie
corrigé
corrigé
Transport
Correction correction

Objet SAP Objet SAP Objet SAP


Original Copie
Copie
corrigé
corrigé modifiée
modifiée
Transport
Correction Réparation réparation

ã SAP AG 1999

n La modification d'un original s'appelle une correction. Le système enregistre ces modifications dans
une demande contenant des tâches de type "développement/correction".
n Si une copie est modifiée (donc, si un objet n'est pas modifié dans son système original), cette
modification s'enregistre dans une tâche de type "réparation". Une modification d'un objet SAP
s'appelle une réparation.
n Les modifications effectuées dans vos propres objets (par ex. une urgence du système de production)
peuvent également s'inscrire en même temps dans les originaux du système de développement. Il est
impératif d'enregistrer également les modifications effectuées dans vos copies immédiatement
dans vos originaux !!
n Ce n'est pas possible pour les objets SAP car les originaux ne sont pas dans vos systèmes.

(C) SAP AG BC400 13-6


Modifications pendant la montée de version

Système
Système de développement
développement Système suivan
Système

Objet client Objet client


Original
Copie
corrigé
corrigé

Objet SAP Objet SAP Objet SAP


Original Copie
Copie
corrigé
corrigé modifiée
modifiée
Transport
Ajustement modification
de la
modification

Montée
Montée de version Montée
Montée de version

ã SAP AG 1999

n Un conflit peut se produire lorsque vous effectuez une montée de version, un support package, ou
d'autres ordres de transport de SAP vers votre système.
n Un conflit se produit si vous modifiez un objet SAP et qu'une nouvelle copie est effectuée par SAP
lors d'une montée de version. L'objet livré par SAP devient l'objet actif du Repository de votre
système R/3.
n Pour sauvegarder vos modifications, vous devez effectuer un ajustement de modification pour les
objets correspondants. La modification de nombreux objets SAP peut entraîner un retard substantiel
lors de l'exécution de la montée de version.
n Pour garantir la cohérence du système de développement et du système suivant, vous devez effectuer
l'ajustement de modification uniquement dans le système de développement. Les objets de
l'ajustement sont ensuite transportés vers les autres systèmes.

(C) SAP AG BC400 13-7


Logistique logicielle et modification de R/3

Logistique logicielle
Logistique logicielle

Modificationde
Modification deRR//33

ã SAP AG 1999

(C) SAP AG BC400 13-8


Niveaux de modification

Tâches applicatives Programmes


R/3 client
( Standard SAP)

Développe-
Modification Extension ment client
l Modification l Dictionnaire ABAP l avec appel
n Extension de table
codée en dur d'objets SAP
n Exit de zone
l Modification l Exit client l sans appel
assistée n Exit de module de d'objets SAP
fonction
n Exit d'écran
n Exit de menu
l BTE, Business
Transaction Events
l BADI, Business add-in

l Exit utilisateur
ã SAP AG 1999

n Vous adaptez le système à vos besoins de quatre façons :


- Customizing : vous modifiez les paramètres système via une interface spéciale. Toutes les
modifications possibles ont été imaginées et organisées. Le customizing est une partie
obligatoire pour la définition d'un système ;
- concept d'extension : vous adaptez des objets du Repository SAP sans y faire de réparations ;
- développement client : vous créez des objets client spécifiques dans l'espace nom client ;
- modifications du standard : réparation des objets du Repository. Si SAP fournit par la suite
une nouvelle version de l'objet réparé, vous devrez adapter votre réparation à la nouvelle
version. Évitez donc de modifier le standard.

(C) SAP AG BC400 13-9


Extensions fonctionnelles

Une fonction similaire est-elle


mappée dans le standard SAP ? Développement client

Non
Oui

La fonction SAP peut-elle être adaptée


aux besoins du client par des Customizing
extensions ?
Oui
Non

L'application SAP permet-elle


la liaison de plusieurs fonctions aux Extension
extensions ?
Oui
Non
Demande d'extension,
éviter modification
ã SAP AG 1999

n Avant de modifier le standard, vérifiez si vous ne pouvez pas obtenir le résultat voulu en utilisant le
Customizing ou le concept d'extension.
n Vous utilisez les extensions pour modifier le logiciel SAP, tout en évitant d'en réparer la copie. Vous
modifiez ou complétez des fonctions sans avoir à réparer le logiciel manuellement lors des montées
de version. Les différents types d'extension sont cités plus loin dans ce chapitre.
n Vous pouvez demander une extension dans le SAPNet - R/3 Frontend.

(C) SAP AG BC400 13-10


Extension de dialogues utilisateur

Menu 1 Menu 2 Menu 3


Fonction 1
Fonction 2
Fonct. client Exit de menu
Fonction 3

Zone x
Exit de dynpro
Zone y
Exit de zone

ã SAP AG 1999

n Vous apportez des extensions au système R/3 à différents niveaux :


- exit de menu : vous incluez des options de menu en différents point du système pour lancer des
programmes client ;
- exit de dynpro : vous utilisez les sous-écrans des dynpros pour afficher vos propres dynpros.
- exit de zone : vous incorporez des contrôles de zone supplémentaires.

(C) SAP AG BC400 13-11


Extensions : exemples

l Exits de programme :
n exits prédéfinis pour les programmes applicatifs.
l Extensions du Dictionnaire :
n append de table : vous permet d'ajouter des zones
supplémentaires à des tables standard ;
n informations sémantiques des éléments de données :
utilisation d'une extension pour modifier la description ou la
documentation d'une zone (F1, aide).

ã SAP AG 1999

n Voici les différents types d'extension de programme proposés aux clients :


n extension de programmes applicatifs : les développeurs SAP ont inclus des exits en certains points
des programmes applicatifs pour vous permettre d'appeler des sections de vos propres programmes ;
n extension d'objets du Dictionnaire :
- append de table : vous permet d'ajouter des zones supplémentaires à des tables standard ;
- documentation de zone : vous pouvez remplacer par vos propres textes la documentation qui
s'affiche lorsque l'utilisateur appuie sur F1. Les textes d'aide sont mémorisés avec l'élément de
données correspondant ;
- Vous pouvez remplacer les libellés de zone (texte court, moyen ou long pour la zone) par vos
propres textes.

(C) SAP AG BC400 13-12


Inscription des développeurs au SSCR

Repository Browser : Programme SAP ABAP


Objet de développement Traiter Saut Utilitaires Options Environnement

Système client
ZABAP

Ajouter développeur
Programme
Vous ne figurez pas dans la liste des
développeurs. Veuillez vous inscrire
dans le SAPNet - R/3 Frontend.
Une fois inscrit, vous recevrez
une clé d'accès.

Enregistrer modifications d'objets SAP


Inscription Traiter Sélection Système Aide

SAPNet
THIERRY
R/3 Utilisateur
Frontend Clé 07319180563617100772

ã SAP AG 1999

n Pour commencer à développer des programmes dans le système R/3, vous devez demander une clé
au SAPNet - R/3 Frontend. Vous êtes alors inscrit dans la liste des développeurs. La clé vous sera
demandée la première fois que vous créerez ou modifierez un objet du Repository. Le système
attribue des clés en fonction de la référence client et du nom de l'utilisateur.
n Pour vous inscrire :
- connectez-vous au SAPNet - R/3 Frontend. Si vous n'êtes pas un utilisateur du système,
demandez à un collègue de se connecter pour vous et de vous inscrire. (Toutefois, le nom de
votre collègue sera enregistré comme auteur de l'inscription) ;
- choisissez Inscription. L'écran Enregistrer modifications d'objets SAP apparaît ;.
- saisissez le nom d'utilisateur R/3. Le système affiche une clé de 20 caractères ;
- saisissez la clé de votre système R/3 soit manuellement, soit par couper-coller à partir du
SAPNet R/3 Frontend.
n SSCR signifie SAP Software Change Registration.

(C) SAP AG BC400 13-13


Logistique et modification du logiciel : résumé du chapitre

Vous êtes maintenant capable :


l d'affecter un projet au système R/3 en utilisant le
Workbench Organizer
l de décrire les options permettant de compléter et
de modifier les fonctions de programmes
existants

ã SAP AG 1999

(C) SAP AG BC400 13-14


Inscription des développeurs au SSCR

Repository Browser : Programme SAP ABAP


Objet de développement Traiter Saut Utilitaires Options Environnement

Système client
ZABAP

Ajouter développeur
Programme
Vous ne figurez pas dans la liste des
développeurs. Veuillez vous inscrire
dans le SAPNet - R/3 Frontend.
Une fois inscrit, vous recevrez
une clé d'accès.

Enregistrer modifications d'objets SAP


Inscription Traiter Sélection Système Aide

SAPNet
THIERRY
R/3 Utilisateur
Frontend Clé 07319180563617100772

ã SAP AG 1999

n Pour commencer à développer des programmes dans le système R/3, vous devez demander une clé
au SAPNet - R/3 Frontend. Vous êtes alors inscrit dans la liste des développeurs. La clé vous sera
demandée la première fois que vous créerez ou modifierez un objet du Repository. Le système
attribue des clés en fonction de la référence client et du nom de l'utilisateur.
n Pour vous inscrire :
- connectez-vous au SAPNet - R/3 Frontend. Si vous n'êtes pas un utilisateur du système,
demandez à un collègue de se connecter pour vous et de vous inscrire. (Toutefois, le nom de
votre collègue sera enregistré comme auteur de l'inscription) ;
- choisissez Inscription. L'écran Enregistrer modifications d'objets SAP apparaît ;.
- saisissez le nom d'utilisateur R/3. Le système affiche une clé de 20 caractères ;
- saisissez la clé de votre système R/3 soit manuellement, soit par couper-coller à partir du
SAPNet R/3 Frontend.
n SSCR signifie SAP Software Change Registration.

(C) SAP AG BC400 13-15


Logistique et modification du logiciel : résumé du chapitre

Vous êtes maintenant capable :


l d'affecter un projet au système R/3 en utilisant le
Workbench Organizer
l de décrire les options permettant de compléter et
de modifier les fonctions de programmes
existants

ã SAP AG 1999

(C) SAP AG BC400 13-16


Annexes

l Cette section contient des informations


supplémentaires à utiliser à titre de référence.
l Ces informations ne font pas partie de la
version standard du cours.
l Il est donc possible que le formateur ne les
traite pas lors de la présentation du cours.

ã SAP AG 1999

(C) SAP AG BC400 14-1


Requêtes courantes dans le système d'information

? ?
Recherche par attribut Cas d'emploi

Afficher tous les objets de type X Afficher tous les objets de type X
avec attribut Y qui utilisent l'attribut Y

Informations sur
les tables et
leurs relations Objets modifiés
modifiés

Afficher tous les objets


Afficher toutes les zones
de type X qui ont été modifiés par
de table avec table de contrôle X
l'utilisateur Y en date du JJMMAA

ã SAP AG 1999
? ?

(C) SAP AG BC400 14-2


Vue d'ensemble : création de programmes

Affectation à
une classe de développement

Définition d'attributs Affectation à un projet

Éditeur

Objet de programme

ã SAP AG 1999

n Pour créer un nouveau programme, vous devez saisir tout d'abord des informations d'ordre
administratif.
n Les programmes doivent être affectés à une classe de développement spécifique. . Celle-ci classe le
programme logiquement. Vous le faites une fois pour toutes, lorsque vous créez l'objet du
Repository (la classe de développement sera à son tour affectée logiquement à la composante
appropriée).
n Vous devez aussi définir des attributs du programme. Parmi ceux-ci, le type de programme est
particulièrement important. Il détermine le mode d'exécution du programme dans un environnement
client/serveur R/3 si, par exemple, le texte source qui en résulte constitue un programme exécutable
ou un segment de code réutilisable.
n Enfin, un programme doit être affecté à un projet de Workbench Organizer (ordre de
modification). Celle-ci classe l'objet du Repository chronologiquement. Dès qu'un projet arrive à
son terme, vous affectez un programme à un nouveau projet.
n Vous éditez le programme uniquement après cette classification.

(C) SAP AG BC400 14-3


Imbrication de structures et de tables internes

ã SAP AG 1999

n Les types de structure contiennent d'autres types de structure ou de table.


n Les types de table contiennent éventuellement d'autres types de table ou de structure.
n Vous trouverez des informations sur la définition de types de table dans la documentation, au mot-
clé TYPES.

(C) SAP AG BC400 14-4


Groupes de types du Dictionnaire ABAP

TYPE-POOL Z400.
TYPES: z400_name_type(25) TYPE C,
BEGIN OF z400_flightrec_type,
... ,
END OF z400_flightrec_type.

ABAP
REPORT ... .
TYPE-POOLS z400.
DATA: name TYPE z400_name_type,
wa TYPE z400_flightrec_type.
... .

ã SAP AG 1999

n Vous définissez des types de données dans un type-pool du Dictionnaire ABAP, plutôt que dans un
programme ABAP.
n Le nom d'un groupe de types du Dictionnaire ABAP ne doit pas dépasser 5 caractères. Les noms des
types contenus dans le groupe de types <typepool> doivent commencer par <typepool>, suivi d'un
trait de soulignement.
n Dans les programmes ABAP, vous devez déclarer les types appartenant à un groupe de types par la
commande TYPE-POOLS.

(C) SAP AG BC400 14-5


PARAMETERS et TABLES

PA_CARR Compagnie
aérienne
Numéro de vol

Continuer

Transport de données

pa_carr
sdyn_conn
sdyn_conn

TABLES sdyn_conn.
PARAMETERS pa_carr LIKE spfli-carrid.

MOVE pa_carr TO sdyn_conn-carrid.


CALL SCREEN 100.

ã SAP AG 1999

n L'instruction PARAMETERS est un élément de langage déclaratif qui établit des zones internes dans
un état. Contrairement à ce qui se produit avec l'instruction DATA, les zones déclarées avec
PARAMETERS figurent sur l'écran de sélection pour la saisie.
n Avec l'instruction PARAMETERS, vous utilisez les options TYPE et LIKE, comme avec l'instruction
DATA.
n De même que vous utilisez DATA avec VALUE pour affecter une valeur initiale, vous spécifiez
l'option DEFAULT dans l'instruction PARAMETERS pour fixer la valeur par défaut de la zone. Cette
valeur est un littéral, une constante ou une zone système extraite lors du traitement de l'état (sy-
datum, par exemple).
n Servant d'interface vers l'écran pour toutes les zones, l'instruction TABLES déclare un objet de
données interne servant d'interface écran pour toutes les zones se référant au même objet du
Dictionnaire.
n L'instruction TABLES définit un espace de travail approprié dans votre programme ABAP pour les
données entrées dans un écran ou transférées du programme vers l'écran.

(C) SAP AG BC400 14-6


Effacement d'une table interne

Espace de travail <wa>


CLEAR <wa>.

Table interne <itab>


CARRID CONNID
AA 0017
CLEAR <itab>. LH 0400

ã SAP AG 1999

n Pour rétablir la valeur initiale du contenu d'un objet de données en fonction de son type, utilisez
l'instruction CLEAR.
n Les entrées de table interne sont du même type. Une seule instruction CLEAR suffit donc pour
effacer l'intégralité d'une table.
n CLEAR <wa> initialise l'espace de travail <wa>.

(C) SAP AG BC400 14-7


Récapitulatif des instructions déclaratives

Type
TYPES

Zone élémentaire, structure,


Table interne DATA

Constante
CONSTANTS

Paramètre de saisie
PARAMETERS

Espace de travail
TABLES

ã SAP AG 1999

n Jusqu'à présent, nous avons vu les instructions déclaratives suivantes :

TYPES Définition de types


DATA Définition de zones élémentaires, structures, et tables internes
CONSTANTS Définition de constantes
PARAMETERS Définition de paramètres de saisie
TABLES Définition d'espaces de travail

n Dans le chapitre Tables internes et dans la section Écrans de sélection du chapitre consacré aux
Dialogues, vous découvrirez une autre instruction déclarative : SELECT-OPTIONS Définition
d'options de sélection
n Pour afficher un récapitulatif complet des instructions déclaratives ABAP, cliquez sur le bouton de
commande "i" de l'Éditeur, puis choisissez Vue d'ensemble ABAP, Vue d'ensemble du langage
de programmation ABAP, Classification des mots-clés par type.

(C) SAP AG BC400 14-8


Conversion de type

Quand deux types sont compatibles, il n'y a pas de conversion

Deux types élémentaires sont compatibles quand


leur type et leur longueur (ainsi que leurs
décimales, dans le cas du type P), sont
identiques.

Deux types de structure sont compatibles quand ils


ont la même structure et que leurs composantes
sont compatibles.

Deux tables sont compatibles quand leurs types


de ligne sont compatibles.

Pour convertir un type non compatible, il faut qu'il existe une règle de
conversion définie
ã SAP AG 1999

n Si vous affectez un objet de données à un autre de type différent, ABAP effectue une conversion de
type, à condition qu'une règle de conversion ait été établie pour les types concernés.

(C) SAP AG BC400 14-9


Expressions logiques

... <zone> <opérateur>


<opérateur> <littéral> ...

... <zone1><opérateur>
<opérateur><zone2> ...

... <expression logique> AND <expression logique>


... <expression logique> OR <expression logique>
... NOT <expression logique> ...

Opérateur
Opérateur Signification

DATA: START TYPE D, EQ = Égal


SUM1 TYPE P, NE <> >< Différent
SUM2 TYPE P.
. GT > Supérieur
.
.
IF SUM2 GE 1000. GE >= => Supérieur ou égal
IF START IS INITIAL. LT < Inférieur
IF SUM1 GT SUM2 AND
SUM1 BETWEEN 0 AND 100. LE <= =< Inférieur ou égal
IF SUM1 = 1000 AND
( SUM2 LE 2000 OR BETWEEN f1 and f2 Intervalle
START IS INITIAL ).
IS INITIAL Valeur initiale
ã SAP AG 1999

n Pour relier des expressions logiques, utilisez AND, OR ou NOT.


n Vous imbriquez autant d'expressions entre parenthèses que vous le voulez. Les parenthèses
délimitant des sous-expressions comptent toujours pour un mot. Vous devez donc les faire précéder
et suivre d'un espace.
n Si vous comparez deux zones de type C de longueur différente, la zone la plus courte est rallongée
pour correspondre à la plus longue lors de la comparaison. Son extrémité droite est précédée
d'espaces.
n Il existe de nombreux autres opérateurs de comparaison de chaînes ou de bits. (Voir l'instruction IF
dans la documentation en ligne).

(C) SAP AG BC400 14-10


Boucles DO et WHILE

WHILE <expression logique>.


DO <n> TIMES. Instructions

Instructions ENDWHILE.

ENDDO.

WHILE COUNTER > 0.


.
.
.
SUBTRACT 1 FROM COUNTER.
ENDWHILE.
SY-INDEX Compteur de boucles

ã SAP AG 1999

n Les boucles DO et WHILE sont également utilisées dans ABAP.


n SY-INDEX est le compteur de boucles pour les commandes des boucles DO et WHILE. La valeur 1
est affectée à SY-INDEX au premier passage de boucle et augmente de 1 à chaque nouveau passage.
n Boucles DO :
n le paramètre <n> TIMES est facultatif. Si vous ne l'indiquez pas, vous devez spécifier dans la boucle
une condition d'interruption (voir l'instruction EXIT).
- Vous ne pouvez pas modifier le nombre de passages de boucle dans la zone sy-index ni dans le
compteur de boucles de DO ... ENDDO.
n Boucles WHILE :
n la séquence d'instructions s'exécute tant que l'expression logique est vraie.
- Vous ne pouvez pas modifier le nombre de passages de boucles par la zone sy-index de la
boucle WHILE... ENDWHILE.

(C) SAP AG BC400 14-11


CHECK et EXIT

CHECK <expression logique>. EXIT.

WHILE COUNTER GT 0. DO.


Instructions Instructions

CHECK sy-subrc = 0. IF counter GE 10.


Instructions EXIT.
ENDIF.
ENDWHILE. Instructions
counter = counter + 1.
ENDDO.

ã SAP AG 1999

n Vous utilisez deux instructions pour le traitement de boucles :


n CHECK <expression logique> : si l'expression logique est fausse, un saut est effectué à l'intégration
suivante de la boucle. Toutes les instructions entre CHECK et ENDDO|ENDWHILE sont ignorées. Si
l'expression logique est vraie, l'instruction CHECK est sans effet.
n Voir aussi le mot-clé CONTINUE dans l'index.
n Si vous insérez des instructions EXIT dans une boucle, le système quitte la boucle.
n Pour plus d'informations sur le fonctionnement de ces deux instructions en dehors du traitement de
boucles, reportez-vous à l'index, aux mots-clés CHECK et EXIT, ou à l'appendice.

(C) SAP AG BC400 14-12


Conditions d'interruption 2

EXIT CHECK :
Si condition logique non
remplie, ...

Boucles : Terminer boucle Aller au prochain


en cours passage de boucle
WHILE, DO,
SELECT, LOOP

Événements : Fin de
programme,
START-OF-SELECTION la liste s'affiche
GET
END-OF-SELECTION

Événements :
Aller à la fin du bloc
INITIALIZATION
AT SELECTION-SCREEN ...
de traitement
...

Sous-programmes FORM
ã SAP AG 1999

n Lorsque la condition logique suivant le mot-clé n'est pas remplie, utilisez en dehors de la boucle
l'instruction CHECK <condition logique> de ABAP pour terminer prématurément un bloc de
traitement.
n Utilisez aussi l'instruction EXIT en dehors de la boucle pour terminer un bloc de traitement en cours.
Cependant, plusieurs événements font exception à cette règle. Terminez prématurément votre
programme par l'instruction EXIT, incluse dans leurs blocs de temps. Dans ce cas, une liste s'affiche
immédiatement après le traitement de l'instruction EXIT.

(C) SAP AG BC400 14-13


Includes : programmes de type I

Programme : <nom du programme> Include : <nom-include>


(Type de programme : I)
REPORT <nom du programme>.
:
INCLUDE <nom-include>. Instructions ABAP

ã SAP AG 1999

(C) SAP AG BC400 14-14


Includes TOP

Création de programme
Repository Browser :
Programme <nom>
Création de programme
avec TOP INCL.

Programme : <nom>TOP REPORT <nom>.

Type de programme : I TYPES: ...


DATA: ...

Programme : <nom> INCLUDE <nom>TOP.

Type de programme : 1 START-OF-SELECTION.


:

ã SAP AG 1999

(C) SAP AG BC400 14-15


Includes standard pour groupes de fonctions

Groupe de fonctions

BC400 Groupe de fonctions BC400


Gr. de fonctions de types d'objet
Modules de fonction
BC400_FREE_SEATS Calcule le nombre de places non réservées
BC400_PERCENTAGE Détermine le pourcentage
Sous-programmes
Includes
LBC400TOP Définition de données globales
LBC400F01 Sous-programmes
LBC400U01 Calcule le nombre de places non réservées
LBC400U02 Détermine le pourcentage
LBC400UXX

ã SAP AG 1999

(C) SAP AG BC400 14-16


Rôle stratégique des modules de fonction

Systèmes R/3 par satellite Internet /


Intranet

Développement spécifique
client et partenaires

Modules de RFC
fonction

Parallèle
asynchrone Encapsulation:
• fonctions
• dialogues

ã SAP AG 1999

n Vous pouvez appeler les modules de fonction soit de manière asynchrone, soit en parallèle.
n Vous pouvez y encapsuler des dialogues utilisateurs.
n Vous pouvez créer des modules de fonction que vous appellerez en Remote. Ceux-ci peuvent alors
être lancés de manière externe:
n à partir du World Wide Web, pour accéder à un système R/3 ;
n à partir d'un autre système R/3 ;
n à partir de vos propres programmes (Visual Basic, JAVA ou C++, par exemple).

(C) SAP AG BC400 14-17


Traitement des exceptions

Exceptions

Exceptions FUNCTION bc400_free_seats.


OCC_GT_MAX
MAX_EQ_0 .
.
.

IF seatsmax = 0.
RAISE max_eq_0.
Définition d'une exception ELSEIF seatsocc > seatsmax.
RAISE occ_gt_max.
ENDIF.
.
.
Levée d'une exception .

ENDFUNCTION.
ã SAP AG 1999

n Pour anticiper d'éventuelles erreurs et éviter qu'elles ne se répercutent sur l'exécution, affectez-leur
un nom dans l'interface du module de fonction. Ensuite, déclenchez-les à partir du code de
programme par l'instruction RAISE. Chaque programme appelant le module interprétera ces
exceptions en testant sy-subrc.
n Dans un module de fonction, vous pouvez également garantir l'affichage d'un message d'erreur en
cas d'exception, même si elle n'est pas traitée explicitement par le programme appelant. Pour plus
d'informations, reportez-vous à la documentation, au mot-clé MESSAGE ... RAISING.

(C) SAP AG BC400 14-18


Exceptions

REPORT.
DATA: free_seats LIKE sflight-seatsmax.
PARAMETERS: pa_occ LIKE sflight-seatsocc,
pa_max LIKE sflight-seatsmax.
START-OF-SELECTION.
CALL FUNCTION 'BC400_FREE_SEATS'
EXPORTING
seatsmax = pa_max
seatsocc = pa_occ
IMPORTING
seatsfree = free_seats
EXCEPTIONS
occ_gt_max = 1
max_eq_0 = 2
others = 3.
CASE sy-subrc.
WHEN 1.
WRITE text-ex1.
WHEN 2.
WRITE text-ex2.
WHEN 3.
WRITE text-oth.
ENDCASE.
ã SAP AG 1999

(C) SAP AG BC400 14-19


Couleurs/icônes/symboles

WRITE <objet de données> <option> .

REPORT sapbc400udd_example_1a.
INCLUDE <LISTE>.
:
WRITE: / wa_spfli-carrid COLOR col_key,
iicon_date AS ICON,

Couleurs dans les listes

Vol Départ Destination

AA 0017 NEW YORK SAN FRANCISCO


LH 0400 PARIS NEW YORK
LH 0402 FRANCFORT BERLIN

Date de création : 01.01.1998


Créé par : WITTMANN

ã SAP AG 1999

n Une instruction WRITE peut comporter plusieurs attributs d'affichage de liste. Un de ces attributs est
la couleur, qui peut s'adapter par l'option de formatage COLOR <n>. Vous avez le choix entre sept
couleurs d'arrière-plan, activées soit par une valeur numérique, soit par un nom symbolique
correspondant à l'endroit où ils apparaissent dans une liste standard.
0 col_backgroundArrière-plan
1 col_heading En-têtes
2 col_normal Saisies de liste
3 col_total Totaux
4 col_keyColonnes-clé
5 col_positive Valeurs seuils positives
6 col_negative Valeurs seuils négatives
7 col_group Niveaux de contrôle
n Pour créer des listes en couleur, suivez les instructions fournies par SAP. Vous trouverez des
exemples dans la transaction LIBS.
n Pour ajouter des icônes dans une liste, utilisez l'instruction WRITE avec l'option AS ICON. Pour
utiliser cette option, insérez au préalable l'include <LIST> dans votre programme.
n Vous trouverez un récapitulatif de toutes les icônes disponibles soit dans la documentation, au mot-
clé WRITE, soit dans la structure de l'instruction WRITE.

(C) SAP AG BC400 14-20


Transfert de données externes

Serveur
externe

Fichiers Interfaces /
séquentiels contrôles
SAP
ã SAP AG 1999

n Lorsque vous transférez des données entre un autre système SAP ou un système externe et votre
propre système SAP, vous devez préserver leur intégrité.
n Vous devez donc soumettre ces transferts aux mêmes contrôles que les transferts effectués en mode
dialogué.
n Dans les transactions, les contrôles en mode dialogué sont très exhaustifs et, pour partie, inter-
applications : il vous est donc très difficile d'en programmer vous-même.
n Par conséquent, il vaut mieux effectuer le contrôle de transactions à l'aide des mêmes contrôles que
dans le mode dialogué de SAP. Ceci signifie, dans la pratique, que les transactions SAP servent
également au transfert de données.
n Les techniques utilisées pour le transfert de données externes s'appellent "processus de batch input".
n SAP offre des procédures de transfert de données externes standardisées pour de nombreux domaines
de R/3. Ces procédures utilisent les techniques de programmation batch input, call transaction et
direct input. Pour accéder aux procédures standard de transfert de données SAP, utilisez l'atelier
de reprise des données (transaction SXDA). Si aucune procédure SAP n'est possible, programmez
des transferts au cas par cas en utilisant le batch input ou la call transaction.

(C) SAP AG BC400 14-21


Transfert de données externes

BATCH-INPUT : CALL TRANSACTION : DIRECT INPUT :

Fichier Fichier Fichier


séquentiel séquentiel séquentiel

Table
Table BDC
BDC Table
Table BDC
BDC

Fichier Programme
d'attente CALL de transfert
TRANSACTION ABAP
Fonction
Fonction de
de batch
batch input
input

Fonction
Fonction d'application
d'application Fonction
Fonction d'application
d'application

Base de Base de Base de


données données données
SAP SAP SAP
ã SAP AG 1999

(C) SAP AG BC400 14-22


Techniques avancées : séquencement d'écrans dynamiques

Attributs d'écran Attributs d'écran

Numéro d'écran 100 Numéro d'écran 200


Écran suivant 100 Écran suivant 200

PBO 100 PAI 200 PBO 200 PAI

0 0
CALL SCREEN 100

ã SAP AG 1999

n Utilisez cette technique pour programmer des clusters d'écrans intégrés, sans devoir revenir
continuellement au code source et les appeler par CALL SCREEN.

(C) SAP AG BC400 14-23


Techniques avancées : mise à jour

Étape de dialogue
PBO PAI PBO PAI PBO PAI

Ordre Ordre Ordre Log


table
UPDATE INSERT DELETE
Ordre UPDATE

Ordre INSERT

Ordre DELETE

COMMIT WORK
Processus de mise à jour
UPDATE INSERT DELETE

Processus de base
de données

ã SAP AG 1999

n La mise à jour est un autre moyen de regrouper les modifications d'une base de données à la fin d'une
LUW SAP. Au lieu de transférer les mises à jour directement dans la base, vous saisissez des ordres
de mise à jour dans une log table.
n L'étape "dialogue" de la LUW SAP se termine quand le système atteint l'instruction COMMIT WORK.
Le système R/3 déclenche alors un processus de travail spécial, appelé processus de travail de mise à
jour, qui traite les ordres enregistrés dans la table. La LUW SAP s'achève lorsque la mise à jour de la
base est terminée.
n Les phases "dialogue" et "mise à jour" de la LUW SAP peuvent se dérouler de façon synchrone ou
asynchrone.
n L'avantage de la mise à jour par rapport aux regroupements effectués dans des sous-programmes est
que vous saisissez vos ordres dans la table à tout moment. Cela vous évite de les conserver dans la
zone du programme. Son inconvénient est qu'elle offre moins de performances.
n La mise à jour asynchrone convient lorsque le temps de réponse est un facteur important et que les
modifications sont suffisamment complexes pour justifier l'investissement lié à l'utilisation de la log
table.
n La mise à jour synchrone convient lorsque vous avez immédiatement besoin des données modifiées
et que les modifications sont suffisamment complexes pour justifier l'investissement lié à l'utilisation
de la log table.

(C) SAP AG BC400 14-24

Vous aimerez peut-être aussi