AMDP
Prerequisiti:
· Strumento ADT in
Eclipse o HANA Studio
· SAP HANA Db 1.0 o
versioni successive
· SAP NW AS ABAP 7.5 o versioni successive
AMDP - ABAP Managed Database Procedures, è una procedura dove possiamo scrivere codice all'interno utilizzando SQLSCRIPT che è un linguaggio di database uguale allo script SQL, questo linguaggio è facile da capire e codificare. Dopo aver codificato la logica all'interno del metodo AMDP, è possibile utilizzarla nel report ABAP o utilizzare AMDP come metodo delegato nella funzione tabella CDS.
Limitazioni:
Possiamo solo creare, eseguire il debug di AMDP nel
bundle ADT o nello studio HANA.
Con AMDP, non possiamo usare la tabella MSEG. Quindi,
possiamo invece utilizzare la tabella MATDOC o l'oggetto proxy (NSDM_V_MSEG).
Il tipo di dati del parametro deve essere di tipo tabella o scalare (Int, char,...).
Con i parametri dell'opzione select, dobbiamo convertire in valore stringa utilizzando il metodo cl_shdb_seltab=>combine_seltabs nel programma ABAP, quindi passarlo ai parametri. Successivamente, utilizzeremo APPLY_FILTER per filtrare questa condizione all'interno del metodo AMDP
AMDP non gestisce il client automatico. È necessario aggiungere client come valore del parametro o utilizzare SESSION_CONTEXT('CLIENT') nella condizione di where.
Primo programma con AMDP
1. Crea una classe utilizzando lo strumento Eclipse.
Innanzitutto, dobbiamo fare clic con il pulsante destro del mouse su un
Package -> New -> ABAP Class per creare una nuova classe.
Inseriamo un Nome della classe (ad esempio >ZCL_AMDP_MARA) e descrizione (due campi obbligatori),
quindi fare clic su Avanti.
Crea una nuova richiesta di trasporto e compila il campo della descrizione
(se hai già TR, magari usalo). Quindi, fai clic su Avanti
Fare clic su Fine per completare questo processo e abbiamo creato la classe
con successo.
2.
Dichiarare il metodo AMDP in classe
Poiché il tipo di struttura e tabella verrà riutilizzato nel programma
ABAP, quindi lo creerò nella GUI SAP (tcode SE11).
Creare la struttura ZST_MARA
Creare il tipo tabella ZTT_MARA.
Quando si utilizza AMDP, è necessario aggiungere l'interfaccia IF_AMDP_MARKER_HDB
(obbligatorio), se non la si aggiunge, non è possibile utilizzare alcuna
funzionalità del metodo AMDP.
In Eclipse modifichiamo la classe ZCL_AMDP_MARA creata in precedenza in questo modo:
- Dobbiamo aggiungere alcune opzioni al metodo AMDP (nell'implementazione della
classe):
- By database Procedure per implementare una procedura per banca dati.
In questa opzione, il tuo metodo AMDP creerà automaticamente una procedura nel sistema
HANA
- FOR HDB per indicare il database HANA
- LANGUAGE SQLSCRIPT per indicare il linguaggio specifico del
database in cui è implementato AMDP
- OPTION READ-ONLY indica che possiamo leggere solo nella procedura del
database
- USING di <nome tabella/vista>: se si utilizzano tabelle in questa
procedura, indicare il nome della tabella in questa opzione
CLASS zcl_amdp_mara DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
* 1. Creare la
dichiarazione dell'Interfaccia per usare il metodo
AMDP
INTERFACES:
IF_AMDP_MARKER_HDB.
* 2. Dichiarare il metodo STATICO. Questo metodo AMDP legge di dati
* dalla tabella
MARA e mostra il risultato in un programma
ABAP
CLASS-METHODS:
GET_DATA_FROM_MARA
IMPORTING
VALUE(IP_MANDT) type MARA-MANDT
VALUE(IP_MATNR) type MARA-MATNR
VALUE(IP_SPRAS) type MAKT-SPRAS DEFAULT 'I'
EXPORTING
VALUE(ET_MARA) type ZTT_MARA.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_amdp_mara IMPLEMENTATION.
METHOD get_data_from_mara
BY DATABASE PROCEDURE
FOR HDB LANGUAGE SQLSCRIPT
OPTIONS READ-ONLY
USING MARA MAKT.
* Dichiarazione variabile
DECLARE lv_test NVARCHAR( 5 );
lv_test
:= '->';
* LEGGO I DATI DALLA TABELLA MARA e MAKT
ET_MARA =
SELECT T1.MATNR,
T1.MATKL,
( :lv_test || T2.MAKTX) AS MAKTX,
T2.SPRAS
FROM MARA AS T1
INNER JOIN MAKT AS T2
ON T2.MANDT = T1.MANDT AND
T2.MATNR = T1.MATNR
WHERE T2.SPRAS = :IP_SPRAS
and T1.MANDT = :IP_MANDT
and T1.MATNR = :IP_MATNR;
ENDMETHOD.
ENDCLASS.
Salviamo e attiviamo.
NOTE:
All'interno del metodo AMDP, recupereremo i dati da MARA
e MAKT (dichiarati in precedenza all'istruzione USING) con le condizioni
specifiche che sono passate prima per parametro nella definizione della classe,
NCHAR( 32 ) come uno spazio
nei caratteri ASCII. Voglio concatenare il codice materiale e la descrizione
del materiale e separarli tra due valori per spazio, quindi userò NCHAR( 32 )
Poiché AMDP non può gestire il client, quindi è
necessario passare il valore MANDT alla clausola where per ottenere esattamente
il valore in questo sistema
Se vuoi creare una variabile all'interno del metodo AMDP,
puoi usare DECLARE per creare. All'interno di AMDP, puoi creare sia il
tipo SQL che il tipo in SAP.
Usando la funzione integrata LTRIM, rimuoverò lo
zero iniziale prima del codice materiale (se presente)
Quindi, controlla la sintassi e attiva questa classe/metodo. Quindi, puoi richiamarlo
nel programma ABAP
3.
Sviluppare un report ABAP per utilizzare il metodo AMDP
Crea il report utilizzando lo strumento Eclipse.
Innanzitutto, dobbiamo fare clic con il pulsante destro del mouse su un
Package -> New -> Other ABAP Repository Object.
Nella pop-up successiva, selezionare ABAP Program .
Inserire il nome del programma (ad esempio: ZPRG_USING_AMDP) e la
descrizione. quindi fare clic su Avanti
Crea una nuova richiesta di trasporto e compila il campo della descrizione (se hai già TR, magari usalo). Quindi, fai clic su Avanti
Fare clic su Fine per completare questo processo e abbiamo creato la classe con successo.
In questo programma. Dobbiamo verificare che il sistema soddisfi i requisiti o meno, utilizzando la classe CL_ABAP_DB_FEATURES. Se non controlli, il sistema potrebbe rilevare problemi.
Dopo il controllo, chiamerai il tuo metodo AMDP e passerai i parametri corrispondenti (controlla il materiale nel tuo sistema e ottieni del codice materiale per passare questo metodo).
Utilizzo della classe CL_DEMO_OUTPUT per visualizzare il risultato
sullo schermo.
Modifichiamo il nostro report in questo modo:
*&---------------------------------------------------------------------*
*& Report zprg_using_amdp
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zprg_using_amdp.
TABLES: MARA.
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN SKIP 1.
PARAMETERS: P_MATNR TYPE MARA-MATNR OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK blk1.
data: GT_MARA type ZTT_MARA.
START-OF-SELECTION.
FREE: GT_MARA[].
IF NOT CL_ABAP_DBFEATURES=>use_features(
EXPORTING
REQUESTED_FEATURES =
VALUE #(
( CL_ABAP_DBFEATURES=>CALL_AMDP_METHOD )
( CL_ABAP_DBFEATURES=>AMDP_TABLE_FUNCTION )
)
).
CL_DEMO_OUTPUT=>DISPLAY( 'SYSTEM DOES
NOT SUPPORT AMDP. PLEASE USE ANOTHER WAYS' ).
ELSE.
ZCL_AMDP_MARA=>GET_DATA_FROM_MARA(
EXPORTING
IP_MANDT = SY-MANDT
IP_MATNR = P_MATNR
IP_SPRAS = 'I'
IMPORTING
ET_MARA = GT_MARA
).
CL_DEMO_OUTPUT=>DISPLAY_DATA(
EXPORTING
VALUE = GT_MARA[]
).
ENDIF.
Esegui il programma
Questo è il risultato
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
>>> RECENSIONI DEI LIBRI su Amazon Kindle <<<
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Nessun commento:
Posta un commento