01 La guida
Se apri l'archivio storico con gli occhi di chi programma oggi, trovi una mappa ordinata del linguaggio ABAP e del suo ambiente. Impari come erano divisi report e dynpro, dove vivevano tabelle e tipi, quali transazioni aprivano gli strumenti e dove cercare oggi la documentazione ufficiale.
Cosa trovavi quando aprivi l'archivio storico
La prima distinzione che incontri riguarda il nome e il ruolo del linguaggio. ABAP nasce come Allgemeiner Berichts-Aufbereitungs-Prozessor, descritto in tedesco come processore generico per la preparazione di report, e dal 1996 usa il nome Advanced Business Application Programming. La pagina lo presenta come linguaggio di alto livello per applicazioni gestionali, creato dalla società tedesca SAP SE e pubblicizzato come linguaggio di quarta generazione. Lo trovi posizionato accanto a Java per programmare SAP NetWeaver Application Server, che fa parte della piattaforma SAP NetWeaver per costruire applicazioni gestionali. Puoi usare questa cornice per orientarti, perché spiega perché tanti esempi storici parlano di report, di contabilità finanziaria e gestionale e di gestione dei materiali. La prima apparizione risale al 1983, con implementazioni principali su SAP R/2, SAP R/3 e SAP S/4HANA. La disciplina di tipi risulta statica, forte, sicura e nominale, mentre il sistema operativo risulta multipiattaforma. Tra i linguaggi indicati come influenza compaiono Objective-C, COBOL e SQL.
Accanto alla definizione trovi la linea del tempo che lega linguaggio e piattaforme. ABAP nasce come linguaggio di report per SAP R/2, una piattaforma che permetteva alle grandi aziende di costruire applicazioni gestionali su mainframe. Poi diventa il linguaggio con cui gli sviluppatori realizzano la piattaforma SAP R/3, pensato anche per i clienti che volevano estendere le applicazioni SAP con report e interfacce personalizzate. Segui il filo degli anni quando leggi che il sistema client-server R/3 esce nel 1992, che negli anni novanta una parte crescente di applicazioni e sistemi viene scritta in ABAP e che entro il 2001 quasi tutte le funzioni tranne quelle più elementari risultano scritte in ABAP. Nel 1999 arriva l'estensione orientata agli oggetti chiamata ABAP Objects, insieme alla release R/3 4.6. Se studi sintassi e fondamenti con questa prospettiva storica, capisci perché alcuni costrutti sembrano discorsivi e altri più compatti, perché la convivenza tra stile classico e stile recente risponde a decenni di codice in produzione.
Perché report e module pool non stavano insieme
La divisione tra programmi eseguibili e librerie non eseguibili struttura quasi tutto l'archivio. Da un lato hai i report, che seguono un modello semplice, con parametri di selezione opzionali inseriti dall'utente e produzione di una lista interattiva. Dall'altro hai i module pool, che gestiscono interazioni più complesse attraverso una serie di schermate. Il termine schermo indica l'immagine fisica vista dall'utente, mentre la logica di flusso indica il codice ABAP richiamato implicitamente dalle schermate, diviso in PBO, Process Before Output, e PAI, Process After Input. Nella documentazione SAP la combinazione di schermo e logica di flusso prende il nome di dynpro. Questa separazione ti aiuta quando cerchi un esempio, perché un report orientato alle liste resta diverso da un dialogo con più schermate anche se entrambi modificano dati.
Le parti riutilizzabili vivono in unità non eseguibili da sole. Gli INCLUDE vengono inclusi al momento della generazione nell'unità chiamante e spesso servono a suddividere programmi grandi. I subroutine pool contengono subroutine racchiuse tra FORM ed ENDFORM e richiamate con PERFORM. I gruppi di funzioni sono librerie di moduli di funzione autonomi, racchiusi tra FUNCTION ed ENDFUNCTION e richiamati con CALL FUNCTION. Le classi oggetto sono simili alle classi Java e definiscono metodi e attributi, mentre le interfacce contengono definizioni vuote di metodi che ogni classe deve implementare con codice esplicito. I type pool definiscono raccolte di tipi di dati e costanti. Quando sfogli vecchi sorgenti, cerca queste parole chiave per capire subito se stai guardando un punto di ingresso oppure un frammento da includere.
Come si passava dal codice alla tabella
Il passaggio tra programma e dati avviene attraverso l'ABAP Dictionary, che contiene tutti i metadati sui dati nel sistema SAP. Ogni riferimento a tabella, vista o tipo di dato viene ricavato dal Dictionary, e gli sviluppatori usano le transazioni del Dictionary direttamente oppure tramite l'Object Navigator SE80 nell'ABAP Workbench per visualizzare e gestire questi metadati. Poiché ABAP è interpretato, quando un oggetto del Dictionary cambia, il programma che lo richiama usa la nuova versione alla successiva esecuzione senza bisogno di ricompilare i programmi che richiamano oggetti modificati. Trovi qui il perché di una regola pratica che vale ancora oggi, cioè definisci una volta il tipo nel Dictionary e richiamalo nel codice invece di duplicarlo nei singoli programmi. Se vuoi fissare le basi, apri anche la guida su tabelle, viste e chiavi e confronta i nomi che vedi negli esempi storici.
Le voci principali del Dictionary seguono un ordine che puoi ricordare a memoria. Le tabelle sono contenitori di dati nel database relazionale sottostante, e nella maggior parte dei casi esiste una relazione uno a uno tra definizione nel Dictionary e definizione nel database con lo stesso nome e le stesse colonne, caso detto trasparente. Le tabelle pooled esistono come entità indipendenti nel Dictionary ma sono raggruppate in grandi tabelle fisiche dette pool a livello di database, spesso per dati di configurazione piccoli. Le tabelle clustered sono raggruppate fisicamente in cluster in base alle chiavi primarie, e l'esempio tipico mostra una tabella H con dati di testata delle fatture e una tabella D con righe di dettaglio raggruppate con le righe collegate di H. Gli indici accelerano l'accesso per condizioni di selezione frequenti, con indice primario creato insieme alla tabella per garantire l'unicità della chiave e indici secondari unici o non unici. Le viste definiscono sottoinsiemi di colonne o righe da una o più tabelle unite tramite join e restano tabelle virtuali che non occupano spazio rilevante.
Quali transazioni aprivano le porte dell'ambiente
Nel sistema SAP una transazione indica l'esecuzione di un programma, e il modo normale per eseguire codice ABAP consiste nel digitare un codice di transazione, come VA01 per creare un ordine di vendita. Le transazioni si richiamano da menu definiti dal sistema o specifici per ruolo, oppure digitando il codice nel campo comando presente in ogni schermata SAP, oppure nel codice con CALL TRANSACTION e LEAVE TO TRANSACTION. Il concetto generale di transazione prende il nome di Logical Unit of Work, abbreviato LUW. Tra i codici comuni usati dagli sviluppatori ABAP trovi SE38, SE09, SE10, SE24, SE11, SE16N, SE80, SE37 e ST22. Quando leggi un articolo d'archivio, il codice tra parentesi ti dice già dove guardare senza descrizioni aggiuntive.
L'ambiente di sviluppo storico si articola in due percorsi e la disponibilità dipende dalla release del sistema ABAP. L'ABAP Workbench fa parte del sistema ABAP e si raggiunge tramite SAP GUI, con strumenti diversi per modificare i programmi. Trovi ABAP Editor per report, module pool, include e subroutine pool con SE38, ABAP Dictionary per definizioni di tabelle e tipi globali con SE11, Menu Painter per interfaccia utente con SE41, Screen Painter per schermate e logica di flusso con SE51, Function Builder per moduli di funzione con SE37 e Class Builder per classi e interfacce ABAP Objects con SE24. L'Object Navigator con SE80 offre un'unica interfaccia integrata per accedere a questi strumenti. La seconda strada usa gli ABAP Development Tools, noti come ABAP in Eclipse, cioè un insieme di plugin per l'IDE Eclipse dove lo sviluppatore installa gli strumenti sul computer e lavora in locale con sincronizzazione continua verso il backend. La pagina Wikipedia non propone un percorso didattico completo per le release attuali.
Dove girava davvero un programma ABAP
Tutti i programmi ABAP risiedono nel database SAP e non vivono in file esterni separati come i programmi Java o C++. Nel database il codice esiste in due forme, cioè codice sorgente che puoi vedere e modificare con gli strumenti ABAP Workbench e codice generato come rappresentazione binaria paragonabile al bytecode Java. I programmi girano sotto il controllo del sistema runtime, che fa parte del kernel SAP e ha il compito di elaborare le istruzioni ABAP, controllare la logica di flusso delle schermate e rispondere agli eventi come il clic su un pulsante. In questo senso puoi considerarlo come una macchina virtuale paragonabile alla Java VM. Un componente centrale del runtime è l'interfaccia con il database, che trasforma istruzioni ABAP indipendenti dal database dette Open SQL in istruzioni comprese dal DBMS sottostante dette Native SQL. La stessa interfaccia gestisce la comunicazione con il database relazionale e funzioni come il buffering di tabelle e dati acceduti spesso nella memoria locale del server applicativo.
Il contesto di esecuzione resta il sistema SAP, formato da un database relazionale centrale e da uno o più server applicativi detti istanze che accedono a dati e programmi nel database. Un sistema contiene almeno un'istanza ma può contenerne di più per motivi di dimensionamento e prestazioni, con meccanismi di bilanciamento del carico che distribuiscono il carico sui server disponibili. Le installazioni del Web Application Server dette landscape comprendono in genere tre sistemi, cioè sviluppo, test con controllo qualità e produzione, anche se possono esserne di più come test unitario e preproduzione oppure di meno come solo sviluppo e produzione. I programmi ABAP nascono e affrontano il primo test nel sistema di sviluppo e poi vengono distribuiti agli altri sistemi sotto il controllo del Change and Transport System, responsabile del controllo della concorrenza, della gestione delle versioni e del rilascio sui sistemi di controllo qualità e produzione. Il Web Application Server si suddivide in livello database, livello applicativo e livello presentazione, che possono girare sulla stessa macchina fisica o su macchine diverse, con accesso online tramite interfaccia grafica proprietaria detta SAP GUI oppure tramite browser web.
Come leggere oggi la sintassi senza perderti
La sintassi ABAP parte da poche regole rigide che ritrovi in ogni esempio storico. I programmi sono composti da singole frasi dette istruzioni, la prima parola è la parola chiave ABAP e ogni istruzione termina con un punto. Le parole vanno separate da almeno uno spazio, l'indentazione resta libera e il runtime non distingue maiuscole e minuscole in parole chiave, aggiunte e operandi. Le istruzioni possono estendersi oltre una riga e più istruzioni possono stare su una riga sola anche se questa forma non è raccomandata. Le righe che iniziano con asterisco nella prima colonna sono righe di commento ignorate dal runtime, mentre le virgolette doppie rendono commento il resto della riga. L'esempio Hello World mostra due istruzioni, REPORT e WRITE, con REPORT TEST e WRITE Hello, World, dove REPORT indica che il programma è un report e la sostituzione di REPORT con PROGRAM lo avvicina a un module pool.
Due abitudini meritano attenzione perché spiegano molti errori di lettura. Le istruzioni consecutive con parte iniziale identica si combinano con l'operatore di concatenazione a catena, cioè i due punti, con la parte comune a sinistra senza spazio prima dei due punti e le parti diverse a destra separate da virgole. Così tre WRITE su FLIGHTINFO CITYFROM, CITYTO e AIRPTO diventano WRITE con due punti seguito dai tre campi, e tre REPLACE di A con B in LASTNAME, FIRSTNAME e CITYNAME diventano un solo REPLACE con INTO seguito dai tre nomi. Il codice resta sensibile agli spazi nei punti critici, perché x uguale a più b tra parentesi assegna a x la sottostringa della variabile a a partire da b con lunghezza c, mentre x uguale a più b tra parentesi con spazi assegna a x la somma di a e del risultato della chiamata al metodo b con parametro c. Rispetto a linguaggi come C o Java che definiscono poche istruzioni e affidano molto alle librerie, ABAP contiene molte istruzioni integrate nate con strutture frasali e pochi simboli, con stile verboso di origine COBOL accanto a uno stile più conciso nelle versioni recenti, come ADD TAX TO PRICE equivalente a PRICE uguale PRICE più TAX. I tipi integrati comprendono intero, decimale packed, virgola mobile, numerico carattere, carattere, data, ora ed esadecimale, e ogni struttura, tabella, vista o elemento dati del Dictionary può tipizzare una variabile insieme a classi e interfacce. La lunga descrizione storica del linguaggio conserva molti di questi esempi nella forma usata nelle release precedenti.
Quale pagina apre la documentazione attuale
Per passare dall'archivio alla pratica attuale conviene ragionare per componenti software e per basi dati supportate. Il software ABAP viene distribuito in componenti, con SAP BASIS come livello tecnico di base richiesto in ogni sistema ABAP, SAP ABA con funzioni per applicazioni gestionali come business partner e gestione indirizzi, SAP UI per creare applicazioni SAP UI5 e BBPCRM come esempio di applicazione gestionale per CRM. Sul lato dati trovi HANA, SAP ASE ex Sybase, IBM Db2, Informix, MaxDB, Oracle e Microsoft SQL Server, con supporto per Informix interrotto nella release SAP Basis 7.00. SAP NetWeaver gira su UNIX con AIX, HP-UX, Solaris e Linux, su Microsoft Windows, su i5/OS su IBM System i ex iSeries e AS/400 e su z/OS su IBM System z ex zSeries e S/390. L'astrazione tra applicazioni gestionali, sistema operativo e database permette di non dipendere da server o piattaforma specifici e di portare le applicazioni da una piattaforma all'altra.
Quando cerchi conferme ufficiali, parti dai nomi esatti presenti in questa mappa, cioè release stabile 7.58 del 26 ottobre 2023, ABAP Objects del 1999, R/3 4.6, R/2, R/3, S/4HANA, NetWeaver, Open SQL e Native SQL, CTS, LUW, PBO e PAI. Usa i codici SE80, SE11, SE38, SE37 e SE24 per ritrovare gli strumenti, e usa PRICE, BOOLEAN con T e F, FLIGHTINFO e BOOKINGS con CLASS Y per l'economy e C per la business per ritrovare gli esempi di elementi dati, domini e viste. Le strutture restano tipi complessi con più campi paragonabili a struct in C, gli elementi dati danno il contenuto semantico ai campi come PRICE ripetuto in molte tabelle, i domini definiscono le caratteristiche strutturali come numerico con due decimali e possono includere elenchi di valori ammessi, le search help che hanno sostituito i matchcode offrono strategie di ricerca avanzate sui valori e i lock object gestiscono il blocco a livello applicativo durante le modifiche.
La pagina Wikipedia su ABAP è una voce enciclopedica sul linguaggio gestionale creato da SAP SE. Presenta definizione, piattaforme R/2, R/3 e S/4HANA, ambiente di runtime con Open SQL e Native SQL, sistemi e landscape con CTS, transazioni e tipi di programma tra report e module pool. Mostra Dictionary con tabelle trasparenti, pooled e clustered, viste, strutture, elementi dati, domini, search help e lock object, più sintassi con Hello World, istruzioni concatenate, commenti e tipi integrati.
02 Prosegui la lettura
Altre guide della stessa rubrica e dei percorsi vicini.
