Der folgende Abschnitt zeigt, wie Sie ein MATMAS IDoc empfangen und verarbeiten. Um Ihr SAP-System so konfigurieren, dass es MATMAS-IDocs sendet, folgen Sie der Anleitung im Abschnitt Einrichten einer IDoc-Testumgebung.
Ein MATMAX IDoc empfangen #
- Erstellen Sie ein RFCServer Objekt, um Aufrufe von SAP zu verarbeiten, siehe RFC-Server für weitere Informationen.
- Um IDocs mit dem RFCServer zu empfangen, setzten Sie die Eigenschaft CanReceiveIdocs auf True.
- Wenn ein IDoc von ERPConnect empfangen wird, wird das Ereignis IncomingIdoc getriggert und eine Referenz auf die Objekte RFCServer und IDoc transferriert. Nutzen Sie das Ereignis IncomingIdoc, um das eingehende IDoc zu verarbeiten. ```csharp
static void Main(string[] args) { // define server object and start RFCServer s = new RFCServer(); s.Logging = true; s.GatewayHost = “sap-erp-as05.example.com”; s.GatewayService = “sapgw11”; s.ProgramID = “ERPTEST”; s.CanReceiveIdocs = true; s.IncomingIdoc+= new ERPConnect.RFCServer.OnIncomingIdoc(s_IncomingIdoc); s.InternalException+= new ERPConnect.RFCServer.OnInternalException (s_InternalException); s.Start();
Console.WriteLine("Server is running. Press any key to exit.");
Console.ReadLine();
s.Stop(); } ```
Ein eingehendes IDoc verarbeiten #
In diesem Beispiel enthält das empfangene IDoc u.a. Materialbeschreibungen, die in das Konsolenfenster geschrieben werden können, um den Inhalt des empfangenen IDocs zu prüfen.
Der Inhalt der IDocs kann mit Hilfe des E2MARAM005 Segments analysiert und ausgelesen werden.
Das E2MARAM005 Segment enthält mehrere E2MAKTM001-Segmente, die jeweils einen Kurztext des Materials beinhalten.
Hinweis: Sie können in SAP mit der Transaktion WE60 die Strukturen Ihrer IDocs einsehen.
- Lesen Sie den Datenpuffer mit der Methode ReadDataBuffer aus, um auf die Materialbeschreibungen in E2MAKTM001 zuzugreifen.
Der Text befindet sich an der Stelle 4 und ist 40 Zeichen lang.
private static void s_IncomingIdoc(RFCServer Sender, Idoc idoc) { Console.WriteLine("Received Idoc " + idoc.IDOCTYP); IdocSegment e2maram = idoc.Segments["E2MARAM005",0]; for (int i=0; i < e2maram.ChildSegments.Count;i++) { if (e2maram.ChildSegments[i].SegmentName == "E2MAKTM001") { Console.WriteLine("Materialtext found: " + e1maram.ChildSegments[i].ReadDataBuffer(4,40)); } } }
- Geben Sie alle Texte in der Konsole aus.
- Führen Sie das Programm aus, senden Sie das IDoc in SAP und prüfen Sie das Ergebnis.
In diesem Fall werden 5 E2MAKTM001 Segmente gefunden und somit 5 Teste ausgegeben.
Hinweis: Falls Sie die Texte nicht unter Angabe des Offsets und der Länge direkt auf den Daten-Puffer lesen möchten, können Sie den Datenpuffer alternativ über ein XML-Schema in Felder aufzulösen. Siehe XML für IDocs verwenden für weitere Informationen.