IDocs empfangen Deutsch

From Theobald Software

Revision as of 08:34, 16 January 2009; view current revision
←Older revision | Newer revision→
Jump to: navigation, search

English Version: Receiving an IDoc


Das folgende Beispiel zeigt den Empfang und die Verarbeitung eines MATMAS-Idocs. Wie Sie ihr SAP-System so konfigurieren, dass es MATMAS-Idocs sendet, erfahren Sie hier.

Bei einem Idoc-Server handelt es sich in erster Linie um einen ganz normalen RFC-Server, nur mit dem Unterschied, dass die Eigenschaft CanRecieveIdocs auf true gesetzt werden muss. Darüber hinaus muss das Ereignis IncomingIdoc abgefangen werden. Der folgende Code zeigt die Initialisierungsarbeiten innerhalb der Main-Prozedur bis hin zum Starten des Servers.


[C#]

static void Main(string[] args)
{
 
    // define server object and start
    RFCServer s = new RFCServer();
    s.Logging = true;
    s.GatewayHost = "hamlet";
    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();
}

[VB]

Dim WithEvents s As RFCServer = New RFCServer
 
    Sub Main()
        ' define server object and start
        s.GatewayHost = "hamlet"
        s.GatewayService = "sapgw11"
        s.ProgramID = "ERPCONNECT"
        s.CanReceiveIdocs = True
        s.Start()
 
        Console.WriteLine("Server is running. Press any key to exit.")
        Console.ReadLine()
 
        s.Stop()
 
    End Sub

Tritt das Ereignis IncomingIdoc auf, wird eine Referenz auf das RFCServer-Objekt sowie ein Idoc-Objekt übergeben. Mit Hilfe der Segment-Collection kann nun der Inhalt der Idocs analysiert und ausgelesen werden. Im folgenden Fall besorgen wir uns zunächst das E2MARAM005-Segment. Es enthält beliebig viele E2MAKTM001-Segemente, die wiederum jeweils einen Kurztext des Materials in unterschieldichen Sprachen beeinhalten. Mit Hilfe von ReadData kann der Datenpuffer des Segemnts ausgelesen werden. Der eigentliche Text befindet sich an der Stelle 4 und ist 40 Zeichen lang (nachzulesen in der Idoc-Doku, z.B. Transaktion WE60). Alle Texte werden auf der Console ausgegeben.

[C#]

private static void s_IncomingIdoc(RFCServer Sender, Idoc idoc)
{
    Console.WriteLine("Recieved Idoc " + idoc.IDOCTYP);
    IdocSegment e1maram = idoc.Segments["E2MARAM005",0];
    for (int i=0; i < e1maram.ChildSegments.Count;i++)
        if (e1maram.ChildSegments[i].SegmentName == "E2MAKTM001")
            Console.WriteLine("Materialtext found: " + 
                e1maram.ChildSegments[i].ReadDataBuffer(4,40));
}

[VB]

Private Sub s_IncomingIdoc(ByVal Sender As ERPConnect.RFCServer, ByVal idoc As ERPConnect.Idocs.Idoc) Handles s.IncomingIdoc
        Console.WriteLine("Recieved Idoc " + idoc.IDOCTYP)
        Dim e2maram As IdocSegment = idoc.Segments("E2MARAM005", 0)
        Dim i As Integer
        For i = 0 To e2maram.ChildSegments.Count - 1
            If e2maram.ChildSegments(i).SegmentName = "E2MAKTM001" Then
                Console.WriteLine("Materialtext found: " & _
                    e2maram.ChildSegments(i).ReadDataBuffer(4, 40))
            End If
        Next i
    End Sub

Der nachfolgende Screenshot zeigt das Beispielprogramm in Aktion. In diesem Fall werden die Texte aus insgesamt 7 Sprachen im Idoc übergeben. Daraus ergeben sich auch 7 E2MAKTM001-Segmente.


Image:IdocReciever.jpg

DeutschEnglish
Xtract PPS