437
BC400 Introduction à ABAP Workbench : concept et outils BC400 R/3 System Release 46B 17.08.2000 0

BC400 Introduction à ABAP Workbench : concept et outilsromfou1.free.fr/BC400.pdf · BC620, BC621 Niveau 2 Niveau 3 ABAP Objects - Programmation orientée objets dans R/3 BC404 3

Embed Size (px)

Citation preview

BC400 Introduction à ABAP Workbench :concept et outils

BC400

R/3 SystemRelease 46B17.08.2000

0

(C) SAP AG BC400 0-1

� SAP AG 1999

BC400 Introduction à ABAP Workbench : conceptet outils

� SAP AG 1999

BC400BC400Introduction Introduction ààABAP Workbench :ABAP Workbench :Concept et outilsConcept et outils

� Système R/3

� Version 4.6A

� Novembre 1999

� Numéro d'article 5003 4914

(C) SAP AG BC400 0-2

� SAP AG 1999

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

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

Tous droits réservés.

Copyright

� Marques déposées :

� 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.

� Lotus ScreenCam ® est une marque déposée de Lotus Development Corporation.

� Vivo ® et VivoActive ® sont des marques déposées de RealNetworks, Inc.

� ARIS Toolset ® est une marque déposée de IDS Prof. Scheer GmbH, Saarbruck

� Adobe ® et Acrobat ® sont des marques déposées de Adobe Systems Inc.

� TouchSend Index ® est une marque déposée de TouchSend Corporation.

� Visio ® est une marque déposée de Visio Corporation.

� IBM ®, OS/2 ®, DB2/6000 ® et AIX ® sont des marques déposées de IBM Corporation.

� Indeo ® est une marque déposée de Intel Corporation.

� Netscape Navigator ®, et Netscape Communicator ® sont des marques déposées de NetscapeCommunications, Inc.

� OSF/Motif ® est une marque déposée de Open Software Foundation.

� ORACLE ® est une marque déposée de ORACLE Corporation, California, USA.

� INFORMIX ®-OnLine for SAP est une marque déposée de Informix Software Incorporated.

� UNIX ® et X/Open ® sont des marques déposées de SCO Santa Cruz Operation.

� ADABAS ® est une marque déposée de Software AG

� 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, SAPArchiveLink, SAP Business Workflow, et ALE/WEB sont des marques ou marques déposées de

(C) SAP AG BC400 0-3

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.

� Les autres produits, services, logos, ou noms de marques sont des marques ou marques déposées deleurs propriétaires respectifs.

(C) SAP AG BC400 0-4

� SAP AG 1999

ABAP Workbench

Introduction àABAP Workbench

BC400 5 jours

Gestion des projets dedéveloppement ABAP

MBC40 2 jours

ABAP Workbench -Interface de données

BC420 5 jours

Reporting dans ABAPWorkbench

BC405 3 jours

Dictionnaire de donnéesABAP

BC430 2 jours

Edition et impression deformulaires dansSAPscripts

BC460 3 jours

CATT - Test Workbench etComputer Aided Test Tool

CA610 2 jours

Analyses desperformancesABAP

BC490 3 joursTechniques deprogrammation ABAP

BC402 3 jours

Programmation dedialogues à l'aide descontrôles EnjoySAP

BC412 2 jours

Développement desapplications sur Internet

BC440 5 jours

Programmation interactive

BC410 5 jours

ABAP Workbench -Interfaces decommunication

BC415 2 jours

Programmation desmises à jour de la basede données

BC414 2 jours

Extensions etmodifications

BC425 3 jours

Cours supplémentairesrecommandés : BusinessProcess TechnologiesCA925, CA926, CA927BC095 (Technologied'intégration) BC619 (ALE),BC620, BC621

Niveau 3Niveau 2

ABAP Objects -Programmation orientéeobjets dans R/3

BC404 3 jours

(C) SAP AG BC400 0-5

� SAP AG 1999

Connaissances requises

� Connaissances en programmation

� Cours de formation SAP 50 : technologie de base

(C) SAP AG BC400 0-6

� SAP AG 1999

� Participants :� Membres du projet

� Durée : 5 jours

À qui s'adresse ce cours ?

Notes aux participants

� Les supports de cours ne constituent pas un programme d'auto-formation. Ils sont conçusuniquement dans le but de compléter les explications fournies par l'animateur. Un espace estlaissé à votre disposition sur ces supports pour vous permettre de prendre des notes.

� Vous n'aurez probablement pas le temps pendant le cours de terminer tous les exercices. Lesexercices fournissent des exemples complémentaires aux sujets discutés pendant ce cours. Vouspouvez également les utiliser comme aide pour développer vos connaissances après la fin du cours.

(C) SAP AG BC400 1-1

� SAP AG 1999

Concept et outils de ABAP Workbench : contenu

� Objectif global du cours

� Détail des objectifs

� Table des matières

� Synoptique

� Scénario de gestion

� Introduction au cours

(C) SAP AG BC400 1-2

� SAP AG 1999

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

Objectif du cours

� de comprendre les diverses applications d'ABAPWorkbench, notamment

� les différentes méthodes qui facilitent le dialogueavec l'utilisateur et

� les modalités de dialogue avec la base de données

(C) SAP AG BC400 1-3

� SAP AG 1999

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

Objectifs du cours

� de créer un programme ABAP comprenant desdialogues utilisateur et des dialogues base dedonnées

� de décrire divers objets de développement (objetsdu Repository) et leur mode d'emploi

� de créer des exemples simples d'objets duRepository introduits dans le cours à l'aide desoutils adéquats d'ABAP Workbench appropriés àchaque cas

(C) SAP AG BC400 1-4

� SAP AG 1999

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

Table des matières

(C) SAP AG BC400 1-5

� SAP AG 1999

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

Table des matières

(C) SAP AG BC400 1-6

� SAP AG 1999

Ce cours vous permettra de développerplusieurs programmes destinés à assisterdes agences de voyage.Certains de leurs besoins types nécessitent :

� d'établir des connexions de vol à des dates précises� de procéder à des réservations sur des vols spécifiques� de déterminer des informations complémentaires de vol, comme

� le prix� la capacité.

Ville de départ

Aéroport de départ

Destination

Ville de destination

Scénario de gestion

(C) SAP AG BC400 2-1

� SAP AG 1999

� Architecture client / serveur

� Programme type avec affichage de données sous formede liste

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

� Quelles sont les composantes du programme ABAPdéveloppées et dans quels chapitres ?

Contenu :

Déroulement du programme dans un programme ABAP

(C) SAP AG BC400 2-2

� SAP AG 1999

Synthèse

Architecture client / serveurArchitecture client / serveur

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

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

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

et dans quels chapitres ?et dans quels chapitres ?

(C) SAP AG BC400 2-3

� SAP AG 1999

Architecture client / serveur

PrésentationServeurNiveau

ApplicationServeurNiveau

Base de données

Répartiteur

Processus de travail

SAPGUI SAPGUI SAPGUI SAPGUI SAPGUI SAPGUI

Processusde travail

Processus de travail

Processus de travail

Répartiteur

Processus de travail

Processus de travail

Processus de travail

Processus de travail

� Le système R/3 a une architecture logicielle modulaire qui suit les principes orientés logicielclient/serveur.

� 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.

� Le niveau le plus bas est le niveau base de données. Les données y sont gérées grâce à un systèmede gestion de base de données relationnelle (RDBMS). Outre les données de base et les données demouvement, les programmes et les métadonnées qui décrivent le système R/3 y sont égalementstockés et gérés.

� Les programmes ABAP, qui comprennent aussi bien les applications fournies par SAP que celles quevous développez vous-même, sont exécutés au niveau application. Ils exploitent des donnéesappelées au niveau base de données et y stockent de nouvelles informations.

� Le troisième niveau est le niveau présentation (SAPGUI). Ce niveau comprend l'interfaceutilisateur par lequel un utilisateur final peut accéder à une application, entrer de nouvelles donnéeset recevoir les résultats d'un processus de travail.

� 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 unseul ordinateur ou sur des ordinateurs distincts. Dans le sens horizontal, les composantes des niveauxfonctionnel et présentation peuvent être réparties sur un nombre x de stations. La distributionhorizontale des composantes des bases de données dépend toutefois du type de base installé.

(C) SAP AG BC400 2-4

� SAP AG 1999

Vue orientée utilisateur

PrésentationServeurNiveau

ApplicationServeurNiveau

Base de données

Processus de travail

Programme ABAP

� Ce graphique peut être simplifié pour la plupart des sujets discutés pendant le cours. L'interactionentre les programmes ABAP et leurs utilisateurs sera notre principal intérêt pendant ce cours. Lacompréhension de la conception d'un programme ABAP passe avant celle des processus exactsimpliqués dans la répartition d'utilisateurs sur un serveur d'application. Nous allons donc travailleravec 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.

� Les programmes ABAP sont traitées sur le serveur d'application. La conception de dialoguesutilisateur et de dialogues base de données est dès lors de grande importance lors de l'écriture deprogrammes applicatifs.

(C) SAP AG BC400 2-5

� SAP AG 1999

Déroulement du programme : que voit l'utilisateur

Temps

Écran de sélection

Liste

Boî

te n

oire

Écran

� L'utilisateur s'intéresse principalement à la façon dont l'opération se déroule et dont les donnéespeuvent être introduites et affichées depuis l'opération. Les détails techniques, comme savoir si unseul programme est exécuté ou si de multiples programmes sont appelés de manière implicite, ou lesdifférences techniques entre les types d'écran affichés, sont généralement moins importants pourl'utilisateur. L'utilisateur ne doit pas nécessairement connaître le déroulement précis du programmeABAP sur le serveur d'application. Le système R/3 comme les serveurs d'application et la base dedonnées sont représentés par une boîte noire pour l'utilisateur.

� 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 dedialogue utilisateur convient le mieux aux besoins de l'utilisateur.

(C) SAP AG BC400 2-6

� SAP AG 1999

Interaction entre les niveaux du serveur

Lancementdu programme

Runtime system ABAP

Programme ABAP

Bloc detraitementABAP

Bloc detraitementABAP

Table debase de données

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

(C) SAP AG BC400 2-7

� SAP AG 1999

Synthèse

Architecture client / serveurArchitecture client / serveur

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

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

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

dans quels chapitres ?dans quels chapitres ?

� Dans cette partie du chapitre, l'utilisateur a choisi de lancer un programme là où un identificateur decompagnie aérienne peut être introduit sur l'écran de sélection initial. Le programme utilise par lasuite ces informations pour retrouver le "nom complet de la compagnie aérienne" et la "devise localede 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-8

� SAP AG 1999

Lancementdu programme

Programme type 1 : lancement du programme

Table debase de données

Repository

Temps

� 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-9

� SAP AG 1999 Temps

Lancementdu programme

Le système charge le contexte du programme

Objets de données

Bloc de traitementABAP

Runtime system ABAP

Programme ABAP

Écran de sélection

Table debase de données

Repository

� Si l'utilisateur a lancé un programme avec une action utilisateur, le contexte du programme est alorschargé sur le serveur d'application. Le contexte du programme contient des zones de mémoire pourles variables et les objets de données complexes, les informations d'écrans pour dialogues utilisateuret les blocs de traitement ABAP. Le runtime system reçoit les informations de programme duRepository, qui représente une partie spécifique de la base de données.

� Le programme type a un écran de sélection comme dialogue utilisateur, une variable et une structurecomme objets de données et un bloc de traitement ABAP. La liste utilisée pour afficher les donnéesest créée de manière dynamique au moment de l'exécution.

� Le déroulement ultérieur du programme est contrôlé par le runtime system ABAP.

(C) SAP AG BC400 2-10

� SAP AG 1999 Temps

Lancementdu programme

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

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAP

Table debase de données

� Comme le programme contient un écran de sélection, le runtime system ABAP l'envoie au serveurde présentation au début du traitement du programme. Le serveur de présentation contrôle ledéroulement du programme aussi longtemps que l'utilisateur remplit les zones de saisie.

� Les écrans de sélection permettent aux utilisateurs d'entrer des critères de sélection requis par leprogramme.

(C) SAP AG BC400 2-11

� SAP AG 1999 Temps

Lancementdu programme

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

Objets de données

Bloc de traitementABAP

Runtime system ABAP

Programme ABAP

Table debase de données

� Dès que l'utilisateur a terminé d'introduire des données dans l'écran de sélection, il ou elle peut lancerun traitement supplémentaire en sélectionnant "Exécuter". Chaque saisie de données de l'écran desélection est automatiquement placée dans son objet de données correspondant du programme et leruntime system ABAP reprend le contrôle du traitement. Notre programme type contient un seul blocde traitement ABAP. Le runtime system déclenche un traitement séquentiel de ce bloc de traitementABAP.

� Si les entrées effectuées par l'utilisateur ne possèdent pas le type correct, un message d'erreurapparaît alors automatiquement. L'utilisateur doit corriger ses entrées.

(C) SAP AG BC400 2-12

� SAP AG 1999 Temps

Lancementdu programme

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

Table debase de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAP

Objets de données

� 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-13

� SAP AG 1999 Temps

Lancementdu programme

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

Table debase de données

Objets de données

Bloc de traitementABAP

Runtime system ABAP

Programme ABAP

� La base de données renvoie au programme l'enregistrement de données demandé et le runtimesystem 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 contientdes variables pour toutes les zones requises par la base de données.

(C) SAP AG BC400 2-14

� SAP AG 1999 Temps

Lancementdu programme

Le runtime system envoie une liste

Table debase de données

Objets de données

Bloc de traitementABAP

Runtime system ABAP

Programme ABAP

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

(C) SAP AG BC400 2-15

� SAP AG 1999

Synthèse

Architecture client / serveurArchitecture client / serveur

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

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

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

et dans quels chapitres ? et dans quels chapitres ?

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

(C) SAP AG BC400 2-16

� SAP AG 1999 Temps

Programme type 2 : lancement du programme

Table debase de données

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAPLancementdu programme Repository

Écran

� 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-17

� SAP AG 1999 Temps

Table debase de données

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAPLancementdu programme

Écran

Le runtime system ABAP envoie un écran

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

(C) SAP AG BC400 2-18

� SAP AG 1999 Temps

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

Table debase de données

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAPLancementdu programme

Écran

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

(C) SAP AG BC400 2-19

� SAP AG 1999 Temps

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

Table debase de données

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAPLancementdu programme

Écran

� 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-20

� SAP AG 1999 Temps

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

Table debase de données

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAPLancementdu programme

Écran

� La base de données renvoie au programme l'enregistrement de données demandé et le runtimesystem 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 contientdes variables pour toutes les zones requises par la base de données.

(C) SAP AG BC400 2-21

� SAP AG 1999

Écran

Temps

Le programme appelle l'écran

Table debase de données

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAP

ProcessBeforeOutput

Lancementdu programme

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

(C) SAP AG BC400 2-22

� SAP AG 1999 Temps

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

Table debase de données

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAPLancementdu programme

Écran

ProcessBeforeOutput

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

(C) SAP AG BC400 2-23

� SAP AG 1999 Temps

L'utilisateur exécute une action utilisateur

Table debase de données

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAPLancementdu programme

Écran

ProcessBeforeOutput

ProcessAfterInput

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

(C) SAP AG BC400 2-24

� SAP AG 1999 Temps

Le traitement du bloc de traitement ABAP recommence

Table debase de données

Objets de données

Bloc de traitementABAP

Runtime system ABAP

Programme ABAPLancementdu programme

Écran

ProcessBeforeOutput

ProcessAfterInput

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

(C) SAP AG BC400 2-25

� SAP AG 1999

Synthèse

Architecture client / serveurArchitecture client / serveur

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

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

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

et dans quels chapitres ?et dans quels chapitres ?

(C) SAP AG BC400 2-26

� SAP AG 1999

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

Table des matières

(C) SAP AG BC400 2-27

� SAP AG 1999

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

Table des matières

(C) SAP AG BC400 3-1

� SAP AG 1999

� Repository et Workbench

� Analyse d'un programme existant

� Premier projet : adapter une copie d'un programmeexistant pour remplir des besoins spécifiques

Contenu :

Introduction à ABAP Workbench

(C) SAP AG BC400 3-2

� SAP AG 1999

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

Introduction à ABAP Workbench : objectifs

� d'utiliser les différents types de navigationdisponibles d'ABAP Workbench pour analyser unprogramme existant

� d'apporter de simples modifications auxdialogues utilisateur d'un programme existant enutilisant les outils Éditeur et Screen Painter ABAP

(C) SAP AG BC400 3-3

� SAP AG 1999

Synthèse : Introduction à ABAP Workbench

Repository et WorkbenchRepository et Workbench

Analyser un programme existantAnalyser un programme existant

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

(C) SAP AG BC400 3-4

� SAP AG 1999

Repository R/3

PrésentationServeurNiveau

ApplicationServeurNiveau

Base de données

Programme ABAP

Repository

Indépendant du mandant Dépendant du mandant

Tables de customizingTables applicatives

� La base de données, comme le Repository, contient des tables de customizing et des tablesapplicatives qui sont généralement dépendant mandant.

� Le Repository contient tous les objets de développement, par exemple, des programmes, desdéfinitions de tables de base de données et de types globaux. Les objets de développement sont parconséquent aussi connus comme objets du Repository. Les objets du Repository ne sont pasdépendant mandant.. Vous pouvez donc les visualiser et les utiliser pour tout mandant.

(C) SAP AG BC400 3-5

� SAP AG 1999

Structure du Repository

M MMM

Classes de développement

par BC400-00

Modules de fonction

Programmes

Tables

. . .

FI HR

MM

SD

MM

WM

Cust.

� Tous les objets de développement créés avec les outils de développement de ABAP Workbench sontclassés comme objets du repository et sont stockés de manière centrale dans le Repository R/3..

� Le Repository R/3 est une partie spéciale de la base de données centrale du système SAP.

� Le Repository s'organise selon l'application. Chaque application est encore subdivisée de façonlogique en classes de développement.

� Les objets du Repository sont souvent composés de sous-objets qui sont eux-mêmes des objets duRepository.

� Chaque objet du Repository doit être affecté à une classe de développement lors de sa création.

� Vous pouvez utiliser le système d'information du Repository pour chercher des objets duRepository selon plusieurs critères.

(C) SAP AG BC400 3-6

� SAP AG 1999

SAP

Hiérarchie des applications SAP

Hiérarchie des applications

Composantes inter-applicationsGestion comptable - GénéralitésComptabilité financière ... Comptabilité financière 'système de base' FBAS ... FI-GL Gestion comptable grand livreFI-LC Consolidation...TrésorerieContrôle de gestion

CAACFI

TRCO...

����+����+����+

����+����+

����+����+

Composantes applicativesClasse de développementSous-arbre sélectionné

Système d'information

����+

� Vous pouvez visualiser la structure du Repository dans la hiérarchie des applications. Vous pouveznaviguer vers la hiérarchie des applications à partir de l'écran initial en utilisant Outils-> ABAPWorkbench -> Synthèse-> Hiérarchie des applications. (Transaction SE81).

� 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 sontaffectées à cette composante.

� Vous pouvez sélectionner un sous-arbre et naviguer à partir de la hiérarchie des applications vers lesystème d'information du Repository. Le système collecte ensuite toutes les classes dedéveloppement pour le sous-arbre sélectionné et les transfère vers le système d'information.

(C) SAP AG BC400 3-7

� SAP AG 1999

Système d'information du Repository

Système d'information du Repository Business Engineering Dictionnaire ABAP

Objets de baseTables de base de données

Vues Éléments de données

StructuresTypes 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.

� Vous pouvez utiliser le système d'information du Repository pour chercher des objets spécifiques duRepository. Des critères de recherche sont disponibles pour les différents types d'objets duRepository.

� 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-8

� SAP AG 1999

Screen PainterScreen Painter

Dictionnaire Dictionnaire ABAPABAP

ÉditeurÉditeur ABAP ABAP

ObjectNavigator

MenuMenu Painter Painter

Outils de ABAP Workbench

DDébogueurébogueur

GGénénérateur de classesérateur de classes

FI HR

MM

SD

MM

WM

Cust.

G Génénérateur de érateur de modules de modules de fonctionfonction

� ABAP Workbench contient différents outils pour le traitement d'objets du Repository. Ces outilsvous fournissent une large gamme d'assistance qui couvre l'ensemble du cycle de développement dulogiciel.Les outils les plus importants à la création et à l'édition d'objets du Repository sont :

� Éditeur ABAP pour l'écriture et l'édition du code de programme

� Dictionnaire ABAP pour le traitement des définitions de tables de base de données et larécupération de types globaux

� 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)

� Screen Painter pour la conception d'écrans (programmes dynamiques) de dialogues utilisateur

� 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)

� Générateur de classes pour l'affichage et le traitement des classes centrales

� 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 sousforme d'arborescence de tous les objets d'une classe de développement ou d'un programme.

(C) SAP AG BC400 3-9

� SAP AG 1999

Structure d'écran dans Object Navigator

Domaine pour l'affichaged'une liste d'objetssous la forme d'unehiérarchie

Fermer navigateur

Domaine pour l'affichage ou le traitement d'un objet du Repository

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

Clic du boutondroit de la souris Menu contextuel Menu contextuel

Afficher liste d'objets

Clic du boutondroit de la souris

� 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.

� Vous pouvez masquer le domaine de hiérarchie en utilisant le bouton de commande "Fermernavigateur".

� Vous pouvez afficher la liste d'objets pour l'objet actuellement affiché dans la fenêtre d'objets enutilisant l'icône "Liste d'objets".

� Vous pouvez séletionner des fonctions du menu contextuel dans les deux domaines d'écran. Vouspouvez uniquement sélectionner les fonctions qui correspondent à l'affichage ou le traitement del'objet sur lequel le curseur est positionné. Cliquez sur le bouton droit de la souris pour afficher lemenu contextuel. (Cliquez sur le bouton de gauche si vous avez paramétré votre souris pour lesgauchers).

(C) SAP AG BC400 3-10

� SAP AG 1999

Fonctions de navigation du domaine de hiérarchie

Liste d'objets supérieure

Favoris Ajouter Traiter Programmes HistoriqueActualiser liste d'objets

Types d'objets de programmeObjets du dictionnaireProgrammesSAPBC400WBD_GETTING_STASAPBC400WBT_GETTING_STAGroupes de fonctionsBC400ClassesCL_BC400

BC400

classe de développement

BC400

Hiérarchie des applications Classe de développementProgrammeGroupe de fonctionsClasseObjets locaux

Liste d'objets précédente

Liste d'objets suivante

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

� Chaque composante applicative consiste en de multiples classes de développement.

� Chaque classe de développement peut contenir plusieurs types différents d'objets du Repository:programmes, groupes de fonctions, objets du dictionnaire ABAP, ...

� 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, ...

� Vous pouvez introduire le type de la liste d'objets et le nom d'objets dans la partie supérieure dudomaine de hiérarchie. La liste d'objets est ensuite affichée dans le domaine de hiérarchie.

� 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.

� Un double-clic sur un objet qui n'a pas de liste d'objets affiche cet objet dans la fenêtre d'objets.

� Vous pouvez utiliser les icônes pour naviguer en historique ou en hiérarchie entre les listes d'objets.

� Vous pouvez ajouter des listes d'objets que vous traitez fréquemment dans vos favoris.

(C) SAP AG BC400 3-11

� SAP AG 1999

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

Types d'objets de programmeStructures du dictionnaireSBC400_CARRIERZonesPA_CARWA_BC400ÉvénementsSTART-OF-SELECTIONÉcrans01001000

SAPBC400WBT_GETTING_STARTED

Éditeur

Éditeur

Éditeur

Navigation: un double-clic sur un objet de programme existantlance l'outil Workbench correspondant dans la fenêtre d'objets et vous amène à l'endroit correct de l'objet.

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

Screen Painter

Navigation :

Navigation forward :

� Vous pouvez utiliser le menu contextuel pour afficher des objets à partir d'une liste d'objets. Lesystème sélectionne alors automatiquement l'outil adéquat pour le traitement de l'objet sélectionné.

� Si l'objet de la liste d'objets que vous souhaitez n'est pas disponible dans le système, vous pouvez lecréer en double-cliquant. Ce qui s'appelle navigation forward.

(C) SAP AG BC400 3-12

� SAP AG 1999

Analyse d'un programme existant

Repository et WorkbenchRepository et Workbench

Analyse d'un programme existantAnalyse d'un programme existant

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

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

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

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

Analyse du code source Analyse du code source

(C) SAP AG BC400 3-13

� SAP AG 1999

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

AA American Airlines USDCompagnie aérienne

ID

Nom

Devise locale

Compagnie aérienne

Écran de sélection Écran Liste

F1

Info techniques

Nom de zoneType de zone

Système

Statut

Nom du programmeNom d'écran(= numéro de dynpro)

� 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 utilisantle 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. Vouscliquez alors sur l'option du menu avec la souris.

� Vous pouvez ajouter des programmes à la liste des favoris sur l'écran initial. Les programmespeuvent également devenir disponibles en utilisant les groupes d'activités de l'écran initial. Voussélectionnez ensuite le programme dans la hiérarchie de l'écran initial.

� Vous pouvez déterminer le périmètre fonctionnel en exécutant le programme.

� Quel que soit l'écran, vous pouvez accéder aux informations sur le nom du programme et le numérod'écran en utilisant Système -> Statut. Un écran de sélection standard a le numéro d'écran 1000.

� Vous pouvez accéder aux informations concernant le nom de zone et le type de zone de n'importequelle zone de l'écran en utilisant F1 -> Info. techniques.

(C) SAP AG BC400 3-14

� SAP AG 1999

Vue statique des objets de programme : liste d'objets

Types d'objets de programmeStructures du dictionnaireSBC400_CARRIERZonesPA_CARWA_BC400ÉvénementsSTART-OF-SELECTIONÉcrans01001000

SAPBC400WBT_GETTING_STARTED

� Vous pouvez afficher une synthèse des objets de programme en utilisant la liste d'objets duprogramme dans Object Navigator.

� La hiérarchie ne montre que les types d'objets pour lesquels des objets existent.

� Vous pouvez afficher les objets dans la liste secondaire de Object Navigator en doucle-cliquant ou enutilisant le menu contextuel.

(C) SAP AG BC400 3-15

� SAP AG 1999

Démarrage de programmes

Types d'objets de programmeStructures du dictionnaireZonesPA_CARWA_BC400ÉvénementsSTART-OF-SELECTIONÉcrans01001000Includes

SAPBC400WBT_GETTING_STARTED

Traitement direct

Débogage

Exécuter

Clic sur le bouton droit

� Si vous démarrez un programme à partir de la liste d'objets de Object Navigator en utilisant le menucontextuel, 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-16

� SAP AG 1999

Déterminer l'utilisation séquentielle d'objets deprogramme : mode débogage

X SAP

Point de surveillance Débogueur ABAP

BIN (1) (000) ds0025 INS����

Variante

❁❁❁❁❁❁❁❁chwschws

Zones

ZJJ_FORMS

wa_sbc400-carrid1 4-

LHVariante

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

SELECT SINGLE * FROM scarrINTO CORRESPONDING FIELDS OF wa_sbc400WHERE carrid = pa_car.

IF sy-subrc = 0.MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.CALL SCREEN 100.MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

Point d'arithmétique fixe 15 30- ��

Programme principalCode source de

ZJJ_KURS_000Pas à pas

� Le démarrage du programme en mode débogage vous permet d'exécuter le programme ligne parligne en utilisant l'icône "Pas à pas". Vous pouvez afficher jusqu'à huit variables. Afin de tracer lesvaleurs 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-17

� SAP AG 1999

Points d'arrêt en mode débogage

X SAP

Point de surveillance Débogueur ABAP

BIN (1) (000) ds0025 INS����

Variante

❁❁❁❁❁❁❁❁chwschws

ZJJ_KURS_000ZJJ_FORMS

wa_sbc400-carrid1 4-

LHVariante

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

SELECT SINGLE * FROM scarrINTO CORRESPONDING FIELDS OF wa_sbc400WHERE carrid = pa_car.

IF sy-subrc = 0.MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.CALL SCREEN 100.MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

Point d'arithmétique fixe 15 30- ��

STOP

Zones

Programme principalCode source deContinuer

� Vous pouvez apposer un point d'arrêt en double-cliquant en face d'une ligne de code source en modedébogage. Si vous cliquez sur l'icône "Continuer", le programme sera exécuté jusqu'à l'endroit où lepoint d'arrêt suivant est défini.

� Vous pouvez trouver des informations relatives aux points d'arrêt dans le chapitre Instructions etdéclarations de données ABAP.

(C) SAP AG BC400 3-18

� SAP AG 1999

Syntaxe générale ABAP

START-OF-SELECTION.SELECT SINGLE * FROM scarr

INTO CORRESPONDING FIELDS OF wa_sbc400WHERE 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.WRITE wa_sbc400-carrname.WRITE wa_sbc400-currcode.

ENDIF.

Options (dépendantes du mot-clé) Point (termine toutesles instructions ABAP)

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

START-OF-SELECTIONSTART-OF-SELECTIONSELECTSELECT

IFIFMOVE-CORRESPONDINGMOVE-CORRESPONDINGCALLCALLMOVE-CORRESPONDINGMOVE-CORRESPONDING

WRITEWRITE

ENDIFENDIF

Mot-cléABAP

TABLESTABLESDATADATAPARAMETERSPARAMETERS

WRITEWRITEWRITEWRITE

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

� Chaque instruction se termine par un point.

� Le premier terme de l'instruction est appelé un mot-clé.

� Les mots doivent toujours être séparés d'au moins un espace.

� Vous pouvez indenter les instructions.

� Les instructions peuvent occuper plus d'une ligne.

� Vous pouvez avoir de multiples instructions sur une seule ligne.

(C) SAP AG BC400 3-19

� SAP AG 1999

Commentaires et chaîne d'instructions

START-OF-SELECTION.

SELECT SINGLE * FROM scarrINTO CORRESPONDING FIELDS OF wa_sbc400WHERE 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.

ENDIF.

WRITE:/WRITE:/ Chaîne d’instructions,,,,..

* Read data record from database table SCARR* Read data record from database table SCARR

" Process screen 100" Process screen 100

Commentaire

Commentaire

� Des instructions consécutives comportant des mots-clés initiaux identiques peuvent êtrecondensé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 êtresuivie 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 enchaîne comme des instructions complètes indépendantes l'une de l'autre.

� 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-20

� SAP AG 1999

START-OF-SELECTION.SELECT SINGLE * FROM scarr

INTO CORRESPONDING FIELDS OF wa_sbc400WHERE 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.

ENDIF.

scarrscarrwawa_sbc400_sbc400

Double-ClicDouble-Clic

Définition de table de base de donnéesdans le dictionnaire ABAP Définition de structure

(ou de zone structurée)

Navigation dans l'Éditeur

Double-Clic100100 Définition d'écran(dans ScreenPainter)

STOP

� 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 basede 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 dedonnées est défini.

� Un double-clic sur un numéro d'écran affiche l'écran en utilisant le Screen Painter dans la fenêtred'objets de Object Navigator.

� Utilisez la fonction Retour pour revenir sur l'affichage du code source du programme dans l'Éditeur.

� Vous pouvez également mettre un point d'arrêt dans n'importe quelle ligne du code source dansl'Éditeur. Ensuite, démarrez le programme sans sélectionner le mode débogage. Le programmes'exécutera alors jusqu'à l'endroit où le point d'arrêt est défini. À cet endroit, le mode débogage estlancé.

(C) SAP AG BC400 3-21

� SAP AG 1999

Documentation mots-clés

START-OF-SELECTION.SELECT SINGLE * FROM scarr

INTO CORRESPONDING FIELDS OF wa_sbc400WHERE 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.

ENDIF.

WRITEWRITE

F1

Documentation mots-clés

Aide de l'Éditeur Synthèse ABAP Terme ABAP Nouveautés ABAPABAP Docu and Examples

Aide

iWRITE

� 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 lecurseur est positionné.

� L'icône Information affiche une boîte de dialogue qui vous offre plusieurs vues de ladocumentation mots-clés.

(C) SAP AG BC400 3-22

� SAP AG 1999

Code source de programme type

START-OF-SELECTION.SELECT SINGLE * FROM scarr

INTO CORRESPONDING FIELDS OF wa_sbc400WHERE 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.

ENDIF.

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

1

2

3

4

� Si vous désirez des informations plus précises sur des parties du code source, vous pouvez analyserle code source. Les diapositives suivantes expliquent les instructions les plus importantes duprogramme type.

(C) SAP AG BC400 3-23

� SAP AG 1999

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

TABLESTABLESDATADATAPARAMETERSPARAMETERS

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

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.

Objets de données

Programme ABAPsbc400_carrier

wa_sbc400

pa_car

1

� 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 dansle dictionnaire ABAP. Le type de structure pour l'objet de données du programme est tiré dudictionnaire. Le nom de l'objet de données est identique au nom du type de structure. Ils sontgé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 typed'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 aussiune zone de saisie sur l'écran de sélection standard qui est traité lors du lancement du programme.

� Lorsque vous activez un programme, une version de chargement interne est générée. Un écran desélection est généré à partir de l'instruction PARAMETERS. Lorsque le programme démarre, leszones de mémoire deviennent disponibles pour les objets de données.

� 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-24

� SAP AG 1999

Table debase dedonnéesSCARR

Bloc detraitementABAP

Système d'exécution ABAP

Programme ABAP

Dialogues de base de données 1 :

SELECT SINGLE * FROM scarrINTO CORRESPONDING FIELDS OF wa_sbc400WHERE carrid = pa_car.

IF sy-subrc = 0....

SELECT SINGLESELECT SINGLE FROM scarrFROM scarr

WHERE CARRID = pa_carWHERE CARRID = pa_car

Objets de donnéespapa_car_car

wawa_sbc400_sbc400

2

� L'instruction SELECT s'assure que les données se lisent à partir de la base de données. Afin de lireun enregistrement à partir d'une table de base de données, les informations suivantes doivent êtretransfé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 ontquelles valeurs. Pour une instruction SELECT SINGLE, la condition doit être formulée de sortequ'une ligne soit spécifiée sans aucune ambiguité.

(C) SAP AG BC400 3-25

� SAP AG 1999

2

Table debase dedonnéesSCARR

Bloc detraitementABAP

Programme ABAP

Objets de données

Dialogues de base de données 2 :

SELECT SINGLE * FROM scarrINTO CORRESPONDING FIELDS OF wa_sbc400WHERE carrid = pa_car.

IF sy-subrc = 0....

INTO CORRESPONDING FIELDS OF wa_sbc400INTO CORRESPONDING FIELDS OF wa_sbc400

papa_car_car

wawa_sbc400_sbc400

� Les données fournies par la base de données sont transformées en objets de données locales. Laclause INTO spécifie les objets de données dans lesquels vous souhaitez copier les données. Dans cetexemple, les données sont copiées dans les composantes du même nom dans la structurewa_sbc400.

(C) SAP AG BC400 3-26

� SAP AG 1999

Runtime system ABAP

Traitement des écrans

Temps

Objets de données

Bloc de traitement ABAP

Programme ABAP

ProcessBeforeOutput

CALL SCREEN 100.CALL SCREEN 100.

sbc400_carriersbc400_carrier

ProcessAfterInput

3

� L'instruction CALL SCREEN appelle un écran.

� Un écran doit être créé en utilisant l'outil Screen Painter.

� Un écran est un objet du Repository indépendant, mais qui appartient au programme.

� 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 fournissenttous les dialogues d'erreur qui s'avéreraient nécessaires. Par conséquent, les écrans ne sont pas quedes simples modèles pour introduire des données ; ils sont en fait des programmes dynamiques(dynpros).

� L'instruction TABLES déclare un objet de structure qui sert d'interface à l'écran. Toutes les donnéesde cette structure s'insèrent automatiquement dans leurs zones d'écran correspondantes lorsquel'écran est appelé par l'instruction CALL SCREEN. Les données introduites par l'utilisateur à l'écransont 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-27

� SAP AG 1999

Création de listes

START-OF-SELECTION.SELECT SINGLE * FROM scarr

INTO CORRESPONDING FIELDS OF wa_sbc400WHERE 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.

ENDIF.

WRITEWRITE4

� ABAP contient des instructions (WRITE, SKIP, ULINE) qui vous permettent de créer une liste.

� Les instructions WRITE affichent le contenu de zone, formaté selon leur type de données, sous formede liste.

� Des instructions WRITE consécutives affichent des données dans la même ligne d'édition. Lesmessages continuent sur la ligne suivante lorsque la première est remplie.

� Vous pouvez placer une information de positionnement devant chaque information à éditer. Cecivous permet de déterminer des passages à la page/ligne suivante (/), des longueurs d'édition (l) etdes débuts de colonnes (p). Vous trouverez des informations complémentaires sur les optionsd'édition dans la documentation mots-clés sous WRITE.

� L'édition de liste peut être affichée en couleurs.

� La liste complète apparaît automatiquement à la fin du bloc de traitement.

(C) SAP AG BC400 3-28

� SAP AG 1999

Synthèse : Introduction à ABAP Workbench

Repository et WorkbenchRepository et Workbench

Analyser un programme existantAnalyser un programme existant

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

(C) SAP AG BC400 3-29

� SAP AG 1999

Premier projet :

LH Lufthansa DEMCompagnieaérienne

ID

Nom

Devise locale

Compagnie aérienneProgramme source

LH Lufthansa DEMCompagnieaérienne

ID

Nom

Devise locale

Compagnie aérienneCopie adaptée :

Utilisateur

WALTERS

WALTERS

LH

LUFTHANSA

DEM

LH

LH

LUFTHANSA

DEM

LH

