Cerca nel blog

martedì 26 settembre 2023

Creazione Servizio Odata mediante FUNCTION IMPORT

Creazione Servizio Odata mediante FUNCTION IMPORT

Le Function Import vengono usate per operazioni personalizzate che non possono essere richiamate utilizzando un’operazione standard (CRUD)

Richiamare la transazione SEGW, creare un nuovo Progetto, premendo il pulsante NEW:

Sulla cartella Data model, tasto dx, selezionare Import ->RFC/BOR Interface


Inserire un nome per il Function Import Name

In questo caso, sotto la cartella Function Import viene creato il nostro GetUser

Ora alla nostra GetUser dobbiamo associare la nostra Entity, quindi adesso ci creiamo la nostra Entity partendo dalla Bapi BAPI_USER_GET_DETAIL che useremo successivamente.

Sulla cartella Data model, tasto dx, selezionare Import ->RFC/BOR Interface


Inserire il nome della Entity, se il gateway è presente sulla stessa macchina, selezionare LOCAL, altrimenti Remote.

Selezionare il type “Remote Funcion Call”, ed inserire il nome della BAPI da usare. In questo caso non selezionare l’Entity Set che non useremo.

Selezioniamo i campi che vogliamo restituire al servizio in questo campo quelli che ho evidenziato:

Indichiamo il campo chiave.

Adesso alla nostra Function Import, GetUser, associamo la Entity Type creata precedentemente, indichiamo come “Return Type Kind” l’Entity Type, come “Return Type” la nostra Function Import, come “Return Cardinality” 0..1 ed infine come “HTTP Method Type” il metodo GET, e SALVIAMO

Poi facciamo doppio click sulla cartella Function Import Parameters, evidenziato in rosa, per inserire dei parameti di input, salviamo e attiviamo e si creano come al solito le classi associate al servizio.

Registriamo il servizio richiamando il servizio /n/IWFND/MAINT_SERVICE

Premiamo il pulsante Aggiungere servizio

Inserire l’Alias e il nome del nostro servizio, battere invio, selezionarlo e premere “Aggiungere servizio selezionati”

Ritornare nella lista dei servizi e vedere se vediamo il servizio creato

A questo punto eseguiamo la transazione /n/IWFND/GW_CLIENT per usufruire del servizio creato

Richiamando la seguente URL

/sap/opu/odata/sap/ZFUNC_IMPORT_SRV/GetUser?User_Id='SLANZETTA'

Vediamo che ci restituisce il seguente messaggio di errore “Non è stato implementato il metodo EXECUTE_ACTION”


Quindi adesso ridefiniamo il metodo EXECUTE_ACTION, e per far ciò, facciamo doppio click sulla classe ZCL_ZFUNC_IMPORT_DPC_EXT

Aprire la cartella /IWBEP/IF_MGW_APPL_SRV_RUNTIME, selezionare il metodo EXECUTE_ACTION, tasto dx e scegliere Ridefinire


Scriviamo il seguente codice:

 METHOD /iwbep/if_mgw_appl_srv_runtime~execute_action.


    
DATAlv_function_name TYPE /iwbep/mgw_tech_name,
          Lt_bapiret2      
TYPE STANDARD TABLE OF bapiret2,
          Ls_entity        
TYPE ZCL_ZFUNC_IMPORT_MPC_EXT=>ts_user,
          Ls_bapiaddr3     
TYPE bapiaddr3,
          Lv_uname         
TYPE sy-uname,
          Ls_parameter     
LIKE LINE OF it_parameter.

    lv_function_name 
io_tech_request_context->get_function_import_name( ).

    
IF lv_function_name 'GetUser'.

      
READ TABLE it_parameter INDEX INTO ls_parameter.
      
IF sy-subrc 0.
        Lv_uname 
ls_parameter-value.
        
TRANSLATE lv_uname TO UPPER CASE.
        
CALL FUNCTION 'BAPI_USER_GET_DETAIL'
          
EXPORTING
            Username 
lv_uname
          
IMPORTING
            Address  
ls_bapiaddr3
          
TABLES
            
