Skip to content

有害部落格同好會

2007/01/25 / Others

利用 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呼叫的模型:
SAP模型

下面主要以 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

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 連接開發技術。

Post navigation

Previous Post:

永遠有兩個機會

Next Post:

Calling BAPIs from VB6

分類

  • 新奇有趣の搶先報導
    • Raspberry Pi
    • 手機相關
    • 推薦軟體
    • 新鮮有趣
    • 生活資訊
  • 想破腦袋の程式技巧
    • Oracle EBS
    • Database
    • Excel, VBA
    • php
    • JavaScript, VBScript
    • VS.NET
    • Others
    • Windows
    • SAP
  • 撩動心弦の短文小品
  • 聚沙成塔の理財守則
  • 不可不知の職場實錄
  • 剎那永恆の生活翦影

近期文章

  • 受保護的內容: 如何透過Personalize功能呼叫另一form來回傳值
  • Win10 / 8 / 7 無法安裝 SSD
  • 受保護的內容: 樹梅派+遠端連線
  • EBS R12 取得客戶的phone, email, URL資料
  • 受保護的內容: 管控Workflow Administrator Role

友站

  • Masaya396's 協奏曲
  • 老塗的咁仔店

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

Tag Cloud

你目前使用的瀏覽器不支援 HTML5 的 CANVAS 標籤。

  • 感情
  • Oracle EBS
  • Oracle DB
  • SAP
  • SQL
  • WinXP
  • php
  • LDAP
  • EBS 12.1.3
  • VB6
  • javascript
  • excel
  • EBS 11.5.10
  • VBA
  • CSS
  • 管理
  • Win7
  • HTC
  • VB.Net
  • MySql
© 2025 有害部落格同好會 - Powered by SimplyNews