sap 操作データにアクセスする必要があることが多いため、簡単に呼び出せるようにクラスをカプセル化します。sap クライアントのインストール後、このインターフェイスは com を介して sap にアクセスします。 com の後期なのでバインディングの問題があったため、vb.net を使用して開発し、みんなで共有しました。
特徴: SAP の受信および送信内部テーブルを dotNet の DataTable に直接マッピングして操作を容易にし、フィールド リストから DataTable への変換機能を提供します。
'------------------------------------------------ - --------------
' 著作権 (C) 2009
' 無断転載を禁じます。
'
' ファイル名: SAP.vb
' 機能の説明: SAP への基本的なアクセスをカプセル化します。このクラスは、このクラスから継承する SAP RFC クラスへの特定のアクセスのみを提供します。
'
「ロゴの作成: www.cnblogs.com/81 、2009 年 12 月 1 日」
'
「変更されたロゴ: www.cnblogs.com/81 、2009 年 12 月 9 日」
'説明の変更: 受信内部テーブル、送信パラメータなどのクローズド操作を追加します。
'------------------------------------------------ - ------------------------
パブリッククラスSAP
Private m_sapObject As Object 'sap リモート関数呼び出しオブジェクト
m_sapFun As Object の sap 関数を保護
オブジェクトとしてのプライベート m_sapConnection 'SAP への接続
''<概要>
'''' コンストラクター、sap の基本情報を渡します
'' </概要>
'' <param name="sapSystem">SAP システム、null を渡すことができます</param>
'' <param name="ApplicationServer">SAP サーバー IP</param>
'' <param name="Client">グループ番号 (800 など)</param>
'' <param name="SystemNumber">システム番号 (00 など)</param>
''<コメント></コメント>
Public Sub New(文字列としての ByVal sapSystem、文字列としての ByVal ApplicationServer、文字列としての ByVal Client、文字列としての ByVal SystemNumber)
Me.m_sapObject = CreateObject("SAP.Functions")
Me.m_sapConnection = Me.m_sapObject.Connection()
String.IsNullOrEmpty(sapSystem) = False の場合
Me.m_sapConnection.System = sapSystem
終了の場合
Me.m_sapConnection.ApplicationServer = アプリケーションサーバー
Me.m_sapConnection.Client = クライアント
Me.m_sapConnection.SystemNumber = システム番号
エンドサブ
''<概要>
'' SAP にログインし、成功した場合は True を返し、失敗した場合は False を返します。
'' </概要>
''<param name="ユーザー">ユーザー</param>
'' <param name="Password">パスワード</param>
''' <param name="Language">ZH、EN などの言語、null を渡すことができます</param>
'' <returns>ログインが成功したかどうか</returns>
''<コメント></コメント>
パブリック関数 ConnectToSAP(文字列としての ByVal ユーザー、文字列としての ByVal パスワード、文字列としての ByVal 言語) ブール値として
Me.m_sapConnection.user = ユーザー
Me.m_sapConnection.Password = パスワード
String.IsNullOrEmpty(Language) = False の場合
Me.m_sapConnection.Language = 言語
それ以外
Me.m_sapConnection.Language = "EN"
終了の場合
Me.m_sapObject.AutoLogon = True '自動ログイン
Return Me.m_sapObject.Connection.logon(0, True) 'ログインが成功したかどうか
終了機能
''<概要>
'' 呼び出される sap 関数の名前を設定します
'' </概要>
'' <param name="sapFuncName">sap 関数名</param>
''<コメント></コメント>
Public Sub SAP リモート関数名を設定します (ByVal sapFuncName As String)
Me.m_sapFun = Me.m_sapObject.Add(sapFuncName)
m_sapFun が何もない場合
Throw New Exception("SAP リモート関数名が無効です: " + sapFuncName)
終了の場合
エンドサブ
''<概要>
''Sap 関数の着信呼び出しパラメータを設定します
'' </概要>
'' <param name="paramName">パラメータ名</param>
'' <param name="paramValue">パラメータ値</param>
''<コメント></コメント>
パブリック サブセット パラメータ (文字列としての ByVal paramName、オブジェクトとしての ByVal paramValue)
オブジェクトとしての Dim パラメータ
param = Me.m_sapFun.Exports(paramName)
param が何もない場合
Throw New Exception("Sap リモート関数のパラメータ名が無効です: " + paramName)
終了の場合
param.Value = paramValue
エンドサブ
''<概要>
''' sap の受信内部テーブルを設定し、dt_value を使用してこの内部テーブルをシミュレートします
'' </概要>
'' <param name="SapTableName">sap 関数によって渡される内部テーブルの名前</param>
'' <param name="dt_value">シミュレートされた DataTable は、内部テーブルに渡されるフィールド名と一致している必要があります</param>
''<コメント></コメント>
Public Sub は受信内部テーブルを設定します (ByVal SapTableName As String、ByVal dt_value As DataTable)
Dim sapdata As Object 'sap が内部テーブルに渡される
Dim saprow As Object 'sap が内部テーブルの行に渡されます
データ列としての Dim dc
Dim インデックス As Integer
sapdata = Me.m_sapFun.Tables(SapTableName)
For Index = 0 To dt_value.Rows.Count - 1 'テーブルをループし、sapに渡された内部テーブルに値を割り当てます
saprow = sapdata.Rows.Add() '内部テーブルに新しいレコード行を追加し、以下の内部テーブルのレコードに値を割り当てます。
dt_value.Columns の DC ごとに
saprow(dc.ColumnName) = dt_value.Rows(index)(dc.ColumnName).ToString()
次
次
エンドサブ
''<概要>
'' パラメータの設定が完了したら、関数呼び出しを実行します
'' </概要>
''<コメント></コメント>
Public Sub Execute 関数 call()
Me.m_sapFun.Call() = False の場合
Throw New Exception("SAP リモート関数呼び出しに失敗しました。") 'SAP からのデータ取得中にエラーが発生しました。関数を終了します
終了の場合
エンドサブ
''<概要>
''' フィールド リスト (カンマ区切り) に基づいて、指定されたフィールドの DataTable を作成します。
'' </概要>
'' <param name="fields">フィールドリスト (カンマ区切り)</param>
'' <returns>空のテーブル</returns>
''<コメント></コメント>
Public Function 空のテーブル (ByVal フィールドを String) を DataTable として作成します。
Dim dt As New DataTable
Dim strs As String()
文字列としてのディム
strs = フィールド.Split(",")
strs 内の各 s
dt.Columns.Add(s.Trim())
次
リターン dt
終了機能
''<概要>
'' sap の送信パラメータ値を取得します
'' </概要>
'' <param name="paramName">送信パラメータ名</param>
'' <returns>送信パラメータ値</returns>
''<コメント></コメント>
Public Function Get Sap 送信パラメータ (ByVal paramName As String) As String
オブジェクトとしての Dim パラメータ
param = Me.m_sapFun.Imports(paramName)
param が何もない場合
Throw New Exception("Sap リモート関数のパラメータ名が無効です: " + paramName)
終了の場合
param.Value が何もない場合
戻る ""
それ以外
param.Value.ToString() を返す
終了の場合
終了機能
''<概要>
'' sap 関数呼び出し構造の送信内部テーブルを dotNet テーブルに変換します
'' </概要>
''' <param name="fields">カンマ区切りの内部テーブルの SAP 送信フィールド リスト</param>
'' <param name="SapTableName">SAP 送信内部テーブルのテーブル名</param>
''' <returns>SAP 内部テーブルからエクスポートされた dotnet テーブル、すべてのフィールドは文字列型です</returns>
''<コメント></コメント>
Public Function Sap 送信テーブル データを取得 (ByVal フィールド As String、ByVal SapTableName As String、ByVal 先頭および末尾のスペースを削除するかどうか As Boolean) As DataTable
'フィールドリストごとにテーブルを作成します。フィールド内のフィールドリストはカンマで区切られます
DataTable としての Dim dt
dt = 私。空のテーブル (フィールド) を作成します。
' sap テーブルからデータを読み取り、sap で取得したデータをループして dt に書き込みます
オブジェクトとしての Dim sapdata
オブジェクトとしての薄暗いサプロウ
Dim dr As DataRow '新しいデータ行が追加されました
データ列としての Dim dc
sapdata = Me.m_sapFun.Tables(SapTableName)
sapdata.Rows の各樹液について
dr = dt.NewRow()
各 DC の dt.Columns
先頭と末尾のスペースを削除するかどうか = True の場合
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString().Trim()
それ以外
dr(dc.ColumnName) = saprow(dc.ColumnName).ToString()
終了の場合
次
dt.Rows.Add(dr)
次
リターン dt
終了機能
''<概要>
'' sap 接続を閉じます
'' </概要>
''<コメント></コメント>
パブリックサブDisConnectSAP()
Me.m_sapConnection.logoff()
エンドサブ
終了クラス