Die Anbindung von PC und Internet an ein SAP-System ergibt benutzerfreundliche, flexible und kostengünstige Lösungen. Beispiele dafür sind Informationssysteme für Lieferanten und Händler. Zur Realisierung werden HTML, Java-Script und die Standard-Produkte von SAP und Microsoft benutzt.
Die Beschreibung der eingesetzten Techniken soll nicht die SAP- oder die VB-Dokumentation ersetzen. Es geht um einen Überblick über die wichtigsten Schritte um den Einstieg zu erleichtern. Grundkenntnisse in VB und SAP werden vorausgesetzt.
SAP
Die Zusammenarbeit von SAP und PC geht über RFC (Remote Function Call). In SAP
werden mit der Transaktion se37 Funktionsbausteine definiert, die mit VB oder
anderen PC-Programmiersprachen aufgerufen werden können. Um Daten aus SAP
abzurufen, geht es darum
herauszufinden, welche Transaktionen oder Tabelle für die gewünschte
SAP-Anwendung in Frage kommt:
Nach Bestimmung der Tabelle brauchen wir eine Übergabe-Tabelle an den PC. Diese wird in den Kopfdaten des Funktionsbausteins angegeben. Wichtig ist, daß sie definiert wird mit LIKE "Name_der_SAP-Tabelle". Nur so ist die Struktur der SAP-Tabelle auf dem PC verfügbar.
Im SAP-Funktionsbaustein holt ein SELECT-Befehl die Daten aus der SAP-Tabelle und stellt sie in die Übergabe-Tabelle z.B. select * from t134 into IT134
Ein direktes Schreiben in SAP-Tabellen sollte unterbleiben, da dies zu einem inkonsistenten Zustand des SAP-Systems führen kann.
PC
Im Visual-Basic Projekt muss zunächst ein Verweis auf die Bibliothek
wdtfuncs.ocx eingetragen werden. Diese ist nach kompletter Installation der
SAP-GUI verfügbar. Um die SAP-Funktionen zu nutzen muss sich diese zunächst an
SAP anmelden. Dafür kann ein Code-Baustein verwendet werden, der die
benötigten Objekte anlegt, die User-Daten einträgt und einloggt:
dim colfu as object
dim lo as object
dim Artikelfunc as object
Set colfu = CreateObject("SAP.functions")
Set lo = CreateObject("SAP.logoncontrol.1")
Set co = lo.NewConnection
co.Client = "100"
co.user = username$
co.ApplicationServer = servername$
co.SystemNumber = "00"
co.System = systemname$
co.language = "DE"
co.password = passwort$
Set colfu.Connection = co
ok = co.Logon(1, True)
If ok <> True Then
logwrite ("SAP nicht verfügbar")
Exit Sub
End If
logwrite ("SAP Logon OK")
Set Artikelfunc = colfu.Add("Z_IMS_INTERNET_MATERIAL")
Die Objekte für die SAP-Funktionsbausteine (Artikelfunc) werden hier mit "Late-Bind" verwendet, d.h. die Variablen werden "as Object" deklariert und deshalb werden zur Entwurfszeit die Eigenschaften und Methoden nicht angezeigt. Es gibt von SAP Werkzeuge um aus SAP-Funktionsbausteinen die PC-Objektbeschreibungen (Type-Libs) zu erstellen. Sie erfordern den Einsatz eines C-Compilers und erstellen Einträge in der Windows-Registry. Deshalb lohnt sich der Einsatz nur, wenn häufig auf dieselben Funktionsbausteine zugegriffen wird.
Im o.a. Beispiel ist die letzte Zeile entscheidend, weil hier bei der Methode ADD der Name des SAP-Funktionsbausteines angegeben wird.
In den meisten Anwendungen möchte man die Verbindung beim Programm-Start aufbauen und erst bei Programm-Ende wieder abbauen. Der beste Platz für die Logon-Prozedur ist deshalb in einem Code-Modul "sub main". Das muss als Start-Objekt in den Projekt-Eigenschaften eingetragen werden. Für die SAP-Objekte verwendet man globale Variablen, die in einem Code-Modul definiert werden.
Von Zeit zu Zeit (z.B. bei längerer Inaktivität) kann die SAP-Verbindung vom Host getrennt werden. Deshalb brauchen alle VB-Programme, die auf SAP zugreifen Fehler-Behandlung. Wenn der Fehler "no connection to SAP" auftritt, wird das Unterprogramm "main" nochmal ausgeführt. Die Anzahl der Verbindungsversuche muss begrenzt werden, sonst entsteht (wenn der Host nicht erreichbar ist) eine Endlosschleife, die den PC-Server lahm legt.
Zunächst müssen Objektvariablen gesetzt werden um auf die Daten zuzugreifen:
Set imatnr = Artikelfunc.Exports("IMATNR")
Set ESYSID = Artikelfunc.Imports("ESYSID")
Set material = Artikelfunc.Tables("TMAT")
Die Angaben in Klammern müssen den Bezeichnungen im Kopf des
SAP-Funktionsbausteines entsprechen.
Mit der Eigenschaft "Value" kann man Daten übergeben.
imatnr.Value = Artikelnummer
Da "Value" die Default-Eigenschaft ist, kann man das auch weglassen. Ich empfehle, das nicht zu tun, da es die Lesbarkeit des Programmes verschlechtert.
Für einige Datentypen sind Konvertierungen in das SAP-Format notwendig wie z.B. Datum. Die Liefermenge in einem Auftrag ist besonders heikel, da diese auch von der gewählten Mengenheinheit abhängt.
Mit der Methode CALL wird der SAP-Funktionsbaustein ausgeführt z.B. Artikelfunc.Call
Die Struktur einer Tabelle kann untersucht werden, indem man eine Unterbrechung setzt und in VB mit dem Menüpunkt "Ansicht", "lokal" das Fenster für die Anzeige aller Variablen aufruft. Auf die Elemente der Tabelle kann über die Angaben von Zeile und Spalte mit Zahlen oder über die Spaltenbezeichnung zugegriffen werden:
Einige Eigenschaften sind bei jeder Tabelle vorhanden z.B. die Anzahl der
Zeilen "RowCount"