利用 VB6 開發 SAP 連結程式
作者:馮強
出處: 天極開發
SAP R/3 內建開發平台,使用的開發語言叫做ABAP,是一種類似於COBOL的編程語言。ABAP在報表輸出方面功能相對較弱(只能逐行列印在畫面上或者匯出到Excel中處理),所以日常工作中經常需要在外部開發程序。通過程式連結自動讀取SAP R/3的資料庫(視圖),在外部進行處理和利用Crystal Report 等工具產生符合國人習慣的報表樣式。
SAP R/3的連接方式主要有RFC、IDOC、BAPI三種,本文要介紹的是相對比較簡單的RFC(Romote Function Call,遠端呼叫函數)。SAP系統 RFC 呼叫的原理其實很簡單,有一些類似於三層構架的C/S系統,第三方的 Client 程式通過連接呼叫 SAP內部的標準或自訂函數,取得函數傳回的資料後進行處理後顯示或列印。下面是RFC呼叫的模型:
下面主要以 VB6 為例介紹一下 SAP 呼叫 RFC 的開發方式。在SAP client 端(SAP Gui Client) 安裝的時候,注意選擇安裝附加的 SDK package(最保險是選擇完全安裝)。RFC 呼叫程式開發,主要用的是 “SAP.Functions” 這個控件,透過元件在外部程式模擬 SAP Gui Client 的用戶登入和函數呼叫,然後傳回函數的回傳值。以下是下面的程式和重點註解(尤其是test_Click()):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 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" ' ERP 伺服器 IP R3Client = "800" 'ERP 集團代碼 R3SystemNo = "00" '生產系統號 Else R3AppServer = "10.3.3.1" ' ERP 開發平台 IP R3Client = "101" R3SystemNo = "00" End If Unload Form2 ' 釋放 Form2 , 所有元件及變數不可使用 Set Functions = CreateObject("Sap.Functions") ' 建立 RFC 的本機元件 Set Connect = Functions.Connection ' 設置連接 Connect.ApplicationServer = R3AppServer ' 連接 Server IP Connect.Client = R3Client ' 連線 SAP Client ID Connect.Language = "EN" ' 連接 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") = "L001765" ' 向函數入口連線(客戶代碼) ' 向函數入口傳入查詢表格名稱 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 連接開發技術。