Abap
Abap
•
Matera 16- Programmazione
Definizione ABAP
Advanced
Business
Application
Programming
Definizione ABAP
Advanced
Business
Application
Programming
Caratteristiche del linguaggio
• Linguaggio proprietario sviluppato da SAP AG per l’implementazione di applicativi sul
sistema SAP
• Consente:
o Creare software ex novo in base alle esigenze di un’azienda
o Personalizzare software esistente ottimizzandolo e adattandolo in modo da modificare moduli
esistenti
• Linguaggio strutturato di semplice apprendimento (versione 4GL)
• Garantisce che il software risultante possa essere eseguito su tutti i sistemi di
Database e operativi supportati da SAP
• Rende trasparente la complessità delle reti Client/Server
• Principali finalità dei programmi ABAP:
o Reporting
o Programmi di dialogo interattivi
o Personalizzazione del sistema SAP
4
Linee guida
• Garantire la consistenza dei dati mantenendo i Master Data in un unico ‘luogo’
• Garantire la manutenibilità del software attraverso la modularizzazione dei
programmi
• Garantire i principi di riusabilità e scalabilità del software
5
Parametri per la definizione di un programma
• La creazione di un programma prevede in primo luogo di specificare alcuni attributi
fondamentali, quali, ad esempio, il nome, il tipo, la classe.
• Generalmente, i nomi dei programmi devono seguire uno standard particolare:
• Il nome deve essere lungo 8 caratteri, comprensivo di lettere e numeri, con esclusione
di tutti i caratteri speciali
• I caratteri “% “ e “_” sono ammessi, ma se ne sconsiglia l’uso
• Il nome dei nuovi applicativi deve sempre iniziare per Y o Z (tutti gli altri caratteri
alfanumerici sono una prerogativa dello standard SAP)
• 6
• Gli attributi obbligatori nella definizione di un nuovo programma sono tipo, descrizione
e classe.
• Nel caso di programmi che non devono essere trasportati in altri ambienti, la classe
(o pacchetto di sviluppo) da utilizzare è la $TMP (dedicata agli oggetti locali),
altrimenti dovrà essere utilizzata una classe custom già esistente o definita una
nuova classe (del tipo Z<classe>).
7
Sintassi del linguaggio ABAP
• Il linguaggio consiste di:
• Istruzioni
• Parole chiave
• Commenti
• Ogni singola istruzione inizia con una parola chiave e termina con un punto.
• La prima parola di un’istruzione è nota come parola chiave, come tale determina
l’intero significato dell’istruzione. Posizionandosi con il cursore su una parola chiave e
premendo il tasto F1, è possibile consultare l’Help online relativo a quella particolare
istruzione, il che permette di conoscerne tutti gli ambiti di utilizzo.
• Un’istruzione può estendersi anche su più righe e può presentare, in questo caso,
delle indentature. Possono anche inserirsi più istruzioni sulla stessa linea, purché
separate dalla punteggiatura.
8
Tipi di dato predefiniti e loro attributi
9
• NB. Una variabile non definita specificatamente dall’utente assume una tipologia pari
a C e una lunghezza pari a 1.
• Esistono tre tipi di variabili numeriche e cinque tipi di variabili di altro genere:
• P (packed): è una tipologia di dato numerico, utilizzata per questioni commerciali,
quindi numeri di una certa imponenza (fino a 31 cifre) e numeri con la virgola.
Possono essere presenti fino a 14 cifre dopo la virgola, quindi conviene definire
quante se ne desidera visualizzare con l’opzione DECIMALS n . E’ un dato che si
presta a calcoli di grande precisione. Nella visualizzazione del contenuto della
variabile gli zeri non significativi vengono convertiti in spazi e viene posto il punto
come separatore delle migliaia. La variabile è giustificata a destra. Con i numeri
packed si hanno due cifre per byte; il segno è in fondo a destra. Per convertire una
variabile packed in una variabile di tipo C si moltiplica per 2 la lunghezza della
variabile packed e si aggiunge una cifra per il segno.
10
• I (integer): è una tipologia di dato numerico che normalmente viene utilizzata per i
contatori, etc. Non si presta a imponenti calcoli perché vale solo per numeri interi e
neanche tanto grandi . Viene creato un numero binario che permette di essere
garantiti per un range che va da -2.147.483.648 a +2.147.483.648 . Nella
visualizzazione del contenuto della variabile gli zeri non significativi vengono convertiti
in spazi e viene posto il punto come separatore delle migliaia. La variabile è
giustificata a destra.
• F (floating) : è una tipologia di dato numerico utilizzata per risolvere calcoli
matematici, dato che permette di spaziare in una vasta area numerica e di avere una
buona precisione anche dopo la virgola. Nella visualizzazione del contenuto della
variabile questo appare giustificato a destra. Se si desidera una precisione elevata
dopo la virgola, è meglio scegliere la tipologia di dato P.
• N (numeric text) : sembra un numero ma non lo è; è una variabile alfanumerica, che
contiene solo numeri ma che non può essere utilizzata per calcoli aritmetici. E’
utilizzata per codici postali, codici di banca, etc. Va definita la sua lunghezza, come
accade per le variabili di tipo carattere.
11
• D (date) : è una variabile data, lunghezza fissa ad 8 caratteri
• T (time) : è una variabile tempo, lunghezza fissa a 6 caratteri
• C (char) : è una variabile di tipo carattere, lunghezza da dichiarare, di default pari a 1
• X (exadecimal) : è una variabile di tipo esadecimale; all’interno solo valori
esadecimali, quindi da 0 a 9 e da A a F.
12
Nomenclatura Standard degli oggetti di un
programma
• Constants: c_
• Internal Tables: t_
• Parameters: p_
• Select-options: s_
• Ranges: r_
• Radiobuttons: rb_
• Checkbox: cb_
• Pushbutton: pb_
• Global Variables: v_
• Local Variables: l_
• Statics (in Subroutines): st_
• Work Areas: wa_
13
Dichiarazione Dati – DATA Statement
DATA: <field>(length).
Additions: L’istruzione:
CLEAR <field>.
Imposta il campo al valore iniziale
... TYPE <data type>
appropriato per il suo tipo di dato
... LIKE <field>
... VALUE <literal>
... DECIMALS <n>
14
Dichiarare campi dello stesso tipo:
LIKE
• DATA: V_NAME1(25) TYPE C,
• V_NAME2 LIKE V_NAME1,
• V_NAME3 LIKE V_NAME1.
15
• Constants Statement • Assignment Value
DATA: V_NAME1(25),
V_SORT_NAME(10),
CONSTANTS: C_FLAG1 TYPE V_FIRST_LINE(4) TYPE N,
C VALUE ‘X’. V_NEXT_LINE TYPE I.
.
CONSTANTS: C_MAX_COUNT TYPE I .
.
VALUE 99.
MOVE 'SAP' TO V_NAME1.
MOVE 5 TO V_FIRST_LINE.
COMPUTE V_NEXT_LINE =
V_FIRST_LINE + 1.
V_SORT_NAME = V_NAME1.
ADD 1 TO V_NEXT_LINE.
16
I campi di sistema
• Esistono alcune variabili, relative ad alcuni campi di sistema, che non vanno
dichiarate, ma che possono essere utilizzate e lette nei programmi.
• La lista di tali variabili è memorizzata nella struttura SYST del Dictionary.
• Alcune, le più usate, sono elencate in figura, come:
• il campo SY-SUBRC viene utilizzata per controllare se una operazione è andata a
buon fine. In questo caso assumerà valore 0.
• Il campo SY_DATUM indica la data di sistema, in formato SAP: AAAAMMGG.
• Ecc..
17
I campi di sistema
Nome Tipo Lungh. Significato
18
Dichiarazione Dati – TYPES Statement
TYPES: MYTYPE TYPE I, TYPES: NTYPE1 LIKE SCUSTOM-NAME,
NAME1 (25), NTYPE2(25).
DATE1 LIKE SY-DATUM,
SUM_FIELD TYPE P DATA: NAME1 TYPE NTYPE1,
DECIMALS 2. NAME2 TYPE NTYPE2,
NAME3 LIKE NAME1,
NAME4 TYPE I.
CLEAR <FIELD>
19
Dichiarazione Dati – TYPES Statement
• Per definire una tipologia si utilizza la parola chiave TYPES: a questa segue il nome
della nuova tipologia non elementare seguita dalla tipologia elementare cui fa
riferimento, ed eventualmente anche la lunghezza del dato.
• Il parametro LIKE può essere utilizzato anche nella definizione delle tipologie e
permette di definire ed associare attributi di variabili già dichiarate ( o relativi a campi
di una tabella del database) alle nuove. Il vantaggio del suo utilizzo sta nel fatto che,
se si modifica un campo, tutti quelli ad esso collegati sono variati automaticamente,
riducendo le modifiche ad un unico intervento.
• il nome della tipologia può consistere al massimo di 30 caratteri, ma mai meno di 2;
• sono ammessi caratteri speciali a parte le parentesi, il “+”, “<“ , “>“ e tutti i segni di
punteggiatura;
• iniziare il nome con un carattere alfabetico ed utilizzare l’undescore per unire due o
più parole.
20
Transazioni di Workbench
21
Definizione dei parametri di input
• E’ possibile generare uno schermo interattivo in cui l’utente può impostare alcuni
criteri di selezione per l’esecuzione di un report.
• La lista di output del report conterrà dati congruenti con la selezione effettuata.
• L’ABAP offre due tipi principali di campi di input sullo schermo standard di selezione:
22
Parameters
• La definizione dei parameters è piuttosto simile alla definizione di qualsiasi altro
campo nella parte di programma dedicata alla dichiarazione delle variabili.
• Al contrario delle variabili dichiarate normalmente, i parametri definiti con la parola
chiave PARAMETERS danno l’accesso ad uno schermo standard di selezione in cui
l’utente può effettuare una sua scelta. La dichiarazione dei Parameters comporta più
o meno gli stessi parametri già incontrati per la dichiarazione delle variabili, con la
differenza che, al posto dell’opzione VALUES per impostare i valori di default, si
utilizza la formula DEFAULT. Inoltre, solo variabili elementari possono essere
associate ai Parameters, e quando sono di tipo C e di lunghezza 1 possono essere
rappresentate, nel Selection Screen, come una check box, mediante l’opzione AS
CHECKBOX da aggiungere alla definizione del Parameter, o come radiobutton
mediante l’opzione RADIOBUTTON GROUP <group> da aggiungere alla definizione.
23
Parameters
• PARAMETERS: par AS CHECKBOX.
• PARAMETERS: par2 RADIOBUTTON GROUP <group> DEFAULT ‘X’,
• Par3 RADIOBUTTON GROUP <group>.
24
Parameters
• Ogni Parameter ha anche associata un’etichetta dipendente dalla lingua, che è
impostata automaticamente sullo schermo di selezione.
• Se invece non esistono le opportune etichette, viene visualizzato accanto al campo
Parameter il nome tecnico dello stesso.
• L’etichetta può essere cambiata o semplicemente tradotta utilizzando i Text Elements,
richiamando l’argomento mediante il percorso Editor -> Goto -> Text Elements e
cliccando sulla voce Testi di Selezione.
25
Select-Options
• I criteri di selezione sono definiti con l’istruzione SELECT-OPTIONS.
• Il nome del criterio di ricerca impostato non può essere maggiore di 8 caratteri.
• La corretta sintassi è la seguente:
•
• SELECT-OPTIONS <nome della selezione> FOR <nome del campo>.
• Dopo il FOR va specificato il nome del campo di tabella per cui è valida
l’impostazione dei criteri di ricerca. Per ciascuna selezione, l’ABAP/4 costruisce una
tabella interna con una connotazione standard.
• Questa struttura viene poi riempita con i parametri che derivano dalla selezione
impostata con la SELECT-OPTIONS.
26
Select-Options
Segno Opzione Significato opzione Valore Valore
minimo massimo
I EQ Uguale --
E NE Diverso --
I LT Minore --
I GT Maggiore --
I LE Minore o Uguale --
I GE Maggiore o Uguale --
I BT Compreso fra -- --
I NB Non compreso fra -- --
I CP Contiene il pattern definito --
I NP Non contiene il pattern definito --
27
Select-Options
• Colonna SIGN: unici valori ammessi sono ‘I’ o ‘E’ (case sensitive), e stanno ad
identificare l’inclusione o l’esclusione dei records che corrispondono ai criteri di
seguito impostati dalla lista di output del report.
28
Addition
• Alla definizione standard di parameters e select-option possiamo aggiungere delle
addition per modificarne le caratteristiche:
29
Ulteriori selezioni
• Possiamo perfezionare la videata di selezione con altre semplici istruzioni:
30
Ulteriori selezioni
• SELECTION-SCREEN BEGIN OF LINE.
• SELECTION-SCREEN END OF LINE.
• I parameters o le select-options definiti tra BEGIN OF LINE e END OF LINE verranno
disegnati sulla stessa riga.
31
Messaggi
• Def. Un messaggio è identificato da un tipo, una classe messaggi, un numero
messaggio, e da un testo.
• MESSAGE <tipo><numero>(<classe>).
• Classe dei messaggi (/SE91): La classe definita in testa al programma di dialogo o
al report dopo la dicitura MESSAGE-ID mette a disposizione di quel codice ABAP/4
tutti i messaggi di quella determinata classe per tutta la durata dell’esecuzione del
programma in oggetto, sempre in relazione al linguaggio richiesto.
• E’ possibile anche modificare contestualmente la classe dei messaggi all’interno di un
programma, quando si richiama un certo messaggio con la sintassi MESSAGE
Ynnn(XX) dove è la tipologia del messaggio e XX è la classe in cui questo si trova;
tale classe risulta disponibile solo per quel determinato messaggio.
• REPORT <nome_report> [NO HEADING STANDARD PAGE]
• [LINE-SIZE <n>] [LINE-COUNT <m>[(<s>)]]
• MESSAGE-ID <nome_classe>.
32
Messaggi
• NO HEADING STANDARD PAGE: non fa visualizzare in output il nome del report con
la sua descrizione;
• LINE-SIZE <n>: imposta la larghezza dello schermo (numero di colonne sull’output)
• LINE-COUNT <m>[(<s>)]: imposta il numero max di righe per pagina, sullo screen..
<m> è il numero delle righe; se specificato, <s> indica il numero di righe dedicate al
piè di pagina.
33
Messaggi
• Codice del messaggio (nnn) : è un codice numerico di tre caratteri che corrisponde
al testo di un messaggio scritto o tradotto nella lingua di Logon.
• E’ il numero che nel programma viene richiamato, preceduto da un prefisso di una
lettera (A, E, W, I, S, X) che ne sta ad indicare la tipologia
• Testo del messaggio: questo può anche non essere del tutto codificato, scritto per
esteso, ma può essere costruito, del tutto o in parte, dinamicamente a programma. In
tal caso si utilizza il carattere speciale & (max 4).
• La sostituzione dei simboli con le componenti dinamiche del messaggio avviene
quando il messaggio è richiamato con l’opzione WITH <nome parametro>.
• Nel caso in cui il testo contenga più parti variabili, la sostituzione dei simboli
rispecchia l’ordine delle variabili che seguono il WITH (la sostituzione è posizionale).
34
Messaggi
Tipo messaggio Significato
A abend
E errore bloccante
I informazione
S successo
35
Istruzioni elementari
• VALUES per inizializzare una variabile o definire una costante
•
• MOVE per attribuire un valore ad una variabile durante il runtime
•
• ADD, SUBTRACT, MULTIPLY e DIVIDE per effettuare operazioni aritmetiche
(sostituibili con operatori aritmetici “+”, “-” , “*”, “/”)
•
• COMPUTE per attribuzioni a variabili numeriche
36
Istruzioni elementari
37
Istruzioni Condizionali
Operatore Simbolo Significato
EQ = EQual
38
Istruzioni Condizionali
L’istruzione ‘IF’ L’istruzione ‘IF’ L’istruzione ‘IF’
39
Istruzioni Condizionali
L’istruzione ‘CASE’
CASE <field>.
WHEN <value1>.
ISTRUZIONE.
WHEN <value2>.
ISTRUZIONE.
WHEN OTHERS.
ISTRUZIONE.
ENDCASE.
40
Istruzioni Iterative (o Cicliche)
L’istruzione ‘DO’ L’istruzione ‘WHILE’
41
Istruzioni Iterative (o Cicliche)
• Nel caso del DO, l’istruzione contenuta all’interno del ciclo va eseguita un numero
<n> di volte, numero definito a programma, attribuendo ad <n> il valore di una
costante. Non c’è la possibilità di mettere una condizione di uscita dal ciclo con il DO.
La condizione va creata inserendo, all’interno del loop, un IF cui segue l’istruzione
EXIT, per bloccare eventuali errori.
• Nel caso del WHILE, invece, l’istruzione contenuta all’interno di un loop va eseguita
un numero <n> di volte che non è determinato a priori, ma dal verificarsi di una certa
espressione logica scritta successivamente al WHILE.
• Anche in questo caso è possibile intervenire e modificare il numero di passaggi
effettuati all’interno del loop variando il contatore di sistema (SY-INDEX), ovvero
inserendo una variabile dichiarata nel programma che funziona da contatore.
• Il loop, sia gestito dal DO che dal WHILE, ammette la nidificazione.
42
Istruzioni Iterative (o Cicliche)
L’istruzione CHECK
L’istruzione EXIT
43
Istruzioni Iterative (o Cicliche)
L’istruzione CONTINUE
CONTINUE.
L’istruzione CONTINUE determina il salto di una istruzione all’interno di un ciclo.
44
Gruppi Di Dati e Tabelle Interne
45
Gruppi Di Dati e Tabelle Interne
• Record
• É un gruppo di dati, un insieme di campi logicamente collegati tra loro.
• Per identificare il singolo campo all’interno della struttura, basta scrivere il nome della
struttura come prefisso, seguito da trattino e nome del campo.
• Tabelle interne
• Quando si definisce una tabella interna si identifica una struttura che esiste realmente
soltanto durante l’esecuzione del programma. Le tabelle interne sono particolarmente
utili per lavorare con copie temporanee del database, o con parti di esse.
• Le tabelle interne sono caratterizzate dalla presenza, in fase di definizione, di un
parametro di occurs. Esistono due tipi di tabelle interne, quelle che utilizzano una
linea di testata e quelle che non la utilizzano.
•
46
Gruppi Di Dati e Tabelle Interne
• Tabella interna con header line
• Specificando nella definizione della tabella, dopo il parametro di occurs, WITH
HEADER LINE, l’ABAP/4 costituisce una struttura che ha le stesse caratteristiche di
un record.
• L’header line è la work area della tabella interna.
• Quando si riempie una tabella interna, in realtà è l’header line ad essere riempita e
poi scaricata sulle linee di tabella, utilizzando le apposite istruzioni. Allo stesso modo,
quando si legge il contenuto di una tabella interna, i dati da leggere sono posti
nell’header line che funziona da buffer di lettura.
• Tabella interna senza header line
• Nel caso di una tabella interna senza header line, invece, si tratta sempre di una
struttura che ha vita soltanto durante il runtime, ma non possiede una struttura
intrinseca da utilizzare per tutte le operazioni sui singoli elementi della tabella,
dall’inserimento alla lettura. Tale funzione è comunque assolta da una variabile che,
avendo la stessa struttura degli elementi della tabella, è a tutti gli effetti un’header line
distaccata dalla tabella.
• 47
Lavorare con tabelle interne
• L’istruzione APPEND
•I dati sono posti nella header line o nella struttura work area e poi, con l’istruzione
APPEND, il contenuto viene inserito in fondo alla tabella, a seguire l’ultima linea
precedentemente inserita.
48
Lavorare con tabelle interne
• L’istruzione SORT
49
Lavorare con tabelle interne
• L’istruzione LOOP
• Per effettuare delle elaborazioni sulle singole linee della tabella si utilizza l’istruzione:
• LOOP AT <nome tabella> INTO <wa> WHERE <espressione log>. ...... ENDLOOP.
•
• Ad ogni passaggio all’interno del ciclo si tratta una nuova linea della tabella.
• Quando si effettua la lettura di una tabella interna, il numero della riga che si sta
leggendo è riportato nel campo di sistema SY-TABIX.
50
Lavorare con tabelle interne
• L’istruzione READ TABLE
• Per effettuare delle letture sulle singole linee della tabella si utilizza l’istruzione:
51
Lavorare con tabelle interne
• L’istruzione MODIFY
• Per effettuare delle modifiche su una delle righe della tabella, si utilizza l’istruzione
MODIFY, che utilizza l’header line o la wa, per generare una nuova linea che
sovrascriverà la linea <n esima> (che deve esistere, se non si vuol incorrere in un
errore di runtime)
52
Lavorare con tabelle interne
• L’istruzione INSERT
• Per effettuare degli inserimenti in tabella, si utilizza l’istruzione MODIFY, che utilizza
l’header line o la wa, per generare una nuova linea che verrà inserita nella posizione
<n esima> (non deve esistere una riga con la stessa chiave, se non si vuol incorrere
in un errore di runtime).
53
Lavorare con tabelle interne
• L’istruzione DELETE
54
Lavorare con tabelle interne
• Istruzioni CLEAR e REFRESH
• Si uitlizza per effettuare una corretta inizializzazione dell’header line o della wa.
55
Lavorare con tabelle interne
• L’istruzione DESCRIBE
• I parametri LINES e OCCURS sono opzionali e le variabili sono dei contatori, quindi
di tipo I. Il significato di LINES e OCCURS sono, rispettivamente, il numero di
elementi presenti in tabella e il numero di occurs definiti nella dichiarazione della
tabella interna.
•
56
OPEN SQL
• Per leggere i dati dalle tabelle nel momento della scrittura di un report si utilizzano le
istruzioni di SELECT. L’Open SQL, in realtà, è un sottoinsieme delle istruzioni SQL già
note, con alcune differenze proprie dell’ambiente SAP.
• Ogni volta che si accede ad una tabella trasparente o a una struttura del dictionary,
bisogna specificarne il nome dopo la parola chiave TABLES, nell’include dei dati
57
OPEN SQL
• Per leggere i dati dalle tabelle nel momento della scrittura di un report si utilizzano le
istruzioni di SELECT. L’Open SQL, in realtà, è un sottoinsieme delle istruzioni SQL già
note, con alcune differenze proprie dell’ambiente SAP.
• Ogni volta che si accede ad una tabella trasparente o a una struttura del dictionary,
bisogna specificarne il nome dopo la parola chiave TABLES, nell’include dei dati
58
OPEN SQL
• Accesso puntuale
• REPORT RSAAA08A.
• TABLES: SPFLI.
•
• SELECT SINGLE * FROM SPFLI
• WHERE CARRID EQ ‘LH’
• AND CONNID EQ ‘0400’.
• IF SY-SUBRC = 0.
• WRITE: /SPFLI-CARRID, SPFLI-CONNID,
• SPFLI-CITYFROM, SPFLI-CITYTO.
• ELSE.
• WRITE: / TEXT-001.
• ENDIF.
59
OPEN SQL
• Accesso puntuale
60
OPEN SQL
• Select Senza Condizioni
• REPORT RSAAA08B.
• TABLES: SPFLI.
61
OPEN SQL
• Select Senza Condizioni
• REPORT RSAAA08B.
• TABLES: SPFLI.
62
OPEN SQL
• Select Senza Condizioni
63
OPEN SQL
• Select Con Condizioni
• REPORT RSAAA08C.
• TABLES: SPFLI.
64
OPEN SQL
• Select Con Condizioni
• Come nel caso precedente, si tratta di un ciclo, con la differenza che, utilizzando la
SELECT con l’aggiunta dell’opzione WHERE, si consente la visualizzazione di una
parte soltanto dei records presenti nel database. I campi della tabella utilizzati nella
clausola WHERE devono essere scritti senza il prefisso della tabella.
65
OPEN SQL
• Select Su Colonne Specifiche
• REPORT RSAAA08D.
• TABLES: SPFLI.
• DATA: NCITYTO LIKE SPFLI-CITYTO,
• NCITYFM LIKE SPFLI-CITYFROM.
66
OPEN SQL
• Select Su Colonne Specifiche
67
OPEN SQL
• SELECT… INTO… CORRESPONDING…
• REPORT RSAAA08F.
• TABLES: SPFLI.
• DATA: BEGIN OF ITAB OCCURS 10,
• CITYTO LIKE SPFLI-CITYTO,
• CITYFROM LIKE SPFLI-CITYFROM,
• END OF ITAB.
•
• SELECT * FROM SPFLI INTO
• CORREPONDING FIELDS OF TABLE ITAB
• WHERE CARRID EQ ‘LH’.
68
OPEN SQL
• SELECT… INTO… CORRESPONDING…
69
OPEN SQL
• SELECT… INTO… CORRESPONDING…
• SELECT ... INTO CORRESPONDING FIELD OF table <nome di una tabella interna
con HL>
70
OPEN SQL
• SELECT… INTO TABLE…
• REPORT RSAAA08L.
• TABLES: SFLIGHT.
• DATA: ITAB LIKE SFLIGHT OCCURS 100
• WITH HEADER LINE.
•
• SELECT * FROM SFLIGHT INTO TABLE ITAB
• WHERE CARRID = ‘AA’.
•
• LOOP AT ITAB.
• WRITE: /ITAB-CARRID, ITAB-CONNID.
• ENDLOOP.
71
OPEN SQL
• SELECT… INTO TABLE…
• La lettura dei record del DB avviene in una sola volta, scaricando il contenuto
dell’archivio sulla tabella interna, eliminando la lettura in ciclo, con ovvia esclusione
della ENDSELECT.
• Questo sistema di lettura è più rapido di una lettura in ciclo e favorisce una migliore
prestazione del sistema.
• Tale formulazione comporta che la tabella venga sovrascritta ad ogni select.
• Per evitare di perdere dati già presenti sulla tabella interna, può essere utilizzata
l’istruzione APPENDING al posto di INTO.
• NB. Sostituisce la meno performante soluzione:
•
• SELECT * FROM SFLIGHT INTO ITAB WHERE CARRID = ‘AA’.
• APPEND ITAB.
• ENDSELECT.
72
OPEN SQL
SELECT… FOR ALL ENTRIES… SELECT * FROM SPFLI FOR ALL
ENTRIES IN ITAB
TABLES: SPFLI.
WHERE CITYFROM = ITAB-CITYFROM
DATA: BEGIN OF ITAB OCCURS 10
AND
CITYFROM LIKE SPFLI-CITYFROM,
CITYTO = ITAB-CITYTO.
CITYTO LIKE SPFLI-CITYTO,
WRITE: / SPFLI-CITYFROM, SPFLI-
END OF ITAB. CITYTO.
ITAB-CITYFROM = ‘FRANCOFORTE’. ENDSELECT.
ITAB-CITYTO = ‘BERLINO’.
APPEND ITAB.
ITAB-CITYFROM = ‘SAN FRANCISCO’.
ITAB-CITYTO = ‘NEW YORK’.
APPEND ITAB.
73
OPEN SQL
SELECT… FOR ALL ENTRIES…
Con questa select vengono letti dal database tutti quei records che corrispondono
ai parametri impostati nella tabella interna. I campi della tabella e quelli del
database devono avere la stessa tipologia e lunghezza. Se la tabella interna non
ha dati inseriti, la select si effettua regolarmente, senza dare errori, ma scarica tutti
i records del database come se non vi fosse alcuna condizione di WHERE.
Sostituisce la meno performante:
LOOP AT ITAB.
SELECT * FROM SPFLI
WHERE CITYFROM = ITAB-CITYFROM AND
CITYTO = ITAB-CITYTO.
WRITE: / SPFLI-CITYFROM, SPFLI-CITYTO.
ENDSELECT.
ENDLOOP.
74
OPEN SQL
SELECT… ORDER BY…
REPORT RSAAA08O.
TABLES: SPFLI.
SELECT * FROM SPFLI
ORDER BY CITYFROM.
WRITE: / SPFLI-CITYFROM, SPFLI-CITYTO.
ENDSELECT.
ORDER BY PRIMARY KEY ordina i record trovati secondo la chiave primaria in ordine
crescente.
ORDER BY f1..fn ordina i record trovati secondo un ordine crescente dei parametri
impostati.
Si può richiedere in modo esplicito l’ordine con cui si vuol visualizzare la lista di output,
tramite l’opzione ASCENDING e DESCENDING. L’ordine crescente è quello di default.
75
OPEN SQL
UPDATE, INSERT, MODIFY, DELETE
• UPDATE <nome tabella>…
Permette di modificare un record già esistente in tabella.
• INSERT <nome tabella>…
Permette di inserire un nuovo record in tabella.
• MODIFY <nome tabella>…
È una via di mezzo tra l’update e la insert.
Se in tabella esiste già un record con le stesse chiavi di quello che abbiamo
valorizzato, la modify funziona come l’update, altrimenti ne inserisce uno nuovo.
• DELETE <nome tabella> …
Per effettuare la cancellazione di un elemento della tabella si utilizza l’istruzione r
iportata di seguito, che elimina un record dal DB
76
Modularizzazione
• Vantaggi:
77
Modularizzazione
• Esistono tre modi per mettere in pratica la modularizzazione:
•
• richiamare subroutines all’interno dello stesso programma;
• richiamare moduli funzione che appartengono a gruppi di funzioni che sono raccolte in
modo centralizzato nella ABAP/4 Function Library.
78
Modularizzazione
• SUBROUTINES
•Dichiarazione:
79
Modularizzazione
• SUBROUTINES
80
Modularizzazione
• SUBROUTINES
• I parametri formali (della subroutine) e quelli attuali (del chiamante) devono essere
dello stesso numero.
• Eventuali discrepanze tra la tipologia dei parametri del chiamante e del chiamato
vengono intercettate solo a runtime.
• I programmi chiamati condividono le aree di working delle tabelle del Dictionary: nella
memoria occupata risiede non solo il programma chiamante ma anche il chiamato,
con tutte le tabelle e le variabili locali che si porta dietro.
81
Modularizzazione
• SUBROUTINES
• I parametri da passare possono essere uno o più, separati tra loro, in fase di richiamo
dal programma e di apertura del modulo chiamato, solo da spazi e non da virgole.
• i parametri sono posizionali: pur avendo nomi diversi, la coincidenza dei parametri
tra chiamante e chiamato si determina in base all’ordine di chiamata delle variabili. si
consiglia pertanto di mantenere una nomenclatura che ricordi la relazione tra i
parametri corrispondenti, per evitare errori nell’ordine di richiamo
82
Modularizzazione
• SUBROUTINES
•Ci sono vari tipi di controlli che il sistema effettua durante il check sintattico sulla
subroutine, dipendenti dalla tipologia elementare del parametro formale:
• type any: il sistema accetta tutte le tipologie dei parametri attuali corrispondenti e
tutti gli attributi di questi ultimi passano ai parametri formali;
• type table : il sistema controlla se il parametro è in realtà una tabella interna; tutti gli
attributi della tabella attuale sono ereditati dal parametro formale;
• type C, X, N, P : il sistema controlla se ciascuno di questi parametri ha attributi
aggiuntivi (lunghezza, cifre dopo la virgola) prima che tutti gli attributi dei parametri
attuali passino ai parametri formali;
• type D, I, F, T : il parametro è interamente determinato; il sistema controlla se i
parametri attuali e formali coincidono completamente;
• type <t>, like <f> : il parametro è interamente determinato; il sistema controlla se i
parametri attuali e formali coincidono completamente.
83
Modularizzazione
• FUNCTION MODULE
•Sintassi:
……
EXPORTING
……
TABLES
……
EXCEPTIONS
84
Modularizzazione
• FUNCTION MODULE
•La prima parola chiave seguita dal nome della funzione è utilizzata dal programma
chiamante.
•
•Tutte le funzioni della ABAP/4 Function Library sono disponibili per l’utilizzo.
85
Modularizzazione
• FUNCTION MODULE
•Vi sono raggruppate funzioni di simile argomento (funzioni relative alla stampa di
documenti, funzioni per la lettura di alcune particolari informazioni su complessi
documenti finanziari, etc.), ma anche moduli che utilizzano le stesse tabelle del database
(per una tabella, si ha un modulo funzione di inserimento, uno di aggiornamento, etc.).
•In un modulo funzione non possono essere utilizzati i dati globali del programma
chiamante, ma solo i dati globali del Function Group o i dati locali del modulo funzione
stesso.
86
Modularizzazione
• FUNCTION MODULE
• Un Function Group è un unico programma che ha, al suo interno, diversi file di
include, di cui alcuni sono funzioni, altri sono subroutines e uno è il file dei dati
globali.
87
Modularizzazione
• FUNCTION MODULE
• Include LxxxxTOP: Include dei dati globali (visibili e utilizzabili in tutto il programma)
• Include LxxxxUXX: Include del programma in cui sono contenuti tutti i moduli
funzione appartenenti al Function Group
88
Modularizzazione
• FUNCTION MODULE
89
Modularizzazione
• FUNCTION MODULE
90
Modularizzazione
• Utilizzo degli INCLUDE
•INCLUDE <Nome Include>
• Gli INCLUDE consentono di godere dei vantaggi della modularizzazione.
• Si tratta di programmi di tipo ‘I’, non eseguibili, dichiarati all’interno di programmi
eseguibili.
• In generale vengono utilizzati come ‘contenitori’ per:
• Dichiarazione dati
• Videata di selezione
• Subroutine
• Uno stesso include può essere dichiarato in più programmi per utilizzare ad es. una
subroutine già creata o una stessa videata di selezione o, semplicemente, per
rendere il programma più leggibile.
91
EVENTI
Gli eventi sono processi eseguiti dall’ABAP runtime system.
• In un programma ABAP, un evento comincia con una parola chiave, termina quando
inizia un nuovo evento. Non c’è un’istruzione ABAP per far terminare esplicitamente
un evento.
92
EVENTI
• INITIALIZATION è un evento utilizzato per inizializzare le variabili con valori di
default. Per esempio, può servire per riempire un campo di una selection-screen con
la data odierna o col nome dell’utente di logon. Questo evento è intercettato prima
che sia visualizzato lo screen di selezione, ma solo all’inizio del report.
93
EVENTI
• AT SELECTION-SCREEN ON <f>: viene intercettato in seguito a un comando
dell’utente, dopo aver visualizzato la videata di selezione
94
EVENTI
• START-OF-SELECTION è il primo evento per elaborare i dati e generare delle liste.
É intercettato dall’ABAP runtime system dopo aver terminato gli eventi di selection
screen.
95
INITIALIZATION e
•
START-OF-SELECTION
REPORT ZEXAMPLE.
• INITIALIZATION.
• P_NAME = SY-UNAME.
• P_DATE = SY-DATUM - 1.
• START-OF-SELECTION.
• WRITE: / ‘Start of Program’.
• WRITE: / P_NAME.
• WRITE: / P_DATE.
96
AT SELECTION-SCREEN ON
• REPORT ZABAPEXAMPLE.
• TABLES: VBAK.
• AT SELECTION-SCREEN ON P_DOCUMENTO.
• IF P_DOCUMENTO = SPACE.
• MESSAGE I999 WITH ‘Inserire valore!!’.
• ENDIF.
• START-OF-SELECTION.
• WRITE: ‘Il documento selezionato è:’, P_DOCUMENTO.
97
AT SELECTION-SCREEN ON (2)
• REPORT ZABAPEXAMPLE.
• TABLES: VBAK.
• AT SELECTION-SCREEN ON SO_DATA.
• IF SO_DATA-LOW > SO_DATA-HIGH.
• MESSAGE E999 WITH ‘Attenzione: date inconsistenti!!’.
• ENDIF.
98
AT SELECTION-SCREEN ON VALUE-REQUEST
• REPORT ZABAPEXAMPLE2.
• TABLES: VBAK.
• PARAMETER: P_PATH TYPE IBIPPARMS-PATH.
99
AT SELECTION-SCREEN OUTPUT
REPORT ZABAPEXAMPLE3.
PARAMETER P_CK AS CHECKBOX.
PARAMETER P_DATA LIKE SY-DATUM.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_DATA'.
IF P_CK = ' '.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
ENDIF. MODIFY SCREEN.
ENDLOOP.
100
Output di un report
• L’istruzione WRITE
• Sintassi:
• WRITE AT [/] [<pos>] <f>[(<len>)]. oppure WRITE / [<pos>] [(<len>)]<f>
• Dove:
• “/” manda a capo la scrittura del campo che segue
• <f> è la variabile da stampare
• <pos> è un numero o una variabile lunga al max 3 cifre che denota la posizione sullo
screen,
• <len> è un numero o una variabile lunga al max 3 cifre che denota la lunghezza
dell’output
• Se la specifica del formato (pos, len) contiene solo valori diretti (non variabili), si può
omettere AT.
101
Output di un report
• L’istruzione WRITE
• Si utilizza lo SKIP seguito da un numero (per default è 1) per indicare quante righe
vuote debbono essere lasciate prima della scrittura della riga successiva.
• Si può tracciare una linea orizzontale sullo screen di output usando la seguente
sintassi:
• Si può tracciare una linea verticale sullo screen di output usando la seguente
sintassi:
• WRITE / [<pos>] sy-vline.
102
Output di un report
• L’istruzione WRITE – Opzioni di formattazione
• Sintassi:
• WRITE … <f> <option>.
Option Funzione
USING EDIT MASK <m> Specifica un template <m>.ES: <m> = ‘__/__/____’ per le variabili di tipo data
103
Output di un report
• L’istruzione WRITE – Opzioni di formattazione
104
Output di un report
L’istruzione WRITE – esempi
Abap Code Screen Output
DATA: g(5) TYPE c VALUE ‘Hello’,
f(5) TYPE c VALUE ‘Dolly’.
Hello Dolly
WRITE: g, f. Hello
WRITE: /10 g, Dolly
/ f UNDER g. HelloDolly
WRITE: / g NO-GAP, f.
105
Output di un report
• L’istruzione WRITE – Colori nelle Liste
• Dove:
• COLOR: imposta il colore per lo sfondo. Se si aggiunge INVERSE ON, il colore è
associato al carattere. <n> può essere sia il numero di un colore sia il nome.
• INTENSIFIED: determina le sfumature dello sfondo. Non ha effetto con l’addition
COLOR OFF. Invece INTENSIFIED OFF non ha effetto con l’addition INVERSE ON.
• INVERSE: influenza il colore del carattere.
106
Module Pool
• Definizione:
• Caratteristiche:
• L’interfaccia di dialogo deve essere il più possibile vicina alle esigenze dell’utente.
107
Module Pool
• Principali componenti
108
Module Pool
• Principali componenti
109
Module Pool
• Principali componenti
•
110
Module Pool
• PASSI PER LA CREAZIONE DI UN PROGRAMMA DIALOGO
111
Creazione di un Module Pool
• Si opera allo stesso modo della creazione di un report, utilizzando l’Object Browser.
• Regole:
• deve iniziare per SAPM<Ztrx>;
• deve essere di tipo ‘M’
• Dovrà prevedere almeno i seguenti include:
• TOP INCLUDE: comprende tutta la parte dichiarativa dei dati, i dati globali che sono
visibili a tutti i moduli che compongono il programma di dialogo, ivi inclusi le tabelle, il
controllo tabelle, le tabelle interne, le strutture, catalogate o meno sul Dictionary, le
variabili
• INCLUDE PBO: rappresenta tutta quella serie di moduli legati ai PBO (processi
prima della visualizzazione dell’output dello schermo; per maggiori dettagli si veda il
paragrafo dedicato al Flow Logic); questi moduli iniziano con MODULE <nome
modulo> OUTPUT e terminano con ENDMODULE.
•
112
Creazione di un Module Pool
• INCLUDE PAI: rappresenta tutta quella serie di moduli legati ai PAI (processi dopo
l’Enter da parte dell’utente; per maggiori dettagli si veda il paragrafo dedicato al Flow
Logic); questi moduli iniziano con MODULE <nome modulo> INPUT e terminano con
ENDMODULE.
113
Screen Painter
• Le istruzioni che possono essere scritte in questa parte di programma sono limitate,
ma permettono una gestione dei controlli dell’input più che efficace.
•
114
Flow Logic
• Il Flow Logic di uno schermata guida la sequenza dei processi per quello schermata.
• Process before output (PBO): sono elaborazioni che vengono effettuate prima che
una schermta appaia; generalmente sono processi legati all’inizializzazione dei
campi;
• Process after input (PAI): sono elaborazioni che intervengono a fronte di specifiche
interazioni fra il sistema e l’utente, ad esempio quando quest’ultimo seleziona un
certo menu, un tasto funzione, un bottone o un semplice Enter;
• Process on value request (POV): sono processi che intervengono quando si
richiede una vista di Help, ossia la visualizzazione di un set di possibili valori; ciò si
ottiene selezionando il tasto funzione F4;
• Process on help request (POH): sono elaborazioni che intervengono quando
l’utente richiede l’Help online, selezionando il tasto funzionale F1.
• I valori di uno stesso campo possono essere letti in diverse subroutines richiamate
da diversi eventi (PAI, POH, POV).
• Queste particolari subroutines del Flow Logic sono chiamate modules.
115
Flow Logic
• il sistema risponde in modo interattivo alle digitazioni dell’utente.
116
Flow Logic
• ISTRUZIONI AMMESSE NELLO SCREEN PAINTER:
• MODULE <nome modulo>
• LOOP AT <condizione> ...ENDLOOP
• FIELD <nome campo> MODULE <nome modulo>
• CHAIN...ENDCHAIN
• FIELD <nome campo> MODULE <nome modulo> ON INPUT
• FIELD <nome campo> MODULE <nome modulo> ON CHAIN-INPUT
• FIELD <nome campo> MODULE <nome modulo> ON REQUEST
• FIELD <nome campo> MODULE <nome modulo> ON CHAIN-REQUEST
• MODULE <nome modulo> AT EXIT-COMMAND
• FIELD <...> VALUES (<VALUE LIST>) [solo per type C o N]
• MODIFY SCREEN
• Se il modulo è richiamato nel PBO, il nome del modulo deve essere seguito dalla
dicitura OUTPUT. Se il modulo è richiamato nel PAI, il nome del modulo deve essere
seguito dalla dicitura INPUT
117
DEBUGGING
ü Tool usato per identificare ed eliminare gli errori nei programmi ABAP
ü Permette la verifica della logica del programma passo dopo passo esaminando il
risultato di istruzioni singole
118
DEBUGGING
• Consente di:
• Settare i breakpoint
• Settare I watchpoint
119
DEBUGGING
• Mettere dei breakpoints (segnali su di una linea di codice del sorgente che
comunicano al processore del runtime di ABAP/4 di bloccare a quella linea
l’esecuzione del programma) utilizzando il path Utilities ->Breakpoints -> Set prima di
avviare l’esecuzione del programma
120
DEBUGGING
• Comandi possibili durante il modo debug:
Step singolo(F5) Esegue la successiva linea di programma
Continuare (F8) esegue fino al prossimo breakpoint o fino alla fine del codice
121
wwww.exprivia.it Thank you!