Tutorial sulla programmazione tramite finestre di dialogo: pool di moduli in SAP ABAP

โšก Riepilogo intelligente

Programmazione del dialogo in SAP ABAP crea programmi in un pool di moduli che interagiscono con l'utente tramite schermate e modificano il contenuto del database. Questa pagina illustra i codici di transazione, le schermate, lo stato dell'interfaccia utente grafica, la logica di flusso delle schermate, le dynpro e la struttura del pool di moduli.

  • ???? Definizione di base: Un programma di dialogo gestisce qualsiasi interazione con l'utente, come l'inserimento di dati, la selezione di una voce di menu o il clic su un pulsante, e puรฒ aggiornare il database.
  • ๐Ÿ…ผ Tipo di programma: I programmi di dialogo sono pool di moduli di tipo M, non possono essere eseguiti autonomamente e devono essere associati ad almeno un codice di transazione con una schermata iniziale.
  • ๐Ÿงฉ Componenti: Un codice di transazione, schermate, uno stato dell'interfaccia grafica, il pool di moduli ABAP e la logica di flusso formano insieme un'unica applicazione di dialogo.
  • ๐Ÿ”„ Logica di flusso: PBO viene eseguito prima che appaia la schermata, PAI viene eseguito dopo un'azione dell'utente, POH risponde a F1 e POV risponde a F4.
  • ๏ธ Dynpro: Una schermata, unitamente alla sua logica di flusso, costituisce una dynpro, e ogni dynpro controlla esattamente una fase della finestra di dialogo.
  • ๐Ÿ“ฆ Pool di moduli: Tutte le dynpro chiamate all'interno di una transazione fanno riferimento a un pool di moduli comune che contiene i moduli di dialogo.
  • ๏ธ Percorso di creazione: SE80 crea il pool di moduli, SE51 progetta la schermata, SE41 crea lo stato dell'interfaccia grafica e SE93 collega il codice della transazione.

SAP Programmazione di dialoghi ABAP

Che cos'รจ la programmazione dialogica?

SAP-ABAP supporta due tipi di programmi: Programma report e Programma dialogo.

Se il programma ABAP richiede l'input dell'utente, viene utilizzata la programmazione Dialog.

Una finestra di dialogo utente รจ qualsiasi forma di interazione tra l'utente e il programma e puรฒ essere una delle seguenti:

  • Immissione dei dati
  • Scelta di una voce di menu
  • Facendo clic su un pulsante
  • Facendo clic o facendo doppio clic su una voce

Il programma di dialogo viene utilizzato anche quando dobbiamo navigare avanti e indietro tra le schermate

I programmi di dialogo vengono creati con il tipo 'M' โ€“ Module Pool. Non possono essere eseguiti autonomamente e devono essere allegati ad almeno un codice transazione in cui si specifica una schermata iniziale.

Differenza tra i programmi Report e Dialog

Differenza tra i programmi Report e Dialog

Programma di report:

Un report รจ un programma che in genere legge e analizza i dati nelle tabelle del database senza modificarli banca dati.

Programma di dialogo:

Un programma di dialogo consente di lavorare in modo interattivo con il sistema e di modificare il contenuto delle tabelle del database. Ogni programma di dialogo dispone di una determinata sequenza di schermate che vengono elaborate dal sistema una dopo l'altra.

Criteri Programma di reportistica Programma di dialogo
Tipo di programma Tipo 1, eseguibile Tipo M, pool di moduli
Accesso al database Legge e analizza i dati Legge e modifica i dati
Funziona da solo Funziona solo tramite un codice di transazione
Controllate Eventi del rapporto Logica di flusso dello schermo di ogni dynpro

La sequenza delle schermate di una transazione di dialogo รจ piรน facile da seguire con un esempio.

Un esempio di elaborazione delle transazioni nella programmazione a dialoghi

Un esempio di elaborazione della transazione

Il diagramma illustra una transazione dalla prima schermata all'aggiornamento del database. L'utente inserisce i dati nella schermata 100, PAI convalida l'inserimento e decide la schermata successiva, la schermata 200 raccoglie i dati rimanenti e l'attivitร  di aggiornamento infine scrive il record. Ciascuno di questi passaggi รจ prodotto dai componenti elencati di seguito.

Componenti del programma Dialog

