Integrazione di SAP utilizzando gli IDoc Snaps SAP (Parte 3/4)

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

La terza parte della serie sull'integrazione di SAP utilizzando gli Snap IDoc SAP tratterà l'IDoc Listener e l'IDoc Document Listener Snap e accennerà all'IDoc Read Snap SAP. Rivisiteremo i prerequisiti già discussi nella prima parte della serie, vi mostreremo dove configurare la connessione all'interno del SAP Gateway, la testeremo e vi forniremo una panoramica delle varie transazioni all'interno di SAP che consentono di inviare IDoc. Infine, utilizzeremo nuovamente lo Snap IDoc Write per inviare uno stato IDoc utilizzato dal sistema SAP per modificare lo stato di un IDoc che abbiamo inizialmente ricevuto tramite gli Snap IDoc Listener. Lo stato IDoc ci consentirà di integrarci con i sistemi di monitoraggio per IDoc all'interno del sistema SAP e di segnalare i successi o i fallimenti a SAP.

Riesame dei prerequisiti per l'utilizzo degli snap IDoc Listener

Abbiamo già discusso i requisiti nella parte 1 della serie, ma desideriamo ricordarli brevemente a tutti. Entrambe le parti, ovvero l'aggiunta dei nomi dei servizi al file /etc/services su ogni nodo del Groundplex e la verifica che gli elenchi di controllo degli accessi sul gateway SAP consentano al GroundPlex di connettersi al gateway SAP, sono essenziali per il funzionamento sia dello Snap IDoc Listener che dello Snap IDoc Document Listener. Si prega di consultare lasezione Prerequisiti per IDoc Listener e IDoc Document Listener Snapdella parte 1 della serie.

Comprendere gli snap IDoc Listener e Document Listener

Uno dei due SAP IDoc Listener Snap ascolta gli IDoc in arrivo registrandosi al SAP Gateway. Ciò significa che le pipeline create con gli Snap non termineranno, ma continueranno a funzionare fino a quando un utente non le interromperà. Per registrarsi al gateway, è necessario specificare il Gateway Host, servizio gateway (che corrisponde alla porta su cui è in esecuzione il gateway) e un ID programma che identifica in modo univoco lo Snap sul gateway SAP. Se il sistema SAP si trova dietro un router SAP, è necessario specificare anche la stringa del router SAP. Il team che gestisce i sistemi SAP può fornire l'host, il nome del servizio gateway e la stringa del router SAP e definire un nome univoco da utilizzare come ID programma per lo Snap.

Sebbene ogni sistema SAP disponga di un gateway integrato, è anche possibile configurare un gateway autonomo vicino ai nodi Groundplex. I gateway autonomi SAP vengono solitamente utilizzati in configurazioni ad alta disponibilità in cui un sistema SAP si connette a un'applicazione di terze parti come Snaps.

Screenshot 2024-05-28 alle 17:30:40.png

Sul lato SAP è necessario utilizzare la transazione SM59 per creare una destinazione RFC che verrà utilizzata dal livello SAP ALE per inviare dati allo Snap nella pipeline. La destinazione RFC deve essere di tipo T - Connessione TCP/IP e utilizzare un programma server registrato con lo stesso ID programma specificato nelle impostazioni dello Snap.

Screenshot 2024-05-29 alle 9:52:31.png

Quando si esegue la pipeline e si accede alla Dashboard, è possibile visualizzarne l'esecuzione. È possibile utilizzare lo Stato per aprire le Statistiche di esecuzione della pipeline e il numero di Documenti per verificare che gli IDoc vengano inviati dal sistema SAP alla pipeline.

Screenshot 2024-05-28 alle 16:18:49.png

Una volta avviata la pipeline, è possibile utilizzare il pulsante Test connessione nella transazione SM59 per verificare la connessione e visualizzare la connessione registrata nella transazione SMGW. L'ID programma è visibile utilizzando la voce di menu Vai -> Client connessi in SMGW. 

Screenshot 2024-05-29 alle 13:43:39.png
Screenshot 2024-05-29 alle 13:43:49.png

Un suggerimento su come recuperare la struttura IDoc dallo Snap IDoc Listener

