Lagerbestand mit Hilfe eines BAPIs ermitteln 
From Theobald Software
Ein so genanntes BAPI ist per Definition die Methode eines Business Objekts. Es gibt hunderte von Business Objekten in einem SAP-System, eines davon ist Material. Material repräsentiert einen einzelnen Artikel, auf den man verschiendene Methoden anwenden kann. Eine dieser Methoden ist Availability, sie ruft die Verfügbarkeit des Artikels ab, sprich den Bestand im Lager. Sie können Business Objekte und deren Methoden entweder im Business Object Repository (Transaktion BAPI) recherchieren, ansehen und ausprobieren, oder alternativ auch unter ifr.sap.com. Das folgende Beispiel wird nun das BAPI Material.Availability in einer Windows Forms Anwendung ansteuern. Wichtigste Basis ist das Steuerelement ERPConnect.R3Connection. Ziehen Sie es aus der Toolbox auf die Form. Die nachfolgende Abbildung zeigt die Form der Beispielanwendung. Die Verbindungseigenschaften (rechts im Bild) werden schon zu Design-Zeit gesetzt, dann brauchen wir uns später im Code nicht darum zu kümmern.
Umsetzung im Code
Im Aufruf des BAPIs sind das Werk (PLANT), die Materialnummer (MATERIAL) und die gewünschte Einheit (UNIT) zwingend zu übergeben. Der nachfolgende Code zeigt, wie aus dem R3Connection-Objekt per CreateBapi ein BAPI-Objekt erzeugt wird. Analog zu ganz normalen Funktionsbausteinen werden die Export-Parameter anhand der Benutzereingaben gefüllt und das BAPI dann ausgeführt. Die Rückgabe besteht aus einem einem Wert (AV_ATY_PLT) und einer Return-Struktur, wie bei BAPIs üblich. Die Return-Struktur enthält möglicherweise Fehlermeldungen oder andere Hinweise, aus diesem Grund wird das Element MESSAGE ebenfalls in eine Textbox geschrieben ...
[C#]
private void button1_Click(object sender, System.EventArgs e) { try { r3Connection1.Open(false); // Create a Bapi object, fill parameters and execute BusinessObjectMethod f = r3Connection1.CreateBapi("Material","Availability"); f.Exports["PLANT"].ParamValue = textBox1.Text; f.Exports["MATERIAL"].ParamValue = textBox2.Text; f.Exports["UNIT"].ParamValue = textBox3.Text; f.Execute(); // Read the import structure RETURN to provide possible Messages RFCStructure BapiRet = f.Imports["RETURN"].ToStructure(); textBox5.Text = BapiRet["MESSAGE"].ToString(); // Fill textbox with stock quantity textBox4.Text = f.Imports["AV_QTY_PLT"].ToString(); } catch (ERPException e1) { MessageBox.Show(e1.Message); } }
Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click Try r3Connection1.Open(False) ' Create a Bapi object, fill parameters and execute Dim f As BusinessObjectMethod = _ r3Connection1.CreateBapi("Material", "Availability") f.Exports("PLANT").ParamValue = textBox1.Text f.Exports("MATERIAL").ParamValue = textBox2.Text f.Exports("UNIT").ParamValue = textBox3.Text f.Execute() ' Read the import structure RETURN to provide possible Messages Dim BapiRet As RFCStructure = f.Imports("RETURN").ToStructure() textBox5.Text = BapiRet("MESSAGE").ToString() ' Fill textbox with stock quantity textBox4.Text = f.Imports("AV_QTY_PLT").ToString() Catch e1 As ERPException MessageBox.Show(e1.Message) End Try End Sub
Die beiden nachfolgenden Abbildungen zeigen das Programm in Aktion. Beim ersten Versuch wird eine ungültige Materialnummer eingegeben. Die RETURN-Message zeigt die Meldung. Beim zweiten Bild wird ein korrekter Lagerbestand ermittelt und ausgegeben.


