01 La guida
Impari a costruire una tabella interna e a gestirla con APPEND, LOOP, READ TABLE e SORT dentro una logica ordinata e leggibile. La risposta diretta è che dichiari la riga nel Dictionary, aggiungi le righe una alla volta e poi leggi e ordini prima di mostrare la lista interattiva.
Cosa contiene davvero una tabella interna in ABAP?
Quando programmi in ABAP pensi in termini di righe con la stessa struttura, perché una tabella interna ti serve a tenere in memoria un insieme omogeneo mentre il report lavora. Definisci prima la struttura della riga e poi dichiari la tabella che contiene zero, una o molte righe con quella struttura. La struttura può derivare dagli oggetti del Dictionary e questa è un'abitudine sana, perché ogni riferimento ai dati proviene dal dizionario e resta collegato ai metadati centrali.
Una struttura è un tipo complesso fatto di più campi, paragonabile a struct in C e C++, mentre un elemento dati porta il contenuto semantico del campo e un dominio ne fissa le caratteristiche strutturali. Pensa al classico esempio del prezzo: decine di tabelle possono avere un campo prezzo che rimanda allo stesso elemento dati PRICE, e il dominio può indicare che si tratta di un valore numerico con due decimali. Nello stesso spirito, un dominio può prevedere un elenco di valori possibili, come un campo carattere lungo uno, senza distinzione tra maiuscole e minuscole, che ammette solo T per vero e F per falso.
Perché i report nascono per elaborare righe in ordine?
I report seguono un modello semplice: chiedi all'utente un insieme di parametri, selezioni un sottoinsieme di dati e produci una lista interattiva. Il termine report può trarre in inganno perché questi programmi possono anche modificare i dati, ma si chiamano così per la natura orientata alla lista del risultato. Se impari a vedere la tabella interna come il serbatoio della lista, capisci perché conviene riempirla in modo pulito e ordinarla prima di mostrarla.
I pool di moduli definiscono invece un'interazione più complessa con una raccolta di schermate, dove ogni schermata è l'immagine fisica vista dall'utente e ha una logica di flusso divisa in PBO, processo prima dell'output, e PAI, processo dopo l'input. Nella documentazione la combinazione di schermata e logica si chiama dynpro. Per le elaborazioni ordinate di cui parli qui, resta sul modello report e ti sarà utile rileggere la guida su liste interattive e griglie ALV quando passi dalla tabella interna alla visualizzazione.
Come dichiari la struttura prima di riempirla?
In ABAP un programma è fatto di singole frasi chiamate istruzioni, la prima parola è la parola chiave e ogni istruzione termina con un punto. Le parole vanno separate da almeno uno spazio, puoi applicare l'indentazione come vuoi e il sistema non distingue tra maiuscole e minuscole in parole chiave, aggiunte e operandi. Un'istruzione può continuare su più righe e puoi anche mettere più istruzioni su una sola riga, anche se non è raccomandato.
Il classico inizio REPORT TEST seguito da WRITE con testo tra apici mostra due istruzioni che producono una lista con una sola riga. La parola REPORT indica che il programma è un report e lo stesso programma potrebbe diventare un pool di moduli sostituendo REPORT con PROGRAM. Per commentare usi l'asterisco nella prima colonna per tutta la riga oppure le virgolette doppie per commentare il resto della riga. La stessa disciplina vale quando scrivi APPEND, LOOP, READ TABLE e SORT, perché la leggibilità nasce da punti, spazi e commenti usati con costanza, come spiegato nella pagina su tipi di dati e istruzioni.
Come aggiungi righe senza sporcare il contenuto esistente?
Per aggiungere righe in modo ordinato conviene ragionare a blocchi brevi: prepari una riga di appoggio con la stessa struttura della tabella, la valorizzi campo per campo e poi la accodi. Istruzioni consecutive con la stessa parte iniziale si possono combinare con l'operatore catena, i due punti. La parte comune va a sinistra dei due punti, le parti diverse vanno a destra separate da virgole, e i due punti restano attaccati al token precedente senza spazio, come le virgole nella lista.
Trovi il contesto storico nella panoramica generale del linguaggio che racconta come ABAP sia nato come linguaggio di report e poi sia diventato il linguaggio dei programmi applicativi. Lo stile a catena si vede bene con WRITE applicato a tre campi di una struttura di volo, CITYFROM, CITYTO e AIRPTO, oppure con REPLACE applicato a LASTNAME, FIRSTNAME e CITYNAME. Nello stesso modo ABAP contiene moltissime istruzioni integrate, un tempo scritte in forma discorsiva senza simboli e quindi piuttosto prolisse, oggi scrivibili anche in forma più concisa, come ADD TAX TO PRICE che equivale a PRICE uguale a PRICE più TAX.
Come leggi una sola riga quando la tabella cresce?
Quando la tabella ha poche righe puoi scorrerla tutta, ma quando cresce ti serve una lettura mirata in base alla chiave. Qui aiuta il modo in cui SAP pensa agli accessi: ogni tabella SAP ha un indice primario creato implicitamente con la tabella e usato per imporre l'unicità della chiave, mentre altri indici unici o non unici si definiscono come indici secondari. Anche se l'indice appartiene al database, il ragionamento resta valido per la tabella interna: decidi prima qual è la chiave di lettura e poi cerca in base a quella.
Le viste definiscono sottoinsiemi di colonne e righe da una o più tabelle con condizione di join e, essendo tabelle virtuali che rimandano ad altri dati, non occupano spazio rilevante. Gli aiuti alla ricerca, successori dei matchcode ormai obsoleti, offrono strategie avanzate quando l'utente vuole vedere i valori possibili di un campo, mentre il sistema già propone in modo implicito l'elenco dei valori, ad esempio tutti i numeri cliente esistenti, e gli aiuti possono raffinare la ricerca per area geografica o affidabilità creditizia. Gli oggetti di lock implementano invece il blocco a livello applicativo quando modifichi i dati. Prima di leggere, chiediti quale campo identifica davvero la riga e se la tabella è ordinata in base a quel campo.
Perché ordinare prima di ciclare cambia il risultato?
Il ciclo sulla tabella segue l'ordine fisico delle righe, quindi se accodi in ordine sparso e poi mostri il contenuto senza ordinarlo ottieni una lista difficile da controllare. La pagina Wikipedia non pubblica un esempio dedicato che combina queste quattro istruzioni nella stessa procedura. Puoi comunque applicare una regola pratica: riempi la tabella senza preoccuparti dell'ordine di arrivo, poi ordinala in base alla chiave di presentazione e solo dopo scorri la tabella per totali, raggruppamenti e stampa.
Questo modo di lavorare è legato all'ambiente di esecuzione, perché tutti i programmi ABAP risiedono nel database SAP e non in file esterni separati come in Java o C++. Nel database il codice esiste in due forme: codice sorgente visibile e modificabile con gli strumenti del Workbench e codice generato, rappresentazione binaria paragonabile al bytecode Java. I programmi girano sotto il controllo del sistema runtime, parte del kernel SAP, che elabora le istruzioni, controlla la logica di flusso delle schermate e risponde agli eventi, come il clic su un pulsante, in modo paragonabile a una macchina virtuale Java. Un componente chiave è l'interfaccia del database, che trasforma le istruzioni indipendenti dal database dette Open SQL in istruzioni comprese dal sistema sottostante dette Native SQL, gestisce la comunicazione con il database relazionale e aggiunge funzioni come il buffer delle tabelle e dei dati frequenti nella memoria locale del server applicativo.
Quali strumenti usi per scrivere e controllare il codice?
Puoi sviluppare in due modi a seconda della release. Il Workbench ABAP fa parte del sistema ABAP e si raggiunge con SAP GUI, mentre gli strumenti di sviluppo ABAP, formalmente ABAP in Eclipse, sono un insieme di plugin per l'IDE Eclipse, dove installi gli strumenti sul computer e lavori in locale con sincronizzazione continua verso il backend. Nel Workbench i nomi da ricordare sono: editor ABAP per report, pool di moduli, include e pool di subroutine con SE38, Dictionary ABAP per definizioni di tabelle e tipi globali con SE11, Menu Painter per l'interfaccia con SE41, Screen Painter per schermate e logica con SE51, Function Builder per i moduli di funzione con SE37 e Class Builder per classi e interfacce con SE24. Il navigatore a oggetti con SE80 offre un'unica interfaccia integrata per questi strumenti.
Il lavoro quotidiano ruota intorno a transazioni ed esecuzioni di programmi, dove il modo normale per eseguire il codice è digitare un codice di transazione come VA01 per creare un ordine cliente, mentre i codici usati dallo sviluppatore includono SE38, SE09, SE10, SE24, SE11, SE16N, SE80, SE37 e ST22. Le transazioni si avviano da menu basati sul ruolo, digitando il codice nel campo di comando presente in ogni schermata SAP oppure con CALL TRANSACTION e LEAVE TO TRANSACTION, e la nozione generale di transazione si chiama unità logica di lavoro. I programmi nascono e subiscono il primo test nel sistema di sviluppo, poi passano agli altri sistemi del panorama, di solito tre: sviluppo, test con controllo qualità e produzione, sotto il controllo del sistema di trasporto e delle modifiche che gestisce concorrenza, versioni e rilascio, con tre livelli, database, applicazione e presentazione, su macchine uguali o diverse. ABAP resta il linguaggio per il sistema client-server R tre, rilasciato nel 1992, scritto sempre più in ABAP negli anni novanta fino a coprire quasi tutte le funzioni nel 2001, con estensione orientata agli oggetti nel 1999 insieme alla release 4 punto 6 e piattaforma NetWeaver che supporta ABAP e Java come strato di astrazione tra applicazioni, sistema operativo e database.
La pagina Wikipedia su ABAP presenta il linguaggio come linguaggio di programmazione di alto livello e specifico di dominio creato dalla società tedesca SAP SE. Vi trovi la storia da R due a R tre fino a S quattro HANA, la descrizione del runtime e dell'interfaccia del database, i tipi di programmi tra report e pool di moduli, il Dictionary con tabelle trasparenti, raggruppate e cluster, indici, viste e domini, e gli strumenti dal Workbench a Eclipse. Tienila aperta mentre scrivi in SE38 e riscrivi ogni ciclo con chiave, ordinamento e lettura espliciti.
02 Prosegui la lettura
Altre guide della stessa rubrica e dei percorsi vicini.