Poiché lo Snap IDoc Listener è in grado di ricevere qualsiasi IDoc dal sistema SAP e inoltrarlo in formato binario, la creazione di pipeline a valle dipenderà dalla vostra comprensione della struttura degli IDoc. Un trucco che utilizziamo spesso per comprendere la struttura degli IDoc consiste nell'allegare uno Snap HTTP Client con un input binario direttamente all'output dello Snap SAP IDoc Listener e inoltrare il contenuto a un servizio API mock che visualizza la richiesta ricevuta.

Screenshot 2024-05-28 alle 16:19:50.png

In questo modo, otterrai il documento XML riportato di seguito per l'IDoc demo che utilizziamo in tutta la serie di blog. Puoi quindi utilizzare queste informazioni per creare la tua pipeline. 

<?xml version="1.1"?>
<ZPERSON01>
	<IDOC BEGIN="1">
		<EDI_DC40 SEGMENT="1">
			<TABNAM>EDI_DC40</TABNAM>
			<MANDT>001</MANDT>
			<DOCNUM>0000000000007004</DOCNUM>
			<DOCREL>754</DOCREL>
			<STATUS>30</STATUS>
			<DIRECT>1</DIRECT>
			<OUTMOD>2</OUTMOD>
			<IDOCTYP>ZPERSON01</IDOCTYP>
			<MESTYP>ZPERSONDATA</MESTYP>
			<SNDPOR>SAPA4H</SNDPOR>
			<SNDPRT>LS</SNDPRT>
			<SNDPRN>A4HCLNT001</SNDPRN>
			<RCVPOR>A000000002</RCVPOR>
			<RCVPRT>LS</RCVPRT>
			<RCVPRN>SNPCLNT000</RCVPRN>
			<CREDAT>20240528</CREDAT>
			<CRETIM>231206</CRETIM>
			<SERIAL>20240528231206</SERIAL>
		</EDI_DC40>
		<ZPERSONDATA01 SEGMENT="1">
			<FIRSTNAME>Elmo</FIRSTNAME>
			<LASTNAME>Monster</LASTNAME>
			<TITLE>Monster</TITLE>
			<GENDER>male</GENDER>
			<STREET>123 Sesame Street</STREET>
			<CITY>New York City</CITY>
			<ZIP>10023</ZIP>
			<COUNTRY>United States</COUNTRY>
			<EMAIL>[email protected]</EMAIL>
			<PHONE>+12125953456</PHONE>
		</ZPERSONDATA01>
	</IDOC>
</ZPERSON01>

Il listener di documenti IDoc SAP Snap

Oltre allo Snap IDoc Listener, lo Snap IDoc Document Listener consente di specificare il tipo di base IDoc nella scheda Impostazioni dello Snap. In questo modo, lo Snap potrà recuperare la struttura IDoc durante la convalida dal sistema SAP e consentirà di utilizzarla in uno Snap a valle, come uno Snap Mapper. Se si intende ricevere un solo tipo di IDoc di base nella pipeline, ciò è molto utile poiché gli IDoc SAP standard sono in genere molto grandi e contengono molti segmenti. La possibilità di ottenere la struttura trasmessa semplifica notevolmente la configurazione della pipeline. Tuttavia, lo Snap IDoc Document Listener non accetta e non elabora molto bene tipi di IDoc di base diversi rispetto allo Snap IDoc Listener.

Screenshot 2024-05-28 alle 17:09:25.png

La pipeline sap-idoc-document-listener-to-http allegata utilizza lo Snap IDoc Document Listener e mappa semplicemente l'output a uno Snap HTTP Client configurato per inviare l'IDoc a un endpoint HTTP. 

Screenshot 2024-05-28 alle 17:19:22.png

Dopo aver convalidato la pipeline, è possibile visualizzare la struttura a valle dell'IDOC nella finestra Mapper Snap e utilizzarla per effettuare la mappatura necessaria.

Screenshot 2024-05-28 alle 16:33:45.png

L'endpoint HTTP utilizzato in questo Snap riceverebbe un documento JSON nel corpo della richiesta HTTP POST che avrebbe un aspetto simile alla struttura JSON riportata di seguito.

