Da wir häufig auf SAP-Betriebsdaten zugreifen müssen, kapseln wir eine Klasse für den einfachen Aufruf. Nach der Installation des SAP-Clients wird über diese COM-Schnittstelle auf SAP zugegriffen. weil die spätere Phase von com Aufgrund des Bindungsproblems habe ich vb.net verwendet, um es zu entwickeln und mit allen zu teilen.
Funktionen: Ordnen Sie die eingehenden und ausgehenden internen Tabellen von SAP für eine einfache Bedienung direkt der DataTable von dotNet zu und bieten Sie eine Konvertierungsfunktion von einer Feldliste in eine DataTable.
'------------------------------------------------ - --------------
' Copyright (C) 2009
'Alle Rechte vorbehalten.
'
'Dateiname: SAP.vb
'Funktionsbeschreibung: Kapselt den Basiszugriff auf SAP. Diese Klasse bietet nur Basisinformationen für die von dieser Klasse geerbten SAP-RFC-Klassen.
'
„Logo erstellen: www.cnblogs.com/81 , 1. Dezember 2009
'
„Geändertes Logo: www.cnblogs.com/81 , 9. Dezember 2009
'Beschreibung ändern: Geschlossene Operationen für eingehende interne Tabellen, ausgehende Parameter usw. hinzufügen.
'------------------------------------------------ - ----------------------
Öffentliches SAP
Privates m_sapObject As Object 'SAP-Remote-Funktionsaufrufobjekt
Geschützte m_sapFun As Object 'SAP-Funktion
Private m_sapConnection As Object 'Verbindung zu SAP
''' <Zusammenfassung>
''' Konstruktor, übergeben Sie die grundlegenden Informationen von SAP
''' </summary>
''' <param name="sapSystem">Sap-System, Sie können null übergeben</param>
''' <param name="ApplicationServer">SAP-Server-IP</param>
''' <param name="Client">Gruppennummer, z. B. 800</param>
''' <param name="SystemNumber">Systemnummer, z. B. 00</param>
''' <bemerkungen></bemerkungen>
Public Sub New(ByVal sapSystem As String, ByVal ApplicationServer As String, ByVal Client As String, ByVal SystemNumber As String)
Me.m_sapObject = CreateObject("SAP.Functions")
Me.m_sapConnection = Me.m_sapObject.Connection()
Wenn String.IsNullOrEmpty(sapSystem) = False, dann
Me.m_sapConnection.System = sapSystem
Ende wenn
Me.m_sapConnection.ApplicationServer = ApplicationServer
Me.m_sapConnection.Client = Client
Me.m_sapConnection.SystemNumber = SystemNumber
Sub beenden
''' <Zusammenfassung>
''' Bei SAP anmelden, bei Erfolg True zurückgeben, bei Fehlschlag False zurückgeben
''' </summary>
''' <param name="Benutzer">Benutzer</param>
''' <param name="Password">Passwort</param>
''' <param name="Language">Sprache wie ZH, EN usw., Sie können null übergeben</param>
''' <returns>Ob die Anmeldung erfolgreich war</returns>
''' <bemerkungen></bemerkungen>
Öffentliche Funktion ConnectToSAP(ByVal User As String, ByVal Password As String, ByVal Language As String) als boolescher Wert
Me.m_sapConnection.user = Benutzer
Me.m_sapConnection.Password = Passwort
Wenn String.IsNullOrEmpty(Language) = False, dann
Me.m_sapConnection.Language = Sprache
Anders
Me.m_sapConnection.Language = "EN"
Ende wenn
Me.m_sapObject.AutoLogon = True 'Automatische Anmeldung
Return Me.m_sapObject.Connection.logon(0, True) 'Ob die Anmeldung erfolgreich war
Funktion beenden
''' <Zusammenfassung>
''' Legen Sie den Namen der aufzurufenden SAP-Funktion fest
''' </summary>
''' <param name="sapFuncName">SAP-Funktionsname</param>
''' <bemerkungen></bemerkungen>
Public Sub Legen Sie den SAP-Remote-Funktionsnamen fest (ByVal sapFuncName As String)
Me.m_sapFun = Me.m_sapObject.Add(sapFuncName)
Wenn m_sapFun nichts ist, dann
Neue Ausnahme auslösen („Sap-Remote-Funktionsname ist ungültig: „ + sapFuncName)
Ende wenn
Sub beenden
''' <Zusammenfassung>
''' Legen Sie die Parameter für eingehende Anrufe der SAP-Funktion fest
''' </summary>
''' <param name="paramName">Parametername</param>
''' <param name="paramValue">Parameterwert</param>
''' <bemerkungen></bemerkungen>
Öffentliche Subset-Parameter (ByVal paramName As String, ByVal paramValue As Object)
Parameter als Objekt dimmen
param = Me.m_sapFun.Exports(paramName)
Wenn param nichts ist, dann
Neue Ausnahme auslösen („Der Parametername der Sap-Remote-Funktion ist ungültig: „ + paramName)
Ende wenn
param.Value = paramValue
Sub beenden
''' <Zusammenfassung>
''' Legen Sie die eingehende interne Tabelle von SAP fest und verwenden Sie dt_value, um diese interne Tabelle zu simulieren
''' </summary>
''' <param name="SapTableName">Der Name der internen Tabelle, die von der SAP-Funktion übergeben wurde</param>
''' <param name="dt_value">Die simulierte Datentabelle muss mit dem an die interne Tabelle übergebenen Feldnamen konsistent sein</param>
''' <bemerkungen></bemerkungen>
Public Sub legt die eingehende interne Tabelle fest (ByVal SapTableName As String, ByVal dt_value As DataTable)
Dim sapdata As Object 'sap passiert in der internen Tabelle
Dim saprow As Object 'sap geht in eine Zeile der internen Tabelle
Dimmen Sie DC als DataColumn
Dim-Index als Ganzzahl
sapdata = Me.m_sapFun.Tables(SapTableName)
For index = 0 To dt_value.Rows.Count - 1 'Schleifen Sie die Tabelle und weisen Sie der an SAP übergebenen internen Tabelle Werte zu
saprow = sapdata.Rows.Add() 'Fügen Sie eine neue Zeile mit Datensätzen in der internen Tabelle hinzu und weisen Sie den Datensätzen in der internen Tabelle darunter Werte zu.
Für jeden DC in dt_value.Columns
saprow(dc.ColumnName) = dt_value.Rows(index)(dc.ColumnName).ToString()
Nächste
Nächste
Sub beenden
''' <Zusammenfassung>
''' Nachdem die Parametereinstellung abgeschlossen ist, führen Sie den Funktionsaufruf aus
''' </summary>
''' <bemerkungen></bemerkungen>
Öffentlicher Unterfunktionsaufruf() ausführen
Wenn Me.m_sapFun.Call() = False, dann
Throw New Exception("Sap-Remote-Funktionsaufruf fehlgeschlagen.") 'Fehler beim Abrufen von Daten aus SAP, Exit-Funktion
Ende wenn
Sub beenden
''' <Zusammenfassung>
''' Erstellen Sie eine Datentabelle mit angegebenen Feldern basierend auf der Feldliste (durch Kommas getrennt).
''' </summary>
''' <param name="fields">Feldliste (durch Kommas getrennt)</param>
''' <returns>Leere Tabelle</returns>
''' <bemerkungen></bemerkungen>
Öffentliche Funktion Erstellen Sie eine leere Tabelle (ByVal-Felder als Zeichenfolge) als Datentabelle
Dimmen Sie dt als neue Datentabelle
Dim strs As String()
Dim s As String
strs = Felder.Split(",")
For Each s In strs
dt.Columns.Add(s.Trim())
Nächste
Rückgabe dt
Funktion beenden
''' <Zusammenfassung>
''' Ruft den ausgehenden Parameterwert von sap ab
''' </summary>
''' <param name="paramName">Name des ausgehenden Parameters</param>
''' <returns>Ausgehender Parameterwert</returns>
''' <bemerkungen></bemerkungen>
Öffentliche Funktion Sap-Ausgangsparameter (ByVal paramName As String) als String abrufen
Parameter als Objekt dimmen
param = Me.m_sapFun.Imports(paramName)
Wenn param nichts ist, dann
Neue Ausnahme auslösen („Der Parametername der Sap-Remote-Funktion ist ungültig: „ + paramName)
Ende wenn
Wenn param.Value nichts ist, dann
Zurückkehren ""
Anders
Gibt param.Value.ToString() zurück
Ende wenn
Funktion beenden
''' <Zusammenfassung>
''' Konvertieren Sie die ausgehende interne Tabelle der SAP-Funktionsaufrufstruktur in eine DotNet-Tabelle
''' </summary>
''' <param name="fields">SAP-Ausgangsfeldliste der internen Tabelle, durch Kommas getrennt</param>
''' <param name="SapTableName">Der Tabellenname der von SAP ausgehenden internen Tabelle</param>
''' <returns>Die aus der internen SAP-Tabelle exportierte Dotnet-Tabelle, alle Felder sind vom Typ String</returns>
''' <bemerkungen></bemerkungen>
Öffentliche Funktion Abrufen ausgehender Sap-Tabellendaten (ByVal-Felder als String, ByVal SapTableName als String, ByVal, ob führende und nachfolgende Leerzeichen entfernt werden sollen, als Boolescher Wert) als DataTable
'Erstellen Sie eine Tabelle nach Feldliste. Die Feldliste in Feldern wird durch Kommas getrennt
Dimmen Sie dt als Datentabelle
dt = Me. Leere Tabelle (Felder) erstellen
„Daten aus der SAP-Tabelle lesen, die in SAP erhaltenen Daten in einer Schleife verarbeiten und in dt schreiben.“
SAP-Daten als Objekt dimmen
Dim saprow als Objekt
Dim dr As DataRow 'Neue Datenzeile hinzugefügt
Dimmen Sie DC als DataColumn
sapdata = Me.m_sapFun.Tables(SapTableName)
Für jeden Saprow in sapdata.Rows
dr = dt.NewRow()
Für jeden DC in dt.Columns
Wenn ob führende und nachfolgende Leerzeichen entfernt werden sollen = True Then
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString().Trim()
Anders
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString()
Ende wenn
Nächste
dt.Rows.Add(dr)
Nächste
Rückgabe dt
Funktion beenden
''' <Zusammenfassung>
''' Schließen Sie die SAP-Verbindung
''' </summary>
''' <bemerkungen></bemerkungen>
Öffentlicher Sub DisConnectSAP()
Me.m_sapConnection.logoff()
Sub beenden
Unterricht beenden