If String.IsNullOrEmpty(Language) = False Then Me.m_sapConnection.Language = Language Else Me.m_sapConnection.Language = "EN" End If
Me.m_sapObject.AutoLogon = True '自動登錄 Return Me.m_sapObject.Connection.logon(0, True) '登錄是否成功 End Function
''' <summary> ''' 設置調用的sap函數名稱 ''' </summary> ''' <param name="sapFuncName">sap函數名稱</param> ''' <remarks></remarks> Public Sub 設置SAP遠程函數名(ByVal sapFuncName As String) Me.m_sapFun = Me.m_sapObject.Add(sapFuncName) If m_sapFun Is Nothing Then Throw New Exception("Sap遠程函數名無效:" + sapFuncName) End If End Sub
''' <summary> ''' 設置Sap函數的傳入調用參數 ''' </summary> ''' <param name="paramName">參數名稱</param> ''' <param name="paramValue">參數值</param> ''' <remarks></remarks> Public Sub 設置參數(ByVal paramName As String, ByVal paramValue As Object) Dim param As Object param = Me.m_sapFun.Exports(paramName) If param Is Nothing Then Throw New Exception("Sap遠程函數的參數名無效:" + paramName) End If param.Value = paramValue
End Sub
''' <summary> ''' 設置sap的傳入內表,用dt_value模擬這個內表 ''' </summary> ''' <param name="SapTableName">sap函數傳入內表的名字</param> ''' <param name="dt_value">模擬的DataTable,要求與傳入內表的字段名一致</param> ''' <remarks></remarks> Public Sub 設置傳入內表(ByVal SapTableName As String, ByVal dt_value As DataTable) Dim sapdata As Object 'sap傳入內表 Dim saprow As Object 'sap傳入內表的一行 Dim dc As DataColumn Dim index As Integer sapdata = Me.m_sapFun.Tables(SapTableName) For index = 0 To dt_value.Rows.Count - 1 '循環表,并給sap傳入內表賦值 saprow = sapdata.Rows.Add() '傳入內表新增一行記錄,下面為傳入內表記錄賦值 For Each dc In dt_value.Columns saprow(dc.ColumnName) = dt_value.Rows(index)(dc.ColumnName).ToString() Next Next End Sub
''' <summary> ''' 當參數設置完成后,執行函數調用 ''' </summary> ''' <remarks></remarks> Public Sub 執行函數調用() If Me.m_sapFun.Call() = False Then Throw New Exception("Sap遠程函數調用失敗。") '從SAP取數出錯,退出函數 End If End Sub
''' <summary> ''' 根據字段列表(逗號分隔)建立指定字段的DataTable ''' </summary> ''' <param name="fields">字段列表(逗號分隔)</param> ''' <returns>空表</returns> ''' <remarks></remarks> Public Function 建立空表(ByVal fields As String) As DataTable Dim dt As New DataTable Dim strs As String() Dim s As String strs = fields.Split(",") For Each s In strs dt.Columns.Add(s.Trim()) Next Return dt End Function
''' <summary> ''' 取得sap的傳出參數值 ''' </summary> ''' <param name="paramName">傳出參數名</param> ''' <returns>傳出參數值</returns> ''' <remarks></remarks> Public Function 取Sap傳出參數(ByVal paramName As String) As String Dim param As Object param = Me.m_sapFun.Imports(paramName) If param Is Nothing Then Throw New Exception("Sap遠程函數的參數名無效:" + paramName) End If
If param.Value Is Nothing Then Return "" Else Return param.Value.ToString() End If End Function
''' <summary> ''' 把sap函數調用結構的傳出內表轉成dotNet的表 ''' </summary> ''' <param name="fields">sap傳出內表的字段列表,字段間以逗號分隔</param> ''' <param name="SapTableName">sap傳出內表的表名</param> ''' <returns>把sap內表導出的dotnet表,字段都為string型</returns> ''' <remarks></remarks> Public Function 取Sap傳出表數據(ByVal fields As String, ByVal SapTableName As String, ByVal 是否去前后空格 As Boolean) As DataTable '按字段列表建立表,fields中的字段列表用逗號分隔 Dim dt As DataTable dt = Me.建立空表(fields)
'從sap表中讀數據,循環sap中取得的數據,寫入dt Dim sapdata As Object Dim saprow As Object Dim dr As DataRow '數據增加的新行 Dim dc As DataColumn sapdata = Me.m_sapFun.Tables(SapTableName) For Each saprow In sapdata.Rows dr = dt.NewRow() For Each dc In dt.Columns If 是否去前后空格 = True Then dr(dc.ColumnName) = saprow(dc.ColumnName).ToString().Trim() Else dr(dc.ColumnName) = saprow(dc.ColumnName).ToString() End If Next dt.Rows.Add(dr) Next
Return dt End Function
''' <summary> ''' 關閉sap的連接 ''' </summary> ''' <remarks></remarks> Public Sub DisConnectSAP() Me.m_sapConnection.logoff() End Sub End Class