{
   "IDOC":{
      "@BEGIN":"1",
      "EDI_DC40":{
         "@SEGMENT":"1",
         "TABNAM":"EDI_DC40",
         "MANDT":"001",
         "DOCNUM":"0000000000007020",
         "DOCREL":"754",
         "STATUS":"30",
         "DIRECT":"1",
         "OUTMOD":"2",
         "IDOCTYP":"ZPERSON01",
         "MESTYP":"ZPERSONDATA",
         "SNDPOR":"SAPA4H",
         "SNDPRT":"LS",
         "SNDPRN":"A4HCLNT001",
         "RCVPOR":"A000000002",
         "RCVPRT":"LS",
         "RCVPRN":"SNPCLNT000",
         "CREDAT":"20240529",
         "CRETIM":"002032",
         "SERIAL":"20240529002032"
      },
      "ZPERSONDATA01":{
         "@SEGMENT":"1",
         "FIRSTNAME":"Elmo",
         "LASTNAME":"Monster",
         "TITLE":"Monster",
         "GENDER":"male",
         "STREET":"123 Sesame Street",
         "CITY":"New York City",
         "ZIP":"10023",
         "COUNTRY":"United States",
         "EMAIL":"[email protected]",
         "PHONE":"+12125953456"
      }
   }
}

Abilitazione dei file di traccia

Tutti gli Snap SAP che utilizzano la libreria SAP JCo consentono di abilitare la traccia SAP JCo selezionando la casella di controllo in Abilita traccia nella configurazione. Ciò è mostrato nella schermata di configurazione dello Snap IDoc Listener sopra riportato. Una volta abilitato, SAP JCo scriverà un file di traccia per la comunicazione tra il sistema SAP e GroundPlex in /opt/snaplogic sul nodo che esegue la connessione. I file iniziano con JCO e terminano con .trc. È possibile configurare il livello nella connessione utilizzando il parametro di configurazione jco.trace_level con un valore compreso tra 0 e 10. 

Screenshot 2024-05-28 alle 16:49:35.png

Cosa posso fare con IDoc Read Snap?

ConIDoc Read Snap è possibile leggere un IDoc esistente nelle pipeline Snaplogic. Ciò può essere utile se si creano pipeline che generano IDoc configurati in SAP che non devono essere elaborati immediatamente, ma tramite un processo in background pianificato che verrà eseguito in un secondo momento. In tal caso, se l'IDoc viene creato correttamente, riceverà il codice di stato64 - IDoc pronto per essere trasferito all'applicazione subito dopo la creazione dell'IDoc. È quindi possibile creare una seconda pipeline che potrebbe essere eseguita periodicamente per verificare se lo stato è cambiato in SAP e se è stata eseguita un'ulteriore elaborazione dei dati. È anche possibile utilizzare lo Snap di lettura IDoc per recuperare tutti gli stati che un IDoc ha superato e i timestamp relativi al momento in cui sono avvenute le modifiche. Questi sono contenuti nel campoSTATUSdegli oggetti nell'arrayINT_EDIDS, come mostrato di seguito. L'oggettoIDOC_CONTROLinclude anche un campoSTATUScon lo stato corrente al momento della scrittura identico all'ultimo oggetto nell'arrayINT_EDIDS.

Screenshot 2024-05-28 alle 15:35:07.png

Ottimizzazione del modulo funzionale che legge l'IDOC in SAP