a differenza di rapporto che generalmente comporta la creazione di un programma autonomo che puรฒ essere eseguito indipendentemente da altri oggetti, lo sviluppo di programmi di dialogo comporta lo sviluppo di piรน oggetti, nessuno dei quali puรฒ essere eseguito da solo. Invece tutti gli oggetti sono collegati gerarchicamente al programma principale e vengono eseguiti in una sequenza dettata dal programma principale di dialogo.

I componenti di un programma di dialogo sono:

Codice transazione

  • Il codice transazione avvia una sequenza di schermate.
  • I codici transazione possono essere creati nel browser del repository in ABAP Workbench o utilizzando Transaction SE93.
  • Un codice di transazione รจ collegato ad un programma ABAP e ad una schermata iniziale.
  • รˆ possibile avviare una sequenza di schermate da qualsiasi programma ABAP utilizzando l'istruzione CALL SCREEN.

Schermi

  • Ogni dialogo in un SAP il sistema รจ controllato da uno o piรน schermi.
  • Puoi creare schermate utilizzando Screen Painter nel Workbench ABAP attraverso la transazione SE51
  • Ogni schermata appartiene a un Programma ABAP.
  • Queste schermate sono costituite da una "maschera di schermata" o "layout" e dalla sua logica di flusso. La schermata ha un layout che determina le posizioni dei campi di input/output e di altri elementi grafici come caselle di controllo e pulsanti di scelta. Una logica di flusso determina l'elaborazione logica all'interno della schermata.

Stato della GUI

  • Ogni schermata ha uno o piรน stati della GUI che sono componenti indipendenti di un programma.
  • Controlla le barre dei menu, la barra degli strumenti standard, la barra degli strumenti dell'applicazione, con cui l'utente puรฒ scegliere le funzioni nell'applicazione.
  • Li crei nell'ABAP Workbench utilizzando il menu Painter.

Programma ABAP

  • Ciascuno schermo e stato della GUI nel sistema R/3 appartiene a un programma ABAP.
  • Il programma ABAP contiene i moduli di dialogo richiamati dalla logica del flusso dello schermo ed elabora anche l'input dell'utente dallo stato della GUI.
  • I programmi ABAP che utilizzano le schermate sono noti anche come programmi di dialogo.
  • In un pool di moduli (programma di tipo M); il primo blocco di elaborazione da richiamare รจ sempre un modulo di dialogo. รˆ tuttavia possibile utilizzare le schermate anche in altri programmi ABAP, ad esempio programmi eseguibili o moduli funzione. Il primo blocco di elaborazione viene poi richiamato diversamente; ad esempio, dall'ambiente runtime o da una chiamata di procedura. La sequenza delle schermate viene quindi avviata utilizzando l'istruzione CALL SCREEN.

Logica del flusso dello schermo

La logica del flusso dello schermo รจ principalmente divisa in quattro componenti.

  • Processo prima dell'output (PBO) evento: che viene elaborato prima della visualizzazione della schermata
  • Processo dopo l'input (PAI) evento: che viene elaborato dopo un'azione dell'utente sullo schermo
  • Processo su richiesta di aiuto (P.O.H.): che viene elaborato quando si preme F1
  • Processo su richiesta valore (POV): che viene elaborato quando si preme F4

POH e POV sono spiegati in dettaglio nella pagina relativa a processo di richiesta di valore e processo di richiesta di assistenza.

Dynapro

  • Una schermata, insieme alla sua logica di flusso, viene chiamata Dynpro ("Programma dinamico" poichรฉ la logica di flusso della schermata influenza il flusso del programma).
  • Ogni dynpro controlla esattamente un passo del tuo programma di dialogo.
  • Le schermate appartenenti ad un programma sono numeratoLa sequenza del flusso di schermate puรฒ essere lineare o ciclica. All'interno di una catena di schermate, รจ possibile richiamarne un'altra e, dopo averla elaborata, tornare alla catena originale. รˆ inoltre possibile sovrascrivere la schermata successiva definita staticamente all'interno dei moduli di dialogo del programma ABAP.

Pool di moduli ABAP

  • In seguito a un evento PBO o PAI, un Dynpro richiama un programma di dialogo ABAP. L'insieme di tali programmi รจ chiamato pool di moduli ABAP.
  • Ad esempio, i moduli richiamati all'evento PAI vengono utilizzati per verificare l'input dell'utente e per attivare le fasi di dialogo appropriate, come l'attivitร  di aggiornamento.
  • Tutti i dynpro da chiamare dall'interno prima la transazione si riferisce a un pool di moduli comune.