� Le premier projet est d'étendre un programme existant. Comme aucune extension n'est autorisée dansle programme et que les modifications sont à éviter, la première étape est de copier le programme etensuite de le modifier.

� Vous devez allouer à un projet du système les modifications aux programmes existants, exactementcomme vous le feriez pour créer des copies de programmes ou des nouveaux programmes. Parconsé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-30

� SAP AG 1999

Ordre de Ordre de modificationmodification

Système de développementSystème de production

Transporter des objets du Repository

FI HR

MM

SD

MM

WM

Cust.

FI HR

MM

SD

MM

WM

Cust.

� Les projets sont toujours implémentés dans un système de développement et transportés ensuite versle système suivant. Un critère décisif pour la combinaison de projets est d'aillleurs de savoir quelsobjets du Repository doivent être transportés ensemble en raison de leurs dépendances. Voustrouverez des informations complémentaires sur l'organisation d'un projet dans le chapitre intituléLogistique logicielle et adaption logicielle.

� Les objets du Repository sont automatiquement liés aux systèmes de correction et de transportlorsqu'ils sont affectés à une classe de développement transportable (pas $TMP).

� Une fois le développement terminé, les objets du Repository sont transportés dans les systèmes detest ou systèmes de production au moyen de certains chemins prédéfinis.

� L'outil Workbench Organizer (WBO) de ABAP Workbench organise toutes les tâches dedéveloppement appartenant aux objets du Repository.

(C) SAP AG BC400 3-31

� SAP AG 1999

Exemple de projet : cours BC400

Équipe :

Chef de projet :

CARSON

Horaire : Lundi Mardi Mercredi Jeudi Vendredi

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

CARSON

BC400-00

BC400-01

BC400-02

BC400-03

...

� 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 ?

� À 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 duprofesseur 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-32

� SAP AG 1999

Workbench Organizer : demandes

Représentation du projet dans Workbench Organizer

Équipe :

Chef de projet :

CARSON

CARSON

BC400-00

BC400-01

BC400-02

BC400-03

...

Chef de projet

Numéro de la modification

Ordres de modification de l'utilisateur BC400-00

Modifiable

Transportable

IT3K900051 CARSON

IT3K900052 CARSON

IT3K900053 BC400-00

Source de rapport

ZBC400_00_FLIGHTLIST

Programme ABAP

IT3K900054 BC400-01

IT3K900055 BC400-02

IT3K900056 BC400-03

IT3K900057

Objets du Repositorymodifié ou créépar BC400-00

Numéro de membre d'équipe(affecté par le système)(Tâche)

� Au début d'un projet de développement, le chef de projet doit créér un ordre de modification. Lechef de projet affecte tous les membres d'équipe du projet à l'ordre de modification. Le WorkbenchOrganizer affecte un numéro de projet à l'ordre de modification (<sid>K9<nnnnn>. Exemple :C11K900001). <sid>est le numéro de système.

� Ensuite, le Workbench Organizer (WBO) crée une tâche pour chaque employé affecté à l'ordre demodification. 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 lesobjets du Repository sur lesquels un employé travaille pendant un programme de développementsont collectés dans son dossier tâche.

� 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, lesordres de modification sont liés au projet. Donc, bien qu'un programme appartienne toujours à uneseule classe de développement, il peut, à différents moments, appartenir à des ordres de modificationdifférents.

(C) SAP AG BC400 3-33

� SAP AG 1999

Compléter le processus de développement

Équipe :

Chef de projet :

CARSON

CARSON

BC400-00

BC400-01

BC400-02

BC400-03

...

Fin dudéveloppement

Horaire : . . . Jeudi Vendredi

Contrôle de qualité de tout leRepository par BC400-00

Documentation de la tâche complète

Contrôle de qualité del'ensemble du projet

Documentation du projet

La tâche est libérée

L'ordre est libéré

� Lorsque le développement est terminé, le développeur effectue un dernier contrôle de qualité etlibère la tâche. Les objets et les blocages d'objets sont transférés de la tâche vers l'ordre demodification. Cependant, tous les employés affectés à l'ordre de modification peuvent toujoursmodifier l'objet car le Workbench Organizer créera automatiquement une nouvelle tâche si celas'avère nécessaire.

� Lorsque le projet est terminé, le chef de projet vérifie la cohérence de l'ordre et le chef de projeteffectue l'ordre de modification. Les blocages des objets de l'ordre sont libérés.

� Les objets du Repository sont ensuite exportés vers le répertoire central des transports.

� Les objets ne sont pas importés automatiquement dans le système cible. Par contre, l'administrateursystè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-34

� SAP AG 1999

Copie de programmes

Infos techniques

Programme source

Programme cible

SourceÉléments de texteDocumentationVariantesInterfacesÉcransIncludes

!

!

!

!

Copier

Copier Ordres (Organizer)

CréerModifierAfficherContrôlerActiverExécuterCopier...

SAPBC400WBT_GETTING_STARTED

Info techniques

ZBC400_00_GETTING_STARTED

� Les noms de programme commençant par Y ou Z, ou par SAPMZ ou SAPMY, sont réservés auxdéveloppements clients. Vous pouvez également avoir un espace nom réservé aux développementsclients. Vous trouverez des informations complémentaires sur les espaces noms clients pourplusieurs objets du Repository dans la bibliothèque SAP sous Composantes de base -> Sytème detransport et de modification (BC-CTS) -> Espaces noms BC et conventions de noms.

� Vous pouvez copier un programme à partir de la liste d'objets d'une classe de développement ou unprogramme. À cette fin, placez simplement votre curseur sur le nom du programme que vous désirezcopier et cliquez sur le bouton droit de la souris. Choisissez Copier. Le système affiche une boîte dedialogue dans laquelle vous pouvez introduire un nouveau nom pour votre copie. La confirmation devos entrées en utilisant le bouton de commande adéquat de la barrre d'outils d'application permet ausystème d'afficher une boîte de dialogue dans laquelle vous pouvez sélectionner les sous-objets quevous désirez copier avec le programme. Donc, vous devez décider quels sous-objets vous désirezcopier avec le programme AVANT de commencer la procédure de copie. Après la confirmation deces entrées, le système affiche encore une autre boîte de dialogue dans laquelle vous pouvezsauvegarder des objets du Repository.

� Si vous copiez un programme qui contient des includes, une autre boîte de dialogue est affichéeavant celle-ci, dans laquelle vous pouvez choisir quels includes vous désirez copier et leur attribuerde nouveaux noms.

(C) SAP AG BC400 3-35

� SAP AG 1999

Sauvegarde de programmes

Attributs

Classe de développementPersonne responsable

Système originalLangue originale

BC400-00

ZBC400_00

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

Objet R3TR PROG ZBC400_00_GETTING_STARTED

Objet local

Les nouveaux programmesdoivent être affectés àune classe de développement

IT3

DE

� 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 nouvellecopie du programme. Vérifiez si toutes les entrées sont correctes et ensuite choisissez Sauvegarder.

(C) SAP AG BC400 3-36

� SAP AG 1999

Affectation d'un ordre de modification

Source de rapport

Workbench Organizer : ordres transportables

ZBC400_00_GETTING_STARTED

Ordre de modification transportable

Exercices pour les participants du cours BC400 en datedu 8 mai 2000

IT3K900051

Ordre

Mes ordres Workbench Organizer : ordres transportables

Modifier des ordres impliquant l'utilisateur BC400-0 Modifiable Transportable IT3K900051 CARSON IT3K900052 CARSON IT3K900053 BC400-00 IT3K900054 BC400-01

Double-clicsur le numéro de l'ordre

� Tous les objets du Repository qui sont créés ou modifiés doivent être affectés à l'ordre demodification de leur projet correspondant. Pour ce cours de formation, le formateur a créé un ordrede 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.

� Vous pouvez afficher tous les ordres de modifications dans lesquels vous avez une tâche en utilisantle bouton de commande "Ordres propres".

� Pour des informations complémentaires sur l'organisation du projet d'un point de vue de gestion deprojet (y compris créer des tâches), référez-vous au chapitre sur la logistique logicielle.

(C) SAP AG BC400 3-37

� SAP AG 1999

Adaptatation des désignations

Types d'objets du programme

Sélection d'objets

Nom du programme

Programme...

Attributs

Attributs

ABAP : attributs de programme ...

Titres

ZBC400_00_GETTING_STARTED

Adapter titre

Double-clic

Modifier la langueoriginaleen langue de travail

� 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 dedialogue apparaît pour vous demander si vous désirez modifier le titre dans la langue originale ousi vous désirez modifier la langue originale.

� Vous pouvez désormais adapter le titre.

� Le titre modifié apparaît sous forme de désignation à côté du nom du programme dans la listed'objets d'Object Navigator.

(C) SAP AG BC400 3-38

� SAP AG 1999

Adaptation du code source

START-OF-SELECTION.SELECT SINGLE * FROM scarr

INTO CORRESPONDING FIELDS OF wa_sbc400WHERE 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.

ULINE.

WRITE wa_sbc400-uname.

Contrôle de syntaxe

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

� Pour adapter la liste, ajoutez une instruction ULINE et une instruction WRITE. Vous trouverez desinformations complémentaires sur ces instructions dans la documentation mots-clés.

� Vous pouvez exécuter un contrôle de syntaxe après avoir modifié le code source.

(C) SAP AG BC400 3-39

� SAP AG 1999

Modification des écrans

Types d'objets de programmeStructures du dictionnaireZonesÉvénementsÉcrans01001000

ZBC400_00_GETTING_STARTED

ID

Nom

Devise locale

Compagnie aérienne

ModifierClic sur le bouton droit

sbc400_carrier

Mise en page

Zone de saisie etdescripteur de zone

Utilisateur

� Vous pouvez modifier un écran en utilisant le Screen Painter. Pour modifier la mise en page, utilisezd'abord le menu contextuel de l'écran dans la liste d'objets pour naviguer vers le Screen Painter etensuite l'icône "Mise en page" pour naviguer vers l'éditeur graphique d'agencement d'écran.

� Celui-ci contient une icône pour créer des zones de saisie/sortie se référant aux types globaux. Entrezun type de structure qui est défini dans le dictionnaire ABAP. Toutes les zones de ce type destructure 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.

� L'outil d'affichage et de gestion des types globaux est appelé le dictionnaire ABAP. Vous pouveztrouver des informations complémentaires sur les types globaux dans le chapitre Instructions etdéclarations de données ABAP.

(C) SAP AG BC400 3-40

� SAP AG 1999

Sauvegarde et activation

�� ContrContrôle de syntaxe :ôle de syntaxe : un bouton de commande vous permetd'effectuer un contrôle de la syntaxe.

�� Sauvegarde de programmes :Sauvegarde de programmes : enregistrement temporaire : lecode est enregistré dans le Repository et reste visible danstout le système. Au moment de l'exécution, la version activeest lancée.

�� Activation du programme :Activation du programme : le programme est visible dans toutle système après l'activation et vous pouvez l'exécuterultérieurement.

�� ContrContrôle du programme ôle du programme étendu :étendu : implique des vérificationsplus complètes et peut uniquement être exécuté avec desprogrammes déjà activés.

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

� Dès que vous avez sauvegardé le programme, ce code source est visible dans tout le système. Vouspouvez utiliser le menu contextuel pour exécuter un contrôle de syntaxe qui englobe toutes lescomposantes du programme. Le lancement du programme à partir du menu contextuel de la listed'objets s'assure que la version active est lancée.

� Dès que vous avez activé le programme, la version active peut être exécutée dans tout le système.

� Vous pouvez exécuter un contrôle de programme étendu pour des programmes activés en utilisant lemenu contextuel ou l'option du menu. Ces contrôles sont considérablement plus étendus que lecontrôle de syntaxe.

(C) SAP AG BC400 3-41

� SAP AG 1999

Vous êtes maintenant capable :

Introduction à ABAP Workbench : résumé du chapitre

� d'utiliser les différents types de navigationdisponibles de ABAP Workbench pour analyserun programme existant

� d'apporter de simples modifications aux dialoguesutilisateur d'un programme existant en utilisantles outils Éditeur et Screen Painter ABAP

(C) SAP AG BC400 3-42

Exercices

(C) SAP AG BC400 3-43

(C) SAP AG BC400 3-44

Chapitre : ABAP WorkbenchSujet : Analyser un programme

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

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

Le programme SAPBC400WBT_GETTING_STARTED contient unécran de sélection qui permet à l’utilisateur d’introduire le code d’unecompagnie aérienne. Les coordonnées de la compagnie aérienneapparaissent ainsi à l’écran. Lorsque l’utilisateur appuie sur Enter, lesdonnées s’affichent sous forme de liste.

Naviguez à travers le code du programme et les autres composantes afinde 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 leprogramme 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 desaisie apparaît sur l’écran de sélection.

1-2-1 Quelles informations devez-vous fournir au programme ? (Utilisez le boutonaide 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 lenuméro de l’écran de sélection et l’écran dynpro en sélectionnant Système→ Statut.

(C) SAP AG BC400 3-45

1-2-5 Quels sont les noms des zones de saisie sur l’écran de sélection et des zonesde sortie sur l’écran ? Pour trouver les noms, utilisez le bouton d’aide F1pour 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 duprogramme) Où sont-ils définis ? (Utilisez la navigation) Où sont-ilsutilisés ? (Utilisez les cas d’emploi).

1-3-2 Quels objets de données du programme ABAP correspondent à la zone desaisie de l’écran de sélection ? (Cherchez dans la liste d’objets un objet dedonné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 ouutilisez un cas d’emploi pour le numéro d’écran.)

1-3-4 Naviguez jusqu’à l’écran, et ensuite jusqu’à la structure graphique. Cliquezsur une zone de sortie. Dans l’Éditeur d’agencement graphique, où apparaîtle 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 pourcette instruction. Comment créez-vous un renvoi à la ligne automatique ?

1-4-2 Quelle instruction est responsable du dialogue base de données ? À partir dequelle 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 setrouvent dans la table ?

1-4-3 Une seule ligne est lue à partir de la table de base de données. Dans quelobjet de données se trouve l’information indiquant quelle ligne doit êtrelue ? Quand se complète la variable comportant les informations sur la ligneà lire de la base de données ?

(C) SAP AG BC400 3-46

Chapitre : ABAP WorkbenchSujet : 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 etScreen 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 sescomposantes vers ZBC400_##_GETTING STARTED et affectez-le à votre classede 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 desyntaxe. Faites délibérément une erreur de syntaxe et utilisez le contrôle desyntaxe pour la retrouver. Activez le programme et redémarrez-le. Quellessont 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’auScreen 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 lebouton de commande adéquat de la barre d’outils d’application. Vérifiezque vous êtes en mode modification. Définissez les zones supplémentairesconformément au dictionnaire ABAP. Comme structure de référence,utilisez SBC400_CARRIER et sélectionnez les zones UNAME, UZEIT etDATUM. Activez l’écran.

(C) SAP AG BC400 3-47

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

(C) SAP AG BC400 3-48

Solutions

Chapitre : ABAP WorkbenchSujet : 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. Cesinformations peuvent être affichées à partir de la zone de saisie en utilisantF1.

1-2-2 Les valeurs autorisées ici dépendent du contenu de la table de base dedonnées SCARR. Vous pouvez afficher l’aide à la saisie depuis la zone desaisie en utilisant F4.

1-2-3 Le programme affiche des informations détaillées sur la compagnie aériennesélectionnée. Ces informations s’affichent d’abord à l’écran et ensuite sousforme de liste.

1-2-4 Le programme contient un écran de sélection comportant le numéro dedynpro 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 etles 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 dezone 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, etl’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 domaineré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. Lesdonnées se lisent à partir de la table de base de données SCARR. Le nom dela table de base de données est spécifié dans la clause FROM de l’instructionSELECT. 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éespa_car. Il se trouve dans la clause WHERE de l’instruction SELECT. La

(C) SAP AG BC400 3-49

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

(C) SAP AG BC400 3-50

Chapitre : ABAP WorkbenchSujet : Adapter un programme à des conditionsexceptionnelles

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 depuisla 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-51

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 4-1

� SAP AG 1999

� Types

� Objets de données

� Objets de données élémentaires

� Structures

� Tables internes

� Attributs des instructions ABAP

Contenu :

Instructions ABAP et déclarations de données

(C) SAP AG BC400 4-2

� SAP AG 1999

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

� de décrire les différents types de donnéesdifférents et leur utilisation

� de définir des objets de données élémentaires,des structures et des tables internes

� d'utiliser le mode débogage pour observercomment les valeurs des objets de donnéesindividuels changent lors du traitement

� de programmer plusieurs opérations importantesimpliquant des objets de données, et

� de trouver des informations sur les nombreuxcodes retour utilisés par les instructions ABAP etde les évaluer dans des programmes.

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

(C) SAP AG BC400 4-3

� SAP AG 1999

L'architecture client/serveur R/3

RuntimesystemABAP

ProgrammeABAP

CodeSource ABAP

� Le contenu de ce chapitre se concentre sur la définition des objets de données et des instructionsABAP déterminées.

(C) SAP AG BC400 4-4

� SAP AG 1999

Synthèse : types

TypesTypesTypes

Objets de donnéesObjets de donnObjets de donnéesées

Attributs des instructions ABAPAttributs des instructions ABAPAttributs des instructions ABAP

(C) SAP AG BC400 4-5

� SAP AG 1999

Interface

Module de

fonction

Utiliser les types

ProgrammeABAP

CodeSource ABAP

Les types décrivent les attributs de :

Objets de donnéesParamètres d'interface

pour des sous-programmes

Paramètres d'interfacepour des fonctions/méthodes

Zones d'entrée/sortie

InterfaceSous-programmes

Fonctionfonctions

� 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 ouqu'un sous-programme est appelé, en accord avec le type du paramètre d'interface. Des conflits detype sont déjà identifiés pendant le processus d'édition et les erreurs de syntaxe appropriéesaffichées.

(C) SAP AG BC400 4-6

� SAP AG 1999

Interface

Modules de

fonctio

n

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

ProgrammeABAP

CodeSource ABAP Interface

Sous-programme

Les types peuvent être définis de manière locale dans un programmeou de manière centrale dans le dictionnaire

Types locaux :Attributs techniques uniquement Types globaux dans

le dictionnaire ABAPAttributs techniques

et sémantiques

Groupe defonctions

� 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.

� 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 dedonné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 deszones de saisie et de sortie).

� Vous trouverez des informations complémentaires sur le stockage central des informationssémantiques dans ce chapitre.

(C) SAP AG BC400 4-7

� SAP AG 1999

Utilisation des types élémentaires du dictionnaire

Élément de données : type techniqueDescripteur de zoneDocumentation de zones(Aide F1)Aide à la recherche(Aide F4)

Compagnieaérienne

Variable de zone de saisie

Zone de saisie

Aide

Identificateur de la compagnie aérienne

Cette zone contient l'identificateur de la compagnie aérienne

Descripteur de zone

F1

Nom abrégé

AAAFBADLLHNUQFSASQUA

American AirlinesAir FranceBritish AirwaysDelta AirlinesLufthansaJapan Transocean Air.Quantas AirwaysSouth African Air.Singapore AirlinesUnited Airlines

ID Compagnie aérienneInfo techniquesAide d'applications

� Les types élémentaires du dictionnaire sont appelés éléments de données. Ils contiennent desinformations aussi bien sémantiques que techniques (type technique, longueur, nombre dedécimales).

� 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 longueurspossibles. 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 oude 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 à larecherche définit l'aide aux valeurs fournie par la touche de fonction F4 ou l'icône correspondante.

(C) SAP AG BC400 4-8

� SAP AG 1999

Recherche des types du dictionnaire ABAP 1

DATA wa_flight_occ TYPE

Doub

le-Cl

ic

Type de structureSBC400FOCC

sbc400focc

Zones types de zone

CARRID S_CARR_IDCONNID...

S_CARR_ID

Élément de donnéesS_CARR_ID

Aide

Données de zone

StructureNom de zoneÉlément dedonnées

SBC400_CARRIER

CARRID

S_CARR_ID

Infos techniquesDouble-Clic

S_CARR_ID Double

-Clic

F1

Infos techniques

� 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 sortiesuivant 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.

� Les types techniques et les domaines techniques peuvent être directement affectés aux éléments dedonnées. Si vous souhaitez des informations complémentaires sur d'autres éléments de données seréférant au même domaine, vous pouvez naviguer jusqu'au domaine à partir de l'élément de donnéesen double-cliquant sur son nom et en exécutant ensuite la fonction Cas d'emploi.

(C) SAP AG BC400 4-9

� SAP AG 1999

Recherche des types du dictionnaire ABAP 2

Hiérarchie des applications Sélectionner sous-arbre Système d'information

Business EngineeringDictionnaire ABAP

ProgrammationObjets ABAPEnvironnement

Système d'information du Repository

Objets de base

Autres objetsZones

Tables de base de donnéesVuesÉléments de donnéesStructuresTypes de tableDomaines

Sélections standard

Élément de donnéesCourte descriptionDescripteur de zone

Type de donnéesLongueur

Classe dedéveloppement

Système d'information du Repository : éléments de données

� Vous pouvez rechercher des éléments de données en utilisant la hiérarchie des applications et lesystè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 larecherche.

� Si vous allez dans le système d'information à partir de la hiérarchie des applications, les classes dedéveloppement des composantes applicatives sélectionnées sont automatiquement sélectionnées.

� Vous pouvez également aller directement dans le système d'information. Si vous ne sélectionnez pasde classe de développement, l'ensemble du repository est scanné.

(C) SAP AG BC400 4-10

� SAP AG 1999

Types de données locaux dans les programmes

Types: <user_defined_type> TYPE <type>.

DATA:<data_object> TYPE <type>.

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

Navigation vers desdéclarations de types dedonnées locauxou des déclarations detypes de données dudictionnaire ABAP

TYPE

F1

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

TYPES

F1

Double-Clic

<type>

Double-Clic<type>DATA

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

F1

� Lorsque vous définissez des types ou des variables simples, vous pouvez vous référer à un typeprédéfini. Pour des informations complémentaires, référez-vous à la documentation mots-clés sousTYPES 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-11

� SAP AG 1999

Synthèse : Objets de données

TypesTypesTypes

Objets de donnéesObjets de donnObjets de donnéesées

Objets de données élémentairesObjets de donnObjets de données ées élélémentairesémentaires

StructuresStructuresStructures

Tables internesTables internesTables internes

Attributs des instructions ABAPAttributs des instructions ABAPAttributs des instructions ABAP

(C) SAP AG BC400 4-12

� SAP AG 1999

Définition d'objets de données

<user-defined-type>.

DATA: <varname> TYPE

<ABAP-dictionary-type>.

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

� Affectez des types d'objets de données en référant votre objet soit à un type ABAP intégré, soit à untype défini par l'utilisateur, ou encore à un objet du dictionnaire ABAP.

� 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-13

� SAP AG 1999

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

TypesTypesTypes

Objets de donnéesObjets de donnObjets de donnéesées

Objets de données élémentairesObjets de donnObjets de données ées élélémentairesémentaires

StructuresStructuresStructures

Tables internesTables internesTables internes

Attributs des instructions ABAPAttributs des instructions ABAPAttributs des instructions ABAP

(C) SAP AG BC400 4-14

� SAP AG 1999

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

Types d'objets de programmeStructures du dictionnaireZonesPA_CARWA_BC400ÉvénementsSTART-OF-SELECTIONÉcrans01001000

SAPBC400WBT_GETTING_STARTED

Créer

ModifierAfficherCas d'emploi

Clic sur le bouton droit

Clic sur le bouton droit

� Les objets de données élémentaires apparaissent dans la liste d'objets du programme sous le noeud"Zones".

� À partir de la liste d'objets, vous pouvez utiliser le bouton droit de la souris pour naviguer dans lapartie du code source où l'objet de données est défini.

� 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-15

� SAP AG 1999

ProgrammeABAPcarrid

counter

DATA: carrid TYPE s_carr_id,counter TYPE I.

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

s_carr_id

� 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.

� Pour des raisons de compatibilité, il est encore possible de construire des objets de données dansl'instruction DATA sans devoir d'abord définir le type localement dans le programme avec uneinstruction TYPES. Outre les informations du type, des valeurs par défaut sont également définiespour les types génériques suivants :

� Avec des types de données P,N,C, et X, vous pouvez indiquer une longueur (en octets) entreparenthèses après le nom du type. Si aucune longueur n'est indiquée, la longueur par défaut de cetype de données est utilisée. Vous pouvez trouver les longueurs standard dans la documentationmots-clés pour TYPES et DATA.

� Avec un type de données P, vous pouvez utiliser l'option DECIMALS pour déterminer le nombrede décimales qui devrait être utilisé (jusqu'à un maximum de 14). Si cette option manque, lenombre 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-16

� SAP AG 1999

'abc', '2.17', '1.213E15', '0FFF', 'A''B'Séquence de caractères terminée par des guillemets simples, 255 caractères max.

Littéral alphanumérique

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

Littéral numérique

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

CONSTANTS: PI TYPE P DECIMALS 4 VALUE '3.1415',BOSS(4) TYPE C VALUE 'Hugo'.

Littéraux et constantes

� Vous définissez les constantes en utilisant le mot-clé ABAP CONSTANTS. L'option VALUE estrequise pour les constantes. Elle définit leur valeur.

