Integrare SAP, lo sappiamo tutti, non è cosa facile, credo che questa piccola guida possa essere utile non solo a chi lavora su BizTalk ma a qualsiasi persona abbia a che vedere con questo “mostro”.
La prima volta che mi sono ritrovato ad integrare SAP ho incontrato difficoltà enormi legate alla mancanza di conoscenza della piattaforma.
A parte la semplice installazione del SAP .Net Connector 1.0.3 e del relativo MySAP Adapter 2.0 di BizTalk il resto, lato Bizzy si riassume nell’impostare sei semplici parametri sulla porta:
Client
Un numero di tre cifre, solitamente 000 oppure 100 ecc..
Language
EN di default
System
L’indirizzo del server SAP
System ID
Un numero di due cifre, solitamente 00
Password
beh...
Username
ribeh..
Successivamente importare lo schema richiamando l’ “Ad Generated Items” e relativo “Ad Adapter Metadata” e ricercando la relativa RFC, BAPI o IDOC del caso ed il gioco è fatto.
Entrando nel discorso “BizTalk Pattern” , può essere interessante l’impostazione di una porta dinamica verso SAP.
Quando dico BizTalk Pattern rido perchè mi ricorda un caro amico con il quale ebbi una discussione per definire se fosse più corretto parlare di BizTalk Design Pattern o BizTalk Implementation Pattern .
Beh caro Janky ho riflettuto molto sulla cosa, direi mesi, e credo si debba parlare esclusivamente di BizTalk Pattern, in un futuro articolo spiegherò il perchè, promesso.
Tornando all' esempio e supponendo che la porta si chiami MiaPortadiSend e il messaggio da inviare MessaggioPerSAP, ecco un esempio pratico:
Nell’ expression shape di BizTalk scriveremo:
MiaPortadiSend(Microsoft.XLANGs.BaseTypes.Address) = "sap://AS:SERVERSAP/00/100/"
e nel construct message:
MessaggioPerSAP(SAPSend.Password) = "username"
MessaggioPerSAP(SAPSend.UserName) = "password"
MessaggioPerSAP(SAPSend.Language) = "EN"
Questo post/articolo, vuole però concentrarsi sull’ aspetto che più mi ha causato problemi nella mia ormai passata esperienza nell’iniziare a lavorare verso SAP, come interagire con lui.
Spesso e volentieri ci ritroviamo a dover controllare, effettuare test ed altro ancora, per verificare se su SAP tutto funziona.
Per attuare questi controlli è necessario eseguire le corrette “transazioni” di SAP, e ormai trovare un SAPpista è diventato più difficile che reperire un idraulico, i SAPpisti sono molto verticali nelle loro specializzazioni e spesso ci ritroviamo a non avere a disposizione la competenza necessaria per eseguire i tests e le impostazioni del caso su SAP.
Questa è la mia lista delle transazioni più importanti di SAP legate alle classiche problematiche di integrazione che possiamo normalmente incontrare con BizTalk.
SM59
Per creare e gestire le connessioni di SAP verso il mondo esterno e non solo, chiaramente l’aspetto che interessa principalmente a noi e quello delle porte TCPIP per pubblicare RFC,BAPI e IDOC.
BD64
Se le connessioni definite per BizTalk con la SM59 sono corrette questa transazione non deve ritornare errori, in caso contrario ci segnala eventuali malfunzionamenti e impostazioni non corrette.
Il classico errore è “Local logical system is not defined”
Alla BD64 sono solitamente legate altre trasactions,
BD54
Nel caso si incappi nel classico errore “Local logical system is not defined” ecco quale transazione eseguire per definirlo.
SCC4
Questa transazione per assegnare il logical system al client
SALE
Per verificare il Logical System
WE20
Per gestire i partners, il discorso è legato al Logical System.
WE21
Per gestire le porte e assegnarle alle RFC di competenza
WE19
Questa transazione ci permette di controllare tutti gli IDOC pervenuti in SAP, è un test tool.
WE02
Questa transaction per gli IDOC è vitale, a differenza della WE19 che ci visulaizza tutti gli IDOC la WE02 ci permette di vedere solo gli ultimi arrivati in SAP.
In aggiunta è possibile controllare quelli non corretti perchè accompagnati da un flag rosso.
Click sul flag e ci vengono segnalati i possibili errori, solitamente legati a validazione sia sintattica che semantica.
La validazione sintattica è legata al nostro schema xsd ma quella semantica è controllabile solo da questa transazione.
SQ01
In SAP è possibile eseguire delle query (Report di SAP), con questa transazione è possibile crearle e lanciarle.
BAPI
Ci permette di vedere tutta la lista delle BAPI presenti in SAP, non solo, una volta che abbiamo questa lista è possibile visualizzarne il codice i parametri ecc..
SE37
Transaction importantissima, spesso ci ritroviamo a chiederci:
“ma funziona questa BAPI o sto sbagliando qualcosa?”
Ecco che la SE37 ci permette di eseguire e provare una chiamata BAPI.
SE38
Per eseguire un programma SAP
Chiamata BAPI - SUBST_START_REPORT
Per eseguire una query (Report) su SAP
RFC_READ_TABLE
Permette di leggere una tabella SAP, la struttura in OUT è divisa in due parti, una contiene tutti i nomi dei campi della tabella e l’altra i dati.
Trovo molto interessante la possibilità di ricavare i dati direttamente dalla sorgente, devo però dire che la loro successiva normalizzazione in uno schema è un pò difficoltosa.
RFC_READ_REPORT
Esegue una query (Report) su SAP.
RFC_FUNCTION_SEARCH
Può capitare di avere qualche problema legato alle ricerche del wizard dell’ adapter BizTalk in Visual Studio, spesso legato a impostazioni di sicurezza sull’ account utilizzato per loggarsi a SAP.
La RFC_FUNCTION_SEARCH è appunto la RFC che viene utilizzata dal wizard per cercare le RFC in SAP.
Queste che vi ho segnalato sono le principali e quelle che io personalmente mi ritrovo spesso ad utilizzare, se si desidera consultare tutte le transactions vi consiglio questo sito.
http://www.saptutorials.com
Ci sono molti siti che elencano le transactions di SAP ma questo ha alcune particolarità che trovo interessanti, è semplice, immediato, forse le transactions sono poco documentate ma vista la vastità...
Cosa importante ha un motore di ricerca e vi assicuro che è raro a trovarsi.
Spero che questo post possa aiutare qualcuno.
Lo avessi trovato io, un post del genere a suo tempo...