Return   lt_bapiret2.

        
MOVE-CORRESPONDING ls_bapiaddr3 TO ls_entity.

        copy_data_to_ref
(
        
EXPORTING
        is_data 
ls_entity
        
CHANGING
        cr_data 
er_data
        
).

      
ENDIF.
    
ENDIF.

  
ENDMETHOD.

A questo punto, rieseguiamo la transazione /n/IWFND/GW_CLIENT per usufruire del servizio creato

Richiamando la seguente URL

/sap/opu/odata/sap/ZFUNC_IMPORT_SRV/GetUser?User_Id='SLANZETTA'

Otteniamo il seguente risultato:






giovedì 7 settembre 2023

Creazione Servizio Odata mediante BAPI

Creazione Servizio Odata mediante BAPI


Richiamare la transazione SEGW, creare un nuovo Progetto, premendo il pulsante NEW:

Sulla cartella Data model, tasto dx, selezionare Import ->RFC/BOR Interface

Inserire il nome della Entity, se il gateway è presente sulla stessa macchina, selezionare LOCAL, altrimenti Remote.

Selezionare il type “Remote Funcion Call”, ed inserire il nome della BAPI da usare


Come Entity selezionerei solo la tabella di output SALES_ORDERS, quindi premendo il pulsante NEXT, seleziono SALES_ORDERS con tutti i campi (e possible anche selezionare solo alucni campi di questa tabella)

Indico la Key “Doc number” e premo il pulsante Finish.

Premo il pulsante “Generate Runtime Objects”. In questo modo vengono generate le classi associate al nostro Odata.

Nella cartella Entity Types -> SalesOrder -> Properties, settiamo il flag NULL, per tutte quelle properties che ha il tipo Edm.DateTime e Edm.Time


Nella Cartella Service Implementation -> SalesOrderSet -> GetEntitySet (Query) tasto dx, seleziono “Map to Data Source



Nella schemata successiva far il mapping dei campi della Entity con i campi della Bapi, premendo il pulsante “Propose Mapping”.


Cancello i campi doppi che non sono mappati con la struttura SALES_ORDES, tipo il materiale  e materialLong

Inserisco i campi di input obbligatori della BAPI: SoldTo e SalesOrg


Premo il pulsante “Generate Runtime Objects”.

Se andiamo a vedere il  metodo SALESORDERSSET_GET_ENTITYSET della classe ZCL_ZBAPI_SALES_ORD_01_DPC_EXT, vediamo che è stato scritto tutto il codice con il richiamo alla bapi

Registriamo il servizio richiamando il servizio /n/IWFND/MAINT_SERVICE

Premiamo il pulsante Aggiungere servizio

Inserire l’Alias e il nome del nostro servizio, battere invio, selezionarlo e premere “Aggiungere servizio selezionati”


Ritornare nella lista dei servizi e vedere se vediamo il servizio creato


A questo punto eseguiamo la transazione /n/IWFND/GW_CLIENT per usufruire del servizio creato

/sap/opu/odata/sap/ZBAPI_SALES_ORDER_PRJ_SRV_02/SalesOrdersSet?$filter=SalesOrg eq 'Z233' and SoldTo eq '23100001'&$format=json

Estrae i dati

Chiamata con TOP e SKIP

Top3 = significa che ci estrae I primi 3 record

/sap/opu/odata/sap/ZBAPI_SALES_ORDER_PRJ_SRV_02/SalesOrdersSet?$filter=SalesOrg eq '2310' and SoldTo eq '23100001'&$top=3&$format=json

Skip1 = significa non estrae il primo record

/sap/opu/odata/sap/ZBAPI_SALES_ORDER_PRJ_SRV_02/SalesOrdersSet?$filter=SalesOrg eq '2310' and SoldTo eq '23100001'&$skip=1&$format=json

Possiamo usare insieme sia Skip che Top ad esempio

/sap/opu/odata/sap/ZBAPI_SALES_ORDER_PRJ_SRV_02/SalesOrdersSet?$filter=SalesOrg eq '2310' and SoldTo eq '23100001'&$top=3&$skip=1&$format=json

 In questo caso estriamo non consideriamo il primo record ed estraiamo I successivi 3 record