日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用VB开发SAP接口程序

發(fā)布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用VB开发SAP接口程序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

SAP R/3系統(tǒng)是業(yè)界最先進、最穩(wěn)定的ERP系統(tǒng),國際和國內(nèi)大型企業(yè)采用該系統(tǒng)的比例遙遙領(lǐng)先于其它ERP系統(tǒng)的總和。SAP R/3內(nèi)建了二次開發(fā)平臺,使用的開發(fā)語言叫做ABAP,是一種類似于COBOL的編程語言。ABAP在報表輸出方面功能相對較弱(只能按行打印在屏幕上或者導(dǎo)出到Excel中處理),所以日常工作中經(jīng)常需要在外部開發(fā)程序。通過程序接口自動讀取SAP R/3的數(shù)據(jù)表(視圖),在外部進行處理和利用水晶報表等工具生成符合中國人習(xí)慣的報表樣式。

  SAP R/3的接口方式主要有RFC、IDOC、BAPI三種,本文要介紹的是相對比較簡單的RFC(Romote Function Call,遠(yuǎn)程函數(shù)調(diào)用)。SAP系統(tǒng)RFC調(diào)用的原理其實很簡單,有一些類似于三層構(gòu)架的C/S系統(tǒng),第三方的客戶程序通過接口調(diào)用SAP內(nèi)部的標(biāo)準(zhǔn)或自定義函數(shù),獲得函數(shù)返回的數(shù)據(jù)進行處理后顯示或打印。下面是RFC調(diào)用的模型:

  本文主要不是討論SAP R/3函數(shù)的開發(fā),因為使用SAP的公司一般都有專門的ABAP開發(fā)人員。大家如果有機會接觸ABAP平臺,可以通過事務(wù)代碼SE37進入ABAP開發(fā)平臺的"函數(shù)編制器"進行函數(shù)開發(fā)測試。

下面主要以VB為例介紹一下SAP接口RFC的開發(fā)思路。在SAP客戶端SAP Gui Client安裝的時候,注意選擇安裝附帶的SDK包(最保險是選擇完全安裝)。RFC接口程序開發(fā),主要用的是"SAP.Functions"這個控件,通過控件在外部程序模擬SAP Gui Client的用戶登錄和函數(shù)調(diào)用,然后返回函數(shù)的值。請看下面的程序片段和重點注解(尤其是CmdAdd_Click()):

?

VB 代碼:

?

'---QUERY / SELECTALL / CREATE / EDIT / DELETE /
Private Sub CmdAdd_Click()
??? '添加記錄
??? On Error GoTo myer

Dim Functions As Object
????? Dim Connect As Object

??? Dim logname As String, password As String
??? Dim xi
??? Dim func As Object
??? Dim TT As Object

???
??? Set Functions = CreateObject("Sap.Functions.Unicode")?? ' 創(chuàng)建RFC的本地對象
??? Set Connect = Functions.Connection???????????????? ' 設(shè)置連接

?? Connect.ApplicationServer = "192.168.1.108"
??? Connect.Client = "811"
??? Connect.SystemNumber = "00"
??? Connect.Language = "ZH"
??? Connect.User = "LIANXI02"
??? Connect.password = "sap123"


??? If Not Connect.logon(0, True) Then????????????? ' 軟件登錄SAP并判斷

????? MsgBox "登錄SAP R/3失敗,請重新登錄!" + Err.Description, vbOKOnly + vbExclamation, "系統(tǒng)提示"
????? Exit Sub
??? Else ' 登錄SAP成功


??????
??????? Set func = Functions.Add("ZRFC_01")??? '--ZRFC_01 是SAP里的函數(shù) se37
??????? Set TT = func.tables("ZTEMPTABLE")
??????? func.Exports("ACTION") = "CREATE"

??????? With TT
??????????? 'Next we set fields to obtain
??????????? 'Refresh table
??????????? TT.FreeTable
??????????? 'Then set values,類似與ADDNEW
??????????
??????????? 'xi是獲取當(dāng)前表的行數(shù),以便定位記錄行
??????????? '此處在賦值時,用字段名稱來表示列,也可以用數(shù)字來表示,比如TT(xi, 1) = "iii"
??????????? '注意:行和列都是從1開始,不是從0開始計數(shù)
??????????? TT.Rows.Add
??????????? xi = TT.rowcount
??????????? TT(xi, "MATNR") = "Z1001"
??????????? TT(xi, "MAKTX") = "單機頭"
??????????
??????????? TT.Rows.Add
??????????? xi = TT.rowcount
??????????? TT(xi, "MATNR") = "Z1002"
??????????? TT(xi, "MAKTX") = "包材1"
??????????
??????????? TT.Refresh
??????????
??????? End With

