利用Visual Basic開發SAP介面程式初探-RFC

qiujun發表於2007-10-24

  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介面開發技術。

  • 來源:天極網
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90072/viewspace-978374/,如需轉載,請註明出處,否則將追究法律責任。

相關文章