Parce que nous avons souvent besoin d'accéder aux données d'exploitation de SAP, nous encapsulons une classe pour faciliter les appels. Les conditions de fonctionnement nécessitent l'installation du client SAP. Une fois le client SAP installé, cette interface accède à SAP via ce com. parce que la dernière étape de com En raison du problème de liaison, j'ai utilisé vb.net pour le développer et le partager avec tout le monde.
Caractéristiques : mappez directement les tables internes entrantes et sortantes de SAP au DataTable de dotNet pour une utilisation facile et fournissez une fonction de conversion d'une liste de champs en DataTable.
'------------------------------------------------ - ---------------
' Droit d'auteur (C) 2009
' tous droits réservés.
'
'Nom du fichier : SAP.vb
'Description de la fonction : Encapsule l'accès de base à SAP. Cette classe fournit uniquement des informations de base. Accès spécifique aux classes SAP RFC héritées de cette classe.
'
'Créer un logo : www.cnblogs.com/81 , 1er décembre 2009
'
'Logo modifié : www.cnblogs.com/81 , 9 décembre 2009
'Modifier la description : Ajouter des opérations fermées pour les tables internes entrantes, les paramètres sortants, etc.
'------------------------------------------------ - ----------------------
SAP de classe publique
Private m_sapObject As Object 'objet d'appel de fonction distant SAP
Fonction sap protégée m_sapFun As Object
Private m_sapConnection As Object 'Connexion à SAP
''' <résumé>
''' constructeur, transmettre les informations de base de sap
''' </résumé>
''' <param name="sapSystem">Système SAP, vous pouvez passer en null</param>
''' <param name="ApplicationServer">IP du serveur SAP</param>
''' <param name="Client">Numéro de groupe, tel que 800</param>
''' <param name="SystemNumber">Numéro du système, tel que 00</param>
''' <remarques></remarques>
Public Sub New (ByVal sapSystem en tant que chaîne, ByVal ApplicationServer en tant que chaîne, ByVal Client en tant que chaîne, ByVal SystemNumber en tant que chaîne)
Me.m_sapObject = CreateObject("SAP.Fonctions")
Me.m_sapConnection = Me.m_sapObject.Connection()
Si String.IsNullOrEmpty(sapSystem) = False Alors
Me.m_sapConnection.System = sapSystem
Fin si
Me.m_sapConnection.ApplicationServer = ApplicationServer
Me.m_sapConnection.Client = Client
Me.m_sapConnection.SystemNumber = SystemNumber
Fin du sous-marin
''' <résumé>
''' Connectez-vous à SAP, renvoyez True en cas de succès, renvoyez False en cas d'échec
''' </résumé>
''' <param name="Utilisateur">Utilisateur</param>
''' <param name="Mot de passe">Mot de passe</param>
''' <param name="Language">Langue, telle que ZH, EN, etc., vous pouvez transmettre null</param>
''' <returns>Si la connexion a réussi</returns>
''' <remarques></remarques>
Fonction publique ConnectToSAP (utilisateur ByVal sous forme de chaîne, mot de passe ByVal sous forme de chaîne, langage ByVal sous forme de chaîne) en tant que booléen
Me.m_sapConnection.user = Utilisateur
Me.m_sapConnection.Password = Mot de passe
Si String.IsNullOrEmpty(Language) = False Alors
Me.m_sapConnection.Language = Langue
Autre
Me.m_sapConnection.Language = "FR"
Fin si
Me.m_sapObject.AutoLogon = True 'Connexion automatique
Return Me.m_sapObject.Connection.logon(0, True) 'Si la connexion a réussi
Fonction de fin
''' <résumé>
''' Définir le nom de la fonction sap à appeler
''' </résumé>
''' <param name="sapFuncName">nom de la fonction SAP</param>
''' <remarques></remarques>
Public Sub Définir le nom de la fonction distante SAP (ByVal sapFuncName As String)
Me.m_sapFun = Me.m_sapObject.Add(sapFuncName)
Si m_sapFun n'est rien alors
Lancer une nouvelle exception ("Le nom de la fonction distante SAP n'est pas valide : " + sapFuncName)
Fin si
Fin du sous-marin
''' <résumé>
''' Définir les paramètres d'appel entrant de la fonction Sap
''' </résumé>
''' <param name="paramName">Nom du paramètre</param>
''' <param name="paramValue">Valeur du paramètre</param>
''' <remarques></remarques>
Paramètres du sous-ensemble public (ByVal paramName As String, ByVal paramValue As Object)
Dim param comme objet
param = Me.m_sapFun.Exports(paramName)
Si le paramètre n'est rien, alors
Lancer une nouvelle exception ("Le nom du paramètre de la fonction distante Sap n'est pas valide : " + paramName)
Fin si
param.Value = paramValue
Fin du sous-marin
''' <résumé>
''' Définissez la table interne entrante de sap et utilisez dt_value pour simuler cette table interne
''' </résumé>
''' <param name="SapTableName">Le nom de la table interne transmise par la fonction sap</param>
''' <param name="dt_value">Le DataTable simulé doit être cohérent avec le nom du champ passé dans la table interne</param>
''' <remarques></remarques>
Public Sub définit la table interne entrante (ByVal SapTableName As String, ByVal dt_value As DataTable)
Dim sapdata Au fur et à mesure que l'objet 'sap passe dans la table interne
Dim saprow Au fur et à mesure que l'objet 'sap passe dans une ligne de la table interne
Dim dc comme colonne de données
Dim index sous forme d'entier
sapdata = Me.m_sapFun.Tables (SapTableName)
Pour index = 0 To dt_value.Rows.Count - 1 'Bouclez la table et attribuez des valeurs à la table interne transmise à sap
saprow = sapdata.Rows.Add() 'Ajoutez une nouvelle ligne d'enregistrements dans la table interne et attribuez des valeurs aux enregistrements dans la table interne ci-dessous.
Pour chaque DC dans dt_value.Columns
saprow(dc.ColumnName) = dt_value.Rows(index)(dc.ColumnName).ToString()
Suivant
Suivant
Fin du sous-marin
''' <résumé>
''' Une fois le paramétrage terminé, exécutez l'appel de fonction
''' </résumé>
''' <remarques></remarques>
Appel de fonction Public Sub Execute()
Si Me.m_sapFun.Call() = False Alors
Throw New Exception("Échec de l'appel de fonction à distance SAP.") 'Erreur lors de la récupération des données depuis SAP, quitter la fonction
Fin si
Fin du sous-marin
''' <résumé>
''' Créer un DataTable des champs spécifiés en fonction de la liste des champs (séparés par des virgules)
''' </résumé>
''' <param name="fields">Liste de champs (séparés par des virgules)</param>
''' <retours>Table vide</retours>
''' <remarques></remarques>
Fonction publique Créer une table vide (champs ByVal sous forme de chaîne) sous forme de DataTable
Dim dt comme nouveau DataTable
Dim strs As String()
Dim s comme chaîne
strs = champs.Split(",")
Pour chaque s en strs
dt.Columns.Add(s.Trim())
Suivant
Retour dt
Fonction de fin
''' <résumé>
''' Récupère la valeur du paramètre sortant de sap
''' </résumé>
''' <param name="paramName">Nom du paramètre sortant</param>
''' <returns>Valeur du paramètre sortant</returns>
''' <remarques></remarques>
Fonction publique Obtenir les paramètres sortants Sap (ByVal paramName As String) As String
Dim param comme objet
param = Me.m_sapFun.Imports(paramName)
Si le paramètre n'est rien, alors
Lancer une nouvelle exception ("Le nom du paramètre de la fonction distante Sap n'est pas valide : " + paramName)
Fin si
Si param.Value n'est rien alors
Retour ""
Autre
Renvoie param.Value.ToString()
Fin si
Fonction de fin
''' <résumé>
''' Convertir la table interne sortante de la structure d'appel de fonction sap en table dotNet
''' </résumé>
''' <param name="fields">Liste des champs SAP sortants de la table interne, séparés par des virgules</param>
''' <param name="SapTableName">Le nom de la table interne SAP sortante</param>
''' <returns>La table dotnet exportée depuis la table interne SAP, tous les champs sont de type chaîne</returns>
''' <remarques></remarques>
Fonction publique Obtenir les données de la table sortante Sap (champs ByVal en tant que chaîne, ByVal SapTableName en tant que chaîne, ByVal s'il faut supprimer les espaces de début et de fin en tant que booléen) As DataTable
'Créer un tableau par liste de champs, la liste des champs dans les champs est séparée par des virgules
Dim dt comme DataTable
dt = Moi. Créer une table vide (champs)
'Lire les données de la table sap, boucler les données obtenues dans sap et les écrire dans dt
Atténuer les données sap en tant qu'objet
Dim saprow comme objet
Dim dr As DataRow 'Nouvelle ligne de données ajoutée
Dim dc comme colonne de données
sapdata = Me.m_sapFun.Tables (SapTableName)
Pour chaque saprow dans sapdata.Rows
dr = dt.NewRow()
Pour chaque DC dans dt.Columns
Si les espaces de début et de fin doivent être supprimés = True Alors
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString().Trim()
Autre
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString()
Fin si
Suivant
dt.Rows.Add(dr)
Suivant
Retour dt
Fonction de fin
''' <résumé>
''' Fermez la connexion SAP
''' </résumé>
''' <remarques></remarques>
Sous-public DisConnectSAP()
Me.m_sapConnection.logoff()
Fin du sous-marin
Fin du cours