Ein ORDER-IDoc senden Deutsch

From Theobald Software

Jump to: navigation, search

Wir haben bereits in einem anderen Beispiel das Senden von Idocs behandelt. Dieses Mal wollen wir allerdings ein etwas komplexeres Idoc behandeln, nämlich ORDERS01 um damit einen Kundenauftrag anzulegen.

Nach dem Verbinden mit dem SAP-System gibt es zwei Möglichkeiten ein Idoc-Objekt zu erstellen, entweder mit CreateIdoc oder mit CreateEmptyIdoc. Im ersten Fall werden alle Kind-Segmente bereits gefüllt. Bei einem ORDERS-Idoc ist es aber sinnvoll, CreateEmptyIdoc zu nutzen, um nicht so viele leere Segmente, die gar nicht genutzt werden, an das Idoc zu hängen.

Die einzelnen Segmente werden dann mittel CreateSegment erzeugt und an die jeweiligen Segment-Collections angehängt. Wir haben auf der Maske der Beispielanwendung zwei Textfelder: Eines für die Materialnummer (txtMaterialNumber) und eines für die Menge (txtQty).

Das folgende Beispiel-Idoc benötigt drei Segmente:

E1EDK01 ist ein Pflichsegment. Es bleibt leer, muss aber enthalten sein, da das Idoc sonst syntaktisch nicht korrekt wäre.

E1EDP01 ist ein Positionssegment, dass die gewünschte Bestellmenge enthält. Es kann natürlich mehrfach vorkommen. In unserem Beispiel gehen wir davon aus, dass der Kundenauftrag nur eine Position enthält.

E1EDP19 ist ein Segment für eine Objektdefinition. Das Kennzeichen 002 bedeutet, dass das nachfolgende Feld eine Materialnummer ist und die Materialnummer selbst wird als Objektschlüssel angegeben. E1EDP19-Segmente sind immer Kindsegmente von E1EDP01.

Falls Sie möchten können Sie diese Hierarchie auch mit Hilfe der Transaktion WE60 ansehen.


[C#]

private void button1_Click(object sender, System.EventArgs e)
{
 R3Connection con = new R3Connection();
 
 if (!con.AskUserAndOpen(true))
  return;
 
 Idoc idoc = con.CreateEmptyIdoc("ORDERS01","");
 idoc.MESTYP = "ORDERS";
 
 // Fill information about idoc sender
 idoc.SNDPRN = "1172"; // Partner number
 idoc.SNDPRT = "KU"; // Partner type
 
 // Create document header segment
 IdocSegment e1edk01 = idoc.CreateSegment("E1EDK01");
 idoc.Segments.Add(e1edk01);
 
 // Create item segment
 IdocSegment e1edp01 = idoc.CreateSegment("E1EDP01");
 e1edp01.Fields["MENGE"].FieldValue = txtQty.Text;
 idoc.Segments.Add(e1edp01);
 
 // Create Object identification (material number in this case)
 IdocSegment e1edp19 = idoc.CreateSegment("E1EDP19");
 e1edp19.Fields["QUALF"].FieldValue = "002"; // 002 for material number
 e1edp19.Fields["IDTNR"].FieldValue = txtMaterialNumber.Text; // material number
 e1edp01.ChildSegments.Add(e1edp19);
 
 idoc.Send();
 this.lblInfo.Text = "Idoc sent";
}


Die Abbildung zeigt das so gesendete Idoc in der Transaktion WE02. Wenn SAP-seitig alles korrekt eingestellt ist, wird das Idoc automatisch zu einem Kundenauftrag weiterverarbeitet.

Image:IdocSalesOrder.jpg

DeutschEnglish
Personal tools
XtractQL Provider
Xtract RS