� ABAP reconnaît deux types de littéraux : littéraux numériques et littéraux alphanumériques. Cedernier se trouve toujours entre des guillemets ( " ).

� Les nombres entiers (précédés d'un signe moins s'ils sont négatifs) sont stockés comme des littérauxnumériques soit de type I (jusqu'à neuf chiffres compris) ou de type P (dix chiffres ou plus).

� Tous les autres littéraux (caractère, nombres avec décimales, nombres de virgule flottante) sontstockés comme des littéraux alphanumériques de type de données C. Si un littéral est affecté à unevariable qui n'est pas de type C, une conversion de type est alors exécutée. Les règles de conversionsont décrites dans la documentation mots-clés sous MOVE.

� Si vous souhaitez ajouter des guillemets ( " ) dans un littéral alphanumérique, vous devez lesintroduire deux fois.

� Vous pouvez créer des littéraux alphanumériques traduisibles, ou symboles de texte, pour tous lesprogrammes ABAP. Utilisez la boîte de dialogue Types d'objets de programme pour obtenir l'écrande gestion des symboles de texte.

(C) SAP AG BC400 4-17

� SAP AG 1999

Modification des variables : copie et initialisation

Runtime system ABAP

Programme ABAP

MOVE c_gf TO gd_carrid1.

gd_carrid2 = gd_carrid1.

ADD 1 TO counter.

CLEAR: gd_carrid1,gd_carrid2,counter.

Temps

gd_carrid1

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.

Lancement du programme

Déclarations de données :

c_qf QFgd_carrid2 counter

LH 0000

QF LH 0000

QF QF 0000

QF QF 0001

0000

MOVE

CLEAR

� Lorsqu'un programme est lancé, le contexte du programme est chargé dans l'aire de stockage duserveur d'application et rendu disponible à tous les objets de données.

� Chaque zone élémentaire est considérée comme standard quand elle possède une valeur intialepropre à 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 seulementspécifier un objet de données fixe.

� Vous pouvez copier le contenu de zone d'un objet de données vers un autre objet de données avecl'instruction MOVE. Si les deux objets de données ont des types différents, le type estautomatiquement converti si une règle de conversion existe. Si vous souhaitez copier le contenu dezone d'une variable var1 vers une seconde variable var2, vous avez le choix entre deux variantesde syntaxe :

� MOVE var1 TO var2.

� var2 = var1.

� Vous trouverez des informations détaillées sur la copie et les règles de conversion dans ladocumentation mots-clés sous MOVEou dans le cours de formation BC402.

� L'instruction CLEAR réinitialise le contenu de zone d'une variable par la valeur initiale du typedé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-18

� SAP AG 1999

Exécution des calculs

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

Programme ABAP

COMPUTE gd_percentage = gd_occ * 100 / gd_max.

* Seconde possibilité du même calcul

gd_percentage = gd_occ * 100 / gd_max.

DATA: gd_max TYPE sbc400focc-seatsocc,gd_occ TYPE sbc400focc-seatsmax,gd_percentage TYPE sbc400focc-percentage.

Déclarations de données :

COMPUTE

� 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.

� Vous trouverez des informations détaillées sur les opérations et les fonctions disponibles dans ladocumentation mots-clés sous COMPUTE.

(C) SAP AG BC400 4-19

� SAP AG 1999

CASE <data object1>.

WHEN <data object2>.

WHEN <data object4> OR <data object5>.

WHEN OTHERS.

ENDCASE.

Instructions

Instructions

Instructions

IF <logical expression>.

ELSEIF <logical expression>.

ELSEIF <logical expression>.

ELSE.

ENDIF.

Instructions

Instructions

Instructions

Instructions

Évaluation du contenu d'une zone

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

� CASE ... ENDCASE:

� seule une des séquences des instructions s'exécute

� l'instruction WHEN OTHERS est facultative

� 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 aucuneinstruction ELSE ni d'instruction complémentaire ELSEIF, le programme continue aprèsl'instruction ENDIF

� vous pouvez inclure autant d'instructions ELSEIF que vous voulez entre IF et ENDIF. Une seuleséquence d'instructions sera exécutée.

(C) SAP AG BC400 4-20

� SAP AG 1999

Observation du flux de données dans ledébogueur : zone

X SAP

Point de surveillance Débogueur ABAP

Noms de zones

❁❁❁❁❁❁❁❁chwschws

ZJJ_KURS_000ZJJ_FORMS

Point d'arithmétique fixe 15 30-

1 4- Contenus de zones

��

SELECT SINGLE * FROM scarrINTO CORRESPONDING FIELDS OF wa_sbc400WHERE carrid = pa_car.

IF sy-subrc = 0.MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.CALL SCREEN 100.MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

pa_car LH

Zones

Programme principalCode source dePas à pas

� Vous pouvez retrouver le contenu de jusqu'à huit variables en mode débogage si vous indiquez lesnoms de zone sur le côté gauche ou si vous créez l'entrée par un double-clic sur un nom de zone.

� Vous pouvez modifier les valeurs de zone au moment de l'exécution en écrasant la valeur actuelle eten choisissant l'icône "Modifier".

(C) SAP AG BC400 4-21

� SAP AG 1999

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é)

ProgrammeNom de zoneOpérateur relationnel

Comp. zone/valeur

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

No.Local Programme Nom de zone ZoneOpérateur Comp. zone/valeur123...10

Opérateur logique entre des points de surveillance OU ET

� Pour la version 4.6, vous êtes autorisé à paramétrer jusqu'à dix points de surveillance et à les relier enutilisant 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. Leté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-22

� SAP AG 1999

Vue générale : structures

TypesTypesTypes

Objets de donnéesObjets de donnObjets de donnéesées

Objets de données élémentairesObjets de donnObjets de données ées élélémentairesémentaires

StructuresStructuresStructures

Tables internesTables internesTables internes

Attributs des instructions ABAPAttributs des instructions ABAPAttributs des instructions ABAP

(C) SAP AG BC400 4-23

� SAP AG 1999

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

Dictionnaire ABAP : Structure sdyn_conn

Définition de structure

ProgrammeABAP

Code source ABAP

Nom de zone :mandtcarridconnidfldate...

Type de zone :s_mandts_carr_ids_conn_ids_date...

DATA: wa_spfli TYPE spfli.TABLES sdyn_conn.

wa_spfli

sdyn_conn

� 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 structurespeuvent s'imbriquer. Ceci signifie que d'autres structures ou même des tables peuvent devenir dessous-objets de votre structure originale.

� Deux différents types de structure existent dans les programmes ABAP :

� des structures définies parDATA <name> TYPE <structure_type>.Ces types de structure servent de zones cibles pour les accès à la base de données ou pour lescalculs exécutés localement dans le programme. Vous pouvez déclarer ces types de structure soitdans le dictionnaire ABAP soit localement dans le programme. Pour des informationscomplémentaires sur la manière de déclarer des structures locales, référez-vous à la documentationmots-clés sous TYPES.

� des structures définies parTABLES <ABAP-Dictionary-Structure>.Ces types de structure sont techniquement gérés dans leur propre domaine. Pour la version 4.0, lesstructures TABLES doivent être utilisées uniquement comme des structures d'interface pour desécrans.

(C) SAP AG BC400 4-24

� SAP AG 1999

Adressage des zones d'une structure

ProgrammeABAP

Code source ABAP

DATA: wa_scarr TYPE scarr.

wa_scarr-carrid = 'LH'.

SELECT SINGLE * FROM scarrINTO wa_scarrWHERE carrid = wa_scarr-carrid.

WRITE: / wa_spfli-carrid,wa_spfli-carrname.

wa_scarr

mandt carrid carrname currcode

wa_scarr-carrid

wa_scarr-carrname.

Des zones de structure sonttoujours adressées selon<structure>-<nom_de_zone>

wa_scarr-carrid

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

(C) SAP AG BC400 4-25

� SAP AG 1999

MOVE-CORRESPONDING <rec1> TO <rec2>.

DATA: wa_sflight TYPE sflight,wa_sbc400focc TYPE sbc400focc.

...MOVE-CORRESPONDING wa_sflight TO wa_sbc400focc.

wa_sflightCARRIDLH

MANDT401

CONNID0400

wa_sbc400focc

CARRIDLH

CONNID0400

Affectation de valeurs zone à zone

FLDATE20000513

...

...

FLDATE20000513

MOVE-CORRESPONDING wa_sflight TO wa_sbc400focc.

SEATSMAX280

SEATSOCC100

POURCENTAGESEATSMAX280

SEATSOCC100

...

...

� Les instructions MOVE-CORRESPONDING <rec1> TO <rec2> transportent des valeurs zonepar zone entre les structures <rec1> et <rec2>. Ceci fonctionne uniquement si les composantesportent des noms identiques.

� 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-26

� SAP AG 1999

Structures dans le débogueur

Watchpoint Débogueur ABAP

Variante

❁❁❁❁❁❁❁❁chwschws

Zones

Programme principalCode source de

ZJJ_KURS_000ZJJ_FORMS

1 4- Variante

SELECT SINGLE * FROM scarrINTO CORRESPONDING FIELDS OF wa_sbc400WHERE carrid = pa_car.

IF sy-subrc = 0.MOVE-CORRESPONDING wa_sbc400 TO sbc400_carrier.CALL SCREEN 100.MOVE-CORRESPONDING sbc400_carrier TO wa_sbc400.

wa_sbc400

No. Nom de la composante Type Longueur Contenu

12345678

MANDTCARRIDCARRNAMECURRCODEMARKUNAMEUTIMEDATE

CCCCCCTD

3320511268

100AAAmerican AirlinesUSD

00000000000000

Double-Clic

Zone structurée

Longueur (en octets)

wa_sbc400

58

Point d'arithmétique fixe 15 30- ��

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

(C) SAP AG BC400 4-27

� SAP AG 1999

Vue générale : Tables internes

TypesTypesTypes

Objets de donnéesObjets de donnObjets de donnéesées

Objets de données élémentairesObjets de donnObjets de données ées élélémentairesémentaires

StructuresStructuresStructures

Tables internesTables internesTables internes

Attributs des instructions ABAPAttributs des instructions ABAPAttributs des instructions ABAP

(C) SAP AG BC400 4-28

� SAP AG 1999

Type de table

CARRID CONNID DISTANCECARRID CONNID DISTANCE Type de lignesType de lignes

Type de tableType de table

AA 0017 2,572

QF 0005 10,000 SQ 0866 1,625 UA 0007 2,572

LH 0400 6,162

Accès avec index55

Accès avec clé

UA 0007UA 0007Type d'accès de données

ClCléé

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

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).

Zones-clés

Séquence

� 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, endé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 quelordre ? La clé doit-elle désigner un seul enregistrement de la table interne (clé unique) ? Les clés uniques nepeuvent 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'adressescalculées. C'est le type d'accès qu'on utilise principalement pour choisir le type de table.

� Le type d'accès définit comment ABAP accède aux entrées de tables individuelles. Deux types différentsd'accès de données existent dans ABAP, l'accès par index et l'accès avec une clé.

� L'accès par index implique l'utilisation de l'index d'enregistrement de données que le système gère pouraccéder aux données.

� Exemple: l'accès en mode lecture à un enregistrement de données comportant l'index 5 fournit le cinquièmeenregistrement de données de votre table interne (quantité d'accès : un seul enregistrement de données).

� 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é detable 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 dedonnées.

(C) SAP AG BC400 4-29

� SAP AG 1999

Accès avecIndex

Accès avecClé

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

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

nn nn

TABLE DES INDEXTABLE DES INDEX TABLE D'ADRESSESTABLE D'ADRESSESCALCULCALCULÉESÉES

TABLE STANDARD TABLE STANDARD

TABLESTABLES

TABLE TRITABLE TRIÉEÉE

Types de table

� Un autre attribut de table interne est le type de table. Les tables internes peuvent être divisées en troistypes 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 êtreaccé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é demaniè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 pouvezseulement y accéder en utilisant des clés.

� 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, utilisezune table triée lorsque l'accès aux entrées s'effectue généralement avec des clés, et des tablesd'adresses calculées lorsque l'accès aux entrées s'effectue exclusivement avec des clés.

� Dans ce cours, nous discuterons uniquement de la syntaxe des tables standard.

(C) SAP AG BC400 4-30

� SAP AG 1999

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

Type de ligne et accès

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

Type de ligneType d'accès

SBC400FOCC

Table standard

Composantes-clésnon-uniqueCARRID

CONNID

FLDATE

sbc400_t_sbc400foccDictionnaire ABAP : type de table

DATA it_flightinfo type sbc400_t_sbc400focc .

itab_flightinfoProgramme ABAP

sbc400_t_sbc400focc

� Les types de table peuvent être définis de manière locale dans un programme ou de manière centraledans le dictionnaire ABAP.

� Pour définir un objet de données de type table, spécifiez le type comme un type de table global ou untype de table local.

� Vous trouverez des informations détaillées sur la déclaration de types de table dans la documentationou dans le cours BC402.

(C) SAP AG BC400 4-31

� SAP AG 1999

Traitement des enregistrements individuels

Ajouter

Insérer

Lire

Modifier

Supprimer

APPEND wa_itab to itab.

INSERT wa_itab INTO itab <condition>.

READ TABLE itab INTO wa_itab <condition>.

MODIFY TABLE itab <condition>.

DELETE itab <condition>.

APPEND

INSERT

READ

MODIFY

DELETE

� 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 quela ligne.

� MODIFY écrase une ligne de table interne avec le contenu d'une structure qui a le même type quela 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 internevers 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.

� Vous trouverez des informations détaillées sur les instructions ABAP décrites dans cette diapositivedans la documentation mots-clés ABAP.

(C) SAP AG BC400 4-32

� SAP AG 1999

Traitement d'enregistrements par groupes

Loop:Pour toutes lesopérations

LOOP AT itab INTO wa_itab.

ENDLOOP.

DELETE itab <condition>.

INSERT itab2 <condition2>FROM itab1 <condition1>.

Supprimer

Insérerlignes multiplesà partir d'unetable interne

LOOP

ENDLOOP.

DELETE

INSERT

AjouterLignes multiplesà partir d'unetable interne

INSERT itab2 <condition2>FROM itab1 <condition1>.

APPEND

� 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 structurespé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.

� Vous trouverez des informations détaillées sur les instructions ABAP décrites dans cette diapositivedans la documentation mots-clés pour tous les mots-clés ABAP utiles.

(C) SAP AG BC400 4-33

� SAP AG 1999

Autres options de traitement

Trier

Remise à la valeur initialedu contenud'une table interne

SORT itab <conditions>

CLEAR itab.CLEAR

SORT

� 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 croissantou 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-34

� SAP AG 1999

Exemple : remplir une table interne ligne par ligne

* Remplir une structure wa_flightinfo avec des valeurs...* Ajouter la structure wa_flightinfo dans une table* interne

APPEND wa_flightinfo TO it_flightinfo.

it_flightinfo

* Déclaration de table interne et d'espace de travailDATA: it_flightinfo TYPE sbc400_t_sbc400focc.DATA: wa_flightinfo TYPE sbc400focc.

wa_flightinfo

� Vous pouvez ajouter des lignes à une table standard en remplissant d'abord une structure avec lesvaleurs requises et en l'ajoutant ensuite à la table interne avec l'instruction APPEND. Cetteinstruction n'est valable que pour les tables standard.

� Utilisez l'instruction INSERT pour insérer des lignes dans des tables triées ou d'adresses calculées.

� INSERT fonctionne comme APPEND dans des tables standard.

(C) SAP AG BC400 4-35

� SAP AG 1999

Exemple : lecture du contenu de table interne àl'aide d'une boucle

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.

LOOP AT it_flightinfo INTO wa_flightinfo.

ENDLOOP.

it_flightinfo

* Déclaration de table interne et d'espace detravailDATA: it_flightinfo TYPE sbc400_t_sbc400focc.DATA: wa_flightinfo TYPE sbc400focc.

wa_flightinfo

� 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. Leszones de la structure peuvent alors être traitées. Une liste est établie à partir des zones avecl'instruction WRITE.

� Si vous souhaitez modifier le contenu de la table interne, modifiez d'abord la valeur des zones destructure à l'intérieur de la boucle et écrasez ensuite la ligne de table interne comportant l'instructionMODIFY.

(C) SAP AG BC400 4-36

� SAP AG 1999

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

LOOP AT it_flightinfo INTO wa_flightinfoFROM 1 TO 5.

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

ENDLOOP.

FROM 1 TO 5.

READ TABLE it_flightinfo INTO wa_flightinfoINDEX 3.

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

INDEX 3.

� L'option INDEX vous permet de limiter l'accès à un certain nombre de lignes. Vous pouvez exécuterdes opérations d'index uniquement dans les tables de type index. Les tables standard comme lestables triées y sont gérées.

� L'exemple du haut montre la syntaxe pour le traitement de la boucle, qui scanne uniquement les cinqpremières lignes de la table interne.

� L'exemple du bas montre la syntaxe pour la lecture de la troisième ligne de la table interne.

(C) SAP AG BC400 4-37

� SAP AG 1999

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

LOOP AT it_flightinfo INTO wa_flightinfoWHERE carrid = 'LH'

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

ENDLOOP.

WHERE carrid = 'LH'.

READ TABLE it_flightinfo INTO wa_flightinfoWITH TABLE KEY carrid = 'LH'

connid = '0400'fldate = sy-datum.

IF sy-subrc = 0.WRITE: / wa_flightinfo-seatsmax,

wa_flightinfo-seatsocc,wa_flightinfo-percentage,'%'.

ENDIF.

WITH TABLE KEY carrid = 'LH'.connid = '0400'fldate = sy-datum.

� L'option WHERE vous permet de limiter l'accès à des lignes comportant certaines valeurs dans deszones-clés. Les opérations-clés sont gérées pour tous les types de table. L'accès-clé aux tables triéesou d'adresses calculées est plus efficace que l'accès-clé aux tables standard.

� L'exemple du haut montre la syntaxe pour le traitement de la boucle qui scanne uniquement leslignes de la table interne dont la zone "carrid" a la valeur "LH". La table triée est la plusappropriée pour ce type de traitement. Le traitement en boucle avec l'option WHERE est géré pour lestables triées et les tables standard.

� 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 cetteligne. La table d'adresses calculées est la plus appropriée pour l'accès avec clé à un enregistrementindividuel. 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 confondrecette option avec l'option WITH KEY, qui autorisait déjà l'accès-clé aux tables standard avant laversion 4.0, lorsqu'il n'était pas encore possible de définir de manière explicite les colonnes-clé.

(C) SAP AG BC400 4-38

� SAP AG 1999

Tables internes en mode débogage

Point de surveillance Débogueur ABAP

❁❁❁❁❁❁❁❁chwschws

TableauProgramme principalCode source de

ZJJ_KURS_000ZJJ_FORMS

LOOP AT it_flightinfo INTO wa_flightinfo.WRITE: / wa_flightinfo-carrid,

wa_flightinfo-connid,

12345678

AAAAAAAALHLHLHLH

Table interne it_flightinfo Type Standard

1 Carrid

00170017001700170400040004000400

Connid

2000051220000724200008282000122420000626200007152000111320001212

Fldate

660660660660280280280280

Seatsmax

66120560470240123273280

Seatsocc

66120560470240123273280

Pourcentage

Point d'arithmétique fixe 15 30- ��

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

(C) SAP AG BC400 4-39

� SAP AG 1999

Tables internes avec lignes d'en-tête

AA 0017

Table interne <itab>

Espace de travail <wa>

LH 0400

Ligne d'en-tête <itab>

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

LOOP AT <itab> INTO <wa>.WRITE <wa>-<field>.

ENDLOOP.

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

APPEND <itab>.MODIFY <itab> INDEX <n>.

LOOP AT <itab>.WRITE <itab>-<field>.

ENDLOOP.

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

DATA <itab> TYPE <itabtype> [WITH HEADER LINE].

CARRIDCARRID CONNIDCONNIDAA 0017

Table interne <itab>

LH 0400

CARRIDCARRID CONNIDCONNID

[WITH HEADER LINE]

� Les tables internes peuvent être définies avec ou sans ligne d'en-tête. Une table interne avec ligned'en-tête consiste en un espace de travail (la ligne d'en-tête) et le corps actuel de la table, qui sonttous deux adressés par le même nom. La manière dont le nom va être interprété dépend du contextedans 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.

� Vous pouvez déclarer une table interne avec une ligne d'en-tête en utilisant l'option WITH HEADERLINE.

� 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 tablesinternes avec lignes d'en-tête.

(C) SAP AG BC400 4-40

� SAP AG 1999

Synthèse : Attributs des instructions ABAP

TypesTypesTypes

Objets de donnéesObjets de donnObjets de donnéesées

Attributs des instructions ABAPAttributs des instructions ABAPAttributs des instructions ABAP

(C) SAP AG BC400 4-41

� SAP AG 1999

Codes retour d'instruction ABAP

Runtime system ABAP

Programme ABAP

AAALLHQF

carrid ...

itab

READ TABLE itabINTO wa_itabWITH TABLE KEYcarrid = c_ua.

Function de base en

LECTURE

0sy-subrc

Non disponible

4 Code retour 4IF sy-subrc ne 0.* Message...ENDIF.

Temps

CONSTANTS c_uaTYPE s_carr_idVALUE 'UA'.

� 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 etl'instruction se termine. La documentation mots-clés pour une instruction déterminée décrit lesexceptions et leurs valeurs. Lorsque vous lancez un programme, une structure appelée sy estautomatiquement fournie comme objet de données. Cette structure contient plusieurs zones qui sontremplies par le système. Vous pouvez accéder à ces zones à partir du programme. Une des zones decette structure est la zone subrc. Vous ne devez dès lors pas créer d'objet de données pour le coderetour.

� Dans cet exemple, une ligne devrait se lire à partir de la table interne itab avec un accès clé. Il n'y aaucune ligne avec la clé requise au moment de l'exécution. L'instruction READ se termine alors et lavaleur 4 est placée dans la zone sy-subrc. La zone sy-subrc est testée dans le programmeimmédiatement après l'instruction READ.

(C) SAP AG BC400 4-42

� SAP AG 1999

.

.MESSAGE E050(BC400).

Texte du message

Aucune donnée n'existe pour cette sélection (insérez une autre valeur) ...La compagnie aérienne & n'existe pasDivision par zéro

...

Table T100S

EN...ENEN...

ID

BC400 ...BC400BC400 ...

038 ...049078 ...

EntrEntrée pour la compagnie aée pour la compagnie aérienne UA n'existe pasérienne UA n'existe pas

Messages utilisateur : synthèse

MESSAGE S078(BC400) WITH c_ua.

EN BC400 078 Entrée pour la compagnie aérienne & n'existe pas

� Il existe un type de dialogue spécial appelé le message utilisateur pour les situations d'erreur. Lesmessages sont déclenchés par l'instruction MESSAGE.

� Les messages peuvent être trouvés dans la table T100. Ils sont organisés selon la langue, une classede messages et un numéro à trois chiffres.

� Les messages peuvent contenir jusqu'à 4 variables, identifiées comme &1, &2, &3, et &4. Si voussouhaitez éditer le caractère & et que vous ne souhaitez pas l'utiliser comme une variable, doublez-le,par exemple : "C'est un message avec &&".

� Dans les longs textes de message, utilisez &v1&, &v2&, &v3&, et &v4& pour leurs variablescorrespondantes.

� Vous pouvez créer vos propres classes de messages en utilisant des noms de classes commençant parY ou par Z.

(C) SAP AG BC400 4-43

� SAP AG 1999

AnnnXnnn

MESSAGE Ennn WITH <field1> <field2> <field3> <field4>(<message-class>).WnnnInnnSnnn

Syntaxe : instructions MESSAGE

� Envoyez des messages avec l'instruction MESSAGE. La langue pour les messages dans la tabe T100est automatiquement paramétrée comme la langue de travail de l'utilisateur. Vous pouvez définir laclasse de messages suivant le paramètre MESSAGE-ID de l'instruction REPORT. La classe demessages est dès lors paramétrée pour l'ensemble du rapport. Introduisez le numéro de message dansl'instruction MESSAGE.

� Introduisez le type de message juste en face du numéro de message à trois chiffres, ce dernierdétermine comment l'utilisateur du rapport réagit aux messages de dialogue (voir diapositivesuivante).

� Paramétrez les valeurs pour les variables (jusqu'à un maximum de quatre) suivant le paramètreWITH. Les zones et les littéraux sont également autorisés. La zone au niveau i remplace donc lavariable &i du message. Si les variables du message sont identifiées par & ou $, ces caractèresgénériques sont fournis avec des valeurs indépendantes de la position des zones de l'instructionmessage.

� Outre l'utilisation d'une classe de messages avec l'instruction REPORT, vous pouvez égalementajouter une classe de messages différente à la commande MESSAGE en introduisant l'ID entreparenthèses directement après le numéro de message. Cependant, cette classe de messages n'estvalable que pour un message individuel. Exemple : MESSAGE E004(UD).

� 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>.

� 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-44

� SAP AG 1999

Comportement des messages au moment de l'exécution

Aide à l'éditeurSynthèse ABAP Mot-clé ABAP Nouvelles caractéristiques de ABAPDocumentation ABAP et exemples

Aide

i

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

Documentation ABAP et exemples?

???

?

� Il existe six différents types de messages : A, X, E, I, S ou W. Le comportement des messages aumoment 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 dialogueet 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

� Vous trouverez un programme pour tester le comportement au moment de l'exécution dans lesprogrammes types de la documentation. Vous trouverez des programmes types avec un code detansaction ABAPDOCU dans l’Éditeur avec l'icône "Information" et la case d'option deDocumentation ABAP et exemples.

(C) SAP AG BC400 4-45

� SAP AG 1999

Vous êtes maintenant capable :

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

� de décrire les différents types de donnéesdifférents et leur utilisation

� de définir des objets de données élémentaires,des structures et des tables internes

� d'utiliser le mode débogage pour observercomment les valeurs des objets de donnéesindividuels changent lors du traitement

� de programmer plusieurs opérations importantesimpliquant des objets de données, et

� de trouver des informations sur les différentscodes retour utilisés par les instructions ABAP etde les évaluer dans des programmes.

(C) SAP AG BC400 4-46

Exercices

Chapitre : Objets de données et instructionsSujet : Structures et affectations de valeurs

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

• d’utiliser le débogueur pour comprendre comment un programmefonctionne et comment les données sont transférées entre les objets duprogramme ;

• d’utiliser l’instruction MOVE-CORRESPONDING pour affecter desvaleurs entre les structures.

Déboguez le programme que vous avez écrit pendant les exercicesjusqu’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 desélection, saisissez le code de la compagnie aérienne 'LH'. Dans la zone decommande, saisissez '/h', ensuite sélectionnez Exécuter. Vous êtes maintenant enmode débogage.

1-2 Vérifiez que toutes les données sont initiales. Pour cela, indiquez leur nom dans lesnoms de zones (onglet Zones du débogueur). Examinez le contenu (initial), lastructure 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). Quellescomposantes de la structure WA_SBC400 sont remplies par l’instructionSELECT ? 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 versSBC400_CARRIER. Quelles valeurs de zone sont copiées ?

1-5 L’instruction CALL SCREEN 100 traite le dynpro 100. Sur l’écran, saisissez lesvaleurs 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 versWA_SBC400.

(C) SAP AG BC400 4-47

1-6 Pour terminer, observez comment l’instruction WRITE construit la liste. N’oubliezpas qu’un bouton supplémentaire apparaît dans la barre d’outils d’application aprèsla première instruction WRITE, qui vous permet d’afficher à tout moment lecontenu 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, etun 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) dudébogueur pour poursuivre le traitement.

(C) SAP AG BC400 4-48

Chapitre : Objets de données et instructionsSujet : 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éfinidans le dictionnaire ABAP ;

• d’utiliser les instructions LOOP…ENDLOOP pour traiter des donnéesmises 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 dansune table interne. Utilisez ensuite une structure LOOP … ENDLOOPpour 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 demodification 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 tableSPFLI.

2-3 Pour consulter les données de la table de base de données SPFLI et les placer dansla 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 instructionsLOOP … ENDLOOP.

(C) SAP AG BC400 4-49

Solutions

Chapitre : Objets de données et instructionsSujet : Structures et affectations de valeurs

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

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 latable SCARR.

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

MANDT, CARRID, CARRNAME, CURRCODE

(C) SAP AG BC400 4-50

Chapitre : Objets de données et instructionsSujet : 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 dedonné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 lastructure 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-51

ENDIF.

(C) SAP AG BC400 5-1

� SAP AG 1999

� Informations sur les tables de base de données

� Lecture de tables de base de données

� Contrôle d'autorisations

� Lecture de tables de base de données multiples

Contenu :

Dialogues base de données I

(C) SAP AG BC400 5-2

� SAP AG 1999

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

Dialogues base de données 1 : objectifs du chapitre

� d'obtenir des informations sur les tables de basede données à partir du Dictionnaire ABAP

� de répertorier plusieurs moyens de trouver destables de base de données

� de programmer un accès en mode lecture à deslignes et colonnes spécifiques d'une table debase de données particulière

� d'appliquer des contrôles d'autorisation

� de répertorier les différents types de possibilitésd'accès en mode lecture pour des table de basede données

(C) SAP AG BC400 5-3

� SAP AG 1999

Informations sur les tables de base de données

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

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

Contrôle d'autorisationsContrôle d'autorisations

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

(C) SAP AG BC400 5-4

� SAP AG 1999

Informations dans le Dictionnaire ABAP

Dictionnaire ABAP

Table transparente SPFLI :

Description des attributs de latable de base de données SPFLI

SPFLI

Bloc de traitement ABAP

SELECT SINGLE * FROM spfli ...spflispfliDouble-

clic

� Les tables de base de données sont administrées dans le Dictionnaire ABAP. C'est ici que voustrouvez les informations actuelles sur les attributs techniques de la table de base de données. La tablede base de données qui a été créée dans la base de données en utilisant le même type de ligne et nomest appelée table transparente dans le Dictionnaire ABAP.

� Il existe différents moyens par lesquels vous pouvez naviguer vers les tables transparentes dans leDictionnaire ABAP :

� choisissez Outils->ABAP Workbench->Développement->Dictionnaire pour appeler le dictionnaireABAP 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 traitementdu programme :vous pouvez double-cliquer sur le nom de la table transparente dans la clause FROM del'instruction SELECT.

(C) SAP AG BC400 5-5

� SAP AG 1999

Rechercherl'instruction

SELECT

Éditeur

Insérer un pointd'arrêt dans

l'instruction SELECT

Démarreren mode débogage

Recherche sur des tables de base de données

Sous-programmes

Listed'objets duprogramme

F1Infos techniquesDouble-clicsur une zoned'écran

Surdes zones d'écran

Double-clicsur un élément dedonnées

Liste des cas d'emploi dans les tables

Zones de structure dans le Dictionnaire ABAP

Sélectionner composantes d'application Repository Informations Le système

Hiérachie desapplicationsRechercher

des composantesréutilisables

Vous fournit les noms desprogrammes qui accèdent à latable de base de données

Vous fournit une structureconnue dans le dictionnaire

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

� Hiérarchie des applications et Système d'information du Repository : vous pouvez choisir descomposantes applicatives dans la Hiérarchie des applications et passer directement dans leSystème d'information du Repository. Vous pouvez également rechercher des tables selon leurscourtes descriptions (parmi d'autres critères).

� Si vous connaissez le nom d'un programme qui a accès aux tables de bases de données que vouscherchez :

� Zone de saisie sur un écran : si vous connaissez un programme qui contient un écran avec deszones de saisie connectées à la table recherchée, choisissez F1->Infos techniques et naviguez versle dictionnaire ABAP en double-cliquant sur le nom technique de la zone d'écran. Il s'agitsouvent d'une zone dans une structure. Double-cliquez sur l'élément de données et utilisez lafonction 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 dedonnées que vous cherchez, vous pouvez lancer ce programme en mode débogage et apposer unpoint 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 à labase de données.

� 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 destables transparentes selon le type de zone.

(C) SAP AG BC400 5-6

� SAP AG 1999

Ville de départ

Aéroport de départ

Destination

Ville de destination

Tâches de l'agence de voyage :� disponibilité des aéroports� disponibilité des compagnies aériennes à l'heure souhaitée� disponibilité des vols à la date souhaitée� informations de vol complémentaires : prix, capacité, ...

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

� Tous les cours ABAP utilisent le même modèle de données de système de réservation aérienne. À cestade, nous vous présenterons un simple aperçu du modèle de données de vol ; vous trouverez desinformations détaillées à ce sujet tout au long du cours.

� En tant que voyageur désireux d'aller d'un endroit à l'autre, vous attendez de votre agence de voyagesqu'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 ...?

� L'agence de voyages a un point de vue légèrement différent. Toutes les données techniquesnécessaires pour réaliser un modèle sont organisées et enregistrées dans les tables d'une base dedonnées centrale, en fonction de la structure de la base concernée. La quantité d'informationsstockées dépasse largement les besoins d'une agence de voyages. L'agence veut avant tout savoirquel client a effectué une réservation, à quelle date, combien le passager a payé, etc. Ces différentesvues et leurs exigences respectives démontrent la nécessité d'utiliser des programmes d'organisationde données qui répondent à tous les besoins des utilisateurs.

(C) SAP AG BC400 5-7

� SAP AG 1999

AéroportBC_AIRPORT T

ClientBC_CUSTOM T

Compagnieaérienne

BC_CARRIER T

VolBC_SFLIGHT T

AffectationVille -aéroport

BC_CITAIRP TVilleBC_GEOCITY T

Liste des volsBC_PLANFLI T

Agence devoyages

BC_TRAVLAG T

RéservationsBC_BOOKING T

Agencecommerciale

BC_COUNTER T

Heure

H

A

A

CR

CR

H

R

R

H

H

Modèle de données

� Toutes les informations logiquement interdépendantes contiennent des entités. Le modèle de donnéesABAP 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.

� 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 dedestination 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 soitcréé ;

� tous les aéroports situés à proximité des villes sont affectés aux villes.

� Ce modèle permet de gérer toutes les données nécessaires, sans redondance ; il est conçu pour qu'uneagence de voyages accède à des informations intéressantes du point de vue de sa clientèle.

(C) SAP AG BC400 5-8

� SAP AG 1999

SPFLI

Liste des vols

.....

SBOOK

Réservations

.....

MANDTCARRIDCONNIDFLDATEBOOKIDCUSTOMIDCOUNTERAGENCYNUM

SFLIGHT

Vol

.....

MANDTCARRIDCONNIDFLDATESEATSMAXSEATSOCC

SCARR

Compagnie aérienne

MANDTCARRIDCARRNAME

.....

Compagnieaérienne

11001

Vol11001

Liste des vols11001

Réservations11001

Heure

H H H

H

MANDTCARRIDCONNIDAIRPFROMAIRPTODEPTIME

Réalisation dans le Dictionnaire ABAP :

� Tous les exemples et exercices contenus dans les cours ABAP ainsi que toute la documentationprésentent le modèle de système de réservation aérienne de SAP. Tous les objets du Repository dumodèle se trouvent dans la classe de développement BC_DATAMODEL.

� Voici quelques-unes des tables de données de vol le plus fréquemment employées dans lesformations ABAP :

� SPFLI : table des liaisons aériennes ;

� SFLIGHT : table des vols ;

� SBOOK : table des réservations.

(C) SAP AG BC400 5-9

� SAP AG 1999

Zones-clés et index secondaires

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

Index

MANDTCARRIDCONNIDCOUNTRYFRCITYFROMAIRPFROMCOUNTRYTOCITYTO AIRPTOFLTIME DEPTIMEARRTIME DISTANCEDISTID FLTYPE

S_MANDTS_CARR_IDS_CONN_IDLAND1S_FROM_CITS_FROMAIRPLAND1S_TO_CITYS_TOAIRPS_FLTIMES_DEP_TIMES_ARR_TIMES_DISTANCES_DISTIDS_FLTYPE

...

...

...

...

...

...

...

...

...

...

...

...

...

...

...

!

!!

� Toutes les informations relatives aux attributs techniques de la table sont accessibles quand vousnaviguez jusqu'à sa définition dans le Dictionnaire ABAP.

� Les informations suivantes sont intéressantes pour augmenter la performance des accès à la base dedonnées :

� zones clés : si les enregistrements demandés à la base de données sont retrouvés selon les zones declés, l'optimiseur de la base de données peut exécuter l'accès en utilisant un index primaire. Descases à cocher sont disponibles pour toutes les zones-clé ;

� index secondaires : vous pouvez également utiliser des index secondaires pour sélectionner desenregistrements. Le bouton de commande "Index" permet des les afficher dans une boîte dedialogue. Vous pouvez choisir un index en double-cliquant simplement dessus. Le système afficheensuite un écran comportant des informations complémentaires sur cet index.

(C) SAP AG BC400 5-10

� SAP AG 1999

Lecture de tables de base de données

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

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

Contrôle d'autorisationsContrôle d'autorisations

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

(C) SAP AG BC400 5-11

� SAP AG 1999

Quelles colonnes ? Quelle(s) table(s) ?

Vers quelles zones ?Vers quelles zones ?

Quelles lignes ?

SELECT <result> FROM <table>

INTO <destination>

WHERE <condition>

Colonnespécifique

} Lignes multiples}Ligne individuelle

SELECT : vue d'ensemble

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

� Elle repose sur une logique complexe que vous utilisez pour accéder à de nombreux types de table.

� 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 plusieurslignes ;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 souhaitezplacer 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. Enfait, 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-12

� SAP AG 1999

Bloc detraitementABAP

Système d'exécution ABAP

Programme ABAP

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

Objets de données

wawa__scarrscarr

Interface de base de données

Open SQLSELECT ... Base de données SQL

Conversionspécifiquede base dedonnées

pa_car

scarrscarr

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

(C) SAP AG BC400 5-13

� SAP AG 1999

Traitement des enregistrements individuels

Tablede base dedonnéesSCARR

Bloc de traitement ABAP

Système d'exécution ABAP

Programme ABAP

Objets de données pa_car

SELECT SINGLE *FROM scarrINTO wa_scarrWHERE carrid = pa_car.

IF sy-subrc = 0....

SINGLESINGLE

Table debase de données

scarrscarr

wawa__scarrscarr

� L'instruction SELECT SINGLE* vous permet de lire une ligne individuelle à partir d'une table debase de données. Toutes les zones-clés doivent alors comporter la clause WHERE. Elle informel'interface de base de données que toutes les colonnes appartenant à cette ligne doivent être lues. Sivous souhaitez uniquement une sélection spécifique de colonnes, vous pouvez y insérer unestructure.

� Vous devez introduire le nom de la structure dans laquelle vous désirez que l'interface de base dedonnées copie un enregistrement de données après la clause INTO. Cette structure doit êtreidentique à celle des colonnes de la table, qui sont lues et alignées à gauche.

� Si vous utilisez l'option CORRESPONDING FIELDS OF dans la clause INTO, vous pouvezremplir l'espace de travail cible composante par composante. Le système ne retient que celles quiportent le même nom que les colonnes de la table. Si vous n'indiquez pas l'option, il complètel'espace de travail à partir de la gauche, indépendamment de sa structure.

� Si le système trouve l'entrée de table répondant aux conditions spécifiées, SY-SUBRC adopte lavaleur 0.

� L'option SINGLE informe la base de données qu'une ligne individuelle doit être lue. La base dedonnées termine la recherche une fois cette ligne trouvée. SELECT SINGLE apporte donc unemeilleure performance d'accès à un enregistrement individuel qu'une boucle SELECT, si vousfournissez les valeurs de toutes les zones-clés.

(C) SAP AG BC400 5-14

� SAP AG 1999

Boucles SELECT

Table debase de données

SFLIGHT

Bloc de traitement ABAP

Système d'exécution ABAP

Programme ABAP Objets de donnéespa_car

wawa_sbc400focc_sbc400focc

Interface debase de données

SELECT carrid connid fldateseatsocc seatsmax

FROM sflightINTO wa_sbc400foccWHERE carrid = pa_car.

ENDSELECT.IF sy-subrc = 0.

...

ENDSELECTENDSELECT

SELECTSELECT

Instructions pour chaque enregistrement lu

� Si vous n'utilisez pas l'option SINGLE dans l'instruction SELECT, le système lit plusieursenregistrements multiples de la base de données. La liste des zones détermine les colonnes dont lesdonnées doivent être lues.

� Le nombre de lignes à lire peut être limité par la clause WHERE. Elle effectue des restrictions soitselon les zones-clés de la table de base de données, soit selon un index secondaire. Vous trouverezdes informations complémentaires sur les zones-clés et les index secondaires dans le DictionnaireABAP. Double-cliquez sur la clause FROM de la table pour y accéder.

� Cette clause ne doit comporter que le nom des zones de table que vous voulez lire. Le nom de latable à laquelle vous voulez accéder se trouve dans la clause FROM. (Exemple d'une instructioncorrecte : SELECT ... FROM spfli WHERE carrid = ... , exemple d'une instructionincorrecte : SELECT ...FROM spfli WHERE spfli-carrid = ... )

� De multiples conditions logiques peuvent être ajoutées dans la clause WHERE en utilisant AND ouOR.

� La base de données envoie les données à l'interface sous forme de piles. Le système d'exécutionABAP copie ligne par ligne les enregistrements de données dans la zone cible en utilisant uneboucle. Il effectue également le traitement séquentiel de toutes les instructions situées entre SELECTet ENDSELECT.

� SY-SUBRC = 0, lorsque le système a pu sélectionner au moins une entrée. Une fois l'instructionSELECT exécutée dans chaque passage de boucle, la zone de système SY-DBCNT contient lenombre de lignes lues. Après l'instruction ENDSELECT, il contient le nombre total de lignes lues.

(C) SAP AG BC400 5-15

� SAP AG 1999

Accès à des tableaux

Table debase de données

SFLIGHT

Bloc de traitement ABAP

Système d'exécution ABAP

Objets de donnéespa_car

itabitab__foccfocc

Interface debase de données

SELECT carrid connid fldateseatsmax seatsocc

FROM sflightINTO TABLE itab_foccWHERE carrid = pa_car.

IF sy-subrc = 0....

TABLETABLE

Programme ABAP

� L'option INTO TABLE <itab> copie le contenu de l'interface de base de données dans la tableinterne itab. Cette opération s'appelle ARRAY FETCH.

� Comme les ARRAY FETCH ne constituent pas une boucle, aucune instruction ENDSELECT n'estutilisée.

� SY-SUBRC = 0, lorsque le système a lu au moins une entrée de table.

� Pour plus d'informations sur les array fetch et sur les tables internes, reportez-vous au chapitreTables internes.

(C) SAP AG BC400 5-16

� SAP AG 1999

Programme ABAP

DATA wa_sbc400focc TYPE sbc400focc.

SELECT SINGLE carrid connid fldate seatsmax seatsoccFROM sflightINTO wa_sbc400foccWHERE carrid = pa_car

AND connid = pa_conAND fldate = pa_date.

Clauses INTO

Même type que la colonne lue

INTOINTO wawa_sbc400focc_sbc400focc

carrid connid fldate seatsmax seatsocc

� La clause INTO spécifie les objets de données dans lesquels vous souhaitez placer les données de latable. Vous pouvez :

� définir dans votre programme une structure plate qui comporte les zones dans le même ordre quela liste des zones de la clause SELECT. Ensuite, indiquez le nom de la structure dans la clauseINTO. Le contenu est copié par position. Les noms de zones de structure ne sont pas pris encompte.

� 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 seatsoccFROM sflightINTO (gd_carrid, gd_connid, gd_fldate, gd_seatsmax, gd_seatsocc)WHERE ...

(C) SAP AG BC400 5-17

� SAP AG 1999

INTO CORRESPONDING FIELDS

Programme ABAP

Même nom quela colonne lue

DATA wa_sdyn_conn TYPE sdyn_conn.

SELECT SINGLE carrid connid deptimeFROM spfliINTO CORRESPONDING FIELDS OF wa_sdyn_connWHERE carrid = pa_carAND connid = pa_con.

mandt carrid connid ... deptime

mandt carrid connid ... deptime

INTO CORRESPONDING FIELDS OF wa_sdyn_conn

carrid connid deptime

� Si vous utilisez la clause INTO CORRESPONDING FIELDS, les données sont placées dans leszones de structure du même nom.

� 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 duprogramme, pour autant qu'une zone de la structure a le même nom et type.

� Désavantages de cette construction :

� INTO CORRESPONDING FIELDS est plus intensif au moment de l'exécution que INTO. Ladurée d'exécution peut par conséquent se prolonger.

� Si vous souhaitez placer des données dans des colonnes de table interne de même nom en utilisantune création de tableaux, utilisez INTO CORRESPONDING FIELDS OF TABLE <itab>.

(C) SAP AG BC400 5-18

� SAP AG 1999

Contrôles d'autorisation

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

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

Contrôle d'autorisationsContrôle d'autorisations

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

(C) SAP AG BC400 5-19

� SAP AG 1999

Contrôles d'autorisations dans des programmes ABAP

CONTRÔLED'AUTORISATION

Oui

SELECT

Fichesutilisateur

BC400-00

Profil1

Profil2Profil S_CARRID

Profil4

Autorisation pourAutorisationObject S_CARRIDAutorisation pourAutorisationObject S_CARRID

Autorisation pourAutorisationObject S_TCODE

SY-SUBRC= 0?

Écran desélection

Note Non

� Vous devez exécuter un contrôle d'autorisation avant d'accéder à la table de base de données. Vousdevez programmer vous-même ces contrôles d'autorisation. AUTHORITY-CHECK vérifie d'abords'il existe pour l'utilisateur une autorisation contenant toutes les valeurs requises. Vous contrôlezensuite la valeur du code dans la zone système SY-SUBRC. Si cette valeur est à 0, l'utilisateur al'autorisation requise et le programme peut continuer. Si cette valeur n'est pas à 0, l'utilisateur nepossède pas l'autorisation requise ; vous devez afficher un message et choisir l'action appropriée.

� Vous apprendrez plus loin à rendre les zones d'écran de sélection disponibles pour la saisie, si vouseffectuez le contrôle d'autorisation juste après l'écran de sélection. Vous apprendrez aussi à éditer unmessage lorsque l'utilisateur n'a pas l'autorisation requise.

(C) SAP AG BC400 5-20

� SAP AG 1999

Objets d'autorisation et autorisations

"Afficher" autorisationpour Objet S_CARRID

CARRID: *

ACTVT: Afficher

"Modifier" autorisationpour Objet S_CARRID

CARRID: LH

ACTVT: Modifier

Objet : S_CARRID

CARRID (compagnie aérienne)

ACTVT (Activité)

Activités : Créer Modifier Afficher

= 01= 02= 03

� Toutes les données du système SAP doivent être protégées contre les accès non autorisés.

� 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 ontl'autorisation d'accéder et quel type d'accès doit être autorisé. Par exemple, vous voulez peut-êtrepermettre aux utilisateurs d'afficher des données pour toutes les compagnies aériennes, maisuniquement de modifier des données pour certaines zones sélectionnées. Dans ce cas, le système doitchercher une combinaison des zones "activité" et "compagnie aérienne" chaque fois qu'il exécute uncontrôle d'autorisation.

� Les objets d'autorisation définissent simplement la combinaison des zones qui doivent être adresséessimultanément et servir de modèles pour les autorisations et les contrôles d'autorisation. Ilss'organisent en classes d'objets dans le but de simplifier leur recherche et leur gestion ; une ouplusieurs classes d'objets peuvent exister dans chaque application. Vous appelez la transaction degestion de l'objet d'autorisation à partir du menu "Développement" de ABAP Workbench. Une listecomplète de tous les objets de développement, triée selon la classe et comprenant leurs zonescorrespondantes et la documentation, fait partie de cette transaction.

(C) SAP AG BC400 5-21

� SAP AG 1999

AUTHORITY-CHECK

Résultatsd'état

01

02

03

AA AZ DL LH UA

xxxx x

ACTVT

CARRID

Paramétrer toutes les autorisationspour Objet S_CARRIDAUTHORITY-CHECK

Object S_CARRIDID 'CARRID' FIELD 'LH'ID 'ACTVT' FIELD '02'.

Contrôle

xIF sy-subrc ne 0.* Appropriate system reaction* to failed check

ENDIF.

� Pour effectuer des contrôles d'autorisation dans des programmes, vous devez spécifier l'objet et lesvaleurs dont l'utilisateur a besoin pour accéder à cet objet. Ne précisez pas le nom de l'autorisation.

� 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.

� Important : l'instruction Authority-Check exécute le contrôle d'autorisation et retourne une valeurde code retour adéquate dans SY-SUBRC. Lorsque vous contrôlez ce code retour, vous pouvezspécifier les conséquences d'une autorisation manquante (par exemple : terminer le programme, ouafficher un message et ignorer certaines lignes du code).

(C) SAP AG BC400 5-22

� SAP AG 1999

AUTHORITY-CHECK OBJECT 'S_CARRID'

ID CARRID FIELD '__________'ID ACTVT FIELD '__________'.

IF SY-SUBRC NE 0.

ENDIF.

Insertion d'AUTHORITY-CHECK dans des programmes

...

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

Insérer instruction

S_CARRID

Modèle

Vous insérezdes variables

et des paramètres

Le systèmegénèrele code ABAP

IF SY-SUBRC NE 0.

Processuscode retour

� Vous devez spécifier toutes les zones de l'objet dans AUTHORITY-CHECK, sinon vous recevez uncode 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 lesdonnées de vol, il est normal de vérifier si l'utilisateur est autorisé à modifier les entrées d'unecompagnie aérienne déterminée : AUTHORITY-CHECK OBJECT 'S_CARRID'

ID 'ACTVT' FIELD '02' ID 'CARRID' DUMMY.

� 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.

� Vous trouverez une liste complète des codes de retour dans la documentation, au mot-cléAUTHORITY-CHECK.

� Vous pouvez également spécifier une zone individuelle après l'option FIELD, mais pas de table desélection. Pour effectuer un contrôle AUTHORITY-CHECK sur toutes les valeurs d'une table desélection, utilisez les modules fonction.

(C) SAP AG BC400 5-23

� SAP AG 1999

Lecture de tables de base de données multiples

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

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

Contrôle d'autorisationsContrôle d'autorisations

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

(C) SAP AG BC400 5-24

� SAP AG 1999

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

Objet degestion

Base dedonnéeslogique

Objet

Interface

Modules

fonction

Groupe defonctions

BAPI

Méthodes desclasses générales

Utilisez les composantes fournies par SAPqui englobent

la recherche de données

� 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 quirenvoient les données de manière hiérarchique dans une séquence logique.

� Vous trouverez des informations sur les nombreuses techniques dans le chapitre Réutiliser lescomposantes.

(C) SAP AG BC400 5-25

� SAP AG 1999

Mandt Carrid Connid Cityfrom...SPFLI

... Mandt Carrid Carrname ...SCARR

Mandt Carrid Connid Cityfrom CarrnameVUE

Dictionnaire ABAP : vues

� Les vues s'appliquent à différentes tables du Dictionnaire ABAP. Elles contiennent des zones issuesd'une très grande table ou de plusieurs tables.

� Utilisez les vues pour regrouper les informations des zones de différentes tables, les présenter sousune forme spécifique et travailler dans le système R/3.

� Vous utilisez principalement les vues pour la programmation en ABAP et pour l'aide en ligne (F4).

� Si aucune des composantes appropriées à vos objectifs n'est disponible, vous pouvez exécuter unaccès complexe à la base de données à l'aide des instructions ABAP-OPEN- SQL. Vous devezcomparer les mérites de ces nombreuses techniques. Comme l'utilisation d'une technique inadéquatepeut donner lieu à de considérables problèmes de performance, vous trouverez des informationscomplémentaires sur la performance optimale des accès à la base de données dans la documentationou dans le cours BC490 Analyse des performances ABAP.

(C) SAP AG BC400 5-26

� SAP AG 1999

Vous êtes maintenant capable :

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

� d'obtenir des informations sur les tables de basede données à partir du Dictionnaire ABAP

� de répertorier plusieurs moyens de trouver destables de base de données

� de programmer un accès en mode lecture à deslignes et colonnes spécifiques d'une table de basede données particulière

� d'appliquer des contrôles d'autorisation

� Répertorier les différents types de possibilitésd'accès en mode lecture pour des tables de basede données.

(C) SAP AG BC400 5-27

Exercices

Chapitre : Dialogues base de données 1Sujet : Boucles SELECT

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

• d’utiliser l'instruction ABAP SELECT...ENDSELECT pour lireles 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ériennesélectionnée dans une liste. Dans le programme, vous devez égalementcalculer 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éesSFLIGHT.

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'ordrede 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 dansle 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. Pourconnaître les zones clé, regardez la définition de SFLIGHT du DictionnaireABAP. 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 valeurpour la deuxième zone-clé (CARRID).

1-4 Lisez tous les vols de la table de base de données SFLIGHT qui correspondent à lacompagnie aérienne indiquée dans l’écran de sélection par l’utilisateur. Utilisez unbloc SELECT … ENDSELECT. Entrez les données ligne par ligne dans lastructure que vous avez créée à l’exercice 1-2. Assurez-vous que vous lisezuniquement 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 lasélection, de sorte que la base de données puisse utiliser l’index primaire.

(C) SAP AG BC400 5-28

1-5 Dans la boucle SELECT, calculez le pourcentage d’occupation en utilisant la zonecorrespondante de l’espace de travail. Affectez le résultat à la zone POURCENTAGEde votre structure.

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

(C) SAP AG BC400 5-29

Chapitre : Dialogues base de données 1Sujet : 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 lesdonnées d’une table de base de données de votre programme et deremplir une table interne.

La tâche est identique à celle de l’exercice 1. Affichez sur la liste lesdonnées triées en fonction du pourcentage d’occupation. Pour ce faire,vous devez remplir une table interne avec les données demandées etensuite 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èleSAPBC400DDS_SELECT_SFLIGHT vers le nomZBC400_##_SELECT_SFLIGHT_ITAB. Affectez votre programme à la classede 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’emploipour le type de ligne du Dictionnaire ABAP SBC400FOCC pour y trouver un typede table adéquat.

2-3 Remplissez la table interne ligne par ligne en utilisant une instruction APPEND dansla 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 unestructure LOOP … ENDLOOP.

(C) SAP AG BC400 5-30

FACULTATIF :

Solution modèle : SAPBC400DDS_SELECT_ARRAY_FETCH

2-6 Copiez le programme ZBC400_##_SELECT_SFLIGHT_ITAB vers leprogramme ZBC400_##_ARRAY_FETCH_SFLIGHT.

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

2-8 Calculez le pourcentage d’occupation pour chaque ligne de la table interne enutilisant une boucle, et modifiez la ligne en utilisant une instruction MODIFY. Pourdécouvrir comment utiliser MODIFY dans une boucle, référez-vous à ladocumentation mot-clé.

(C) SAP AG BC400 5-31

Chapitre : Dialogues base de données 1Sujet : 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 etZBC400_##_SELECT_SFLIGHT_ITAB de sorte que les donnéespuissent être consultées à partir de la base de données et affichées dans laliste seulement si l’utilisateur dispose de l’autorisation pour la compagnieaé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 etZBC400_##_SELECT_SFLIGHT_ITAB comme suit :

3-2 ajoutez un contrôle d’autorisation qui contrôle l’objet S_CARRID ; vérifiez quela base de données n’est pas accessible à l’utilisateur qui ne dispose pasd’autorisation de la compagnie aérienne saisie dans l’écran de sélection ; vérifiezau 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 lacompagnie aérienne, ensuite UA.

(C) SAP AG BC400 5-32

Solutions

Chapitre : Dialogues base de données 1Sujet : 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 dedonné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-33

Chapitre : Dialogues base de données 1Sujet : 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 dedonné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-34

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-35

Chapitre : Dialogues base de données 1Sujet : 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 latable 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-36

SORT it_flight by percentage.

* Nouvelle boucle sur la table interne pour écrire le contenu desenregistrements 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-37

Chapitre : Dialogues base de données 1Sujet : 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éespour 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 deauthority-check

WHEN OTHERS.

WRITE: / 'Authority-Check Error'(001).

ENDCASE.

(C) SAP AG BC400 5-38

(C) SAP AG BC400 6-1

� SAP AG 1999

� Blocs événements ABAP

� Sous-programmes

Contenu :

Modularisation interne du programme

(C) SAP AG BC400 6-2

� SAP AG 1999

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

Modularisation interne du programme : objectifs du chapitre

� d'expliquer le fonctionnement d'un programmecontenant des événements au moment del'exécution en utilisant INITIALIZATION etSTART-OF-SELECTION comme exemples

� d'encapsuler des fonctions dans un sous-programme simple avec un interface.

(C) SAP AG BC400 6-3

� SAP AG 1999

Éléments possibles d'un programme ABAP

Blocévénement

Sous-programmes

Interface

Blocévénement

Écran

ProcessBeforeOutput

ProcessAfterInput

Définitions dezone et type local

Écran de sélection

Module

Module

Blocévénement

Blocévénement

� Un programme ABAP est un ensemble de blocs de traitement. Un bloc de traitement est une sectionpassive du code du programme qui est traitée de manière séquentielle à son démarrage.

� Les blocs de traitement représentent les plus petites unités en ABAP. Il est impossible de lesdécomposer et donc de les imbriquer.

� 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. Ilspeuvent 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. Voustrouverez des informations sur les blocs événements qui appartiennent à l'écran de sélection, à laliste ou à l'écran dans les chapitres sur les dialogues utilisateur.

� le traitement des sous-programmes se déclenche par une instruction ABAP. Les paramètrespeuvent être transférés aux sous-programmes en utilisant une interface, et les sous-programmespeuvent contenir des variables locales.

� les modules sont des blocs de traitement ABAP propres au traitement des dynpros. Parconséquent, les modules seront traités dans le chapitre Dialogues utilisateur : dynpros.

� 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 descomposantes des blocs de traitement ABAP mais sont rassemblées à partir du code source général enutilisant 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-4

� SAP AG 1999

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

Définitions de zone et de type local

Écran de sélectiongénéré pargenerates

INITIALIZATION

pa_date = pa_date - 7.

START-OF-SELECTION.

WRITE pa_date.

PARAMETERS pa_date LIKE sy-datumDEFAULT sy-datum.

Bloc événement

Bloc événement

� 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 sontnécessaires, et leur type et nom sont spécifiés.

� Notre programme est un exemple de blocs événements. Il contient une valeur de saisie pour une datesur un écran de sélection. La valeur par défaut est la date de la semaine précédente. L'instructionPARAMETERS ne peut remplir cette valeur, car un calcul est requis. L'option DEFAULT del'instruction PARAMETERS permet à l'objet de données de remplir la valeur par défaut au démarragedu programme. Les valeurs par défaut peuvent être des littéraux ou des zones de la structure sy. Lesystè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 avantl'envoi de l'écran de sélection standard. START-OF-SELECTION est un bloc événement pour créerdes listes.

� 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 codesource). Lorsque vous générez le programme, le système recherche dans le code source lesinstructions déclaratives. Toutefois, pour plus de lisibilité, regroupez ces déclarations au début duprogramme. L'instruction PARAMETERS représente un des éléments du langage déclaratif. Lorsquele 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-5