??????? If func.call = True Then
????????
????????? x = func.imports("RETURN")
????????? y = func.imports("ERRNUM")
????????
????????? Debug.Print "x:" & x
????????? Debug.Print "y:" & y

??????? Else
??????????? MsgBox "call failed!"
??????? End If

??? End If
??? Connect.LogOff
??? Exit Sub
myer:
??? MsgBox Err.Description, vbInformation, "Info"
End Sub

?

?

SAP 里的函數(shù)

?FUNCTION?ZRFC_01.
*"----------------------------------------------------------------------
*"*"Local?interface:
*"??IMPORTING
*"?????VALUE(ACTION)?TYPE??/1SAP1/CL_ACH0001
*"?????VALUE(WHEREUSERID)?TYPE??/GC1/DTE_MSG_TXT?OPTIONAL
*"??EXPORTING
*"?????VALUE(RETURN)?TYPE??/AIN/ACT_PUB_PARAMNAME
*"?????VALUE(ERRNUM)?TYPE??/AIN/ACTIVITY_COUNTER
*"??TABLES
*"??????ZTEMPTABLE?STRUCTURE??ZTEST2
*"----------------------------------------------------------------------
tables:ZTEST2.

DATA:
??WA_ZTEMPTABLE?LIKE?ZTEMPTABLE,
??TRANSACTION_ID?LIKE?ARFCTID,
??V_VAILD(1)?TYPE?C.

??V_VAILD?=?'X'.

*?OPEN?A?DATA?TRANSACTION
??CALL?FUNCTION?'TRANSACTION_BEGIN'
????IMPORTING
??????TRANSACTION_ID?=?TRANSACTION_ID.


??CASE?ACTION?.
*按照關(guān)鍵字ZUSERID查詢
?????WHEN?'QUERY'.
??????SELECT?*?FROM?ZTEST2?INTO?TABLE?ZTEMPTABLE?where?MATNR?=?WHEREUSERID.
????????IF?SY-SUBRC?=?0.
????????ELSE.
??????????V_VAILD?=?''.
??????????ERRNUM?=?SY-SUBRC.
????????ENDIF.

*選擇所有的記錄
????WHEN?'SELECTALL'.
??????SELECT?*?FROM?ZTEST2?INTO?TABLE?ZTEMPTABLE.
????????IF?SY-SUBRC?=?0.
????????ELSE.
??????????V_VAILD?=?''.
??????????ERRNUM?=?SY-SUBRC.
????????ENDIF.

*插入記錄
????WHEN?'CREATE'.

??????LOOP?AT?ZTEMPTABLE?INTO?WA_ZTEMPTABLE.
????????INSERT?ZTEST2?FROM?WA_ZTEMPTABLE.
????????IF?SY-SUBRC?=?0.
????????ELSE.
??????????V_VAILD?=?''.
??????????ERRNUM?=?SY-SUBRC.
????????ENDIF.
??????ENDLOOP.

*修改記錄
????WHEN?'EDIT'.

??????LOOP?AT?ZTEMPTABLE?INTO?WA_ZTEMPTABLE.
????????UPDATE?ZTEST2?FROM?WA_ZTEMPTABLE.
????????IF?SY-SUBRC?=?0.
????????ELSE.
??????????V_VAILD?=?''.
??????????ERRNUM?=?SY-SUBRC.
????????ENDIF.
??????ENDLOOP.

*刪除記錄
????WHEN?'DELETE'.

??????LOOP?AT?ZTEMPTABLE?INTO?WA_ZTEMPTABLE.
????????DELETE?ZTEST2?FROM?WA_ZTEMPTABLE.
????????IF?SY-SUBRC?=?0.
????????ELSE.
??????????V_VAILD?=?''.
??????????ERRNUM?=?SY-SUBRC.
????????ENDIF.
??????ENDLOOP.

????WHEN?OTHERS.

??ENDCASE.

*如果V_VALID為X,則表示成功,否則表示失敗,并返回RETURN錯誤代碼
??IF?V_VAILD?=?'X'.
????CALL?FUNCTION?'TRANSACTION_END'
??????EXPORTING
????????TRANSACTION_ID?=?TRANSACTION_ID.
????RETURN?=?''.
??ELSE.
????CALL?FUNCTION?'TRANSACTION_ABORT'
??????EXPORTING
????????TRANSACTION_ID?=?TRANSACTION_ID.
????RETURN?=?'THE?CURRENT?ACTION?IS?FAILURE!'.


??ENDIF.

ENDFUNCTION.

?

說明: ZTEST2表是我自己定義的,包含了這三個字段:MANDT / MATNR /? MAKTX

你也可以換成你自己寫的表或用SAP里的表。

總結(jié)

以上是生活随笔為你收集整理的用VB开发SAP接口程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。