Come leggere le tabelle SAP con il metodo RFC

Foto di Ingo Sauerzapf
5 lettura minima
Riassumere questo con l'AI

In passato, leggere direttamente dalle tabelle del sistema SAP ERP era impossibile, non dal punto di vista tecnico, ma a causa delle restrizioni di licenza. Oggi vedo sempre più clienti SAP che dispongono di una licenza per accedere al database del proprio sistema S/4HANA. Tuttavia, uno dei motivi per cui SAP non lo consentiva in passato rimane: semplicemente non ci sono tipi di dati disponibili, poiché risiedono in quello che SAP chiama Data Dictionary o DDIC in breve. 

Se si passa attraverso il livello applicativo per leggere la tabella, si ottengono i tipi di dati attraverso il runtime ABAP e una delle opzioni disponibili è quindi quella di utilizzare i moduli SAP Remote Function Call. Detto questo, questo blog non tratta della ricerca del modulo funzionale abilitato RFC adatto alla lettura delle tabelle, ma piuttosto del vasto potenziale delle espressioni SnapLogics, che è possibile utilizzare in quasi tutti i campi di input di qualsiasi Snap, compreso l'output di SAP RFC. Quindi, entriamo nel vivo e vediamo cosa può fare per voi.

Prerequisiti

RFC Execute Snap può essere eseguito solo su SnapLogic Groundplexes; richiede SAPs JCo e librerie native. L'installazione Linux del nostro Groundplex include tutte le librerie e non richiede alcuna configurazione aggiuntiva, mentre la versione Windows no. Affinché RFC funzioni su un Groundplex basato su Windows, è necessario scaricare JCo da SAP, installare il pacchetto ridistribuibile Windows 2013 e aggiungere la cartella che contiene la libreria nativa SAP JCo alla variabile PATH di Windows, come descritto nella nostra documentazione.
La configurazione di un account per SAP Snaps è semplice. Può essere eseguita direttamente su un server applicativo o tramite l'istanza centrale.

Chiamata del modulo funzione RFC

La lettura di una tabella SAP con il metodo RFC richiede un modulo funzione abilitato per RFC sul lato SAP e lo Snap SAP Execute in SnapLogic. Sono certo che altri moduli funzione possano leggere direttamente una tabella specifica, ma in questo blog vorrei concentrarmi su RFC_READ_TABLE. Questo modulo funzione abilitato per RFC consente di specificare la tabella che si desidera leggere dall'esterno, inclusa una clausola WHERE, se si sceglie di utilizzarla. Il modulo funzione esiste da molti decenni ed è utilizzato da numerosi progetti presso i clienti SAP. Sebbene presenti alcune limitazioni che vedremo più avanti, ritengo che sia un'opzione da prendere in considerazione piuttosto che scrivere un modulo funzione personalizzato.

Utilizzo dello Snap SAP Execute

La configurazione di SAP Execute Snap è piuttosto semplice, come mostrato nella schermata sottostante; basta specificare RFC_READ_TABLE come modulo funzione da utilizzare e il gioco è fatto.

Screenshot 2024-08-08 alle 9:14:55.png

Idealmente, dovresti posizionare uno Snap Mapper davanti e dietro lo Snap SAP Execute per comprendere il comportamento del modulo funzione.

Screenshot 2024-08-08 alle 9:14:40.png

Una volta convalidata questa pipeline, è possibile utilizzare lo Snap Mapper prima dello Snap SAP Execute per specificare la tabella che si desidera leggere mappando il nome della tabella come stringa al parametro di input QUERY_TABLE. Facoltativamente, l'array di input OPTIONS consente di specificare una clausola WHERE, come mostrato nella schermata seguente.

Screenshot 2024-08-08 alle 9:18:37.png

Convalidando la pipeline una seconda volta, verranno restituiti i dati letti dalla tabella specificata nel campo DATA con tutti i campi raggruppati in un'unica stringa. La restrizione del modulo funzione diventa evidente quando si osserva la definizione di questo campo all'interno della SAP Gui nella transazione SE37. Il campo è di tipo TAB512 e la lunghezza è di 512 caratteri. Ciò significa che le tabelle con una lunghezza combinata di tutti i campi superiore a 512 restituiranno solo parzialmente le informazioni o non le restituiranno affatto.

output.png

La trasformazione di queste stringhe in dati utilizzabili con i tipi corretti può essere ottenuta utilizzando la tabella di output denominata FIELD. Questa tabella contiene le informazioni relative al tipo, alla lunghezza e all'offset utilizzate per suddividere la stringa in singoli campi sfruttando il .map, .toObject, match, parse per int float, date, e le substr in SnapLogics Expressions. Match è utilizzato per trovare il tipo nella tabella di output FIELD, susbstr restituisce la parte della stringa DATA che contiene i dati del campo, parse(Int, Float, Date) analizza la stringa nel rispettivo tipo SnapLogic, .toObject crea un nuovo oggetto con il nome dei campi e il contenuto analizzato e map aggiunge ogni riga a un array nel documento SnapLogic.

$DATA.map(d=> $FIELDS
.toObject(
    f=> f.FIELD NAME
  , f=> match f.TYPE {
      'I' => parseInt(d.WA.substr(f.OFFSET, f.LENGTH))
    , 'N' => parseFloat(d.WA.substr(f.OFFSET, f.LENGTH))
    , 'P' => parseFloat(d.WA.substr(f.OFFSET, f.LENGTH))
    , 'D' => Date.parse(d.WA.substr(f.OFFSET, f.LENGTH), 'yyyyMMdd')
    , _ => d.WA.substr(f.OFFSET, f.LENGTH).trim()
    }
  )
)
Screenshot 2024-08-08 alle 9:20:57.png

Convalidando la pipeline per la terza volta, otterrai un output perfettamente strutturato.

Screenshot 2024-08-09 alle 16:09:13.png
Foto di Ingo Sauerzapf
Architetto senior dei servizi professionali presso SnapLogic
Categoria: Tecnica
All'interno della piattaforma: Approfondimenti tecnici degli esperti SnapLogic

Scoprite SnapLogic in azione con un tour interattivo!

Immagine dimostrativa del tour interattivo