� SAP AG 1999

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

Système d'exécution ABAP

Programme ABAP

INITIALIZATION.pa_date = pa_date - 7.

START-OF-SELECTION.

WRITE pa_date.

Lancement du

programme

Temps

Mémoire-tamponde liste

pourliste de base

pa_date

20000101

19991225

??

� Les événements les plus simples sont ceux destinés à un programme exécutable (type 1).

� Le processeur ABAP appelle des blocs événements dans une séquence désignée pour générer ettraiter des listes.

� le bloc événement INITIALIZATION est le premier à être appelé ;

� un écran de sélection est ensuite envoyé au serveur de présentation ;

� dès que vous quittez l'écran de sélection, START-OF-SELECTION est appelé ;

� si le bloc événement START-OF-SELECTION contient des instructions ABAP WRITE, SKIPou ULINE, un buffer de liste est rempli ;

� un buffer de liste est ensuite envoyé au serveur de présentation sous forme de liste.

(C) SAP AG BC400 6-6

� SAP AG 1999

Blocs événements dans des programmes exécutables

Système d'exécution ABAP

Programme ABAP

INITIALIZATION.

START-OF-SELECTION.

Temps

� Introduit par un mot-cléévénementiel

� Un événement estdélimité par le début dubloc de traitementsuivant

� À différents blocsévénementscorrespondentdifférentes tâches

� Le processeur ABAPdétermine l'ordre detraitement desévénements

� Bloc événement pardéfaut :START-OF-SELECTION

� Les événements sont des blocs de traitement appelés par le processeur ABAP. Celui-ci déterminel'ordre de traitement des événements.

� Un programme exécutable comporte différents événements correspondant aux tâches de création delistes.

(C) SAP AG BC400 6-7

� SAP AG 1999

Blocs événements : syntaxe

REPORT ...

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

INITIALIZATION. " Default values for selection screen

pa_date = pa_date - 7.

START-OF-SELECTION. " Start of data processing

WRITE pa_date.

Le traitement des blocs événements ducode source ne dépend pas de l'ordrepar lequel ils sont appelés dans le runtime system. call

INITIALIZATION.INITIALIZATION.

START-OF-SELECTION.START-OF-SELECTION.

� Dans les programmes ABAP, chaque événement est introduit par un mot-clé événementiel. Il setermine lorsque le bloc de traitement suivant démarre. Aucune instruction ABAP ne conclut unévénement de manière explicite.

� Les événements sont appelés par le processeur ABAP. L'ordre dans lequel vous les placez dans unprogramme importe peu : le système les appelle toujours dans un ordre donné.

� START-OF-SELECTION est le premier événement pour générer une liste. Le processeur ABAPl'appelle si vous sélectionnez le bouton "Exécuter".

� INITIALIZATION est un événement que vous utilisez pour définir un grand nombre de valeurs pardéfaut. Ce bloc événement vous permet de paramétrer des valeurs par défaut qui ne peuvent êtredéterminées qu'à l'exécution. Dans l'exemple ci-dessus, la date "Il y a une semaine" est calculée etplacée dans l'objet de données pa_date. Le processeur ABAP envoie ensuite au serveur depré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-8

� SAP AG 1999

Programme comportant des sous-programmes

Sous-programmes

Interface

Bloc detraitement

Sous-programmes

Interface

� Fonctions encapsulées� Programmes mieux

structurés qui peuventêtre lus et compris plusfacilement

� Gestion de programmesplus facile

� Peut être réutilisé demanière locale dans leprogramme

� Bloc de traitement avecinterface

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

(C) SAP AG BC400 6-9

� SAP AG 1999

Sous-programmes dans une liste d'objets

Types d'objets du programmeStructures du DictionnaireZonesÉvénementsSous-programmesAUTHORITY_SCARRIDFILL_ITABWRITE_ITAB

SAPBC400PBD_FORMS

ModifierAfficherCas d'emploi

Cliquer sur le bouton droit

� Vous pouvez naviguer vers les sous-programmes à partir d'une liste d'objets du programme.

� Les cas d'emploi d'un sous-programme affichent toutes les lignes du programme qui appellent lesous-programme.

(C) SAP AG BC400 6-10

� SAP AG 1999

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*---------------------------------------------------------------------*FORM fill_itab USING value( p_carrid) TYPE s_carr_id

CHANGING p_it_flight TYPE sbc400_t_sbc400focc.

...

ENDFORM. " FILL_ITAB

TYPE s_carr_idfill_itab

TYPE sbc400_t_sbc400focc.

� Vous devez déterminer le périmètre fonctionnel d'un sous-programme et examiner son nom, soninterface et les commentaires. Si le sous-programme contient la fonctionnalité requise, vous avezensuite 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ètressont répertoriés après l'option USING. Le type et l'ordre des paramètres d'interface sontimportants.

� les paramètres d'interface qu'il modifie : les paramètres sont répertoriés après l'optionCHANGING. Le type et l'ordre des paramètres d'interface sont importants.

(C) SAP AG BC400 6-11

� SAP AG 1999

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

Système d'exécution ABAP

Programme ABAP

Temps

PERFORM fill_itabUSING pa_carrCHANGING itab.

Bloc événement

p_carrid

p_it_flight

fill_itab

� Lorsqu'un sous-programme est appelé, tous les paramètres d'interface doivent être remplis par desvaleurs. 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.

� 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 letraitement qui suit l'instruction PERFORM.

� Vous pouvez retrouver le déroulement au moment de l'exécution en mode débogage. Vous avezplusieurs 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 sontalors exécutés comme un tout ;

� quitter le traitement pas à pas d'un sous-programme et retourner au programme appelant enutilisant Retour.

(C) SAP AG BC400 6-12

� SAP AG 1999

Appel par valeur et par référence

Appel par valeur et par résultat

START-OF-SELECTION.:

PERFORM form1 USING a1CHANGING a2 a3.

FORM form1 USING VALUE(fv1)CHANGING VALUE(fv2)

fr3 .:

ENDFORM.

fv1fv1

a1 a2 a3

fv2fv2 fr3fr3

Paramètres effectifsParamètres effectifs

Paramètres formelsParamParamètres formelsètres formels

Appel par référence

Appel par valeur

PERFORM

FORM

ENDFORM.

� 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.

� Appel par référence : l'adresse du paramètre effectif est transmis. Dans le sous-programme, lavariable est adressée en utilisant le nom du paramètre formel. Les modifications ont un effetimmédiat sur la variable globale. Si seul le nom du paramètre formel est spécifié dans l'interface dusous-programme, le paramètre est alors appelé par référence.

� Appel par valeur : lorsque le sous-programme est appelé, une variable locale est créée avec le nomdu paramètre formel et la valeur du paramètre effectif est copiée vers le paramètre formel. Deuxtypes d'appel par valeur existent :

� Appel par valeur : le paramètre formel est transmis dans l'interface après la clause USINGcomprenant l'option VALUE( <nom paramètre>). Lorsque le sous-programme est appelé, leparamètre effectif est copié vers le paramètre formel. Les modifications apportées au paramètreformel 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 CHANGINGcomprenant l'option VALUE( <nom paramètre>). Lorsque le sous-programme est appelé, leparamètre effectif est copié vers le paramètre formel. Les modifications initialement effectuées surle paramètre formel affectent uniquement la copie locale. Lorsque l'instruction ENDFORM estatteinte, la valeur du paramètre formel est recopiée dans le paramètre effectif.

(C) SAP AG BC400 6-13

� SAP AG 1999

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

CHANGING it_flight ....

FORM fill_itabUSING VALUE(p_carrid) TYPE s_carr_idCHANGING p_it_flight TYPE sbc400_t_sbc400focc.

DATA ls_flight TYPE sbc400focc. " local structure

SELECT carrid connid fldate seatsmax seatsocc FROM sflightINTO CORRESPONDING FIELDS OF TABLE p_it_flightWHERE carrid = p_carrid.

...ENDFORM.

Une erreur de syntaxe s'affiche si les types de paramètres effectifsne sont pas compatibles avec la manière dont le paramètre formelest typé

Paramètre de saisie

Paramètres formels

pa_carpa_car

itit__flightflight

VALUE(p_VALUE(p_carridcarrid))

p_p_itit__flightflight

� Les paramètres de l'interface sont dits "formels" ; les paramètres transmis au sous-programme sontdits "effectifs".

� Le nombre de paramètres effectifs doit être identique à celui des paramètres formels. Les paramètresoptionnels ne sont pas autorisés. Les paramètres sont affectés dans l'ordre de leur liste.

� Lorsque vous appelez un sous-programme par PERFORM, le système vérifie si le type desparamè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.

� Contrôle complet du type :

� TYPE D, F, I, T ou <type dictionnaire>. Ces types sont entièrement spécifiés. Lesystème contrôle si le type de données du paramètre effectif est identique à celui du paramètreformel dans son intégralité.

� Contrôle partiel par types génériques :

� TYPE C, N, P ou X : le système contrôle si le paramètre effectif est de type C, N, P ouX. La longueur du paramètre et le nombre de décimales dans l'option DECIMALS (type P) sonttransférés du paramètre effectif vers le paramètre formel.

� TYPE <type générique du dictionnaire > : le paramètre formel hérite de toutesles informations non spécifiées concernant un type générique du Dictionnaire, depuis unparamètre formel.

� L'interface se définit dans la routine FORM. Dans l'instruction PERFORM, USING et CHANGINGn'ont qu'une valeur informative.

(C) SAP AG BC400 6-14

� SAP AG 1999

Vous êtes maintenant capable :

Modularisation du programme interne : résumé du chapitre

� Expliquer comment un programme contenant desblocs événements fonctionne au moment del'exécution en utilisant INITIALISATION etSTART-OF-SELECTION comme exemples

� d'encapsuler des fonctions dans un sous-programme simple avec une interface.

(C) SAP AG BC400 6-15

Exercices

Chapitre : Modularisation interne du programmeSujet : 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ôled’autorisation et la sortie de données soient tous deux encapsulés dans lessous-programmes.

Programme : ZBC400_##_FORMS

Solution modèle : SAPBC400PBS_FORMS

1-1 Copiez votre programme ZBC400_##_SELECT_SFLIGHT_ITAB ou la solutionmodèle correspondante SAPBC400DDS_AUTHORITY_CHECK_2 vers le nouveauprogramme ZBC400_##_FORMS. Affectez votre programme à la classe dedé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 lecode de la compagnie aérienne et la valeur requise pour la zone d’autorisationACTVT dans l’interface. Retransférez SY-SUBRC, qui est paramétré par le contrôled’autorisation, vers le programme principal via l’interface. Spécifiez les types deparamètres pour l’interface du sous-programme. Les types possibles duDictionnaire ABAP sont :

Code de la compagnie aérienne Élément de donnéesS_CARR_ID

Code retour : Zonesystème SY-SUBRC

Valeur de la zone d’autorisation ACTVT : Élément de donnéesACTIV_AUTH

(C) SAP AG BC400 6-16

1-3 Modifiez les parties du programme qui dépendent du résultat du contrôled’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 dusous-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 lesdonnées consultées en utilisant l’interface. Spécifiez les types des paramètresd’interface. Affichez les données à partir du sous-programme en utilisant unestructure LOOP… ENDLOOP . Pour ce faire, créez la zone de travail de tabledemandée comme un objet de données local dans le sous-programme. Pourspécifier le type de la structure locale, utilisez l’instruction ABAP DATA: <WA >LIKE LINE OF <ITAB>.

(C) SAP AG BC400 6-17

Solutions

Chapitre : Modularisation du programme interneSujet : 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-18

*&--------------------------------------------------------------*

*& 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 7-1

� SAP AG 1999

� Attributs et avantages des listes

� Listes de base

� Liste des événements

� Listes interactives

� Exemple de syntaxe : listes détaillées

Contenu :

Dialogues utilisateur : listes

(C) SAP AG BC400 7-2

� SAP AG 1999

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

Dialogues utilisateur : listes : objectifs du chapitre

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

� d'écrire un programme qui affiche les détailsd'une ligne à partir de votre liste de base vers uneliste interactive dès que l'utilisateur double-cliquesur cette ligne

� d'expliquer le comportement de votre programmeà l'exécution pendant l'événement AT LINE-SELECTION

(C) SAP AG BC400 7-3

� SAP AG 1999

CA ID PRICEAA 2602 2400 AA 2602 2500 Total 7800

ÉcranÉcran

ImprimerImprimer

FonctionsFonctions multilingues multilingues

Listes

� Le principal objectif d'une liste est d'éditer des données d'une manière qui peut être facilementcomprise par l'utilisateur ; cette édition prend souvent la forme d'un tableau. Dans R/3, ellesrépondent à des besoins de gestion spécifiques :

� elles sont indépendantes de langue. Les textes et intitulés apparaissent dans la langue de travaildès que la traduction adéquate est disponible ;

� elles peuvent éditer des valeurs monétaires dans de nombreuses devises ;

� L'édition de listes s'effectue :

� à l'écran : c'est ici que vous ajoutez couleurs et icônes,

� sur une imprimante,

� sur Internet/intranet : conversion automatique en format HTML ;

� vous pouvez également sauvegarder des listes dans le système R/3 ou les éditer pour untraitement par un logiciel commercial externe (un tableur, par exemple).

(C) SAP AG BC400 7-4

� SAP AG 1999

Retour/Terminer/Annuler

Défiler

Imprimer

Rechercher (dans liste)

Sauvegarder:Liste:

Système ...

Commandes de listes

� 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 dansle Bureautique ;

� Envoyer : envoie la liste sous forme de courrier électronique.

� 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-5

� SAP AG 1999

Intitulé de liste

Intitulé de colonne

Sauvegarder

:Liste:

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

Titre/intitulés

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

Intitulés de page

� Chaque liste comporte un intitulé et jusqu'à quatre lignes d'intitulé de colonnes. Il existe deuxmanières différentes d'utiliser ces outils :

� à partir de l'Éditeur : fonctions de gestion d'éléments de texte ;

� à partir de la liste elle-même. Si vous sauvegardez, activez et exécutez ensuite votre programmepour créer la liste, vous pouvez introduire aussi bien les intitulés de liste que de colonnes enchoisissant le chemin de menus Système -> Liste -> Intitulés de liste. L'avantage principal de cetteméthode est que la liste reste affichée à l'écran. Cela facilite l'introduction des intitulés de colonnes.

� Lorsque vous relancerez le programme, les nouveaux intitulés apparaîtront automatiquement dans laliste.

� Si vous ne saisissez pas d'intitulé, le titre du programme est sélectionné par défaut.

(C) SAP AG BC400 7-6

� SAP AG 1999

WRITE:/ /15 text-001,35 sy-datum,/15 text-002,35 sy-uname.

Code source Éléments de texteTitre/en-tTitre/en-têtesêtes

Programme

Symboles de texteSymboles de texte

EN Creation DateDE ErstellungsdatumFR Date de création

EN Creation DateDE ErstellungsdatumFR Date de création :EN Created by

001

002

Intitulé de liste

Creation date: 01.01.1998Created by: WITTMANN

Fonctions multilingues

text-001,

text-002,

� Les titres et intitulés font partie des éléments de texte d'un programme. Vous pouvez traduire tousles éléments de texte dans d'autres langues. Ils s'affichent dans la langue définie sur l'écran deconnexion.

� Les symboles de texte forment un autre type d'élément de texte. Ceux-ci sont des objets de donnéesde littéraux alphanumériques spécifiques. Il s'agit de littéraux alphanumériques spéciaux que voustraduisez sans modification du code source. Avec les symboles de texte, vous créez des listes nontributaires d'une langue spécifique.

� 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-7

� SAP AG 1999

Listes d'un programme exécutable

Lancement duprogramme

Table debase dedonnées

Objets de données

Système d'exécution ABAP

Programme ABAP

Mémoiretamponde liste

START-OF-SELECTION

� Dans des programmes exécutables (type 1), les listes sont automatiquement affichées quand leursblocs événements correspondants sont traités. Ces blocs de traitement doivent cependant contenirune instruction de création de liste. Celles-ci sont WRITE, SKIP, et ULINE.

� Les événements sont appelés dans un ordre adapté au traitement des listes :

� avant d'envoyer l'écran de sélection : INITIALIZATION ;

� après avoir quitté l'écran de sélection : START-OF-SELECTION.

� 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 temporairementstockées dans le buffer de liste.

� 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-8

� SAP AG 1999

Listes détaillées

Temps

Table debase de données

Objets de données

START-OF-SELECTION

Système d'exécution ABAP

Programme ABAP

Mémoiretamponpourliste de base

AT LINE-SELECTIONMémoire tamponpour listedétaillée

� Dans des programmes exécutables, vous pouvez utiliser le bloc événement AT LINE-SELECTIONpour créer des listes détaillées.

� 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 uneentrée. Si vous utilisez un statut standard, celui-ci apparaît automatiquement chaque fois que vouschoisissez l'icône Sélectionner, le poste du menu Sélectionner dans le menu Traiter, ou la touchede fonction F2 ;

� affiche les listes détaillées quand l'événement AT LINE-SELECTION est traité et augmente lavaleur 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 quevous sélectionnez l'icône flèche verte à partir de la liste détaillée effective(n).

(C) SAP AG BC400 7-9

� SAP AG 1999

Liste de base

Liste détaillée 1

Programme de démonstration ...

Liste de basesy-lsind 0

Listes dListes détaillétailléesées sy-lsind

Liste détaillée 2 Listes dListes détaillétailléesées sy-lsind

Jusqu'à vingtlistes détaillées

1

2

Exemple : une liste détaillée simple