Struttura di un programma di dialogo

Struttura di un programma di dialogo

Il diagramma di struttura mostra come il codice della transazione, le schermate, lo stato dell'interfaccia grafica e il pool di moduli siano collegati allo stesso programma principale.

Flusso del processo per un programma di dialogo

Flusso del processo per un programma di dialogo

Il diagramma di flusso del processo mostra l'alternanza tra la schermata e il programma ABAP: PBO compila i campi della schermata, l'utente interviene e PAI elabora l'input prima che venga richiamata la schermata successiva.

Come creare un programma di pool di moduli

I componenti sopra descritti vengono creati in un ordine fisso. I passaggi seguenti consentono di creare una transazione funzionante a partire da un pool di moduli vuoto.

  1. Creare il pool di moduli: In SE80 o in SE38, creare un programma il cui nome inizia con SAPMZ e impostare il tipo di programma su M โ€“ Modulo poolIl tipo non puรฒ essere modificato in seguito senza eliminare l'oggetto.
  2. Dichiarare i dati globali: Inserisci l'istruzione TABLES e le variabili globali nell'include TOP, che puรฒ essere letto da ogni modulo di dialogo del pool.
  3. Progetta la schermata: Crea schermata 100 con la schermata Painter (SE51), posizionare i campi di input sul layout e immettere il numero della schermata successiva negli attributi della schermata.
  4. Scrivi la logica di flusso: Nella scheda Logica del flusso, richiamare un modulo per PBO e uno per PAI, come mostrato di seguito.
  5. Costruisci lo stato dell'interfaccia grafica: Crea uno stato con il menu Painter (SE41) e impostarlo nel modulo PBO con l'istruzione SET PF-STATUS, in modo che Salva, Indietro ed Esci raggiungano il programma come codici funzione.
  6. Inserisci un codice di transazione: Nella transazione SE93, crea una transazione di dialogo, assegna un nome al pool di moduli e inserisci 100 come schermata iniziale.
* Screen 100, flow logic
PROCESS BEFORE OUTPUT.
  MODULE status_0100.

PROCESS AFTER INPUT.
  MODULE user_command_0100.

* Module pool SAPMZDEMO
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_100'.
  SET TITLEBAR 'TITLE_100'.
ENDMODULE.

MODULE user_command_0100 INPUT.
  CASE sy-ucomm.
    WHEN 'SAVE'.
      PERFORM save_data.
    WHEN 'BACK' OR 'EXIT'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.

Suggerimento: LEAVE TO SCREEN 0 termina la schermata corrente e ritorna al punto di chiamata, che รจ il modo standard per uscire correttamente da una transazione di dialogo.

DOMANDE FREQUENTI

CALL SCREEN apre una nuova schermata e mantiene la schermata chiamante nello stack, in modo che l'elaborazione ritorni a quest'ultima. LEAVE TO SCREEN sostituisce la schermata corrente e nulla torna al chiamante.

Un pool di moduli denominato SAPMZDEMO รจ suddiviso in MZDEMOTOP per i dati globali, MZDEMOO01 per i moduli PBO, MZDEMOI01 per i moduli PAI e MZDEMOF01 per le subroutine. L'ambiente di sviluppo li genera automaticamente.

Assegna al pulsante la funzione di tipo E nello stato dell'interfaccia grafica e richiama il suo modulo con MODULE exit AT EXIT-COMMAND. Il modulo verrร  quindi eseguito prima della convalida dei campi, consentendo all'utente di uscire dalla schermata anche con valori non validi.

Sรฌ. Gli assistenti AI all'interno degli strumenti di sviluppo ABAP redigono i moduli PBO e PAI, l'istruzione CASE su SY-UCOMM e le convalide dei campi a partire da una descrizione della schermata. Il layout stesso viene comunque disegnato nella schermata. Painter.

I Dynpros gestiscono ancora tutti i classici SAP Transazione GUI. Le nuove interfacce utente vengono solitamente create con Fiori e gli strumenti di intelligenza artificiale aiutano leggendo la logica di flusso esistente e proponendo un servizio e un design applicativo equivalenti.

Riassumi questo post con: