VB.NET開發與SAP的互動介面

來源:互聯網
上載者:User
SAP R/3系統是業界最先進、最穩定的ERP系統,國際和國內大型企業採用該系統的比例遙遙領先於其它ERP系統的總和。SAP R/3內建了二次開發平台,使用的開發語言叫做ABAP,是一種類似於COBOL的程式設計語言。ABAP在報表輸出方面功能相對較弱(只能按行列印在螢幕上或者匯出到Excel中處理),所以日常工作中經常需要在外部開發程式。通過程式介面自動讀取SAP R/3的資料表(視圖),在外部進行處理和利用水晶報表等工具產生符合中國人習慣的報表樣式。

  SAP R/3的介面方式主要有RFC、IDOC、BAPI三種,本文要介紹的是相對比較簡單的RFC(Romote Function Call,遠程函數調用)。SAP系統RFC調用的原理其實很簡單,有一些類似於三層構架的C/S系統,第三方的客戶程式通過介面調用SAP內部的標準或自訂函數,獲得函數返回的資料進行處理後顯示或列印。下面是RFC調用的模型:
  本文主要不是討論SAP R/3函數的開發,因為使用SAP的公司一般都有專門的ABAP開發人員。大家如果有機會接觸ABAP平台,可以通過事務代碼SE37進入ABAP開發平台的"函數編製器"進行函數開發測試。

  下面主要以VB為例介紹一下SAP介面RFC的開發思路。在SAP用戶端SAP Gui Client安裝的時候,注意選擇安裝附帶的SDK包(最保險是選擇完整安裝)。RFC介面程式開發,主要用的是"SAP.Functions"這個控制項,通過控制項在外部程式類比SAP Gui Client的使用者登入和函數調用,然後返回函數的值。請看下面的程式片段和重點註解(尤其是test_Click()):

Private Sub Command1_Click()
 ' 定義R/3使用者名稱和密碼變數(使用者名稱應由SAP管理員開運行函數的許可權)
 Dim logname As String * 22, password As String * 22
 Call logonr3(logname, password) ' 調用SAP登入介面程式
 If logflag Then ' 調用生產、開發系統開關
  StatusBar1.Visible = True
  StatusBar1.SimpleText = "正在登入SAP R/3系統..."
  Dim R3AppServer As String, R3Client As String, R3SystemNo As String
  If Form2.opPRD.Value Then
   ' 以下伺服器參數請根據客戶配置情況更改
   R3AppServer = "10.3.1.4" ' 生產系統伺服器IP
   R3Client = "800"     '生產系統集團代碼
   R3SystemNo = "00" '生產系統號
  Else
   R3AppServer = "10.3.3.1" ' 開發系統伺服器IP
   R3Client = "101"
   R3SystemNo = "00"
  End If
  Unload Form2 ' 釋放 Form2 , 所有控制項及值不可用
  Set Functions = CreateObject("Sap.Functions") ' 建立RFC的本機物件
  Set Connect = Functions.Connection ' 設定串連
  Connect.ApplicationServer = R3AppServer ' 賦值伺服器IP
  Connect.Client = R3Client ' 賦值SAP集團代碼
  Connect.Language = "ZH" ' 置SAP系統介面中文
  Connect.User = Trim(logname) ' 賦值SAP登入使用者名稱
  Connect.password = Trim(password) ' 賦值SAP登入使用者密碼
  Connect.SystemNumber = R3SystemNo ' 賦值SAP系統號
  If Not Connect.Logon(0, True) Then ' 軟體登入SAP並判斷
   MsgBox "登入SAP R/3失敗,請重新登入!", vbOKOnly + vbExclamation, "系統提示"
   Command1.SetFocus
  Else ' 登入SAP成功
   Command1.Enabled = False
   Command2.Enabled = True
   test.Enabled = True
  End If

  StatusBar1.SimpleText = ""
  StatusBar1.Visible = False
 End If
End Sub

Private Sub Command2_Click() ' 登出SAP登入
 Connect.LogOff
 Command2.Enabled = False
 Command1.Enabled = True
 test.Enabled = False
End Sub

Private Sub Command3_Click() ' 退出SAP介面示範程式
 If Form1.Command2.Enabled Then
  MsgBox "退出前請斷開SAP R/3系統!", vbOKOnly + vbInformation, "系統提示"
 Else
  End
 End If
End Sub

Private Sub Form_Load()
 Command2.Enabled = False
 test.Enabled = False
 logoflag = False
End Sub

Private Sub test_Click() ' SAP RFC遠程調用處理主示範
 Dim GetCustomers As Object
 Dim Customers As Object
 Dim i As Integer
  ' 通過RFC介面遠程運行SAP內建函式RFC_CUSTOMER_GET
 ' 賦要調用的SAP內建函數名
 Set GetCustomers = Functions.Add("RFC_CUSTOMER_GET")

 GetCustomers.Exports("KUNNR") = "0000000103" ' 向函數入口賦值(客戶代碼)
 ' 向函數入口賦查詢表名稱
 Set Customers = GetCustomers.Tables("CUSTOMER_T")

 If GetCustomers.Call Then ' 調用成功遍曆顯示客戶所有資訊條目
  For i = 1 To Customers.rowcount
   MsgBox Customers(i, "KUNNR")
  Next i
 Else
  MsgBox " 搜尋出錯! 出錯資訊: " + GetCustomers.Exception
 End If
End Sub

  SAP的RFC調用是其介面技術中最簡單和易用的一種方式,該方式開發比較簡便,特別適合於外部報表開發,但對於大資料量的查詢效率相對較低。大家在熟練掌握後,可以進一步學習進階的IDOC和BAPI介面開發技術。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.