� 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ônecorrespondante à partir de la barre d'outils d'application ou son entrée de menu, ou encore enutilisant 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 devingt (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-10

� SAP AG 1999

REPORT sapbc400udd_secondary_list_a.

START-OF-SELECTION.WRITE: / text-001 COLOR col_heading,

/ 'sy-lsind',sy-lsind color 2.

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

sy-lsind color 4.

Symboles de texte :

001

002

Listes de base

Listes détaillées

Syntaxe : une liste détaillée simple

AT LINE-SELECTION.

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

� vous créez une liste de base en remplissant le buffer de la liste de base dans un bloc événementapproprié (dans ce cas START-OF-SELECTION) en utilisant soit WRITE, SKIP, ou ULINE;

� utilisez le bloc événement AT LINE-SELECTION lorsque vous programmez des listesdé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 ;

� vous pouvez programmer la navigation entre les listes détaillées en testant la zone sy-lsinddans le bloc événement AT LINE-SELECTION.

(C) SAP AG BC400 7-11

� SAP AG 1999

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

Vous avez choisi LH 0402

Liste des volsListe des vols

DDétail : volsétail : vols

Date du vol

19.12.199820.12.199824.12.1998

Max.

380380380

Occ.

240270380

Exemple de listes détaillées

� Nous allons maintenant écrire un programme en utilisant les listes de base et les listes détaillées.

� La liste de base de votre programme doit contenir des données de vol telles que le numéro de vol, lacompagnie aérienne, la ville et l'aéroport de départ, ainsi que les heures de départ et d'arrivée. Toutesces informations figurent dans la table SPFLI.

� L'utilisateur doit être en mesure d'accéder aux informations sur n'importe quel vol en double-cliquantsur l'identificateur de compagnie aérienne et le numéro de vol. La date du vol s'affiche, ainsi que lenombre de réservations. Ces données se trouvent dans la table SFLIGHT. Vous devez utiliser leszones-clés SPFLI dans cette liste détaillée afin de lire les données adéquates dans SFLIGHT. Cesopérations sont décrites dans les pages suivantes.

� Le programme type est nommé SAPBC400UDD_EXAMPLE_2 et fait partie de la classe dedéveloppement BC400.

(C) SAP AG BC400 7-12

� SAP AG 1999

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.ENDSELECT.

Zone HIDE

HIDE <objet de données>.

Buffer de liste de base

LH 0400 FRA JFK 10:10:00LH 0402 FRA JFK 13:30:00...SQ 0002 SIN SFO 09:30:00

Ligne

...56

...11

Ligne

...56

...11

wa_spfli-carrid

...LHLH...

SQ

wa_spfli-connid

...04000402

...0002

Zone HIDE

HIDE: wa_spfli-carrid, wa_spfli-connid.

� Lorsque l'événement AT LINE-SELECTION est traité, les objets de données d'un programmecontiennent les mêmes valeurs que celles affichées auparavant dans la liste de base. Cependant, uneliste détaillée nécessite souvent des données sélectionnées dans la liste de base elle-même. Vouspouvez utiliser la zone HIDE pour stocker certaines données de la ligne que vous avez sélectionnéeet les insérer automatiquement où vous en avez besoin dans l'objet de données correspondant d'uneliste 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.

� Pour cela, utilisez le mot-clé ABAP HIDE, suivi de la liste des objets de données voulus. Le systèmemémorise automatiquement le nom et le contenu de l'objet de données, selon la position de sa lignedans la liste.

(C) SAP AG BC400 7-13

� SAP AG 1999

REPORT sapbc400udd_example_2.

AT LINE-SELECTION.WRITE: text-001,

wa_spfli-carrid,wa_spfli-connid.

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

Zone HIDE

Ligne

...56

...11

wa_spfli-carrid

...LHLH...

SQ

wa_spfli-connid

...04000402

...0002

wa_spfliLH 0402 ?? ?? ????

Symboles de texte :

001 Correspondances

Sélection de ligne

AT LINE-SELECTION.

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

(C) SAP AG BC400 7-14

� SAP AG 1999

REPORT sapbc400udd_example_2....

AT LINE-SELECTION.IF sy-lsind = 1.WRITE: text-001,

wa_spfli-carrid,wa_spfli-connid.

SELECT fldate seatsmax seatsoccFROM sflightINTO CORRESPONDING FIELDS OF wa_sflightWHERE carrid = wa_spfli-carridAND connid = wa_spfli-connid.

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

ENDSELECT.ENDIF.

Symboles de texte :

001 CorrespondancesAT LINE-SELECTION.

Sélection de lignes : syntaxe

� Vous créez une liste détaillée en remplissant le buffer de la liste détaillée dans le bloc événement ATLINE-SELECTION en utilisant soit WRITE, SKIP, ou ULINE. Dans ce programme type, leszones-clés pour la compagnie aérienne s'affichent et ses vols disponibles dans la table SFLIGHTsont lues en utilisant une boucle SELECT. Veuillez noter que les informations spécifiques des lignesde la compagnie aérienne sont disponibles uniquement en double-cliquant sur les objets de donnéesapproprié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-15

� SAP AG 1999

Vous êtes maintenant capable :

Dialogues utilisateur : listes : résumé du chapitre

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

� d'écrire un programme qui affiche les détailsd'une ligne à partir de votre liste de base vers uneliste interactive dès que l'utilisateur double-cliquesur cette ligne

� d'expliquer le déroulement de votre programme àl'exécution pendant l'événement AT LINE-SELECTION

(C) SAP AG BC400 7-16

Dialogues utilisateur – listes : exercices

Chapitre : Dialogues utilisateur : listesSujet : 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 lasolution modèle correspondante comme suit :quand vous avez sélectionné un vol sur la liste de base (double-cliquez ouappuyez sur F2 sur la ligne de liste appropriée), affichez une listedé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èlecorrespondante SAPBC400DDS_AUTHORITY_CHECK vers le nouveauprogramme ZBC400_##_DETAIL_LIST. Affectez votre programme à la classede 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 sontaccessibles pour la construction de la liste détaillée lorsque l’utilisateur sélectionneun vol à partir d’une liste de base (double-cliquez ou appuyez sur F2 sur la ligne deliste correspondante). (HIDE)

1-3 Ajoutez l'événement AT LINE-SELECTION à votre programme pour vouspermettre de construire la liste détaillée.

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

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

(C) SAP AG BC400 7-17

BOOKID,CUSTOMID,CUSTTYPECLASS,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 ladevise 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-18

Solutions

Chapitre : Dialogues utilisateur : listesSujet : 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-19

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 debase

AT LINE-SELECTION.

IF sy-lsind = 1.

* Les zones-clés sont retransférées de la zone mémoire HIDE vers desobjets 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 8-1

� SAP AG 1999

� Attributs et avantages des écrans de sélection

� Définir des écrans de sélection

� Évaluer une entrée utilisateur pour limiter la sélection debase de données

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

� Exemple de syntaxe : contrôles de saisiesupplémentaires avec dialogue d'erreur

Contenu :

Dialogues utilisateur : écrans de sélection

(C) SAP AG BC400 8-2

� SAP AG 1999

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

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

� de décrire les attributs et les avantages desécrans de sélection

� d'écrire un programme qui permet à l'utilisateurde saisir des plages de valeurs dans un écran desélection qui peuvent être utilisées pour limiter lenombre d'enregistrements remontés de la base dedonnées

� d'écrire un programme qui comporte descontrôles de saisie supplémentaires sur sonécran de sélection renvoyant cet écran en casd'erreur

(C) SAP AG BC400 8-3

� SAP AG 1999

Écran de sélection

Table debase de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAP

Objets de données

� Utilisez ces écrans pour saisir les critères de sélection requis par le programme.

� Si vous créez une liste contenant des données d'une très grande table de base de données, vouspouvez utiliser un écran de sélection pour limiter la quantité de données sélectionnée. Au moment del'exécution, spécifiez une plage de valeurs pour une des zones-clés ; seules les données comprisesdans cette plage sont lues dans la base et affichées dans la liste. Ceci réduit considérablement lacharge du réseau.

(C) SAP AG BC400 8-4

� SAP AG 1999

EntrEntréeéevaleurvaleur

FonctionsFonctions multilingues multilingues

......VariantesVariantes

Aide Aide à la rechercheà la recherche

ContrContrôles de typeôles de type

Écran de sélection

� Les écrans de sélection sont des masques de saisie. L'utilisateur y entre des sélections, ce qui réduitla 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 lebouton de commande des entrées possibles.

� Vous pouvez traduire les textes de sélection dans d'autres langues pour les afficher dans la langue detravail choisie par l'utilisateur.

� Le système effectue automatiquement un contrôle des types. En cas de saisie d'une valeur d'un typeincorrecte, un message d'erreur s'affiche. La zone concernée est alors prête à accepter la nouvellesaisie.

(C) SAP AG BC400 8-5

� SAP AG 1999

SELECT-OPTIONS ...

PARAMETERS ... Ville de départ

Compagnieaérienne LH to

SIGNI

OPTIONGE

LOWLH

Compagnie aérienneValeur individuelleSupérieur ou égal

SupérieurInférieurDifférent

Sélectionner

Exclure de la sélection

GGérer les options de sérer les options de sélectionélection

Compagnie aérienne

InfInférieur ou érieur ou égalégalValeurs simplesPlages de valeursExclusion de valeurs simplesExclusion de plages de valeurs

...

Saisie de sélections

� Les écrans de sélection vous permettent de saisir des sélections complexes tout comme des sélectionsde valeurs individuelles. Les options de sélection programmables sont les suivantes :

� définition d'options de sélection ;

� saisie de plusieurs valeurs ou de plages de valeurs ;

� définition de critères d'exclusion.

� Chaque écran de sélection contient un icone Informations. Sélectionnez cet icone pour afficher desinformations complémentaires.

(C) SAP AG BC400 8-6

� SAP AG 1999

Compagnieaérienne

Aide Aide à la rechercheà la recherche

Dictionnaire ABAP

Aide à la recherche

Vol n° à

DATA: wa LIKE spfli.PARAMETERS pa_car TYPE spfli-carrid.SELECT-OPTIONS so_conn FOR wa-connid.

No.

0400

0402

Aéroportde départFRA

FRA

Aéroportd'arrivéeJFK

JFK

Heure dedépart10:10:00

13:30:00

ID

LH

LH

Tables de contrôle

Élément de données

Zone de tablesZones de structure

Aide à la recherche

� Si vous référencez une zone de saisie d'après un objet du Dictionnaire ABAP doté d'une aide à larecherche, le système fournit automatiquement une aide sur les valeurs possibles.

� Pour adapter cette aide à vos besoins, il est possible de définir une aide à la recherche dans leDictionnaire ABAP.

(C) SAP AG BC400 8-7

� SAP AG 1999

Code source Éléments de texteTitre/en-têtes

Programme

Symboles de texte

SO_CARR

PA_CITY

Textes de sélection

EN Airline carrierDE

EN Departing fromDE...

Ville de départ

Compagnieaérienne LH à

FonctionsFonctions multilingues multilingues

REPORT bc400td_selection_screen.:

SELECT-OPTIONS so_carr FOR ...PARAMETERS pa_city TYPE ...

Textes de sélection

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

(C) SAP AG BC400 8-8

� SAP AG 1999

...

Ville de départ

Compagnieaérienne AA LHà

Variante CARRIER_AA_TO_LH:

zone de saisie HideCompagnies aériennes

AA à LH

Variantes

Ville de départ

� Vous pouvez définir et stocker des variantes pour tout écran de sélection. Lancez le programme etsélectionnez Variantes -> Sauvegarder comme variante.

� Les variantes facilitent l'utilisation des écrans de sélection grâce aux fonctions suivantes :

� pré-affectation de valeurs aux zones de saisie ;

� masquage de zones de saisie ;

� sauvegarde de ces paramètres en vue d'une réutilisation

� Une variante peut renvoyer à plusieurs écrans de sélection.

� Les variantes sont dépendantes du mandant.

� En cliquant sur l'icone Informations d'un écran de sélection, vous obtenez des renseignementscomplémentaires sur les variantes. Consultez également le cours BC405 Reporting dans ABAPWorkbench.

(C) SAP AG BC400 8-9

� SAP AG 1999

Instruction PARAMETERS

PARAMETERS pa_carTYPE s_carr_id.

Système d'exécution ABAP

Programme ABAP

PARAMETERSPARAMETERS

Bloc detraitementABAP

pa_car

Zones et types définis localement

Écran desélection

RéférenceDictionnaireABAP

s_carr_id

� Dans un programme exécutable, une seule instruction PARAMETERS suffit pour générer un écran desélection standard.

� 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 desélection, et un objet de données <nom> du type spécifié.

� Si l'utilisateur saisit une valeur et choisit "Exécuter", cette valeur est placée dans l'objet de donnéesinterne <nom> du programme. Le système n'autorise que les entrées de type approprié.

(C) SAP AG BC400 8-10

� SAP AG 1999

Transport de données

PARAMETERS pa_car TYPE s_carr_id.

Système d'exécution ABAP

Programme ABAP

Bloc detraitementABAP

pa_car

Temps

Zones et types définis localement

Écran de sélection

Écran desélection

papa_car_car

papa_car_car

� Quand le bloc événement INITIALIZATION a été traité, l'écran de sélection est envoyé au serveurde présentation. PARAMETERS permet de transporter les valeurs définies de l'objet de données dansles zones de saisie du même nom de l'écran de sélection.

� L'utilisateur peut alors modifier les valeurs des zones de saisie. Si l'utilisateur clique ensuite sur lafonction "Exécuter", les valeurs des zones de saisie sont transportées vers les objets de donnéesportant le même nom du programme et peuvent être évaluées dans les blocs de traitement ABAP.

(C) SAP AG BC400 8-11

� SAP AG 1999

Utilisation de Parameters dans l'instruction SELECT 1

REPORT ...DATA wa_spfli TYPE spfli.PARAMETERS pa_car TYPE s_carr_id....SELECT carrid connid cityfrom cityto ...

FROM spfliINTO CORRESPONDING FIELDS OF wa_spfliWHERE carrid = pa_car.

WRITE: / wa_spfli-carrid, wa_spfli-connid,wa_spfli-fldate, ... .

ENDSELECT.

WHERE carrid = pa_car

SELECT

ENDSELECT

� Si vous avez utilisé l'instruction PARAMETERS pour affecter à une zone de saisie la fonction de zoneclé d'une table, vous pouvez limiter la sélection de données en indiquant la clause WHERE dansl'instruction SELECT.

� Dans notre exemple, seuls les enregistrements de données dont la zone-clé CARRID a la mêmevaleur que celle contenue dans l'objet de données pa_car lors de l'exécution sont lus dans la tableSPFLI.

(C) SAP AG BC400 8-12

� SAP AG 1999

OPTIONS SELECT

Système d'exécution ABAP

Programme ABAP

Bloc detraitementABAP

so_carr

Écran desélection

gd_carrid

DATA gd_carrid TYPE s_carr_id.SELECT-OPTIONS so_carr FOR gd_carrid.

Zones et types définis localement

SELECT-OPTIONSSELECT-OPTIONS

Sign low highoption

� L'instruction SELECT-OPTIONS <nom> FOR <objet de données> définit une option desélection : elle place deux zones de saisie sur l'écran de sélection, qui est de même type que celuidéfini dans la référence. Cela permet alors à l'utilisateur de saisir une plage de valeurs ou dessélections complexes. L'instruction définit également une table interne <nom> comportant les quatrecolonnes suivantes :

� sign : détermine si la valeur ou la plage de valeurs concernée doit être incluse ou non dansla sélection ;

� option : contient l'opérateur. Vous trouverez la liste des opérateurs possibles dans ladocumentation mot-clé de l'instruction SELECT-OPTIONS ;

� low : contient soit la limite inférieure d'une plage de valeurs, soit une valeur unique ;

� high : contient la limite supérieure d'une plage de valeurs.

� La table de sélection <nom> renvoie toujours à un objet de données déjà déclaré. Celui-ci sert dezone cible pendant la sélection de base de données, tandis que la table de sélection regroupe lesvaleurs possibles. Une version spéciale de la clause WHERE existe pour la sélection de base dedonnées. Elle détermine si la base de données contient ou non la zone correspondante dans sa réservede valeurs possibles.

(C) SAP AG BC400 8-13

� SAP AG 1999

Transport de données

Système d'exécution ABAP

Programme ABAP

Bloc detraitementABAP

so_carr

Écran desélection

Écran desélection

Temps

wa_scarr

DATA gd_carrid TYPE s_carr_id.SELECT-OPTIONS so_carr FOR gd_carrid.

Zones et types définis localement

so_so_carrcarr

gd_carrid

soso__carrcarr

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

(C) SAP AG BC400 8-14

� SAP AG 1999

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 spfliINTO CORRESPONDING FIELDS OF wa_spfliWHERE carrid IN so_carr.

WRITE: / wa_spfli-carrid, wa_spfli-connid,wa_spfli-cityfrom, wa_spfli-cityto, ... .

ENDSELECT.

WHERE carrid IN so_carr

SELECT

ENDSELECT

� Notre exemple indique comment délimiter une plage de sélection dans une base de données pour uneoption de sélection.

� Interprétation des conditions déclarées par SELECT-OPTIONS dans une table interne :

� si la table interne est vide : la condition <zone> IN <selname> est toujours vraie ;

� si elle ne contient que des conditions d'inclusion simples i1, ..., in : le résultat est lacondition complexe ( i1 OR ... OR in ) ;

� si la table interne ne contient que des conditions d'exclusion simples e1, ..., em : le résultat estla condition combinée ( NOT e1 ) AND ... AND ( NOT em );

� si la table interne réunit les conditions d'inclusion simples i1, ..., in et les conditionsd'exclusion simples e1, ..., em, le résultat est la condition combinée ( i1 OR ... ORin ) AND ( NOT e1 ) AND ... AND ( NOT em ).

(C) SAP AG BC400 8-15

� SAP AG 1999

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

Temps

Système d'exécution ABAP

Programme ABAP

INITIALIZATION.

START-OF-SELECTION

AT SELECTION-SCREEN.

NonOui

Lancement duprogramme

� Dans un programme exécutable, le système d'exécution ABAP génère un écran de sélection standardsi vous avez écrit au moins une instruction PARAMETERS ou SELECT-OPTIONS. L'écran desélection appartient à l'événement AT SELECTION-SCREEN.

� L'écran de sélection s'affiche après l'événement INITIALIZATION.

� Lorsque vous appuyez sur la touche Entrée ou sur une touche de fonction, cliquez sur un bouton decommande ou bien choisissez une fonction de menu, le système effectue un contrôle de type. Si lesentrées ne sont pas du type adéquat, il affiche un message d'erreur et attend une nouvelle entrée. Unefois le type corrigé, il déclenche l'événement AT SELECTION-SCREEN.

� 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-16

� SAP AG 1999

Dialogues d'erreur dans AT SELECTION-SCREEN

Temps

Lancementdu programme

Système d'exécution ABAP

Programme ABAP

INITIALIZATION.

START-OF-SELECTION

AT SELECTION-SCREEN.

MESSAGE e001.

NonOui

MESSAGE e001.

� Utilisez l'événement AT SELECTION-SCREEN chaque fois que vous souhaitez programmer descontrôles supplémentaires à un écran de sélection standard.

� Toute action utilisateur lance l'événement AT SELECTION-SCREEN. Si un dialogue d'erreur sedéclenche, le système revient à l'écran de sélection et toutes les zones de saisie sont de nouveauaccessibles. Un message s'affiche dans la ligne d'état.

� Pour des informations complémentaires sur l'instruction MESSAGE, référez-vous également à ladocumentation mots-clés.

� Des informations complémentaires se trouvent dans la documentation mots-clés à ATSELECTION-SCREEN.

(C) SAP AG BC400 8-17

� SAP AG 1999

AT SELECTION-SCREEN : syntaxe

PARAMETERS: pa_car TYPE s_carr_id.

* Premier événement traité après avoir quitté l'écran desélectionAT SELECTION-SCREEN.AUTHORITY-CHECK OBJECT 'S_CARRID'ID 'CARRID' FIELD pa_carID 'ACTVT' FIELD actvt_display.

IF sy-subrc <> 0.* Remontrer l'écran de sélection et indiquer message dansbarre d'état

MESSAGE e045(bc400) WITH pa_car.ENDIF.

AT SELECTION-SCREEN.

MESSAGE e045(bc400) WITH pa_car.

� Comme exemple de contrôle de saisie supplémentaire avec dialogue d'erreur, une zone de saisie pourl'identificateur de la compagnie aérienne doit être ajoutée au programme.

� 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, leprogramme continue ;

� si l'utilisateur ne possède pas l'autorisation d'affichage, l'écran de sélection se réaffiche et unmessage d'erreur apparaît dans la barre d'état.

(C) SAP AG BC400 8-18

� SAP AG 1999

Vous êtes maintenant capable :

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

� de décrire les attributs et les avantages desécrans de sélection ;

� d'écrire un programme qui permet à l'utilisateur desaisir des plages de valeurs dans un écran desélection qui peuvent être utilisées pour limiter lenombre d'enregistrements de données retrouvés àpartir de la base de données ;

� d'écrire un programme qui comporte descontrôles de saisie supplémentaires sur son écrande sélection renvoyant cet écran en cas d'erreur.

(C) SAP AG BC400 8-19

Écran de sélection : exercices

(C) SAP AG BC400 8-20

(C) SAP AG BC400 8-21

Chapitre : Écran de sélection

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

• d’utiliser l’instruction ABAP SELECT-OPTIONS pour saisir desvaleurs complexes sur un écran de sélection standard ;

• de tenir compte de valeurs complexes dans une sélection de base dedonnées ;

• de programmer un message d’erreur pour un écran de sélectionstandard.

Complétez votre programme ZBC400_##_DETAIL_LIST ou lasolution modèle correspondante comme suit.Fournissez à l’utilisateur un moyen de saisir une plage de valeurscomplexes pour le numéro de vol. Tenez compte des valeurs dans votresélection de base de données. De plus, modifiez votre programme pour que l’utilisateur puissecontinuer après l'écran de sélection seulement si le contrôle d’autorisationpour 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èlecorrespondante SAPBC400_UDS_DETAIL_LIST vers le programmeZBC400_##_SEL_SCREEN. Affectez votre programme à la classe dedé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 plagede 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èsl’écran de sélection si le contrôle d’autorisation sur l’objet d’autorisationS_CARRID échoue. Si le contrôle d’autorisation échoue, affichez un message

(C) SAP AG BC400 8-22

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-23

Solutions

(C) SAP AG BC400 8-24

(C) SAP AG BC400 8-25

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 labarre 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-26

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 9-1

� SAP AG 1999

� Attributs et avantages des dynpros

� Créer des dynpros

� Layout

� Attributs de zone

� Logique d'exécution

� Transport de données

� Utiliser les boutons de commande et évaluer les actionsutilisateur

Contenu :

Dialogues utilisateur : dynpros

(C) SAP AG BC400 9-2

� SAP AG 1999

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

Dialogues utilisateur : dynpros : objectifs du chapitre

� de décrire les attributs et les avantages desdynpros

� d'écrire un programme qui :

� affiche les données sur un dynpro

� permet à l'utilisateur de modifier certaines deces données

� permet à l'utilisateur d'influencer le traitementultérieur du programme en utilisant desboutons de commande

(C) SAP AG BC400 9-3

� SAP AG 1999

ContrContrôles de cohôles de cohérenceérenceavec saisie de donnavec saisie de données ées

DDéroulement éroulement du programmedu programme

flexibleflexible

200

120

140

100

300Aide Aide à la rechercheà la recherche

ContrContrôles de typeôles de type

Avantages des dynpros

� Les dynpros sont plus que de simples moniteurs dotés de zones de saisie et d'édition.

� Vous utilisez les dynpros intégrés au Dictionnaire ABAP pour effectuer des contrôles de cohérenceautomatiques sur leurs zones de saisie. Ces contrôles portent sur les saisies, les types, les clés et lesvaleurs fixes. Ils reposent tous sur les informations contenues dans le Dictionnaire ABAP.

� Vous pouvez effectuer des contrôles complémentaires spécifiques du programme. Des techniquesadaptées aux dynpros vous permettent de vérifier l'ordre dans lequel ces contrôles sont effectués.

� 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 casesd'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.

� Les programmes contenant des dynpros se caractérisent donc par une grande souplesse.

(C) SAP AG BC400 9-4

� SAP AG 1999

Utilisation des dynpros

100

200

300

120

140

Code de transaction

CALL SCREEN 100.

� Vous pouvez appeler un dynpro à partir de n'importe quel bloc de traitement ABAP.

� 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 traitementcorrespondants. Dans ce cas, le premier dynpro est appelé directement en utilisant un code detransaction.

(C) SAP AG BC400 9-5

� SAP AG 1999

Vol DVol Départ Destinationépart DestinationLH 0400 FRA Francfort JFK New YorkLH 0402 FRA Francfort JFK New York...SQ 0002 SIN Singapour SFO San Francisco

Liste des vols

Modifier donnModifier données de volées de volCompagnie aérienneNuméro de vol

Aéroport de départDestination

Durée du volHeure de départ

Modifierdans la

base de données

Dynpro

Exemple de dynpro

LH0400

8:2410:10:00

FRAJFK

Sauvegarder Retour

� Dans les prochains chapitres, vous allez développer un programme de modification des données devol standard.

� Appelez le dynpro par un double-clic sur une des entrées de la liste de base "Liste des vols". Cedynpro affiche les données contenues dans la ligne sélectionnée, ainsi que des informationscomplémentaires sur la compagnie aérienne. Vous pouvez modifier l'horaire de vol ainsi quel'heure de départ.

� Pour revenir à la liste de base sans modifier de données, sélectionnez "Retour".

� Pour enregistrer les modifications dans la base de données, sélectionnez "Sauvegarder".

� Il est possible de modifier la base de données en utilisant des modules de fonction. Consultez lechapitre Dialogues de base de données II pour en apprendre davantage sur ce processus.

(C) SAP AG BC400 9-6

� SAP AG 1999

Attributsde dynpro

Layoutde dynpro

Attributsde zone

Commande d'exécution

Numéro de dynproCourte descriptionType de dynproDynpro suivant ...

PROCESS BEFORE OUTPUT.MODULE CLEAR_OK_CODE.

PROCESS AFTER INPUT.MODULE USER_COMMAND_0100.

Nom de zoneLongueurde zoneSaisieSortie ...

x

Compagnieaérienne

ScreenPainter

Composantes d'un dynpro

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

� spécification des propriétés (Attributs de dynpro) ;

� spécification de la structure (dans l'Éditeur pleine page) ;

� définition des attributs pour les éléments du dynpro (Liste de zones) ;

� programmation de sa logique d'exécution.

(C) SAP AG BC400 9-7

� SAP AG 1999

Vol DVol Départ Destinationépart DestinationLH 0400 FRA Francfort JFK New YorkLH 0402 FRA Francfort JFK New York...SQ 0002 SIN Singapour SFO San Francisco

Liste des vols

Modifier donnModifier données de volées de volCompagnie aérienneNuméro de vol

Aéroport de départDestination

Durée du volHeure de départ

Dynpro

Étape 1 : création d'un dynpro

� Pour créer un dynpro, vous commencez par définir sa structure et les attributs de ses zones. Leszones Compagnie aérienne, Numéro de vol, Aéroport de départ, et Aéroport d'arrivée doivent seprésenter comme des zones d'édition, Temps de vol et Heure de départ comme des zones de saisie.

� Vous devez être en mesure d'appeler votre dynpro en double-cliquant sur une ligne de la liste de baseet de retourner à la liste de base en sélectionnant la touche de fonction appropriée sur le dynpro.

(C) SAP AG BC400 9-8

� SAP AG 1999

AnnulerOui Non

Créer un objet

Dynpro 100 n'existe pas.Voulez-vous créer l'objet ?

Création d'un dynpro : attributs

:AT LINE-SELECTION.

:CALL SCREEN 100.

:

Courte description

Dynpro suivant 0

ABAP

100 Double-clic

Attributs de dynproAffichage de données supplémentaires

Type de dynproNormalSous-dynproBoîte de dialogue modale

ScreenPainter

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

� par la Navigation forward, à partir de l'Éditeur ABAP, cliquez sur le numéro de dynpro etaccédez automatiquement au Screen Painter ; accédez automatiquement au Screen Painter ;

� par la liste d'objets de Object Navigator.

� Lorsque vous créez le premier dynpro, le système vous demande de saisir ses attributs. Entrez unecourte description de votre dynpro, choisissez le type Normal, puis saisissez le numéro de dynprosuivant dans la zone de saisie Dynpro suivant.

� Si vous tapez 0 ou que vous laissez la zone Dynpro suivant vide, le système effectue d'abord untraitement complet du dynpro, puis reprend le traitement du programme au point qui suitimmédiatement l'appel du dynpro. N'oubliez pas que la valeur 0 est supprimée de la zone de saisieDynpro suivant, puisqu'elle est identique à la valeur initiale de la zone.

� Dans notre exemple, vous appelez votre dynpro à partir d'une liste de base. CALL SCREEN 100doit donc faire partie de l'événement AT LINE-SELECTION.

(C) SAP AG BC400 9-9

� SAP AG 1999

Zones de saisie d'une structure du Dictionnaire

T

X

Compagnie aérienneNuméro de vol

Aéroport de départDestination

Durée du volHeure de départ

sdyn_conn

� Vous affectez des attributs aux zones d'un dynpro de deux façons :

� à partir du Dictionnaire, en utilisant les types et les attributs de zone fournis dans lesstructures du Dictionnaire ABAP. Toutes les informations relatives à l'objet sont accessibles, ycompris des informations sémantiques sur ses éléments de données et ses liens avec des clésexternes. Le nom de la zone du Dictionnaire est automatiquement affecté à la zone du dynpro.

� à partir d'un programme, en utilisant les attributs de zone d'objets de données préalablementdéfinis dans un programme. Pour cela, une copie activée du programme doit déjà exister. Lenom de l'objet de données est automatiquement affecté à la zone du dynpro.

� Vous pouvez définir facilement des éléments du dynpro tels que zones de saisie ou d'édition, textesde 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.

� Pour effacer un élément du dynpro, sélectionnez-le avec la souris, puis choisissez "Effacer".

� Pour déplacer un élément du dynpro, cliquez dessus et faites glisser.

(C) SAP AG BC400 9-10

� SAP AG 1999

Modification des attributs de zone

T

X

AttributsAttributs

Dict

FCode FType

Ligne Colonne

NomTexte

Prog Disp

Compagnie aérienneNuméro de vol

Aéroport de départDestination

Durée du volHeure de départ Zone de saisie

Zone d'éditionZone requise . . .

SDYN_CONN-CARRID

� Pour gérer les attributs de zone d'un dynpro, sélectionnez une zone et choisissez Attributs.

� 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.

� Si les zones obligatoires ne sont pas toutes remplies lors de l'exécution et qu'une action utilisateurs'effectue, un dialogue d'erreur se déclenche et toutes les zones de saisie se réaffichent pour unenouvelle entrée.

(C) SAP AG BC400 9-11

� SAP AG 1999

SBOOK-CARRID TEXT 5 14 16 16 1 CHAR

vLg

SDYN_CONN-CARRID I/O . . . ...

SDYN_CONN-CARRID Text . . .

Textes/modèles Attr. gén. Afficher attr. Modif. taille Références

OINom de zone Type de zone O seult.. . .

Attributs de zones : liste d'éléments

Type de zone

Screen PainterScreen Painter : liste d' : liste d'élélémentséments

� Pour éditer les attributs de zones d'un dynpro, choisissez Liste des zones.

� La liste de zones s'affiche alors sous forme de table.

� Vous pouvez également accéder à cette fonction sous un format différent depuis le Screen Paintergraphique.

(C) SAP AG BC400 9-12

� SAP AG 1999

Vol DVol Départ Destinationépart DestinationLH 0400 FRA Francfort JFK New YorkLH 0402 FRA Francfort JFK New York...SQ 0002 SIN Singapour SFO San Francisco

Liste des vols

Modifier donnModifier données de volées de volCompagnie aérienneNuméro de vol

Aéroport de départDestination

Durée du volHeure de départ

Dynpro

Étape 2 : affichage des données

LH0400

8:2410:10:00

FRAJFK

� Dans la 2ème étape vous allez apprendre à programmer le transport de données d'une liste de basevers votre dynpro.

� Pour l'utilisateur, le programme fonctionne comme suit :

� en double-cliquant sur une des lignes de la liste de base, vous accèdez à un dynpro. Celui-ciaffiche les principales informations concernant le vol qui l'intéresse. L'horaire et la durée du vols'affichent dans une zone de saisie et peuvent donc être modifiés ;

� l'utilisateur peut revenir à la liste de base de plusieurs façons.

� Sachant cela, cette partie du chapitre traitera :

� des conditions requises pour le transport automatique de données d'un programme vers une zonede dynpro ;

� de la définition de l'interface du dynpro et de la programmation de transport de données vers lesobjets de données de l'interface.

(C) SAP AG BC400 9-13

� SAP AG 1999

Interfaces de dynpro

Dynpro 100

Objets de données

Bloc detraitementABAP

Runtime system ABAP

Programme ABAP

DATA wa_spfli TYPE spfli.TABLES sdyn_conn.TABLESTABLES

Zones et types définis localement

wa_spflisdyn_conn

sdyn_conn

sdynsdyn__connconn

ProcessBeforeOutput

ProcessAfterInput

� L'instruction TABLES déclare un objet de données interne servant d'interface au dynpro. Ellerenvoie toujours à une structure définie dans le Dictionnaire ABAP.

� Si une instruction TABLES et une zone de dynpro renvoient toutes deux à la même structure duDictionnaire, les données de cet objet sont transportées vers les zones de dynpro chaque fois quecelui-ci est appelé. Toute nouvelle saisie ou tout changement effectué sur le dynpro sont ensuitetransférés vers l'objet de données.

� Le Dictionnaire ABAP contient des structures dont les zones correspondent à différentes tables. Cestables correspondent à leur tour à une vue commerciale de différentes applications. Les programmescréé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 propresstructures comme interfaces, vous rendrez vos programmes plus faciles à comprendre et éviterez leserreurs.

(C) SAP AG BC400 9-14

� SAP AG 1999 Temps

Transport de données du programme vers le dynpro

Runtime system ABAP

Programme ABAP

DATA wa_spfli TYPE spfli.TABLES sdyn_conn

Zones et types définis localement

wa_spflisdyn_connsdynsdyn__connconn

Bloc detraitementABAP

CALL SCREEN 100.

Objets de données

Screen 100

ProcessBeforeOutput

ProcessAfterInput

� Le transport de données s'effectue automatiquement entre les zones de dynpro et les zones duprogramme qui portent le même nom.

� Immédiatement avant l'envoi d'un dynpro au serveur de présentation (après que tous lesmodules événements PBO ont été traités), le système copie le contenu des zones de l'espace detravail ABAP dans leurs zones correspondantes de l'espace de travail du dynpro.

� Les instructions ABAP facilitent le transport de données entre les objets de données du programmeet l'espace de travail désigné comme interface du dynpro.

(C) SAP AG BC400 9-15

� SAP AG 1999 Temps

Transport de données du dynpro vers le programme

Objets de données

Runtime system ABAP

Programme ABAP

DATA wa_spfli TYPE spfli.TABLES sdyn_conn

Zones et types définis localement

wa_spflisdyn_connsdynsdyn__connconn

Bloc detraitementABAP

CALL SCREEN 100.

Screen 100

ProcessBeforeOutput

ProcessAfterInput

� Le transport de données s'effectue automatiquement entre les zones de dynpro et les zones duprogramme qui portent le même nom.

� Immédiatement après une action utilisateur (avant que le premier module PAI ne soit traité), lesystème copie le contenu des zones de l'espace de travail du dynpro dans leurs zonescorrespondantes de l'espace de travail ABAP.

� Les instructions ABAP facilitent le transport de données entre l'espace de travail désigné commeinterface du dynpro et les objets de données du programme.

(C) SAP AG BC400 9-16

� SAP AG 1999

Flux de données

Zones :MANDTCARRIDCONNIDCOUNTRYFRCITYFROMAIRPFROMCOUNTRYTOCITYTO AIRPTOFLTIME DEPTIMEARRTIME DISTANCEDISTID FLTYPE

Listede base Zone HIDE

Dynpro :Zone d'édition Zone de saisie

!!

!

!!!

!!

!

!

!!

!!

Avant d'appeler le dynpro :SELECT SINGLE * FROM spfli ...

wa_spfliStructure : sdyn_conn

� Au dernier niveau de développement, le programme doit permettre à l'utilisateur de modifier lesdonné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 debase des compagnies aériennes pour lesquelles l'utilisateur est autorisé à modifier les données doits'afficher. L'utilisateur arrive sur le dynpro de modification par un double-clic. Une fois lesmodifications effectuées, l'utilisateur retourne à la liste de base. Cependant, une nouvelle liste debase n'est pas créée. Les données modifiées ne doivent donc pas apparaître dans la liste de base.

� Pour garantir une mise à jour des données affichées sur le dynpro, l'enregistrement est relu depuis labase de données au début de AT LINE-SELECTION.

� 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 listedoivent ê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é vientseulement d'être modifié par le programme. Ceci ne serait pas le cas si toutes les données dudynpro é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 à desvaleurs 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 trouverezdes 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 dedonnées peuvent s'afficher à l'écran sans devoir apporter de nombreuses modifications.

(C) SAP AG BC400 9-17

� SAP AG 1999

START-OF-SELECTION.*SELECT carrid connid airpfrom cityfrom airpto cityto

INTO CORRESPONDING FIELDS OF wa_spfliFROM spfli.

WRITE: / wa_spfli-carrid COLOR COL_KEY,wa_spfli-connid COLOR COL_KEY,... .

* zones-clés mises en bufferHIDE: wa_spfli-carrid, wa_spfli-connid.

ENDSELECT.

AT LINE-SELECTION.

SELECT SINGLE * FROM spfliINTO wa_spfliWHERE carrid = wa_spfli-carridAND connid = wa_spfli-connid.

CALL SCREEN 100.

HIDE: wa_spfli-carrid, wa_spfli-HIDE: wa_spfli-carrid, wa_spfli-connid.connid.

SELECT SINGLE * FROM spfliSELECT SINGLE * FROM spfliINTO wa_spfliINTO wa_spfliWHERE carrid = wa_spfli-carridWHERE carrid = wa_spfli-carrid

AND connid = wa_spfli-connid.AND connid = wa_spfli-connid.MOVE-CORRESPONDING wa_spfli to sdyn_conn.MOVE-CORRESPONDING wa_spfli to sdyn_conn.

Syntaxe pour le niveau 2

� Pour afficher des données sur le dynpro, la structure TABLES doit comporter les données actuellesavant que le dynpro ne soit envoyé au serveur de présentation. L'exemple ci-dessus montre unemanière d'y parvenir.

� L'instruction HIDE s'utilise pour placer des zones-clés des tables de base de données se référant à laligne de liste dans la zone HIDE. Les données effectives de la ligne sélectionnée deviennent ensuitedisponibles dans les zones wa_spfli-carrid et wa_spfli-connid à l'événement ATLINE-SELECTION.

� L'enregistrement de données est lu depuis la base de données en utilisant SELECT SINGLE. Cecigarantit que la structure contienne les données à jour, même si l'utilisateur vient de les modifier. Elledoit être du même type que la ligne de table, pour que les zones correctes soient accessibles pourtoutes les données de l'enregistrement.

� 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 leszones du dynpro.

(C) SAP AG BC400 9-18

� SAP AG 1999

Vol DVol Départ Destinationépart DestinationLH 0400 FRA Francfort JFK New YorkLH 0402 FRA Francfort JFK New York...SQ 0002 SIN Singapour SFO San Francisco

Liste des volsListe des vols

Modifier donnModifier données de vol ées de vol CCCompagnie aérienneNuméro de vol

Aéroport de départDestination

Durée du volHeure de départ

DynproDynpro

Étape 3 : définition des boutons de commande

Message 2 dans barre d'état

Message 1 dansbarre d'état

LH0400

8:2410:10:00

FRAJFK

Sauvegarder Retour

� Dans l'étape 3, vous allez apprendre comment définir des codes fonction pour des boutons decommande. Ces fonctions assurent le traitement de différents types de logique de programme, selonle choix opéré.

� Pour l'utilisateur, le programme fonctionne comme suit :

� en double-cliquant sur une des lignes de la liste de base, vous accèdez à un dynpro. Celui-ciaffiche les principales informations concernant le vol qui l'intéresse. L'horaire et la durée de volpeuvent être modifiés ;

� en sélectionnant le bouton de commande "Retour", l'utilisateur revient à la liste de base sans quela 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 ;

� 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. Nousreviendrons 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 listede base après avoir sélectionné le bouton de commande et un message doit s'afficher dans labarre d'état ;

� Après avoir pressé Entrée, le dynpro s'affiche à nouveau.

� Les modifications de la base de données sont traitées dans le chapitre Dialogues de base de donnéesII.

� 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 programmationde dynpros ;

� la manière de vérifier comment le programme continue en fonction du bouton de commandesélectionné par l'utilisateur.

(C) SAP AG BC400 9-19

(C) SAP AG BC400 9-20

� SAP AG 1999

Définition de boutons de commande / affectationde codes de fonction

T

X

AttributsAttributs

Dict

FCode FType

Ligne Colonne

NomTexte

Prog Disp

Compagnie aérienneNuméro de vol

Aéroport de départDestination

Durée du volHeure de départ

RetourZone de saisieZone de sortie . . .

BOUTON2

Sauvegarder

RETOUR

Retour

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

(C) SAP AG BC400 9-21

� SAP AG 1999

Affectation d'un nom à la zone OK_CODE

Screen PainterScreen Painter : liste d' : liste d'élélémentséments

BOUTON1BOUTON2OK_CODEOK

SauvegarderRetour

SAUVEGARDERRETOUR

Nom de zone

... ...

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

ÉditeurABAP

ScreenPainter

Code de fonctionTexte de zoneAttributs généraux

DATA: ok_code LIKE sy-ucomm.

� La zone OK_CODE est un objet de données qui intègre le code de fonction correspondant aprèschaque action utilisateur.

� Le nom de zone OK_CODE doit toujours figurer sur la dernière ligne de la liste de zones du dynpro.

� Si vous définissez un objet de données correspondant portant le même nom dans l'espace dedéclaration d'un programme, le système place dans cet objet le code de fonction du bouton choisi aumoment de l'exécution. La zone sy-ucomm sert de zone de référence.

(C) SAP AG BC400 9-22

� SAP AG 1999Temps

Modules

Runtime system ABAP

MODULE <name> OUTPUT.ENDMODULE.

MODULE <name> INPUT.ENDMODULE.

CALL SCREEN 100.

Objets de données

100

PBO

MODULE <name>.

PAI

MODULE <name>.

Programme ABAP

� L'instruction ABAP CALL SCREEN <nnnn> interrompt le traitement du bloc de traitement etappelle un dynpro.

� À chaque dynpro correspondent deux blocs événement :

� PROCESS BEFORE OUTPUT (PBO) est traité immédiatement avant l'affichage d'undynpro. La fonction des modules appelés à ce stade est, par exemple, d'insérer des valeursrecommandées dans les zones de saisie.

� PROCESS AFTER INPUT (PAI) est traité immédiatement après une action utilisateur. Toutelogique de programme influencée par une action utilisateur doit être traitée au PAI. Voustrouverez plus de détails à ce sujet à l'étape 3.

� Note : le code des événements PBO et PAI s'écrit en utilisant Screen Painter et non l'ÉditeurABAP. 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 blocde traitement ABAP spécifique.

� Les modules sont des blocs de traitement ABAP ne comportant aucune interface, appelésuniquement depuis la logique d'exécution du dynpro. Les modules commencent par l'instructionABAP MODULE et se terminent par ENDMODULE.

� La logique de programme, qui appartient logiquement à un dynpro spécifique, doit normalement êtreexécutée aux événements PBO et PAI du dynpro.

(C) SAP AG BC400 9-23

� SAP AG 1999Temps

Dynpro suivant statique = 0

Runtime system ABAP

CALL SCREEN 100.

Dynpro suivant 0

Objets de données Programme ABAP

Attributs de dynpro

0

100

PBO

PAI

Dynpro suivant

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

(C) SAP AG BC400 9-24

� SAP AG 1999Temps

Dynpro suivant statique = numéro de dynpro

Runtime system ABAP

CALL SCREEN 100.

Dynpro suivant 100

Objets de données Programme ABAP

100

PBO

PAI

Attributs de dynproDynpro suivant 100

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

(C) SAP AG BC400 9-25

� SAP AG 1999Temps

Paramétrer dynamiquement Dynpro suivant

Programme ABAP

CALL SCREEN 100.

SET SCREEN 0.SET SCREEN 0.SET SCREEN 0.

Dynpro suivant 0

Objets de données

Runtime system ABAP

00

100

PBO

PAI

Attributs de dynproDynpro suivant 100

� Vous pouvez utiliser l'instruction ABAP SET SCREEN <nnnn> dans un module PAI poursubstituer de manière dynamique la valeur paramétrée dans l'attribut Dynpro suivant.

� 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 aumême dynpro. Afin de quitter ce dynpro, vous devez définir un bouton de commande quidéclenchera un changement Dynpro suivant dans le module PAI.

(C) SAP AG BC400 9-26

� SAP AG 1999

PROCESS BEFORE OUTPUT.MODULE clear_ok_code.

PROCESS AFTER INPUT.

MODULE user_command_0100.

ÉditeurABAP

MODULE clear_ok_code OUTPUT.CLEAR ok_code .

ENDMODULE.

MODULE user_command_0100 INPUT.* LOGIQUE DE PROGRAMME

CASE ok_code.WHEN 'BACK'. ...WHEN 'SAVE'. ...

ENDCASE.ENDMODULE.

ScreenPainter

RetourSauvegarder

Logique du programme

� A l'aide de la zone OK_CODE,différentes logiques de programme peuvent maintenant être exécutéespar les modules PAI en fonction du choix de l'utilisateur.

� Si une zone OK_CODE n'est pas réinitialisée, des erreurs risquent de se produire car les boutons decommande 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 aumoment du PAI, à moins que l'utilisateur ait exécuté une action utilisateur à laquelle est affecté uncode 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_CODEdans la zone auxiliaire. Réinitialisez alors la zone OK_CODE. Dans ce cas c'est la zone auxiliairequi doit être testée dans le module PAI pour évaluer le code de fonction.

(C) SAP AG BC400 9-27

� SAP AG 1999

PROCESS AFTER INPUT.MODULE user_command_0100.

MODULE user_command_100 INPUT.

ENDMODULE.

ÉditeurABAP

ScreenPainter

Navigation forward : création de modules

AnnulerOui Non

Créer un objet

PBO module USER_COMMAND_100 n'existe pas.Souhaitez-vous créer l'objet ?

Double-Clic

USER_COMMAND_0100Module PAI

InclureProgramme principal

Inclure sélection

ZBC400_00_DYNPRO

Créer module PAI

� 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.

� Il y a deux possibilités pour créer un module :

� par la navigation, faites un double-clic sur le nom du module à partir de l'Éditeur du ScreenPainter ;

� 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'iconeCréer.

� Vous pouvez appeler un même module depuis plusieurs dynpros. (Possible réutilisation)

� N'oubliez pas que les modules appelés aux événements PBO doivent être définis en utilisantl'instruction MODULE ... OUTPUT. Les modules définis par MODULE ... INPUT ne peuvent êtreappelés qu'à des événements PAI.

(C) SAP AG BC400 9-28

� SAP AG 1999

Utilisation de la fonction "Sauvegarder"

DATA: ok_code LIKE sy-ucomm.

.

.

MODULE USER_COMMAND_100 INPUT.CASE ok_code.

WHEN 'BACK'.SET SCREEN 0.MESSAGE s057(BC400).

WHEN 'SAVE'.* L'appel d'un module de fonction pour sauvegarder lesmodifications est laissé* pour des raisons didactiques jusqu'au chapitre "Dialogues debase de données II"

SET SCREEN 0.MESSAGE s058(BC400).

ENDCASE.ENDMODULE.

CASE ok_code.WHEN 'BACK'.

WHEN 'SAVE'.

� Dans cet exemple, deux boutons de commande doivent déclencher la modification de la valeuraffichée dans Dynpro suivant :

� "Retour" rétablit automatiquement cette valeur à 0. L'utilisateur est renvoyé au dernier dynproappelé avant celui-ci.

� "Sauvegarder" appelle l'affichage d'un message S. L'utilisateur accède alors à une liste de baseou à une liste détaillée identique à celle affichée lorsque "Retour" est sélectionné.

(C) SAP AG BC400 9-29

� SAP AG 1999

Vous êtes maintenant capable :

Dialogues utilisateur : dynpros : résumé du chapitre

� de décrire les attributs et les avantages desdynpros

� d'écrire un programme qui :

� affiche les données sur un dynpro

� permet à l'utilisateur de modifier certaines deces données

� permet à l'utilisateur d'influencer le traitementultérieur du programme en utilisant desboutons de commande

(C) SAP AG BC400 9-30

Exercices

(C) SAP AG BC400 9-31

(C) SAP AG BC400 9-32

Chapitre : DynproSujet : 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 lesré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 deréservations spécifiques qui ne sont pas affichées sur la liste ; ce dynprodoit également contenir des zones d’édition pour des données deréservations qui sont déjà affichées sur la liste ; quelle que soit l’actionutilisateur 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 programmeZBC400_##_DYNPRO. Affectez le programme à la classe de développementZBC400_## 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érod’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 surF2) doit appeler un dynpro. Créez ce dynpro (numéro de dynpro 100) en utilisant lafonction Navigation forward.

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

(C) SAP AG BC400 9-33

1-5 Créez des zones de saisie/d’édition sur le dynpro. Lorsque vous affectez des typesde 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, etBOOKID doivent être copiées avec leurs labels.

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

• Les zones CUSTOMID CUSTTYPE, SMOKER, CLASS, LOCCURAM etLOCCURKEY 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 doivents’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 etLOCCURKEY sont des zones de saisie/édition (attribut zone de saisie/zoned’édition).

(C) SAP AG BC400 9-34

Chapitre : DynproSujet : 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 dela réservation sélectionnée au dynpro. Si l’utilisateur modifie des donnéesau dynpro, ces modifications doivent alors être disponibles dans leprogramme 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èleadéquate SAPBC400UDS_DYNPRO_1 et nommez-la ZBC400_##_DYNPRO_2.Affectez votre programme à la classe de développement ZBC400_## et à l'ordrede transport pour ce projet, BC400… (en remplaçant ## par votre numéro degroupe).

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 dudynpro, 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 nomclient 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 ouappuyez sur F2).

2-4 Le programme doit ensuite être complété afin de modifier les données de la base dedonnées. Assurez-vous que l’utilisateur dispose d’une autorisation de modificationpour la compagnie aérienne choisie.Pour vous assurer qu’un double-clic sur une ligne de la liste de base permetd’afficher des données à jour, l’enregistrement de données doit être consulté à partirde la table de base de données SBOOK avant le traitement du dynpro.

(C) SAP AG BC400 9-35

Pour cela, avant d’appeler le dynpro, copiez les données les plus récentes de laréservation sélectionnée de la table SBOOK vers une structure qui possède la mêmestructure de ligne que la table de base de données. Si l’enregistrement de donnéesne peut être lu, le système doit afficher le message d’information 176 de la classe demessages 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 detravail TABLES, qui sert d’interface au dynpro.

Chapitre : DynproSujet : Transport de zone et traitement dynpro suivant

(C) SAP AG BC400 9-36

À 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 unbouton 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 ledynpro 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èleadéquate SAPBC400UDS_DYNPRO_2 et nommez-la ZBC400_##_DYNPRO_3.Affectez votre programme à la classe de développement ZBC400_## et à la tâchedé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’utilisateursoit de retourner à la liste de base (PUSH_BACK), soit de sauvegarder lesmodifications dans les données (PUSH_SAVE) :

Nom du bouton decommande

Texte Code de fonction

PUSH_BACK Retour RETOUR

PUSH_SAVE Sauvegarder

ou icône

ICON_SYSTEM_SAVE

SAUVEGARDER

3-3 Désignez la zone OK_CODE du dynpro et déclarez un objet de données du mêmenom (et du type correspondant) dans le programme.

3-4 Naviguez dans la logique d’exécution. Créez un module pour le traitement du codede fonction (en utilisant Navigation forward) lors de PROCESS AFTER INPUT :

Code de fonction Action Dynpro suivantRETOUR Aucun Liste

SAUVEGARDER D'abord : Liste

(C) SAP AG BC400 9-37

Code de fonction Action Dynpro suivantN° du message

d’informations

060(BC400)

Autres Aucun Dynpro 100

3-5 Assurez-vous qu’appuyer sur "Entrée" provoque toujours l’affichage du dynpro100, indépendamment de l’historique de navigation. À cette fin, utilisez l’une oul’autre des deux méthodes pour initialiser OK_CODE.

(C) SAP AG BC400 9-38

Solutions

(C) SAP AG BC400 9-39

Chapitre : DynproSujer : 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-40

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 surla * 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-41

Chapitre : DynproSujet : 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-42

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 nomclient

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-43

Chapitre : DynproSujet : 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-44

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 nomclient

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-45

* déroulement de dynpro dynamique dépendant d’une actionutilisateur

*---------------------------------------------------------------*

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 10-1

� SAP AG 1999

� Création d'interfaces dans le Menu Painter

� Titres

� Barres de menus

� Barres d'outils standard

� Barres d'outils d'application

Contenu :

Interfaces

(C) SAP AG BC400 10-2

� SAP AG 1999

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

Interfaces : objectifs du chapitre

� de créer un titre GUI

� de créer des statuts GUI pour listes et dynpros quicontiennent :

� des barres de menus

� des barres d'outils standard

� des barres d'outils d'application

� des affectations de touches de fonction

(C) SAP AG BC400 10-3

� SAP AG 1999

Synthèse : objets d'écran

Données de base du vol Traiter Saut Système Aide

Aide F1Sélection F2Retour F3...

Titre GUISET TITLEBAR <n>.

Statut GUISET PF-STATUS <n>.

Barre de menusBarre d'outilsstandardB. d'outils d'applic.Affectation detouches de fonction

� Toutes les interfaces utilisateur comprennent les outils/objets suivants :

� une barre de titre contenant le titre de l'écran, de l'écran de sélection ou de la liste affichée ;

� une barre de menus déroulants ;

� des menus contenant les fonctions exécutables du programme en cours. Un menu peut comporter dessous-menus. Les menus "Système" et "Aide" se trouvent sur chaque écran du système R/3 etcontiennent toujours les mêmes fonctions. Aucun de ces menus ne peut être modifié ni masqué.

� une barre d'outils standard dont les icônes correspondent aux fonctions les plus fréquemmentutilisées. La barre d'outils standard de R/3 contient toujours les mêmes icônes, auxquelles sontaffectées des fonctions standard. Les fonctions qui ne sont pas accessibles depuis une interfacedéterminée sont grisées ;

� 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 ;

� une barre d'outils d'application dont les icônes et les boutons de commande donnent accès auxfonctions les plus fréquemment utilisées sur l'écran actif.

� 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-4

� SAP AG 1999

SAP R/3SAP R/3

� ���

� ���

��

Modifier les heuresModifier les heures devol devol

ListeListeDonnées de vol de base

Imprimer Ctrl+P Sauv. dans fich. PC MAJ+F8 Sauvegarder Terminer MAJ+F3

� ���

� ���

��

Données de vol de base

Imprimer Sauvegarder dans fichier PC Sauvegarder Ctrl+S Terminer

Traiter Saut Système Aide

Traiter Saut Système AideDynproDynpro01000100

Exemple d'interface de programme

� Pour terminer, vous allez définir une interface utilisateur pour le programme exemple. Les différentsstatuts doivent présenter les caractéristiques suivantes :

� la liste et l'écran doivent avoir la même barre de menus. Seules les fonctions exécutables sont encaractères noirs ;

� dans la barre d'outils standard, seules les fonctions exécutables sont en couleur. La fonctionnalité dudynpro ne sera modifiée en aucun cas ;

� la barre d'outils d'application figurant dans la liste de base doit comporter une icône "Choisir", toutcomme le statut de la liste standard ;

� l'écran doit avoir son propre titre.

(C) SAP AG BC400 10-5

� SAP AG 1999

Barres de menus Barres de menusDonnées de base duvol

Affectation de touchesde fonctionAffectation de touchesde fonction

B. d'outils d'applic.

B. d'outils d'applic.Données de base du vol

Barre de menus

Affectation de touchesde fonction ;Données de base du vol

Données de base du vol

Traiter

Saut

Titre 100

Liste des fonctions

%PCSAUVE-GARDER

RWCHOISIR

Listedes

fonctionsRETOUR

PRI %EX

P++ P--P+ P-

Principaux éléments d'interface

� Toutes les interfaces utilisateur de programme comprennent les sous-objets suivants :

� une barre de titre contenant le titre de l'écran, de l'écran de sélection ou de la liste affichée ;

� une barre de menus déroulants ;

� des menus liés aux fonctions de l'interface, que vous appelez par transactions et qui possèdent tousdes mots-clés explicites. Les menus en cascade peuvent être définis par référence à un autre menu dela liste de menus et non à un code de fonction ;

� des affectations de touches : fonctions affectées aux icônes de la barre d'outils standard et auxtouches de fonction (touches F) ;

� Les touches de fonction importantes peuvent aussi être affectées à des icônes et à des boutons decommande dans la barre d'outils d'application ;

� des fonctions (par exemple, Remplacer, Rechercher ou Couper) affectées aux codes de fonctionemployés dans le programme pour évaluer les actions utilisateur. Toutes les fonctions d'une interfacesont énumérées dans une liste de fonctions. Il existe des codes de fonction standard pour les listes.

� Les programmes peuvent présenter plusieurs barres de menus, affectations de touches et barresd'outils d'application. Dans notre modèle de programme, vous ne devez créer qu'un objet danschaque catégorie. La barre de menus doit comporter trois menus.

(C) SAP AG BC400 10-6

� SAP AG 1999

Barres de menus Données de base du vol

Affectation de touchesde fonctionDonnées de base du vol

Liste des fonctions

%PCSAUVE-GARDER

RWCHOISIR

Listedes

fonctionsRETOUR

PRI %EX

P++ P--P+ P-

Statut "LISTE"Statut "LISTE"

Liste

inactive

B. d'outils d'applic.Données de base du vol

Statuts : vues de l'interface utilisateur

� Le statut est la forme que prend une barre de menus, une barre d'outils standard ou une barre d'outilsd'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 dynproau PBO : par exemple, vous utilisez la fonction "Afficher/Modifier" de l'Éditeur ABAP pour passerd'un statut à l'autre.

� D'un point de vue technique, un statut sert toujours de référence à une barre de menus, une barred'outils standard et une barre d'outils d'application.

� Nous allons maintenant définir le statut d'une liste.

(C) SAP AG BC400 10-7

� SAP AG 1999

Annulr CanceNon

Création d'un statut GUI pour une liste

START-OF-SELECTION.

SET PF-STATUS ."LISTE"

Statut GUI Le statut LISTE n'existe pas.Voulez-vous créer cet objet ?

Ouixxxxx

LISTE

Statut pour liste des vols

Programme

Statut

Attributs de statut

Courte description

Type de statutStatut de dialogueBoîte de dialogueMenu contextuel

Création d'un statut

Double-clicCréation d'un objet

� 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.

� Lorsque vous créez un statut, vous définissez de nouvelles barres de menus, barres d'outilsd'application et des affectations de touches (top down) ou vous utilisez des objets préexistants devotre interface (bottom up), ou vous associez ces deux méthodes.

� Un nom de statut ne doit pas dépasser 20 caractères. (Les lettres doivent être en majuscules).

� 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.

� Utilisez l'instruction SET PF-STATUS '<NOM>' pour rétablir le statut de la liste de base en leprogrammant dans un des blocs de traitement traités avant l'envoi de cette liste.

(C) SAP AG BC400 10-8

� SAP AG 1999

Ajustement des statuts

Ajuster modèle de statut

BASE

Inclure modèle dans

Statut

Modèle de statut ...

Statut de listeÉcran de sélection...

B. d'outils d'applic.

Affectation detouches de fonction

Barres de menus

Liste de sélection de ligne

Liste de sélection de ligne

Liste Traiter Saut

Conceptionorientée utilisateur

� La fonction "Ajuster modèle" du menu Autres fonctions vous permet d'inclure des codes defonction standardisés dans votre statut. Cette fonction vous permet également d'inclure des objetsd'un statut de votre choix à votre statut existant. Il vous permet de choisir des normes pour des statutsde liste et d'écrans de sélection, ou d'utiliser tout autre statut d'un autre programme ABAP.

(C) SAP AG BC400 10-9

� SAP AG 1999

B. d'outils d'applic.

Positions 1-7

Affectation detouches de fonction

Barres de menus

Affectation de touches des données de base

Barre d'outils d'application des données de base

Barre de menus des données de base

CHOISIR

Affectation recommandée des touches de fonction

F2F4Maj-F8

Affectation libre des touches de fonctionF5F6F7F8F9Maj-F1

Barre d'outils standard

%EXRETOUR RWSAUVEGARDER

PICK Choisir

PRI %SC P-- P-

Création d'un statut : affectation des touches

� Pour affecter un code à une touche de fonction, entrez-le dans l'une des sections d'affectation detouches. Les statuts de type "Liste" acceptent également des codes de fonction standard.

� Les affectations de touches se répartissent comme suit :

� barre d'outils standard : certains codes de fonction prédéfinis sont obligatoires pour lesfonctions Sauvegarder, Retour, Terminer, Annuler, Imprimer, ainsi que pour les icônes dedéfilement et pour la touche Entrée. Affectez simplement ces codes à l'icône de la barre d'outilsstandard ; ils seront automatiquement affectés aussi aux boutons de commande correspondants ;

� affectation recommandée des touches de fonction ;

� affectation libre des touches de fonction.

� Vous pouvez également définir des boutons sur une barre de boutons pour toutes les touches defonctions les plus fréquemment utilisées. Ces boutons se présentent sous forme d'icônes ou deboutons portant un texte.

(C) SAP AG BC400 10-10

� SAP AG 1999

Barres de menus

B. d'outils d'applic.

Données de volde base

Traiter Saut

affectation detouches de fonction

Barre d'outils d'application des données de base

Affectation de touches des données de base

Barre de menus des données de vol

Code Enoncé

Imprimer

Sauveg. ds fichier PC

Sauvegarder

Terminer

PRI

%PC

SAUVEG.

%EX

Création de statuts : barres de menus

Code Enoncé

CHOISIR

%SC

%SC+

RW

Code Enoncé

RetourRETOURChoisir

Trouver

Retrouver

Annuler

� Pour votre barre de menus, certaines normes s'appliquent. Toutefois, celles-ci peuvent êtremodifiées.

� Les barres de menus peuvent contenir jusqu'à huit menus. Vous en définissez six au maximum : lesmenus Système et Aide s'ajoutent automatiquement.

(C) SAP AG BC400 10-11

� SAP AG 1999

Statut "Statut "ÉCRAN"ÉCRAN"

ÉcranÉcran01000100

ÉcranÉcran01000100

Barres de menusDonnées de basedu vol

Affectation de touchesde fonctionDonnées de base du vol

B. d'outils d'applic.Données de base du vol

Liste des fonctions

%PCSAUVE-GARDER

RWCHOISIR

Liste desfonctionsstandardRETOUR

PRI %EX

P++ P--P+ P-

Statut "LISTE"Statut "LISTE"

ListeListe

inactive

Données de basedu vol

Traiter

Saut

Titre 100

Exemple d'interface de programme

� Pour terminer l'interface utilisateur de notre programme, il faut créer, en plus du statut de la liste debase, un titre et un statut pour le dynpro. Le statut du dynpro doit renvoyer aux mêmes barre demenus, barre d'outils d'application et affectations de touches que le statut de la liste. La seuledifférence réside dans le fait qu'ici, toutes les fonctions standard sont "inactives", à l'exception de"RETOUR" et de "SAUVEGARDER".

� Une interface comporte les objets suivants :

� fonctions ;

� menus ;

� barres de menus ;

� affectation de touches de fonction ;

� barre d'outils d'application ;

� statut ;

� titres.

(C) SAP AG BC400 10-12

� SAP AG 1999

Création des titres GUI d'un écran

MODULE status_0100 OUTPUT.* SET PF-STATUS 'xxxxxxxx'.SET TITLEBAR '100'.

ENDMODULE.

Code du titre

Titres

Connexions de vol

Sauvegarder

Programme

Code du titre

Titres

Création d'un titre

xxxxx

100

Modifier les heures de vol

Statut GUI Le titre 100 n'existe pas.Voulez-vous créer cet objet ?

Annuler

Création d'un objet

Oui Non

'100'Double-clic

Continuer

� Vous pouvez créer et gérer les titres dans l'une de ces trois possibilités :

� la liste d'objets du Repository Browser ;

� la navigation, dans l'Éditeur ABAP ;

� le Menu Painter.

� Pour définir le titre d'un dynpro, utilisez l'instruction SET TITLEBAR <nnn> de ABAP dans unmodule PBO. nnn est une séquence numérotée de trois caractères. Si vous créez le module PBOstatus_nnnn à l'aide de la navigation, cette instruction est automatiquement générée dans lemodule 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-13

� SAP AG 1999

Création de statuts GUI d'un écran

MODULE status_0100 OUTPUT.SET PF-STATUS 'SCREEN'.SET TITLEBAR '100'.

ENDMODULE.

"ÉCRAN"

Statut GUI Le statut ÉCRAN n'existe pas.Voulez-vous créer cet objet ?

Annulr Cance

Création d'un objet

Oui NonCréation d'un statut

xxxxx

ÉCRAN

Statut pour liste des vols

Programme

Statut

Attributs destatut

Désignation

Type de statutStatut de dialogueBoîte de dialogueMenu contextuel

Double-clic

� Pour la création d'un statut d'écran :

� créez un module PBO contenant l'instruction SET PF-STATUS '<NOM>'. NOM peut contenirhuit chiffres ou lettres majuscules. Cette instruction est prégénérée dès que vous créez le modulestatus_nnnn à l'aide de la navigation ;

� utilisez la navigation pour créer le statut ;

� choisissez le type de statut "Dialogue" ;

� appuyez sur F4 (aide) pour afficher les affectations de touches de fonction et la barre de menus ;

� choisissez les fonctions que vous voulez activer. Dans notre exemple, il s'agit de "RETOUR" et de"SAUVEGARDER".

� Dans le module PAI, ces codes de fonction sont évalués en tant que simples codes des boutons decommandes d'un écran. Pour inclure d'autres codes de fonction, développez le module PAI danslequel les codes de fonction sont traités. (dans l'exemple USER_COMMAND_0100).

(C) SAP AG BC400 10-14

� SAP AG 1999

Insertion d'éléments existants

Affectation detouches defonction

Barres de menus

ÉCRAN

ÉCRAN

ÉCRAN

Liste des fonctions

Affiche des objetsexistants et vous permet de les sélectionnerpour les insérer

Barre d'outils d'application

� Le statut de l'écran doit renvoyer aux mêmes barre de menus et affectations de touches que le statutde la liste. Utilisez l'icône montrée ci-dessus pour afficher toutes les barres de menus et toutes lesaffectations de touches de fonction déjà définies. Notre modèle de programme ne possède qu'uneseule barre de menus et qu'une seule affectation de touches de fonction que vous pouvez sélectionnerpar un double-clic.

� 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ôneActif/Inactif de la barre de boutons.

(C) SAP AG BC400 10-15

� SAP AG 1999

Vous êtes maintenant capable :

Interfaces : résumé du chapitre

� de créer un titre GUI

� de créer des statuts GUI pour listes et écrans quicontiennent :

� des barres de menus

� des barres d'outils standard

� des barres d'outils d'application

� des affectations de touches de fonction

(C) SAP AG BC400 10-16

Exercices

(C) SAP AG BC400 10-17

(C) SAP AG BC400 10-18

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èleadéquate SAPBC400UDS_DYNPRO_3 et nommez-la ZBC400_##_DYNPRO_4.Affectez votre programme à la classe de développement ZBC400_## et à l'ordrede transport pour ce projet, BC400… (en remplaçant ## par votre numéro degroupe).

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 detraitement START-OF-SELECTION.Le statut que vous vous créez doit correspondre au statut de la liste standard. Pourcréer vos propres affectations de touches de fonction, barre de boutons et barre demenus, sélectionnez Autres fonctions -> Ajuster modèle-> Statut de liste et ajoutezvos 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 delancer cette fonction en sélectionnant l’icône Sauvegarder dans la barre d’outilsstandard, 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 PROCESSBEFORE OUTPUT, appelez un module qui comprenne l’instruction ABAPappropriée.

(C) SAP AG BC400 10-19

Ne créez pas de nouvelles affectations de touches de fonction, barre de boutons oubarre de menus. Au contraire, renvoyez-les aux objets que vous avez créés dans ledernier 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) etgénérez l’interface.

(C) SAP AG BC400 10-20

Solutions

(C) SAP AG BC400 10-21

(C) SAP AG BC400 10-22

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 statutLISTE.

Le système affiche une boîte de dialogue contenant les mots "Le statutinterface 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 lenom de la liste de menus par Écritures. Sélectionnez pour fermer la boîte dedialogue.

• Double-cliquez sur l’affectation de la touche de fonction. Introduisez le code defonction 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 fonctionen utilisant .

• Activez le statut.1-3 Affichez l’écran 100 en mode modification (en sélectionnant le numéro d’écrandans la liste d’objets du programme et en utilisant le bouton droit de la souris). Dans la logiqued’exécution de l’événement PROCESS BEFORE OUTPUT, ajoutez l’instruction :

MODULE set_status_0100.

(C) SAP AG BC400 10-23

• Utilisez la navigation pour créer ce module. Double-cliquez sur le nom dumodule ; choisissez Oui pour confirmer les options de la boîte de dialogue.Dans la boîte de dialogue suivante, choisissez Programme principal et ajoutezle 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' dansl’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 etchoisissez Statut de dialogue.

• Placez le curseur sur la barre de menus et choisissez l’icône . Créez laré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 laré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 curseursur le code de fonction du menu ou de l’affectation de touche de fonction etchoisissez .

• Sauvegardez vos entrées et activez le statut.

• Activez l’écran.

(C) SAP AG BC400 10-24

1-4 Complétez le texte source du programme dansSTART-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 dialoguequi 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 dialoguequi 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-25

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 nomclient

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-26

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 actionutilisateur.

*--------------------------------------------------------*

MODULE user_command_0100 INPUT.

(C) SAP AG BC400 10-27

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 11-1

� SAP AG 1999

� Groupes de fonctions et modules de fonction

� Objets et méthodes

� Objets de gestion et BAPI

� Bases de données logiques

Contenu :

Réutilisation des composantes

(C) SAP AG BC400 11-2

� SAP AG 1999

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

Réutilisation des composantes : objectifs du chapitre

� de trouver et utiliser des modules de fonction

� d'afficher une liste simple en utilisant ALV GridControls (objets des classes globales duGénérateur de classes)

� d'utiliser un BAPI et trouver des BAPI en utilisantle BAPI Browser

� d'utiliser une base de données logique pour créerune liste hiérarchique d'informations de vol

(C) SAP AG BC400 11-3

� SAP AG 1999

Techniques d'encapsulation de la logique applicative

Réutilisationdes composantes

Objet degestion

Réutiliser les composantesencapsuléesdans la logiqueapplicative

ABAP : possibilitéstechniques

Base de donnéeslogique

Objet

Groupe defonctions

� Le système R/3 offre plusieurs techniques que vous pouvez utiliser pour permettre la réutilisation dela logique applicative.

� 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 defonctions. Une logique de programme et des dialogues utilisateur peuvent être encapsulés dans lesmodules de fonction ;

� des objets : vous pouvez utiliser l'extension compatible "objets ABAP" pour créer des instancesd'objets à l'exécution, avec référence aux classes centrales ;

� des BAPI : méthodes d'objets de gestion, qui sont disponibles grâce au Business Object Repository(BOR) ;

� des bases de données logiques : programmes d'acquisition de données qui peuvent s'associer à desprogrammes 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-4

� SAP AG 1999

Groupes de fonctions et modules de fonction

Groupes de fonctions et modules de fonctionGroupes de fonctions et modules de fonction

Objets et méthodesObjets et méthodes

Objets de gestion et BAPIObjets de gestion et BAPI

Bases de données logiquesBases de données logiques

(C) SAP AG BC400 11-5

� SAP AG 1999

� de décrire les différentes manières de trouver unmodule de fonction

� de découvrir des informations importantes sur unmodule de fonction en utilisant le Générateur demodules de fonction

� d'écrire un programme comportant un dialogueutilisateur standard formé dans un module defonction

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

Groupes de fonctions et modules de fonction

(C) SAP AG BC400 11-6

� SAP AG 1999

Groupe de fonctions

Mod

ule

de fo

nctio

nFM

3In

terfa

ceIn

terfa

ce

Interface

Interface

Module de fonction

FM2Interface

Interface

Module de fonction

FM1

Module de fonction

FM5

InterfaceInterface

Module de fonctionFM4

InterfaceInterface

Paramètres d'import

Paramètres d'export

Paramètres de modification

Exceptions

Sous-programmesInterface

� Un groupe de fonctions est un programme ABAP de type F, c'est-à-dire créé exclusivement afin decontenir des modules de fonction. Les modules de fonction sont des unités modulaires dotéesd'interfaces ; ils peuvent être appelés depuis tout programme ABAP. Ceux qui agissent sur lesmêmes objets sont organisés en groupes de fonctions.

� Chaque groupe de fonctions peut contenir :

� des objets de données, visibles et modifiables par tous les modules de fonction du groupe. Cesobjets 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-7

� SAP AG 1999

Module de fonction

sy-subrc

Module deModule defonctionfonction

GestionGestion

Objets de donnObjets de donnéeséeslocauxlocaux

Code sourceCode source

Objets de donnObjets de donnéeséesglobauxglobaux

Groupe de fonctionsGroupe de fonctionsSous-programmesInterface

InterfaceInterfaceParamParamètres d'importètres d'import ParamParamètresètres d'export d'export ParamParamètres de modificationètres de modification ExceptionsExceptions

� 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, ilssont 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 sonttoujours 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 êtremodifié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 exceptiondans un module de fonction, celui-ci s'arrête. Vous pouvez affecter des exceptions à des nombresdu programme appelant pour positionner la zone système SY-SUBRC à cette valeur. Leprogramme peut alors traiter ce code retour.

� Chaque module de fonction peut contenir des objets de données locaux et accéder à des objets dedonnées globaux appartenant à son groupe de fonctions. Il peut appeler tous les sous-programmes etles écrans de ce groupe de fonctions.

(C) SAP AG BC400 11-8

� SAP AG 1999

Groupe de fonctions : flux de données

Mod

ule

de fo

nctio

nFM

3In

terfa

ceIn

terfa

ce

Interface

Interface

Module de fonction

FM2Interface

Interface

Module de fonction

FM1

Module de fonction

FM5

InterfaceInterface

Module de fonctionFM4

InterfaceInterface

� Après appel du module de fonction, les données générales restent dans le groupe de fonctions. Cegroupe de fonctions reste actif tant que le programme appelant reste actif. Donc, si un module defonction qui modifie les données globales du groupe de fonctions est appelé, les autres modules defonction de ce même groupe de fonctions peuvent accéder à ces données lors de leur appel par leprogramme.

(C) SAP AG BC400 11-9

� SAP AG 1999

<Titre spécifique au contexte>

Exemple : la boîte de dialogue Annuler

!<Titre spécifique au contexte>

"Les données seront perdues."

NonOui

� 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 lignesqui la suivent sont spécifiques du contexte, tout comme le titre. L'utilisateur a le choix entre deuxoptions : "Oui" ou "Non".

� Cette boîte de dialogue est encapsulée dans le module de fonction.

(C) SAP AG BC400 11-10

� SAP AG 1999

Exigence : module de fonction pour dialogue standard

ProgrammeABAP

STO1

! <ligne de texte>

Oui Non

! <ligne de texte>

réponse

ligne de textetitre

réponse

� Vous pouvez éviter la programmation de cette boîte de dialogue si vous trouvez un module defonction 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 deuxvariables et le titre, et qui contient les boutons "Oui" et "Non".

(C) SAP AG BC400 11-11

� SAP AG 1999

Recherche du module de fonction

Rechercherl'instructionCALL FUNCTION

Éditeur

Insérer un pointd'arrêt dansl'instructionCALL FUNCTIONou CALL SCREEN

Démarrer enmode débogage

Vous savez qu'un certain programmeutilise le module de fonction

F1Info techniquesNom de l'écran etdu programme principalRegarder un groupe defonctions dans ObjectNavigatorCas d'emploi pour numérod'écran

Sur un écran appelé par lemodule de fonction

Sélectionnerdescomposantesapplicativesdu systèmed'informationdu Repository

Hiérarchiedes composantes

Examine logiqued'exécutiondans l'événementProcess AfterInput

Sur l'écransur lequel l'utilisateur

choisit "Annuler"

� Scénario : vous créez un programme dans Object Navigator et quittez l'écran des attributs. Vousvoulez savoir s'il est enregistré sous une forme réutilisable.

� 1. Première méthode : dans le débogueur, apposez un point d'arrêt dans CALL SCREEN. En cas deréussite, le bloc de traitement actuel (sous-programme, module de fonction ou bloc événement) serarépertorié sous " CALLS"en mode débogage. Vous pouvez alors examiner l'appel et les paramètrestransmis à l'interface.

� 2. Deuxième méthode : dans le débogueur, apposez un point d'arrêt à CALL FUNCTION. En cas deréussite, le bloc de traitement actuel (sous-programme, module de fonction ou bloc événement) serarépertorié sous " CALLS"en mode débogage. Vous pouvez alors examiner l'appel et les paramètrestransmis à l'interface.

� 3. Troisième méthode : cliquez sur une zone de texte de la boîte de dialogue standard, appuyezensuite sur F1 et choisissez Infos techniques. Naviguez jusqu'à l'écran et afficher les cas d'emploipour des programmes, regardez ensuite les modules de fonction qui l'utilisent.

� 4. Quatrième méthode : dans la boîte de dialogue Sauvegarder, affichez l'aide (F1) et ensuite Infostechniques. Naviguez jusqu'à l'écran pour examiner la logique d'exécution et ses modules.

� 5. Cinquième méthode : dans la hiérarchie des composantes, indiquez la composante qui vousintéresse (dans ce cas, Services de base), sélectionnez-la, naviguez jusqu'au système d'information duRepository, et regardez sous Programmation -> Générateur de modules de fonction -> Modules defonction et sélectionnez Unqt libérés.

(C) SAP AG BC400 11-12

� SAP AG 1999

ExceptionsModificationExport

Interface de module de fonction

Module de fonction POPUP_TO_CONFIRM_LOSS_OF_DATA

Attributs

Nicht OptionaleParameter desConstructorsmüssen bei

CREATE OBJECTversorgt werden

Import

ParamètresLIGNE DE TEXTE 1LIGNE DE TEXTE 2TITRESTART_COLUMNSTART_ROW

TransmettreValeurFacultatif...Ref. type Description

!

! !

!!!

! !

...Les paramètres

obligatoires d'un module de fonctiondoivent être transmis

à l'instructionCALL FUNCTION

Code source

� Dès que vous trouvez un module de fonction, vous devez en découvrir davantage sur son interface.

� Les paramètres obligatoires du module de fonction doivent être transmis à l'instruction CALLFUNCTION. Pour savoir comment traiter les autres paramètres, référez-vous à la documentation surle module de fonction et sur les paramètres d'interface.

� Si la documentation n'est pas suffisamment précise, ou si elle n'est pas disponible dans votre languede travail, vous pouvez analyser le code source du module de fonction en sélectionnant l'onglet Codesource.

(C) SAP AG BC400 11-13

� SAP AG 1999

Documentation

• Courte description• Fonction• Exemple• Notes• Informations complémentaires• Paramètre• Exceptions• Groupe de fonctions

Test

Paramètres d'import

Paramètres d'export

ExceptionModule de fonction

Documentation et test

� Vous pouvez tester les modules de fonction par l'environnement de test. Vous spécifiez lesparamètres d'IMPORT dans un modèle de saisie. Le résultat est transmis aux paramètres d'EXPORT,puis s'affiche.

� En cas d'erreur, le système identifie l'exception déclenchée.

� La durée d'exécution du module de fonction s'affiche en micro-secondes. Ces valeurs sont soumisesaux mêmes conditions que l'analyse de durée d'exécution. Par conséquent, recommencez plusieurstests en utilisant les mêmes données.

� Vous pouvez enregistrer les données de test dans un répertoire prévu à cet effet.

� Pour tester les modules dotés de paramètres de table, utilisez la fonction test du Générateur demodules de fonction.

� Vous pouvez créer des séquences de tests.

(C) SAP AG BC400 11-14

� SAP AG 1999

Syntaxe : appel du module de fonction

réponse

Programme ABAP

PAI MODULE user_command_0100 input.save_ok_code = ok_code.clear ok_code.CASE save_ok_code.WHEN 'CANCEL'.CALL FUNCTION'POPUP_TO_CONFIRM_LOSS_OF_DATA'EXPORTINGtextline = gd_textlinetitle = gd_titleIMPORTINGanswer = gd_answer.

case answer.WHEN

WHEN...

ENDCASE.

ligne de textetitre

� Pour appeler un module de fonction dans un programme ABAP, utilisez l'instruction CALLFUNCTION. Le nom du module de fonction s'affiche entre quotes. Après EXPORTING, lesystème affecte les paramètres transmis au module de fonction. Après IMPORTING, le systèmeaffecte les paramètres transférés du module de fonction au programme. La plupart des modules defonction gèrent des exceptions supplémentaires. Dès lors, après EXCEPTIONS, les exceptions sontaffectées à des valeurs qui seront utilisées dans la zone système sy-subrc, en cas d'erreur dusystème. Le système affiche les noms des paramètres d'interface à gauche, les objets de données duprogramme à droite.

(C) SAP AG BC400 11-15

� SAP AG 1999

Insertion d'appel de module de fonction dans un programme

CALL FUNCTION'POPUP_TO_CONFIRM_LOSS_OF_DATA'

EXPORTINGligne de texte =titre =

IMPORTINGréponse =

CALL FUNCTION...... ......

Insérer instruction

POPUP_TO_CONFIRM_LOSS_OF_DATA

Modèle

Le systèmegénère le code ABAP

CASE SY-SUBRC.Traiter

code retour

Entrerparamètres

effectifs

� 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.

� Le système génère alors l'instruction ABAP CALL FUNCTION '<nom module defonction>', qui comprend l'interface du module de fonction, et l'insère dans le programme àl'emplacement du curseur.

� 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'affecterun paramètre effectif à un paramètre optionnel. Dans ce cas, mettez la ligne concernée encommentaire.

� N'oubliez pas que, lors de l'affectation des paramètres d'un module de fonction, le paramètre dumodule de fonction se trouve toujours à gauche, tandis que le paramètre effectif est à droite.

(C) SAP AG BC400 11-16

� SAP AG 1999

Objets et méthodes

Groupes de fonctions et modules de fonctionGroupes de fonctions et modules de fonction

Objets et méthodesObjets et méthodes

Objets de gestion et BAPIObjets de gestion et BAPI

Bases de données logiquesBases de données logiques

(C) SAP AG BC400 11-17

� SAP AG 1999

� de trouver des informations importantes sur lesclasses et leurs méthodes en utilisant leGénérateur de classes

� d'écrire un programme qui affiche une liste simpleen utilisant ALV Grid Control, et qui contient :

� des variables de référence

� l'instruction CREATE OBJECT

� l'appel des méthodes

� un domaine container sur un dynpro

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

Objets et méthodes : objectifs du cours

(C) SAP AG BC400 11-18

� SAP AG 1999

� Processus de développement de logiciel intégré� Communication facilitée entre utilisateurs et développeurs

� Encapsulation� Des programmes plus clairs et plus faciles à gérer

� Polymorphisme

� Héritage

Avantages de la programmation orientée objets

� 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'unemanière idéale, les modifications apportées à la conception pendant l'implémentation s'appliquentrétrospectivement au modèle de données.

� 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 lestatut interne d'un objet, et ne dépendent pas de l'utilisation d'une implémentation particulière pourcommuniquer avec l'objet.

� Polymorphisme : dans la POO (programmation orientée objets), les objets de classes différentesréagissent différemment au même message.

� 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-19

� SAP AG 1999

Réalité / fonctions / objets

Arbre

Maison

Grue

� Les objets sont des abstractions de la réalité

� Chaque objet forme une unité contenant aussibien des données que ses fonctions associées

RéalitéModèle

DonnéesMéthode MéthodeMéthode

DonnéesMéthode MéthodeMéthode

DonnéesMéthode MéthodeMéthode

Bateau

DonnéesMéthode MéthodeMéthode

� Les objets sont au centre de l'approche orientée objet et représentent des entités concrètes ouabstraites de la réalité. Ils sont définis selon leurs propriétés, qui sont elles-mêmes décrites par leurstructure interne et leurs attributs (données). Le comportement d'objet est décrit par des méthodes etdes événements (fonctions).

� Chaque objet forme une capsule, qui contient son caractère comme son comportement. Les objetsdoivent permettre au modèle du domaine d'un problème d'être repris de la manière la plus précisedans le modèle de conception pour sa solution.

(C) SAP AG BC400 11-20

� SAP AG 1999

Objets ABAP : objet d'exemple "Vol"

Attributs privés :sièges librespassagers

Méthodepublique :Annuler

carridconnidfldatebookidcustomid

Cas d'erreur

Méthodepublique :Réserver

carridconnidfldatecustomid

bookid, réservation effectuée,pas de siège libre

carrid, connid, fdate

Vol annulé

cas d'erreur

� À titre d'exemple, considérez l'objet "vol".

� 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 unidentificateur unique pour chaque vol. Chaque numéro de vol contient également : l'aéroport dedé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 deréservation ;

� informations sur le vol, telles que le type d'avion et le nombre maximum de sièges.

� 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".

� 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 dessièges vides ou non sur le vol. Si c'est le cas, le nouveau client s'ajoute à liste des réservations etun message de confirmation est transmis au programme appelant. Sinon, le système renvoiel'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é lesdonnées nécessaires à l'interface, elle utilise les attributs privés pour déterminer si le client estinclus ou non sur la liste des réservations. Dans ce cas, sa réservation est annulée et un message deconfirmation retourne au programme appelant. Si le client n'apparaît pas sur la liste desréservations, le système affiche un message d'erreur.

(C) SAP AG BC400 11-21

� SAP AG 1999

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

AA001628.08.1999 LH

040028.08.1999

� 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.

� Techniquement, ce sont deux objets du même type, mais dotés d'attributs-clés différents.

(C) SAP AG BC400 11-22

� SAP AG 1999

Les objets sont des instances d'une classe

Classe "vol" :modèle d'objets

Objet vol 1 :Instance deClasse "vol"

Objet vol 2 :Instance deClasse "vol"

� En programmation orientée objets, l'implémentation d'une telle classe est définie comme un objettype. Les instances de cette classe se créent au moment de l'exécution. Le système crée ainsi desobjets d'un type d'objets (et donc, de la classe).

(C) SAP AG BC400 11-23

� SAP AG 1999

Programme ABAP

Déroulement du programme dans un programme ABAP

CREATE OBJECT ref1EXPORTING ...

CREATE OBJECT ref2EXPORTING ...

CALL METHOD ref2->bookEXPORTING ...IMPORTING

bookid = gd_bookidoverbooked = flag

EXCEPTIONS ......IF NOT gd_bookid IS INITIAL.CALL METHOD ref1->cancel

EXPORTING ...IMPORTING ...EXCEPTIONS ...

...ENDIF.

Vol

ref1 ref2

AA001628.08.1999

LH040028.08.1999

Vol

� Un programme ABAP qui modifie les réservations par des objets possède le déroulement deprogramme suivant :

� Le programme démarre et le contexte du programme se charge. Les zones de mémoire deviennentdisponibles pour tous les objets de données globales du programme. Des variables de référencedeviennent également accessibles pour chaque objet. Lorsque vous démarrez le programme, vouspouvez voir le résumé des objets de données devenus disponibles en développant les sous-arbresZones et Structures du dictionnaire de la liste d'objets du programme. Vous pouvez égalementnaviguer dans le texte source où les objets de données ont été définis en utilisant, par exemple, uneinstruction DATA ou TABLES. Les variables de référence sont définies par une instruction DATA:<ref> TYPE REF TO <classe>.

� 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. Tousles paramètres requis par le constructeur doivent être sépcifiés dans l'instruction CREATEOBJECT. Notre exemple vous montre que seuls les attributs-clés doivent être transmis àl'instruction.

� Dès que l'instruction CALL METHOD est traitée, la méthode est appelée. L'appel d'une méthode esttrè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-24

� SAP AG 1999

� Intégration Office

� Business Add-ins (nouveau concept d'extension desystème)

� Contrôles

� Projets pilotes (déjà orientés objet)

Domaines fonctionnels des objets ABAP

� Dans la version 4.6, les plus importants aspects du système d'extensions orientées objet du langageABAP sont :

� Intégration office : le système offre une nouvelle interface orientée objets, qui vous permettrad'utiliser toutes les fonctions de produit Office R/3 ;

� Business Add-ins : une technologie d'extensions orientée objet, qui combine des avantages detechnologies existantes. Si vous incluez des Business Add-ins dans des programmes standard, vouspouvez compléter le programme par des méthodes spéciales, sans devoir effectuer de modification ;

� 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. LeCentral Control Framework exécute cette tâche ;

� Les projets pilotes sont déjà orientés objet.

(C) SAP AG BC400 11-25

� SAP AG 1999

Controls : éléments techniques I

ALV Grid Control : qu'est-ce qu'un control?

� Composantes logicielles binaires indépendantes� installées localement sur le frontend et qui utilisent

SAPGUI� Elles déplacent les fonctions du serveur d'application

vers le frontend� Elles ont une classe d'objets dédiée dans ABAP OO� Elles sont conçues pour être réutilisables

� Le Central Control Framework exécute cette tâche

� Le système R/3 vous permet de créer des custom controls en utilisant des objets ABAP. Le serveurd'application est le client, qui pilote les custom controls (serveur) sur le frontend.

� Si des custom controls doivent être inclus sur le frontend, le SAPGUI réagit en leur servant deconteneur. Les custom controls peuvent être des contrôles ActiveX et JavaBeans.

� Le système doit utiliser les Remote Function Call (RFC) pour le transfert de méthodes afin de créeret d'utiliser un contrôle (ABAP OO) sur le frontend.

(C) SAP AG BC400 11-26

� SAP AG 1999

Exemple : ALV Grid Control

17

64

AAAAAAAALHLHLHLHLH

1717

400

402

400400

402

2000-01-172000-02-202000-03-112000-05-192000-01-132000-02-262000-03-212000-03-042000-05-28

USDUSDUSDUSDDEMDEMDEMDEMDEM

513,69

1234,561234,56

513,69513,69369,00

1234,561234,56

1234,56

A321

747-400

A310-300

A319A319

A310-300A310-300

A321

747-400

Détails

Trier

Trouver

Filtrer

Addition

Imprimer

Télédécharger

Afficher variante

Barre d'outils

� Sur le control, vous pouvez ajuster la largeur de colonne aux données affichées en la faisant glisserou en utilisant la fonction "Largeur optimale". Vous pouvez également modifier l'ordre des colonnessi vous en sélectionnez une et que vous la faites glisser jusqu'à son nouvel emplacement.

� Les fonctions standard sont disponibles dans la barre d'outils du control. L'affichage des détailsaffiche les zones de la ligne sur laquelle le curseur est positionné dans une boîte de dialogue modale.

� La fonction de tri de ALV Control est disponible pour toutes les colonnes demandées. Vous pouvezparamétrer des critères de tri complexes pour trier les colonnes dans un ordre croissant oudécroissant.

� 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é.

� Vous pouvez utiliser la fonction "Cumul" pour demander les totaux d'une ou plusieurs colonnesnumériques. Vous pouvez utiliser la fonction "Sous-total" pour structurer des listes de niveaux degroupe : sélectionnez les colonnes (colonnes non numériques uniquement) que vous voulez utiliser etle control correspondant. Pour les fonctions "Imprimer" et "Télédécharger", ce ne sont pas seulementles informations affichées à l'écran qui sont traitées, mais toute la liste.

� Vous avez également la possibilité de paramétrer des variantes d'affichage. Pour sauvegarder desvariantes, voir "Techniques avancées".

(C) SAP AG BC400 11-27

� SAP AG 1999

Programme utilisant ALV Grid Control

Domaine

CustomContainerControl

ALV Grid Control

Écran 100

ProcessBeforeOutput

ProcessAfterInput

START-OF-SELECTION.:

� Un conteneur SAP peut contenir d'autres controls (par exemple, SAP ALV Grid Control, TreeControl, SAP Picture Control, SAP Splitter Control, etc.). Il gère ces controls de manière logiquedans une collection d'objets et fournit un domaine physique pour l'affichage.

� Chaque control existe dans un conteneur. Comme les conteneurs sont eux-mêmes des controls, ilspeuvent s'imbriquer les uns dans les autres. Un conteneur est le parent des controls qu'il contient.

(C) SAP AG BC400 11-28

� SAP AG 1999

Objets et classes pour ALV Grid Control

Domaine

CustomContainerControl

ALV Grid Control

Custom container

ALV Gridcontrol

Générateur de classes

CL_GUI_ALV_GRID

CL_GUI_CUSTOM_CONTAINER

� Vous trouverez dans le Générateur de classes des types d'objets pour la gestion des custom controlset de ALV Grid Control. Au moment de l'exécution, le système crée deux objets : un du typeCL_GUI_CUSTOMER_CONTAINER et un du type CL_GUI_ALV_GRID. Ces objets contiennentles méthodes nécessaires à la gestion des controls. Vous trouverez des informations complémentairessur les types d'objets (classes) et leurs méthodes associées dans le Générateur de classes.

(C) SAP AG BC400 11-29

� SAP AG 1999

Événements

CL_GUI_CONTROL_CONTAINER

SuperclassesMéthodesConstructeur

CL_GUI_CUSTOM_CONTAINER

Classe CL_GUI_CUSTOM_CONTAINER

AttributsInterfacesAttributs Méthodes

Paramètres pour la méthode CONSTRUCTEUR C

ParamètrePARENTNOM_CONTENEUR...

Transmettre Facultatif ... Ref. type ... Description!

Int. Types

!!

!!

!!

Les paramètresnon optionnels de la

méthode Constructeurdoivent être transmislorsque vous utilisezCREATE OBJECT

� Vous pouvez naviguer dans le Générateur de classes en introduisant le nom de la classe dans la zonede saisie Classe sur l'écran initial de Object Navigator et en choisissant Afficher. Le système afficheune arborescence pour la classe choisie. Double-cliquez sur le noeud racine pour afficher le domainede travail du Générateur de classes. Choisissez l'onglet Méthodes et sélectionnez la méthode pourlaquelle vous souhaitez des informations complémentaires. Choisissez le bouton Paramètres pourafficher des informations complémentaires sur les paramètres d'interface.

� CL_GUI_CUSTOM_CONTAINER contient seulement la méthode CONSTRUCTOR. Lorsque vouscréez un objet dans un programme en utilisant CREATE OBJECT, vous devez transférer leparamètre non optionnel CONTAINER_NAME. Le nom du domaine du conteneur à l'écran doit êtretransmis à ce paramètre.

(C) SAP AG BC400 11-30

� SAP AG 1999

CL_GUI_ALV_GRID

SuperclassesInterfacesAttributsMéthodes...Constructeur

...

REFRESH_TABLE_DISPLAY

...

SET_TABLE_FOR_FIRST_DISPLAY

...

RedéfinitionÉvénements

CL_GUI_ALV_GRID

Paramètres non facultatifsI_PARENT TYPE REF TO

CL_GUI_CONTAINER

Paramètres non facultatifsIT_OUTTAB TYPE

TABLE STANDARD

Vous devez transmettre le type de ligne de la table interne, p. ex.type de structure du dictionnaireto I_STRUCTURE_NAME

� CL_GUI_ALV_GRID contient de nombreuses méthodes. Pour afficher une table interne de type deligne de structure du Dictionnaire ABAP en utilisant ALV Grid Control, vous devez connaîtreuniquement les détails de trois méthodes :

� CONSTRUCTOR: la variable de référence indiquant l'objet (avec lequel le control du conteneurcommunique) doit être transférée au constructeur ;

� la première fois que le contenu d'une table est affiché en utilisant ALV Grid Control, l'affichage estimplémenté par la méthode SET_TABLE_FOR_FIRST_DISPLAY. La table interne est transféréeau paramètre it_outtab. Dans ce cas, le transfert du paramètre non optionnel it_outtab nesuffit 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 ;

� REFRESH_TABLE_DISPLAY peut être appelé si la table interne a déjà été affichée en utilisant GridControl, et si le contenu de cette table diffère de celui indiqué à l'écran. Dans ce cas, le frontendconnaît déjà le type de ligne de la table interne et les zones de référence.

(C) SAP AG BC400 11-31

� SAP AG 1999

Création d'un élément d'écran de Custom Control

Domaine

Domaine d'écran :Type :CUSTOM CONTROLNom : CONTENEUR_1Reformatage Taille minimale

Vertical :"X" 10Horizontal :"X" 20

Screen Painter : Layout

C

Barre d'outils

� Pour réserver un domaine de l'écran à un contrôle EnjoySAP, ouvrez le Screen Painter et choisissezle bouton Mise en page.

� Dans la barre d'outils à gauche de la zone d'édition, choisissez le bouton Custom Control. (Celui-cifonctionne 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 lebouton 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 leshandles. Cette zone se comporte alors à nouveau comme une zone de sous-écran..

� Entrez un nouveau nom pour l'élément d'écran (CONTENEUR_1 dans notre exemple).

� Utilisez Redimentionnement vertical et Redimensionnement horizontal pour spécifier si la zone ducustom control doit être redimensionnée ou non lorsque l'écran principal est redimensionné. Vouspouvez également paramétrer des valeurs minimales à ces attributs en utilisant Ligne Min. etColonne min.. Vous déterminez la taille maximale de la zone à sa création.

(C) SAP AG BC400 11-32

� SAP AG 1999

Exemple de syntaxe : définition de variables de référence

DATA: gdt_spfli TYPE sbc400_t_spfli.

DATA: container_r TYPE REF TO cl_gui_custom_container,grid_r TYPE REF TO cl_gui_alv_grid,

DATA: ok_code TYPE sy-ucomm.

START-OF-SELECTION.perform fill_itab USING gdt_spfli.

CALL SCREEN 100.

container_r TYPE REF TO cl_gui_custom_container,

grid_r TYPE REF TO cl_gui_alv_grid,

container _r

grid_r

gdt_spfli

ok_code

� Le programme requiert deux variables de référence :

� container_r, indique l'objet qui communique avec le container control. Elle est typée avec laclasse globale cl_gui_custom_container ;

� grid_r, indique l'objet qui communique avec ALV Grid control. Elle est typée avec la classeglobale cl_gui_alv_grid.

(C) SAP AG BC400 11-33

� SAP AG 1999

MODULE create_control OUTPUT.IF container_r IS INITIAL.CREATE OBJECT container_r

EXPORTING container_name = 'CONTAINER_1'.

CREATE OBJECT grid_rEXPORTING i_parent = container_ref.

CALL METHODgrid_r->set_table_for_first_displayEXPORTING i_structure_name = 'SPFLI'CHANGING it_outtab = gdt_spfli.

ELSE.CALL METHOD

grid_r->refresh_table_displayEXPORTING i_soft_refresh = 'X'.

ENDIF.

ENDMODULE.

Exemple de syntaxe : CREATE OBJECT

CREATE OBJECT container_rEXPORTING container_name = 'CONTAINER_1'.

CREATE OBJECT grid_rEXPORTING i_parent = container_r.

container_r

grid_r

� CREATE OBJECT crée un objet à l'exécution. Vous devez seulement indiquer la variable deréférence, comme elle est du même type d'objet que la classe.

� Pour générer l'objet qui communique avec le container control, vous devez inclure uniquement lenom de la zone conteneur à l'écran, pour autant que ce soit dans un module PBO du dynpro danslequel la zone conteneur est définie. Si l'instruction CREATE OBJECT est exécutée dans un autrebloc de traitement ABAP, vous devez inclure le numéro de l'écran conteneur et le nom duprogramme.

(C) SAP AG BC400 11-34

� SAP AG 1999

Exemple de syntaxe : appel des méthodes

MODULE create_control OUTPUT.If container_r IS INITIAL.CREATE OBJECT container_rEXPORTING container_name = 'CONTAINER_1'.

CREATE OBJECT grid_rEXPORTING i_parent = container_ref.

ELSE.

ENDIF.

ENDMODULE.

CALL METHODgrid_r->set_table_for_first_display

EXPORTING i_structure_name = 'SPFLI'CHANGING it_outtab = gdt_spfli.

CALL METHODgrid_r->refresh_table_display

EXPORTING i_soft_refresh = 'X'.

container_r

grid_r

� 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. Laméthode s'appelle set_table_for_first_display. À condition que la table interne soit dutype de structure du Dictionnaire ABAP, le nom de cette structure est transféré au paramètrei_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.

� Si seul le contenu de la table interne est modifié pendant l'exécution du programme, il doit appeler laméthode refresh_table_display avant le renvoi de l'écran dans la zone conteneur.

(C) SAP AG BC400 11-35

� SAP AG 1999

Objets de gestion et BAPI

Groupes de fonctions et modules de fonctionGroupes de fonctions et modules de fonction

Objets et méthodesObjets et méthodes

Objets de gestion et BAPIObjets de gestion et BAPI

Bases de données logiquesBases de données logiques

(C) SAP AG BC400 11-36

� SAP AG 1999

� de trouver des informations importantes sur lesobjets de gestion et leur BAPI en utilisant le BAPIExplorer et le Générateur d'objets

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

Objets de gestion et BAPI : objectifs du cours

(C) SAP AG BC400 11-37

� SAP AG 1999

BAPI

� Un BAPI est une interface définie contenant lestraitements et les données d'un système applicatif,implémenté comme les méthodes d'un objet duBusiness Object Repository (BOR).

BAPI

� Business Application Programming Interface

� Un BAPI est un point d'entrée du système R/3, point auquel le système R/3 fournit un accès auxobjets de gestion et aux traitements.

� Chaque objet du BOR peut avoir différentes méthodes, une ou plusieurs d'entre elles peuvent êtreexécutées comme des BAPI.

� 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-38

� SAP AG 1999

Business Workflow

Systèmes-satellite R/3 etscénarios répartis (ALE)

Internet / Intranet

Développementspécifique client etpartenaires

Visual Basic/JAVA...

Compositiondescomposantes R/3

BComposantede gestion

Composantede gestion

Composantede gestion

Où s'utilisent les BAPI ?

� 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 surInternet ou Intranet pour des utilisateurs sans expérience R/3 ;

- la composition des composantes R/3 permet une communication entre les objets de gestion etles différentes composantes R/3 (applications) ;

- VisualBasic/JAVA/C++ : des clients externes (par exemple, des GUI alternatifs) peuventaccéder directement aux objets de gestion et à leurs traitements.

(C) SAP AG BC400 11-39

� SAP AG 1999

Exemple d'un objet de gestion FlightBooking

Méthodes :FlightBooking.GetListFlightBooking.GetDetailFlightBooking.CreateFromDataFlightBooking.Cancel

Compagnie aérienne Numéro de correspondance Date du vol Numéro de réservation

� Un exemple d'objet de gestion du modèle du cours s'appelle FlightBooking. Il contient uneréservation. Chaque réservation s'identifie uniquement par ses informations-clés : Compagnieaérienne, Numéro de correspondance (numéro de vol), Date du vol, Numéro deré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éservationsde ce vol. Elle affiche généralement plus de détails pour chaque réservation que GetDetail.

(C) SAP AG BC400 11-40

� SAP AG 1999

BAPI Explorer

Hiérarchie descomposantes

Composante applicative

Attributs-clés

Méthodes API

Objet de gestion

Détail Documentation Outils ProjetHiérarchique Alphabétique

Domaine de hiérarchie

Des informationscomplémentaires sur

les sous-composantes sontdisponibles dans les autres

outils ABAP Workbench

� Le BAPI Explorer Information vous permet d'afficher des informations complémentaires sur lesobjets de gestion et les BAPI qui leur appartiennent. L'écran se divise en deux parties : un domainede hiérarchie et une fenêtre de détails. Le domaine de hiérarchie affiche la hiérarchie descomposantes. Vous pouvez développer une composante applicative pour trouver les objets de gestionqui 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ésenteApplication Programming Interface).

(C) SAP AG BC400 11-41

� SAP AG 1999

BAPI Explorer - légende

Type d'objet de gestionType d'interfaceAttribut-cléMéthode spécifique de l'instanceMéthode non spécifique de l'instanceParamètres d'importParamètres d'exportParamètres de modification

� Des symboles s'utilisent pour indiquer les objets de gestion, les attributs-clés et les BAPI. Vouspouvez afficher la clé de ces symboles en utilisant le bouton Afficher légende.

(C) SAP AG BC400 11-42

� SAP AG 1999

Hiérarchique Alphabétique Détail Documentation Outils Projet

Objets de gestion dans le BAPI Explorer

Attributs-clés

Méthodes API

FlightBookingCompagnie aérienneN° correspondanceDate du volN° réservation

CancelCreateFromDataGetDetailGetList

FlightCustomerFlightConnection

� 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 typed'objet de gestion FlightBooking a une méthode spécifique à l'instance, GetDetail (qui renvoieune structure comportant les détails d'une réservation). Les valeurs des attributs-clés doivent êtretransfé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, pourlesquelles un objet de gestion existe déjà au moment de l'exécution).

(C) SAP AG BC400 11-43

� SAP AG 1999

Hiérarchique Alphabétique

BAPI dans le BAPI Explorer

Détail Documentation Outils Projet

Structure du Dictionnaire

Afficher

FlightBookingCompagnie aérienneN° correspondanceDate du volN° réservation

CancelCreateFromData

FlightCustomerFlightConnection

Entrée données réserv.RetourDonnées de réservation

GetDetailGetList

Sélection d'outils

Générateur d'objetsGénérateur de modules de fonctionDictionnaire ABAPContrôles de cohérence BAPICréation de liste BAPI

BAPISBDTIN

� Si vous développez la sous-structure d'une méthode, le système renvoie les noms de ses paramètresd'import et d'export. Vous trouverez des informations complémentaires sur le typage des paramètresd'interface en choisissant l'onglet Outils,et ensuite le Dictionnaire ABAP. Les paramètres d'interfaceBAPI sont toujours typés par des types du Dictionnaire ABAP.

� Les BAPI ont généralement un paramètre d'export appelé RETURN. Celui-ci peut être soit unestructure, soit une table interne. Le paramètre RETURN contient des informations sur les erreurseffectuées pendant le traitement du BAPI. Les BAPI n'ont pas d'exceptions.

(C) SAP AG BC400 11-44

� SAP AG 1999

Générateur d'objets

Zones-clés

Méthodes

Attributs

Événements

Interfaces

Type d'objet

Interfaces

Données de base Vue complète del'objet de gestion

� Pour afficher des informations complètes sur un type d'objet de gestion, utilisez l'outil Générateurd'objets. Le système affiche une arborescence pour le type d'objet de gestion, y compris desméthodes non API.

� Pour rechercher un objet de gestion, utilisez l'outil Business Object Repository (BOR). Cet outilaffiche la hiérarchie des composantes et tous les objets de données qui en dépendent. Vous pouveznaviguer de cette arborescence vers le Générateur d'objets. Le système affiche automatiquementl'objet adéquat.

(C) SAP AG BC400 11-45

� SAP AG 1999

BAPI standard

� GetList� Renvoie le contenu des zones-clés pour l'objet choisi

� GetDetail� Renvoie les informations détaillées (attributs) pour l'objet

demandé

� CreateFromData� Crée un nouvel objet dans R/3 et renvoie les informations le

concernant

� Les BAPI de noms standardisés contiennent des méthodes standard. Cette page vous propose lestrois plus importantes.

(C) SAP AG BC400 11-46

� SAP AG 1999

Implémentation des BAPI comme modules de fonction

Hiérarchique Alphabétique Détail Documentation Outils Projet

Module de fonction

Afficher

FlightBooking

FlightCustomerFlightConnection

RetourDonnées de réserv.

GetList

Sélection d'outils

Générateur d'objetsGénérateur de modules de fonctionDictionnaire ABAPContrôles de cohérence BAPICréation de liste BAPI

BAPI_SBOOK_GETDETAIL

Compagnie aérienneN° correspondanceDate du volN° réservation

Annuler CreateFromDataGetDetail

� Dans la version 4.6, les BAPI sont implémentés par des modules de fonction. Vous pouvez afficherle 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-47

� SAP AG 1999

Appel d'un BAPI depuis un programme ABAP

PROGRAM ...

TABLES ...

DATA ...

MODULE init OUTPUT.

CALL FUNCTION 'BAPI_...' ...

ENDMODULE.

MODULE read_data INPUT.

CALL FUNCTION 'BAPI_...' ...

ENDMODULE.

MODULE confirm_reservation.

CALL FUNCTION 'BAPI_...'...

IF ... .

CALL FUNCTION 'BAPI_...' ...

ENDIF.ENDMODULE.

Programme ABAP

R/3R/3

Modules de fonction :Modules de fonction :

BAPI_A_M2

BAPI_A_M1

BusinessBusiness Object ObjectRepositoryRepository

Objet de gestion A :Objet de gestion A :MMéthode 1 = M1éthode 1 = M1MMéthode 2 = M2éthode 2 = M2

CALL FUNCTION 'BAPI_...' ...

CALL FUNCTION 'BAPI_...' ...

CALL FUNCTION 'BAPI_...' ...

CALL FUNCTION 'BAPI_...' ...

� Si vous voulez utiliser un BAPI dans un système R/3, vous pouvez directement appeler le module defonction qui le comporte. Vous constaterez que les informations relatives aux erreurs sont transféréesau programme en utilisant le paramètre d'interface RETURN. Les modules de fonction BAPI necontiennent pas d'exceptions ni de dialogues utilisateur. Leur fonction unique est d'encapsuler lalogique applicative.

(C) SAP AG BC400 11-48

� SAP AG 1999

BAPI : gestion des exceptions

� Aucune exception

� Les erreurs sont gérées par des paramètres d'export(structures ou tables)� Nom du paramètre : RETURN

� Structure du Dictionnaire ABAP (selon la version) :BAPIRETURN, BAPIRETURN1,BAPIRET1, BAPIRET2, BAPIRET2_FIX

� Tout BAPI possède un paramètre d'interface, RETURN, qui contient les informations sur les casd'erreur. Ce paramètre est toujours d'un type du Dictionnaire ABAP. Vous devez donc inclure unestructure d'un type identique dans votre programme.

(C) SAP AG BC400 11-49

� SAP AG 1999

Bases de données logiques

Groupes de fonctions et modules de fonctionGroupes de fonctions et modules de fonction

Objets et méthodesObjets et méthodes

Objets de gestion et BAPIObjets de gestion et BAPI

Bases de données logiquesBases de données logiques

(C) SAP AG BC400 11-50

� SAP AG 1999

� de décrire le comportement au moment del'exécution d'un programme exécutable qui utiliseune base de données logique simple, comprenantles effets sur :

� la structure de la base de données logique

� l'instruction NODES

� les blocs de traitement événements GET

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

Bases de données logiques : objectifs du cours

(C) SAP AG BC400 11-51

� SAP AG 1999

SPFLI

Exemple : base de données logiqueF1S

SFLIGHT

SBOOK

Lecture de données logiquement dépendantes

� Utilisez des bases de données logiques pour lire dans les bases de données des informationslogiquement cohérentes. Chaque base de données logique possède une structure comportant unehiérarchie des tables et des vues à lire.

� Vous pouvez relier une seule base de données logique à chaque programme de type 1. Celle-cienvoie ensuite à votre programme des entrées aux tables et aux vues. Seules les instructions detraitement de données doivent donc être programmées.

(C) SAP AG BC400 11-52

� SAP AG 1999

� sont des programmes spéciaux d'acquisition de donnéeslivrés par SAP

� présentent les données lues au programme utilisateur dansun ordre hiérarchique logique

� accèdent aux bases de données de manière optimisée

� proposent un écran de sélection dynamique

� contrôlent les autorisations

Vous pouvez associer une base de données logique àchaque programme de type 1, à l'aide des attributs de cedernier.Pour le traitement des enregistrements, vous utilisez desévénements spécifiques.

Vous pouvez associer une base de données logique àchaque programme de type 1, à l'aide des attributs de cedernier.Pour le traitement des enregistrements, vous utilisez desévénements spécifiques.

Les bases de données logiques

� Chaque base de données logique est encapsulée dans un programme conçu pour les accès fréquents àses informations.

� Ces accès ont été optimisés à l'aide d'Open SQL.

� Lorsque vous travaillez avec une base de données logique, vous ne devez pas programmer d'écran desélection car celui-ci est généré automatiquement.

� Le système contrôle les autorisations conformément au concept d'autorisation de SAP.

(C) SAP AG BC400 11-53

� SAP AG 1999

Programme

NODES sflight.

GET sflight ...:

SPFLI

SFLIGHT

SBOOK

Données dela BD logique

Contrôle d'une BD logique depuis un programme

� L'instruction NODES <noeud> exécute deux fonctions :

� elle définit un objet de données (une structure) comme un espace de travail de table qui a lamême structure que la structure <noeud> du Dictionnaire ABAP, qui est un noeud de lastructure hiérarchique de la base de données logique. A l'exécution, cette structure reçoit desenregistrements que la base de données logique a lus et fournis au programme ;

� elle détermine le niveau de détail de l'écran de sélection : l'écran défini dans la base dedonnées logique ne doit contenir que les zones de saisie des informations-clés nécessaires auprogramme. L'instruction NODES vous permet de garantir l'accès aux informations des tablesappropriées de l'écran de sélection.

� Les bases de données logiques effectuent une lecture de haut en bas, en fonction de leur structure. Leniveau de données lues dépend des événements GET d'un programme. Le niveau est déterminé parl'événement GET maximal (d'une vue structurelle de la base de données logique).

(C) SAP AG BC400 11-54

� SAP AG 1999

Programme

RuntimesystemABAP

START-OF-SELECTION.

Liste de base

GET spfli.

GET sflight.

END-OF-SELECTION.

NODES: SPFLI,SFLIGHT.

Base dedonnéeslogique

SPFLI

SFLIGHT

SBOOK

Événements et bases de données logiques

� Pour inclure une base de données logique à un programme de type 1, vous utilisez les attributs de ceprogramme.

� Chaque noeud de la hiérarchie de base de données logique vous envoie un événement GET (en plusdes autres événements). (GET SPFLI, GET SFLIGHT, GET SBOOK dans notre exemple).

� Vous utilisez des événements GET pour programmer le traitement des enregistrements.

� Au moment de l'exécution, les événements qui créent des listes sont traités dans l'ordre suivant :

� START-OF-SELECTION.

� GET SPFLI et GET SFLIGHT, appelés de nombreuses fois dans une logique SELECTimbriquée, en fonction de la structure de la base de données logique.

� END-OF-SELECTION, appelé après tous les événements GET et immédiatement avant l'envoide la liste au serveur de présentation.

(C) SAP AG BC400 11-55

� SAP AG 1999

START-OF-SELECTION

GET SPFLI

GET SFLIGHT

GET SFLIGHT

GET SPFLI LATE

GET SPFLI

END-OF-SELECTION

DL 1699

25.08.1998

27.09.1998

DL 1984

GET SFLIGHT

GET SFLIGHT

GET SPFLI LATE

25.08.1998

27.09.1998

GET SFLIGHT 29.09.1998

Exemple : séquencement des événements

REPORT bc400d_logical_database.NODES: spfli, sflight.

START-OF-SELECTION.WRITE: / 'START-OF-SELECTION'

color 3.

GET spfli FIELDS carrid connid.WRITE: / 'GET SPFLI' color 1,

spfli-carrid,spfli-connid.

GET sflight FIELDS fldate.WRITE: / 'GET SFLIGHT' color 2,

sflight-fldate.

GET spfli LATE.WRITE :/ 'GET SPFLI LATE'.

END-OF-SELECTION.WRITE: 'END-OF-SELECTION'

color 3.

GET spfli

GET sflight

GET spfli LATE.

� Au moment de l'exécution, les événements qui créent des listes sont traités dans l'ordre suivant :

� START-OF-SELECTION.

� GET spfli : le premier enregistrement de la table SPFLI correspondant aux critères desélection est placé dans l'espace de travail spfli, puis l'événement est traité ;

� GET sflight : le premier enregistrement de SFLIGHT correspondant aux critères desélection et à la clé de l'enregistrement SPFLI en cours est placé dans l'espace de travailsflight, puis l'événement est traité ;

� GET sflight : l'enregistrement suivant dans la table SFLIGHT est placé dans l'espace detravail sflight, puis l'événement est traité de nouveau ;

� GET sflight est appelé jusqu'à ce qu'aucun nouvel enregistrement ne soit plus trouvé ;

� GET spfli LATE est appelé avant que l'enregistrement du SPFLI suivant ne soit placédans l'espace de travail spfli ;

� GET spfli : l'enregistrement correspondant suivant de SPFLI est placé dans l'espace detravail spfli ;

� ...

� END-OF-SELECTION est appelé immédiatement avant l'envoi de la liste.

(C) SAP AG BC400 11-56

� SAP AG 1999

ABAP : attributs de programmeABAP : attributs de programme

Log. Datenbank

Application

F1S

Type 1

SPFLISPFLI

SFLIGHTSFLIGHT

SBOOKSBOOK

Attributs

Résumé

S

NODES: spfli, sflight.

START-OF-SELECTION.WRITE: / 'START-OF-SELECTION'

color 3.

GET spfli FIELDS carrid connid.WRITE: / 'GET SPFLI' color 1,

spfli-carrid,spfli-connid.

GET sflight FIELDS fldate.WRITE: / 'GET SFLIGHT' color 2,

sflight-fldate.

GET spfli LATE.WRITE :/ 'GET SPFLI LATE'.

END-OF-SELECTION.WRITE: 'END-OF-SELECTION'

color 3.

GET spfli

GET sflight

GET spfli LATE.

NODES:

� Les BD logiques sont incluses dans les programmes de type 1 en tant qu'attributs. Une seule BDLpeut être associée à un programme.

� 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.

� Pour placer les données d'une table dans une liste non fournie par votre BD logique, utilisez SELECTpour programmer un accès supplémentaire à cette base.

(C) SAP AG BC400 11-57

� SAP AG 1999

Vous êtes maintenant capable :

Réutilisation des composantes

� de trouver et utiliser des modules de fonction

� d'afficher une liste simple en utilisant ALV gridcontrol (objets des classes globales duGénérateur de classes)

� d'utiliser un BAPI et trouver des BAPI en utilisantle BAPI Browser

� d'utiliser une base de données logique pour créerune liste hiérarchique d'informations de vol

(C) SAP AG BC400 11-58

Exercices

(C) SAP AG BC400 11-59

(C) SAP AG BC400 11-60

Chapitre : Réutilisation des composantesSujet : 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 lasolution modèle correspondante comme suit :si la fonction Annuler est sélectionnée à l’écran, le système doit traiterune 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èleadéquate SAPBC400UDS_DYNPRO_1 et nommez-la ZBC400_##_DYNPRO_2.Afffectez votre programme à la classe de développement ZBC400_## et à l'ordrede transport pour ce projet, BC400… (en remplaçant ## par votre numéro degroupe).

1-2 Utilisez la méthode expliquée dans ce cours pour rechercher le module de fonctionde la boîte de dialogue standard qui est généralement lancé lorsque l’utilisateurchoisit Annuler.

1-3 Informez-vous sur les interfaces du module de fonction, lisez la documentation, etutilisez 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 lafonction Annuler. Insérez ensuite l’appel de module de fonction en utilisant lafonction "modèle" de l’Éditeur ABAP. Faites en sorte que le système réagisse à lasaisie 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-61

Chapitre : Réutilisation des composantesSujet : 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 dedonné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 nommantZBC400_##_ALV_GRID. Affectez votre programme à la classe dedéveloppement ZBC400_## et à l'ordre de modification pour votre projet"BC400…" (en remplaçant ## par votre numéro de groupe). Le modèle deprogramme contient la définition d’une table interne du même type de ligne que latable 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 SPFLIen 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 dela méthode CONSTRUCTOR sont obligatoires ?2-4-2 Pour la classe : CL_GUI_ALV_GRID, quels paramètres de la méthodeCONSTRUCTOR 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 classeCL_GUI_CUSTOM_CONTAINER et l’autre pour la classe CL_GUI_ALV_GRID.

(C) SAP AG BC400 11-62

2-7 Transmettez la variable de référence du custom container dans le paramètreobligatoire. Assurez-vous que l'objet soit généré seulement si PROCESS BEFOREOUTPUT s’exécute pour la première fois.

2-8 À la première exécution de PROCESS BEFORE OUTPUT, appelez la méthodeSET_TABLE_FOR_FIRST_DISPLAY ; transférez le nom du type de ligne de latable interne dans le paramètre I_STRUCTURE_NAME ; transportez la table internedans le paramètre IT_OUTTAB

2-9 Si PBO s’exécute plus d’une fois, vous devez appeler la méthodeREFRESH_TABLE_DISPLAY. Transmettez 'X' en paramètreI_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 containeren utilisant l'instruction CREATE OBJECT. Transmettez le nom du domaineconteneur (du dynpro 100) au paramètre obligatoire de la méthode CONSTRUCTOR.Créez une instance de ALV.

(C) SAP AG BC400 11-63

Solutions

(C) SAP AG BC400 11-64

(C) SAP AG BC400 11-65

Chapitre : Réutilisation des composantesSujet : 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 dialogueTITLE (max. 35 car.) : titre de la fenêtre de dialogueParamètres d’import facultatifs :TEXTLINE2 (max. 70 car.) : première ligne de la fenêtre de dialogueSTART_COLUMN (Typ SY-CUCOL) : première colonne de la fenêtre dedialogueSTART_ROW (Typ SY-CUCOL) : première ligne de la boîte de dialogueParamè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-66

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-67

Chapitre : Réutilisation des composantesSujet : 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’objetde la classe CL_GUI_CUSTOM_CONTAINER doit être transmis à ceparamètre.

2-5 Créez un domaine de contrôle conteneur à l’écran. Appelez le domaine deconteneur CONTAINER_1

2-6 Introduisez les instructions suivantes dans la section de déclarations dedonné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-68

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 12-1

� SAP AG 1999

� Processus de traitement élémentaire

� LUW BD : unité logique de travail Base de données

� Regroupement des modifications d'une base de données

� Concept de blocage

Contenu :

Dialogues base de données II

(C) SAP AG BC400 12-2

� SAP AG 1999

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

Dialogues base de données II : objectifs du chapitre

� d'expliquer pourquoi vous devez effectuer lesmodifications de BD dans une seule unité logiquede travail (Logical Unit of Work) de base dedonnées

� de décrire le concept de blocage SAP

(C) SAP AG BC400 12-3

� SAP AG 1999

Application

Présentation

Base de données

WorkprocessWorkWork

processprocessWork

processWorkWork

processprocessWorkWork

processprocess

Dispatcher

Architecture client/serveur de R/3

Work processes de la base de donnéesWork processes de la base de données

� 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.

� Cette architecture, qui répartit les requêtes des utilisateurs (dispatcher), est la base d'un système àmulti-utilisateurs, hautement performant et économique.

� Les utilisateurs équipés d'ordinateurs relativement lents accèdent aux work processes d'un petitnombre de serveurs d'application beaucoup plus rapides (et plus onéreux). À chaque work process duserveur d'application correspond un work process du serveur de base de données.

� Le dispatcher attribue un work process aux clients, et ce, au niveau du serveur de présentation etpendant une durée déterminée. À son tour, le work process du serveur d'application utilise un workprocess de la base de données. Quand le système a traité la saisie utilisateur dans une étape dedialogue, 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.

� Cette architecture à trois niveaux est beaucoup plus évolutive qu'une architecture client-serveurvolumineuse réunissant en un seul niveau les serveurs de présentation et d'application. Comme ellenécessite moins d'opérations en antémémoire, elle est plus économique.

(C) SAP AG BC400 12-4

� SAP AG 1999

Traitementétape 1

Traitementétape 2 . . . TraitementTraitement

étape nétape n

LUW SAP

Processus detraitement élémentaire

Processus de traitement élémentaire

� Une LUW SAP (unité logique de travail) est une série d'étapes logiques réunies dans un processusde gestion R/3.

� Les étapes de la chaîne de traitement du processus de gestion doivent être logiquement liées.

� Les LUW SAP fonctionnent selon le principe du "tout ou rien" : le système effectue toutes les étapesou aucune.

� Le processus de gestion représenté dans une LUW doit être élémentaire. Ainsi, le processusintervenant depuis la commande d'un client jusqu'à la facturation est trop complexe pour tenir dansune seule LUW. Dans ce cas, scindez-le en segments indépendants plus petits qui forment chacunune "transaction" dans le système R/3. Le caractère "élémentaire" de votre processus dépend de sanature et de la façon dont vous l'aurez conçu.

(C) SAP AG BC400 12-5

� SAP AG 1999

Stade cohérent 1

Stade intermédiaire

Stade cohérent 2

ROLLBACK

Stade de modification de donnéesinsert, update, delete

COMMIT

LUW BD : unité logique de travail Base de données

� Une LUW base de données est une suite d'opérations indissociables qui fait passer la base dedonnées d'un état cohérent à un autre état cohérent.

� Le système exécute une LUW BD soit intégralement, soit pas du tout.

� Les LUW BD se terminent par un commit de base de données. C'est seulement au COMMIT quesont écrites définitivement les modifications de la base de données. Jusqu'au déclenchement duCOMMIT, vous pouvez annuler toutes vos modifications en provoquant un ROLLBACK.

(C) SAP AG BC400 12-6

� SAP AG 1999

LUW BD

LUW SAP

Modifications de la BD

ProgrammeABAP

Dialogues utilisateur

Regroupement des modifications d'une base dedonnées dans une LUW SAP

� Pour représenter un processus de gestion dans le système R/3 au moyen d'une LUW SAP, il faut desdialogues 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 baseselon le principe du tout ou rien. Tous les changements de la LUW SAP doivent donc être traitésdans une seule LUW BD.

� Généralement, une LUW SAP contient plusieurs LUW BD.

� L'objectif de la programmation d'une transaction est de regrouper les segments du dialogue base dedonnées dans une seule LUW BD.

(C) SAP AG BC400 12-7

� SAP AG 1999

LUW BDLUW BDLUW BD

PBO PBOPAI PAI

COMMITCOMMITimpliciteimplicite

Étape de dialogue

COMMITCOMMITimpliciteimplicite

Modifications debase de données

COMMITCOMMITexpliciteexplicite

Commits implicites

� 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-8

� SAP AG 1999

Objet bloquéDurDuréeée

Table des blocagesTable des blocagesDemande de blocage

Blocage a réussi

1

Concept de blocage SAP

(C) SAP AG BC400 12-9

� SAP AG 1999

Objet bloquéDurDuréeée

Table des blocagesTable des blocagesDemande de blocage

Blocage a échoué

1

Blocage a réussi

2

Demande de blocage

Concept de blocage SAP

(C) SAP AG BC400 12-10

� SAP AG 1999

Objet bloquéDurDuréeée

Table des blocagesTable des blocagesDemande de blocage

Blocage a réussi Levée du blocage

31

Blocage a échoué

2

Demande de blocage

Concept de blocage SAP

(C) SAP AG BC400 12-11

� SAP AG 1999

Objet bloqué Objet bloquéDurDuréeée

Table des blocagesTable des blocages

Blocage a réussi

Demande de blocage

Levée du blocage

Demande de blocage

4

3

Blocage a réussi

1

Blocage a échoué

2

Demande de blocage

Concept de blocage SAP

� Un blocage au niveau du serveur base de données ne vaut que pour une seule LUW BD. Il nes'applique donc pas à un objet portant sur la totalité d'une LUW SAP.

� Cela est dû au fait que le système R/3 comporte un mécanisme de blocage spécifique totalementindépendant du système de blocage de base de données.

� Selon le concept de blocage SAP, les programmes placent les entrées dont ils ont besoin dans unetable de blocages.

� Vous pouvez écrire une entrée de blocage seulement si les entrées de table correspondantes ne sontpas 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.

� Avant de définir un blocage, vous devez spécifier l'objet de blocage approprié dans le DictionnaireABAP. Cet objet indique les arguments servant à bloquer des entrées de la table.

� Lorsque vous activez un objet de blocage, le système génère deux modules de fonction : ENQUEUEet DEQUEUE.

� Le mécanisme de blocage SAP ne définit que des blocages logiques. Il n'a donc d'effet que si tousles programmes applicatifs sont conformes à ses principes.

(C) SAP AG BC400 12-12

� SAP AG 1999

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-connidEXCEPTIONS

foreign_lock = 1system_failure = 2others = 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-carridAND connid = wa_spfli-connid.

MOVE-CORRESPONDING wa_spfli TO sdyn_conn.CALL SCREEN 100.CALL FUNCTION 'DEQUEUE_ ESSPFLI' ...

Programme d'exemple : blocage et déblocage

� Dans notre programme d'exemple, il est normal d'écrire une entrée de blocage, avant quel'enregistrement de données ne soit lu et l'écran traité.

� Vous écrivez une entrée de blocage en appelant un module de fonction ENQUEUE pour un objet deblocage approprié. Vous trouverez quels objets de blocage accèdent à une table de base de donnéesdans 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 nomENQUEUE_<Nom de l'objet de blocage> et DEQUEUE_<Nom de l'objet de blocage>. En règlegénérale, vous devez uniquement transférer les zones-clés de l'interface. Les valeurs par défaut sonttransmises à tous les autres paramètres.

(C) SAP AG BC400 12-13

� SAP AG 1999

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'

EXPORTINGiv_carrid = wa_spfli-carridiv_connid = wa_spfli-connidiv_fltime = wa_spfli-fltimeiv_deptime = wa_spfli-deptime

EXCEPTIONSOTHERS = 1.

IF sy-subrc NE 0.MESSAGE a149.

ELSE.MESSAGE s148.LEAVE TO SCREEN 0.

ENDIF.ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

� Notre programme d'exemple montre une seule mise à jour concernant une seule table. Vous pouvezdonc mettre à jour la base de données directement depuis un work process de dialogue, la techniquela plus facile. Les instructions ABAP qui mettent à jour la base de données sont toutes exécutéesdans 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 êtreinterrompu par un message "Fin anormale" pour qu'un rollback s'exécute automatiquement.

� 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 dedonnées.

(C) SAP AG BC400 12-14

� SAP AG 1999

Vous êtes maintenant capable :

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

� d'expliquer pourquoi vous devez effectuer lesmodifications de BD dans une seule unité logiquede travail (Logical Unit of Work) de base dedonnées

� de décrire le concept de blocage SAP

(C) SAP AG BC400 13-1

� SAP AG 1999

Logistique et modification du logiciel : contenu

� Développement de logiciel orienté équipe ouprojet, dans le Workbench Organizer

� Modification du logiciel SAP standard

(C) SAP AG BC400 13-2

� SAP AG 1999

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

Logistique et modification du logiciel : objectifs du chapitre

� de gérer un projet dans le système R/3 en utilisantle Workbench Organizer

� de décrire les options permettant de compléter etde modifier les fonctions de programmesexistants

(C) SAP AG BC400 13-3

� SAP AG 1999

Logistique logicielle et modification de R/3

Logistique logicielleLogistique logicielle

Modification de R / 3Modification de R / 3

(C) SAP AG BC400 13-4

� SAP AG 1999

Fin du développement

ÉquipeÉquipe : :

Chef de projet :Chef de projet :Fin du développement

Planning : . . .

Projet de contrProjet de contrôle de qualitôle de qualitéé•• ContrContrôle de syntaxeôle de syntaxe•• Objets inactifsObjets inactifs•• CohCohérence de térence de tâcheâche

Documentation du projetDocumentation du projet

L'ordre de modification est libL'ordre de modification est libéréréé

BC400-00

BC400-01

BC400-02

BC400-03

BC400-04

...

Tâches de contrôle de qualité :• Contrôle de syntaxe• Activation d'objets inactifs

Documentation de tâche

Les tâches sont libérées

(C) SAP AG BC400 13-5

� SAP AG 1999

Originaux et copies

CopieCopie

OriginalOriginal

CopieCopie

CopieCopie

OriginalOriginalObjet SAP

SystSystème de dème de développementéveloppement SystSystème suivantème suivant

Objet SAP Objet SAP

Objet client Objet client

Transport Transport DDéveloppementéveloppement

� Le Workbench Organizer note automatiquement le système dans lequel vous créez un objet duRepository. L'original de cet objet du Repository se trouve donc dans ce système.

� La version initiale d'un objet n'existe que dans un seul système. Les autres systèmes n'en contiennentque des copies.

� Le fait qu'il existe un système initial pour un objet garantit que celui-ci n'est modifié que dans lesystème d'intégration. C'est dans ce système que vous développez ; tous les objets qui s'y trouventsont donc des originaux. Vous y modifiez les objets du Repository.

� Si vous transportez ensuite vos objets du Repository dans un système de consolidation, ce dernier encontiendra 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 dansd'autres systèmes. Ainsi, l'état des objets reste cohérent d'un système à l'autre.

� Les originaux ne sont jamais écrasés durant un transport.

(C) SAP AG BC400 13-6

� SAP AG 1999

CopieCopiemodifimodifiéeée

OriginalOriginalcorrigcorrigéé

CopieCopie

CopieCopie

OriginalOriginalcorrigcorrigéé

Objet SAP

SystSystème de dème de développementéveloppement SystSystème suivantème suivant

Transport Transport correctioncorrection

Objet SAP Objet SAP

Objet client Objet client

CorrectionCorrection

RRéparationéparationCorrectionCorrectionTransport Transport rréparationéparation

Corrections et réparations

� La modification d'un original s'appelle une correction. Le système enregistre ces modifications dansune demande contenant des tâches de type "développement/correction".

� Si une copie est modifiée (donc, si un objet n'est pas modifié dans son système original), cettemodification s'enregistre dans une tâche de type "réparation". Une modification d'un objet SAPs'appelle une réparation.

� 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 estimpératif d'enregistrer également les modifications effectuées dans vos copies immédiatementdans vos originaux !!

� Ce n'est pas possible pour les objets SAP car les originaux ne sont pas dans vos systèmes.

(C) SAP AG BC400 13-7

� SAP AG 1999

Modifications pendant la montée de version

CopieCopie modifi modifiéeée

OriginalOriginalcorrigcorrigéé

CopieCopie

CopieCopie

OriginalOriginalcorrigcorrigéé

Objet SAP

SystSystème de dème de développementéveloppement SystSystème suivanème suivan

Transport Transport modificationmodification

Objet SAP Objet SAP

Objet client Objet client

MontMontée de versionée de version

Ajustement Ajustement dede lala

modificationmodification

MontMontée de versionée de version

� Un conflit peut se produire lorsque vous effectuez une montée de version, un support package, oud'autres ordres de transport de SAP vers votre système.

� Un conflit se produit si vous modifiez un objet SAP et qu'une nouvelle copie est effectuée par SAPlors d'une montée de version. L'objet livré par SAP devient l'objet actif du Repository de votresystème R/3.

� Pour sauvegarder vos modifications, vous devez effectuer un ajustement de modification pour lesobjets correspondants. La modification de nombreux objets SAP peut entraîner un retard substantiellors de l'exécution de la montée de version.

� Pour garantir la cohérence du système de développement et du système suivant, vous devez effectuerl'ajustement de modification uniquement dans le système de développement. Les objets del'ajustement sont ensuite transportés vers les autres systèmes.

(C) SAP AG BC400 13-8

� SAP AG 1999

Logistique logicielle et modification de R/3

Logistique logicielleLogistique logicielle

Modification de R / 3Modification de R / 3

(C) SAP AG BC400 13-9

� SAP AG 1999

Niveaux de modification

TTâchesâches applicatives applicativesR/3R/3

( Standard SAP)( Standard SAP)

ProgrammesProgrammesclientclient

DDéveloppe-éveloppe-mentment client clientExtensionExtensionModificationModification

� Modificationcodée en dur

� Modificationassistée

� avec appeld'objets SAP

� sans appeld'objets SAP

� Dictionnaire ABAP� Extension de table� Exit de zone

� Exit client� Exit de module de

fonction� Exit d'écran� Exit de menu

� BTE, BusinessTransaction Events

� BADI, Business add-in

� Exit utilisateur

� 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 lesmodifications possibles ont été imaginées et organisées. Le customizing est une partieobligatoire 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 suiteune nouvelle version de l'objet réparé, vous devrez adapter votre réparation à la nouvelleversion. Évitez donc de modifier le standard.

(C) SAP AG BC400 13-10

� SAP AG 1999

Une fonction similaire est-ellemappée dans le standard SAP ?

La fonction SAP peut-elle être adaptée aux besoins du client par des

extensions ?

L'application SAP permet-ellela liaison de plusieurs fonctions aux

extensions ?

Non

Oui

Oui

Non

Oui

Non

Développement client

Customizing

Extension

Demande d'extension, éviter modification

Extensions fonctionnelles

� Avant de modifier le standard, vérifiez si vous ne pouvez pas obtenir le résultat voulu en utilisant leCustomizing ou le concept d'extension.

� Vous utilisez les extensions pour modifier le logiciel SAP, tout en évitant d'en réparer la copie. Vousmodifiez ou complétez des fonctions sans avoir à réparer le logiciel manuellement lors des montéesde version. Les différents types d'extension sont cités plus loin dans ce chapitre.

� Vous pouvez demander une extension dans le SAPNet - R/3 Frontend.

(C) SAP AG BC400 13-11

� SAP AG 1999

Menu 2Fonction 1Fonction 2Fonct. clientFonction 3

Menu 1 Menu 3

Exit de menuExit de menu

Zone x

Zone y Exit de dynproExit de dynproExit de zoneExit de zone

Extension de dialogues utilisateur

� 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 desprogrammes 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-12

� SAP AG 1999

Extensions : exemples

� Exits de programme :� exits prédéfinis pour les programmes applicatifs.

� Extensions du Dictionnaire :� append de table : vous permet d'ajouter des zones

supplémentaires à des tables standard ;

� informations sémantiques des éléments de données :utilisation d'une extension pour modifier la description ou ladocumentation d'une zone (F1, aide).

� Voici les différents types d'extension de programme proposés aux clients :� 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 ;

� 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 quis'affiche lorsque l'utilisateur appuie sur F1. Les textes d'aide sont mémorisés avec l'élément dedonnées correspondant ;

- Vous pouvez remplacer les libellés de zone (texte court, moyen ou long pour la zone) par vospropres textes.

(C) SAP AG BC400 13-13

� SAP AG 1999

Programme

Objet de développement Traiter Saut Utilitaires Options Environnement

Ajouter développeurVous ne figurez pas dans la liste desdéveloppeurs. Veuillez vous inscriredans le SAPNet - R/3 Frontend.Une fois inscrit, vous recevrezune clé d'accès.

Utilisateur

Inscription Traiter Sélection Système Aide

THIERRY

07319180563617100772Clé

Enregistrer modifications d'objets SAP

Repository Browser : Programme SAP ABAP

Système client

SAPNetR/3Frontend

Inscription des développeurs au SSCR

ZABAP

� 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 serademandée la première fois que vous créerez ou modifierez un objet du Repository. Le systèmeattribue des clés en fonction de la référence client et du nom de l'utilisateur.

� 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 devotre 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 duSAPNet R/3 Frontend.

� SSCR signifie SAP Software Change Registration.

(C) SAP AG BC400 13-14

� SAP AG 1999

Vous êtes maintenant capable :

Logistique et modification du logiciel : résumé du chapitre

� d'affecter un projet au système R/3 en utilisant leWorkbench Organizer

� de décrire les options permettant de compléter etde modifier les fonctions de programmesexistants

(C) SAP AG BC400 13-15

� SAP AG 1999

Programme

Objet de développement Traiter Saut Utilitaires Options Environnement

Ajouter développeurVous ne figurez pas dans la liste desdéveloppeurs. Veuillez vous inscriredans le SAPNet - R/3 Frontend.Une fois inscrit, vous recevrezune clé d'accès.

Utilisateur

Inscription Traiter Sélection Système Aide

THIERRY

07319180563617100772Clé

Enregistrer modifications d'objets SAP

Repository Browser : Programme SAP ABAP

Système client

SAPNetR/3Frontend

Inscription des développeurs au SSCR

ZABAP

� 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 serademandée la première fois que vous créerez ou modifierez un objet du Repository. Le systèmeattribue des clés en fonction de la référence client et du nom de l'utilisateur.

� 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 devotre 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 duSAPNet R/3 Frontend.

� SSCR signifie SAP Software Change Registration.

(C) SAP AG BC400 13-16

� SAP AG 1999

Vous êtes maintenant capable :

Logistique et modification du logiciel : résumé du chapitre

� d'affecter un projet au système R/3 en utilisant leWorkbench Organizer

� de décrire les options permettant de compléter etde modifier les fonctions de programmesexistants

(C) SAP AG BC400 14-1

� SAP AG 1999

� Cette section contient des informationssupplémentaires à utiliser à titre de référence.

� Ces informations ne font pas partie de laversion standard du cours.

� Il est donc possible que le formateur ne lestraite pas lors de la présentation du cours.

Annexes

(C) SAP AG BC400 14-2

� SAP AG 1999

Afficher tous les objets de type Xavec attribut Y

Afficher tous les objetsde type X qui ont été modifiés par l'utilisateur Y en date du JJMMAA

Afficher toutes les zonesde table avec table de contrôle X

Informations surInformations surles tables et les tables et

leurs relationsleurs relations Objets modifiObjets modifiésés

Cas d'emploiCas d'emploiRecherche par attributRecherche par attribut

? ?

? ?

Requêtes courantes dans le système d'information

Afficher tous les objets de type Xqui utilisent l'attribut Y

(C) SAP AG BC400 14-3

� SAP AG 1999

Affectation à un projet

Affectation Affectation ààune classe de dune classe de développementéveloppement

Définition d'attributs

ÉditeurÉditeur

Objet de programme

Vue d'ensemble : création de programmes

� Pour créer un nouveau programme, vous devez saisir tout d'abord des informations d'ordreadministratif.

� Les programmes doivent être affectés à une classe de développement spécifique. . Celle-ci classe leprogramme logiquement. Vous le faites une fois pour toutes, lorsque vous créez l'objet duRepository (la classe de développement sera à son tour affectée logiquement à la composanteappropriée).

� Vous devez aussi définir des attributs du programme. Parmi ceux-ci, le type de programme estparticulièrement important. Il détermine le mode d'exécution du programme dans un environnementclient/serveur R/3 si, par exemple, le texte source qui en résulte constitue un programme exécutableou un segment de code réutilisable.

� Enfin, un programme doit être affecté à un projet de Workbench Organizer (ordre demodification). Celle-ci classe l'objet du Repository chronologiquement. Dès qu'un projet arrive àson terme, vous affectez un programme à un nouveau projet.

� Vous éditez le programme uniquement après cette classification.

(C) SAP AG BC400 14-4

� SAP AG 1999

Imbrication de structures et de tables internes

� Les types de structure contiennent d'autres types de structure ou de table.

� Les types de table contiennent éventuellement d'autres types de table ou de structure.

� Vous trouverez des informations sur la définition de types de table dans la documentation, au mot-clé TYPES.

(C) SAP AG BC400 14-5

� SAP AG 1999

TYPE-POOL Z400.TYPES: z400_name_type(25) TYPE C,

BEGIN OF z400_flightrec_type,... ,

END OF z400_flightrec_type.

REPORT ... .TYPE-POOLS z400.DATA: name TYPE z400_name_type,

wa TYPE z400_flightrec_type.... .

ABAP

Groupes de types du Dictionnaire ABAP

� Vous définissez des types de données dans un type-pool du Dictionnaire ABAP, plutôt que dans unprogramme ABAP.

� Le nom d'un groupe de types du Dictionnaire ABAP ne doit pas dépasser 5 caractères. Les noms destypes contenus dans le groupe de types <typepool> doivent commencer par <typepool>, suivi d'untrait de soulignement.

� Dans les programmes ABAP, vous devez déclarer les types appartenant à un groupe de types par lacommande TYPE-POOLS.

(C) SAP AG BC400 14-6

� SAP AG 1999

TABLES sdyn_conn.PARAMETERS pa_carr LIKE spfli-carrid.

MOVE pa_carr TO sdyn_conn-carrid.CALL SCREEN 100.

sdyn_conn

pa_carrsdyn_conn

CompagnieaérienneNuméro de vol

Continuer

PA_CARR

PARAMETERS et TABLES

Transport de données

� L'instruction PARAMETERS est un élément de langage déclaratif qui établit des zones internes dansun état. Contrairement à ce qui se produit avec l'instruction DATA, les zones déclarées avecPARAMETERS figurent sur l'écran de sélection pour la saisie.

� Avec l'instruction PARAMETERS, vous utilisez les options TYPE et LIKE, comme avec l'instructionDATA.

� De même que vous utilisez DATA avec VALUE pour affecter une valeur initiale, vous spécifiezl'option DEFAULT dans l'instruction PARAMETERS pour fixer la valeur par défaut de la zone. Cettevaleur est un littéral, une constante ou une zone système extraite lors du traitement de l'état (sy-datum, par exemple).

� Servant d'interface vers l'écran pour toutes les zones, l'instruction TABLES déclare un objet dedonnées interne servant d'interface écran pour toutes les zones se référant au même objet duDictionnaire.

� L'instruction TABLES définit un espace de travail approprié dans votre programme ABAP pour lesdonnées entrées dans un écran ou transférées du programme vers l'écran.

(C) SAP AG BC400 14-7

� SAP AG 1999

CARRIDCARRID CONNIDCONNID

Table interne <itab>

Espace de travail <wa>CLEAR <wa>.

CLEAR <itab>.AA 0017LH 0400

Effacement d'une table interne

� Pour rétablir la valeur initiale du contenu d'un objet de données en fonction de son type, utilisezl'instruction CLEAR.

� Les entrées de table interne sont du même type. Une seule instruction CLEAR suffit donc poureffacer l'intégralité d'une table.

� CLEAR <wa> initialise l'espace de travail <wa>.

(C) SAP AG BC400 14-8

� SAP AG 1999

Zone élémentaire, structure,Table interne

Constante

Paramètre de saisie

TYPES

DATA

CONSTANTS

PARAMETERS

Type

TABLES

Espace de travail

Récapitulatif des instructions déclaratives

� Jusqu'à présent, nous avons vu les instructions déclaratives suivantes :

TYPES Définition de typesDATA Définition de zones élémentaires, structures, et tables internesCONSTANTS Définition de constantesPARAMETERS Définition de paramètres de saisieTABLES Définition d'espaces de travail

� Dans le chapitre Tables internes et dans la section Écrans de sélection du chapitre consacré auxDialogues, vous découvrirez une autre instruction déclarative : SELECT-OPTIONS Définitiond'options de sélection

� Pour afficher un récapitulatif complet des instructions déclaratives ABAP, cliquez sur le bouton decommande "i" de l'Éditeur, puis choisissez Vue d'ensemble ABAP, Vue d'ensemble du langagede programmation ABAP, Classification des mots-clés par type.

(C) SAP AG BC400 14-9

� SAP AG 1999

Deux types élémentaires sont compatibles quandleur type et leur longueur (ainsi que leursdécimales, dans le cas du type P), sontidentiques.

Deux types de structure sont compatibles quand ilsont la même structure et que leurs composantessont compatibles.

Deux tables sont compatibles quand leurs typesde ligne sont compatibles.

Pour convertir un type non compatible, il faut qu'il existe une règle deconversion définie

Quand deux types sont compatibles, il n'y a pas de conversion

Conversion de type

� Si vous affectez un objet de données à un autre de type différent, ABAP effectue une conversion detype, à condition qu'une règle de conversion ait été établie pour les types concernés.

(C) SAP AG BC400 14-10

� SAP AG 1999

DATA: START TYPE D,SUM1 TYPE P,SUM2 TYPE P.

.

.

.IF SUM2 GE 1000.IF START IS INITIAL.IF SUM1 GT SUM2 AND

SUM1 BETWEEN 0 AND 100.IF SUM1 = 1000 AND

( SUM2 LE 2000 ORSTART IS INITIAL ).

EQ =

NE < > > <

GT >

GE > = =>

LT <

LE < = = <

IS INITIAL

BETWEEN f1 and f2

Égal

Différent

Supérieur

Supérieur ou égal

Inférieur

Inférieur ou égal

Valeur initiale

Intervalle

OpOpérateurérateur SignificationSignification

... <zone> <littéral> ...

... <zone1> <zone2> ...

... <expression logique> AND <expression logique>

... <expression logique> OR <expression logique>

... NOT <expression logique> ...

<op<opérateur>érateur>

<op<opérateur>érateur>

Expressions logiques

� Pour relier des expressions logiques, utilisez AND, OR ou NOT.

� Vous imbriquez autant d'expressions entre parenthèses que vous le voulez. Les parenthèsesdélimitant des sous-expressions comptent toujours pour un mot. Vous devez donc les faire précéderet suivre d'un espace.

� Si vous comparez deux zones de type C de longueur différente, la zone la plus courte est rallongéepour correspondre à la plus longue lors de la comparaison. Son extrémité droite est précédéed'espaces.

� Il existe de nombreux autres opérateurs de comparaison de chaînes ou de bits. (Voir l'instruction IFdans la documentation en ligne).

(C) SAP AG BC400 14-11

� SAP AG 1999

WHILE <expression logique>.

ENDWHILE.

WHILE COUNTER > 0....

SUBTRACT 1 FROM COUNTER.ENDWHILE.

Instructions

Compteur de bouclesSY-INDEX

DO <n> TIMES.

ENDDO.

Instructions

Boucles DO et WHILE

� Les boucles DO et WHILE sont également utilisées dans ABAP.

� SY-INDEX est le compteur de boucles pour les commandes des boucles DO et WHILE. La valeur 1est affectée à SY-INDEX au premier passage de boucle et augmente de 1 à chaque nouveau passage.

� Boucles DO :

� le paramètre <n> TIMES est facultatif. Si vous ne l'indiquez pas, vous devez spécifier dans la boucleune 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 lecompteur de boucles de DO ... ENDDO.

� Boucles WHILE :

� 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 laboucle WHILE... ENDWHILE.

(C) SAP AG BC400 14-12

� SAP AG 1999

CHECK <expression logique>.

WHILE COUNTER GT 0.

CHECK sy-subrc = 0.

ENDWHILE.

DO.

IF counter GE 10.EXIT.

ENDIF.

counter = counter + 1.ENDDO.

Instructions

EXIT.

InstructionsInstructions

Instructions

CHECK et EXIT

� Vous utilisez deux instructions pour le traitement de boucles :

� CHECK <expression logique> : si l'expression logique est fausse, un saut est effectué à l'intégrationsuivante de la boucle. Toutes les instructions entre CHECK et ENDDO|ENDWHILE sont ignorées. Sil'expression logique est vraie, l'instruction CHECK est sans effet.

� Voir aussi le mot-clé CONTINUE dans l'index.

� Si vous insérez des instructions EXIT dans une boucle, le système quitte la boucle.

� Pour plus d'informations sur le fonctionnement de ces deux instructions en dehors du traitement deboucles, reportez-vous à l'index, aux mots-clés CHECK et EXIT, ou à l'appendice.

(C) SAP AG BC400 14-13

� SAP AG 1999

Boucles :

WHILE, DO,SELECT, LOOP

Événements :

START-OF-SELECTIONGETEND-OF-SELECTION

Événements :

INITIALIZATIONAT SELECTION-SCREEN ......

Sous-programmes FORM

Aller à la fin du blocde traitement

EXIT

Terminer boucleen cours

Fin deprogramme,

la liste s'affiche

CHECK :Si condition logique non

remplie, ...

Aller au prochainpassage de boucle

Conditions d'interruption 2

� Lorsque la condition logique suivant le mot-clé n'est pas remplie, utilisez en dehors de la bouclel'instruction CHECK <condition logique> de ABAP pour terminer prématurément un bloc detraitement.

� 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 votreprogramme par l'instruction EXIT, incluse dans leurs blocs de temps. Dans ce cas, une liste s'afficheimmédiatement après le traitement de l'instruction EXIT.

(C) SAP AG BC400 14-14

� SAP AG 1999

Include : <nom-include>(Type de programme : I)

Programme : <nom du programme>

REPORT <nom du programme>.:

INCLUDE <nom-include>.

:

Instructions ABAP

Includes : programmes de type I

(C) SAP AG BC400 14-15

� SAP AG 1999

REPORT <nom>.

TYPES: ...DATA: ...

Programme : <nom>TOP

Type de programme : I

Programme : <nom>

Type de programme : 1

INCLUDE <nom>TOP.

START-OF-SELECTION.:

Création de programme

Programme <nom>

avec TOP INCL.

Repository Browser :

Création de programme

Includes TOP

(C) SAP AG BC400 14-16

� SAP AG 1999

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

Includes standard pour groupes de fonctions

(C) SAP AG BC400 14-17

� SAP AG 1999

Modules defonction

Parallèle

asynchrone Encapsulation:

• fonctions

• dialogues

RFCRFC

Développement spécifiqueclient et partenaires

Internet / Intranet

Systèmes R/3 par satellite

Rôle stratégique des modules de fonction

� Vous pouvez appeler les modules de fonction soit de manière asynchrone, soit en parallèle.

� Vous pouvez y encapsuler des dialogues utilisateurs.

� Vous pouvez créer des modules de fonction que vous appellerez en Remote. Ceux-ci peuvent alorsêtre lancés de manière externe:

� à partir du World Wide Web, pour accéder à un système R/3 ;

� à partir d'un autre système R/3 ;

� à partir de vos propres programmes (Visual Basic, JAVA ou C++, par exemple).

(C) SAP AG BC400 14-18

� SAP AG 1999

FUNCTION bc400_free_seats.

.

.

.

IF seatsmax = 0.RAISE max_eq_0.

ELSEIF seatsocc > seatsmax.RAISE occ_gt_max.

ENDIF....

ENDFUNCTION.

Exceptions

ExceptionsOCC_GT_MAXMAX_EQ_0

Définition d'une exception

Levée d'une exception

Traitement des exceptions

� Pour anticiper d'éventuelles erreurs et éviter qu'elles ne se répercutent sur l'exécution, affectez-leurun nom dans l'interface du module de fonction. Ensuite, déclenchez-les à partir du code deprogramme par l'instruction RAISE. Chaque programme appelant le module interprétera cesexceptions en testant sy-subrc.

� Dans un module de fonction, vous pouvez également garantir l'affichage d'un message d'erreur encas d'exception, même si elle n'est pas traitée explicitement par le programme appelant. Pour plusd'informations, reportez-vous à la documentation, au mot-clé MESSAGE ... RAISING.

(C) SAP AG BC400 14-19

� SAP AG 1999

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_maxseatsocc = pa_occ

IMPORTINGseatsfree = free_seats

EXCEPTIONSocc_gt_max = 1max_eq_0 = 2others = 3.

CASE sy-subrc.WHEN 1.

WRITE text-ex1.WHEN 2.

WRITE text-ex2.WHEN 3.

WRITE text-oth.ENDCASE.

Exceptions

(C) SAP AG BC400 14-20

� SAP AG 1999

Couleurs dans les listes

Vol Départ Destination

AA 0017 NEW YORK SAN FRANCISCOLH 0400 PARIS NEW YORKLH 0402 FRANCFORT BERLIN

Date de création : 01.01.1998 Créé par : WITTMANN

REPORT sapbc400udd_example_1a.INCLUDE <LISTE>.:

WRITE: / wa_spfli-carrid COLOR col_key,

iicon_date AS ICON,

WRITE <objet de données> <option> .

Couleurs/icônes/symboles

� Une instruction WRITE peut comporter plusieurs attributs d'affichage de liste. Un de ces attributs estla couleur, qui peut s'adapter par l'option de formatage COLOR <n>. Vous avez le choix entre septcouleurs d'arrière-plan, activées soit par une valeur numérique, soit par un nom symboliquecorrespondant à 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

� Pour créer des listes en couleur, suivez les instructions fournies par SAP. Vous trouverez desexemples dans la transaction LIBS.

� Pour ajouter des icônes dans une liste, utilisez l'instruction WRITE avec l'option AS ICON. Pourutiliser cette option, insérez au préalable l'include <LIST> dans votre programme.

� 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-21

� SAP AG 1999

Fichiersséquentiels

Interfaces /contrôles

SAP

Serveurexterne

Transfert de données externes

� Lorsque vous transférez des données entre un autre système SAP ou un système externe et votrepropre système SAP, vous devez préserver leur intégrité.

� Vous devez donc soumettre ces transferts aux mêmes contrôles que les transferts effectués en modedialogué.

� 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.

� Par conséquent, il vaut mieux effectuer le contrôle de transactions à l'aide des mêmes contrôles quedans le mode dialogué de SAP. Ceci signifie, dans la pratique, que les transactions SAP serventégalement au transfert de données.

� Les techniques utilisées pour le transfert de données externes s'appellent "processus de batch input".

� SAP offre des procédures de transfert de données externes standardisées pour de nombreux domainesde R/3. Ces procédures utilisent les techniques de programmation batch input, call transaction etdirect input. Pour accéder aux procédures standard de transfert de données SAP, utilisez l'atelierde reprise des données (transaction SXDA). Si aucune procédure SAP n'est possible, programmezdes transferts au cas par cas en utilisant le batch input ou la call transaction.

(C) SAP AG BC400 14-22

� SAP AG 1999

Fichierséquentiel

Fichier d'attente

Fonction d'applicationFonction d'application

Fonction de batch inputFonction de batch input

Table BDCTable BDCTable BDC

BATCH-INPUT :BATCH-INPUT :

Fichierséquentiel

Fonction d'applicationFonction d'application

Table BDCTable BDCTable BDC

CALL TRANSACTION :CALL TRANSACTION :

CALLTRANSACTION

Fichierséquentiel

DIRECT INPUT :DIRECT INPUT :

Programmede transfert

ABAP

Transfert de données externes

Base de données

SAP

Base de données

SAP

Base de données

SAP

(C) SAP AG BC400 14-23

� SAP AG 1999

Attributs d'écran

Numéro d'écran 100Écran suivant 100

Attributs d'écran

Numéro d'écran 200Écran suivant 200

PBO PAI

CALL SCREEN 100

100 PBO PAI200

0

200

0

Techniques avancées : séquencement d'écrans dynamiques

� Utilisez cette technique pour programmer des clusters d'écrans intégrés, sans devoir revenircontinuellement au code source et les appeler par CALL SCREEN.

(C) SAP AG BC400 14-24

� SAP AG 1999

Processus de mise à jourUPDATEUPDATE INSERTINSERT DELETEDELETE

Étape de dialogue

LogLogtabletable

Ordre DELETE

Ordre UPDATE

Ordre INSERT

Processus de base de données

PBO PAI PBO PAI PAIPBO

OrdreINSERT

OrdreUPDATE

OrdreDELETE

COMMIT WORKCOMMIT WORK

Techniques avancées : mise à jour

� La mise à jour est un autre moyen de regrouper les modifications d'une base de données à la fin d'uneLUW SAP. Au lieu de transférer les mises à jour directement dans la base, vous saisissez des ordresde mise à jour dans une log table.

� 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 labase est terminée.

� Les phases "dialogue" et "mise à jour" de la LUW SAP peuvent se dérouler de façon synchrone ouasynchrone.

� L'avantage de la mise à jour par rapport aux regroupements effectués dans des sous-programmes estque vous saisissez vos ordres dans la table à tout moment. Cela vous évite de les conserver dans lazone du programme. Son inconvénient est qu'elle offre moins de performances.

� La mise à jour asynchrone convient lorsque le temps de réponse est un facteur important et que lesmodifications sont suffisamment complexes pour justifier l'investissement lié à l'utilisation de la logtable.

� La mise à jour synchrone convient lorsque vous avez immédiatement besoin des données modifiéeset que les modifications sont suffisamment complexes pour justifier l'investissement lié à l'utilisationde la log table.