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:






2 commenti:

  1. Nice, ho sempre usato le varie crud riadattate a call function, interessante.

    RispondiElimina
  2. Ottima Guida! Grazie mille per la sua professionalità

    RispondiElimina