Ottimizzando il modulo funzione standard IDOC_READ_COMPLETELY, che abbiamo utilizzato come base per la nostra versione personalizzata abilitata per RFC nella parte 1 di questo blog, è possibile migliorare significativamente le prestazioni. Ciò è possibile modificando il modulo funzione in modo che restituisca solo il record di controllo ed escludendo i record di dati e/o di stato. In questo modo è possibile creare tre moduli funzione distinti che possono essere utilizzati in modo intercambiabile negli snap IDoc Read e IDoc Write, a seconda delle informazioni specifiche necessarie dal sistema SAP. I tre moduli funzione possono utilizzare lo stesso codice ABAP, ma differiscono solo per il nome e la selezione delle tabelle (vedere l'esempio riportato di seguito).

* read data records - if requested
  IF INT_EDIDD IS REQUESTED.
  ...
  ENDIF.
* read status_records - if requested
  IF INT_EDIDS IS REQUESTED.
  ...
  ENDIF

A tal fine, rimuovere una o entrambe le tabelle mostrate nella schermata sottostante dal modulo funzione e dall'interfaccia che richiama il modulo funzione IDOC_READ_COMPLETELY all'interno del modulo. Ad esempio, è possibile creare questi tre moduli funzione.

  1. ZIDOC_READ_COMPLETELY (include tutto proprio come IDOC_READ_COMPLETELY)
  2. ZIDOC_READ_COMPLETELY_C (non include tabelle, viene restituita solo la struttura di controllo)
  3. ZIDOC_READ_COMPLETELY_CS (include la struttura di controllo e la tabellaINT_EDIDS )
Screenshot 2024-05-29 alle 14:33:30.png

Invio delle informazioni sullo stato a SAP per un IDoc esistente

Nell'ultima parte del blog, chiuderemo il cerchio con l'elaborazione degli IDoc esaminando la modifica dello stato di un IDoc creato in SAP da una pipeline SnapLogic. Una volta che un IDoc è stato trasferito con successo a una pipeline SnapLogic, il sistema SAP modifica lo stato dell'IDoc da stato 30 - IDoc pronto per la spedizione03 - Dati IDoc trasferiti alla porta OK. Dal punto di vista di SAP, ciò significa che il sistema SAP ha trasferito con successo l'IDoc al partner configurato per riceverlo. A quel punto, il sistema SAP non è a conoscenza di ciò che è successo all'IDoc. Se si utilizza il monitoraggio degli IDoc, gli strumenti utilizzati non sarebbero mai in grado di dire cosa è successo ai dati inviati tramite l'IDoc. Lasciare gli IDoc nello stato 03 è quindi tipicamente uno stato insoddisfacente, poiché naturalmente si vorrebbe capire se i dati hanno raggiunto con successo la loro destinazione o se qualcosa è andato storto lungo il percorso, per poter eventualmente attivare avvisi o intraprendere altre azioni per risolvere le informazioni mancanti.

Per modificare lo stato dell'IDoc in SAP è necessario inviare al sistema SAP un IDocSYSTAT01 di tipo STATUS appena creato.

Screenshot 2024-05-28 alle 14:35:14.png

Di seguito abbiamo allegato un esempio di pipeline che riceve il nostro IDoc ZPERSON01 utilizzato in tutto il blog, scrive il contenuto su un server MSSQL e poi continua a costruire un nuovo IDoc SYSSTAT01 contenente il codice di stato 12 - Spedizione OKse la scrittura sul database ha avuto esito positivo e 11 - Errore durante la spedizione se ha avuto esito negativo.

Screenshot 2024-05-28 alle 14:59:48.png

Il JSON riportato di seguito contiene i campi rilevanti per la modifica dello stato dell'IDoc, quali il DOCNUM contenente il numero dell'IDoc di cui modificare lo STATUS, le informazioni testuali nel campo STATXT, nonché la data e l'ora in cui è stata effettuata la modifica.

{
  "EDI_DC40": {
    "MESTYP" : "STATUS",
    "SNDPRT" : "LS",
    "SNDPRN" : "SNPCLNT000",
    "SNDPOR" : "A000000002",
    "RCVPRT" : "LS",
    "RCVPRN" : "A4HCLNT001"
  },
  "E1STATS": [
    {
      "DOCNUM": "1009",
      "STATUS": "12",
      "STATXT": "Message Processessed Successfully in Snaplogic",
      "STAPA4": "status",
      "LOGDAT": "20240307",
      "LOGTIM": "000000"
    }
  ]
}

Per ricevere correttamente il tipo di messaggio, la configurazione ALE in SAP deve contenere lo STATUS come tipo di messaggio in entrata elaborato dal codice di processo STA1, come mostrato nella transazione WE20 di seguito.

Screenshot 2024-05-28 alle 14:54:48.png

Nell' ultima parte della nostra serie di blog dedicata agli Snap IDoc SAP, vedremo come proteggere la comunicazione tra SAP e SnapLogic configurando Secure Network Communication (SNC). Questa configurazione non fa tecnicamente parte dell'elaborazione IDoc, ma viene utilizzata da qualsiasi Snap SAP che comunica con il sistema SAP tramite le librerie SAP JCo. È rilevante anche per gli Snap SAP che eseguono RFC, come SAP Execute e SAP RFC Listener.

Foto di Ingo Sauerzapf
Architetto senior dei servizi professionali presso SnapLogic
Categoria: Tecnica