天天看點

oracle bpm 讀取webservice,像調用 WebService 一樣進行 SAP 的 RFC 調用

## 像調用 WebService 一樣進行 SAP 的 RFC 調用

#### 資訊擷取

1. 獲得 SAP 的連接配接參數

2. 獲得 RFC 方法名稱清單、每個方法對應的參數及其用途

#### 開始準備

1. 確定項目 .NET 版本不低于 4.0,編譯模式設定為 x86

2. 從 nuget 引用 SAP.RFC 包,編譯項目

3. 把 bin 檔案夾複制到「能連接配接 SAP 伺服器的電腦」上(如果本機開發環境不能直接通路 SAP 伺服器的話)

4. 進入 bin 檔案夾,輕按兩下運作 SAP.RFC.exe

5. 編輯 SAP.RFC.txt,第一行設定 SAP 伺服器連接配接參數,從第二行起,每行寫一個 RFC 方法名稱

6. 重新運作 SAP.RFC.exe,正常情況下會在 bin 中生成 SAP.RFC.Client.dll ,将其引用到項目中

> - RFC 方法會被編譯到 SAP.RFC.Client.dll 中(每個 RFC 方法會對應一個 class,例如方法 `EFLOW_001` 會編譯成 `RFC_EFLOW_001` 的類)

> - 如果 SAP 中增加了新的 RFC 方法,或者原有方法的參數發生了變化, 隻需要重複上面 5-6 兩步即可。

> - 如果沒有生成 SAP.RFC.Client.dll 或者沒有包含對應的 RFC 方法,可能是 SAP 連接配接參數錯誤或者 RFC 方法名稱不正确。

#### 調用 RFC 方法

1. 確定目前項目引用了 nuget 上面的 SAP.RFC 包,和上一步生成的 SAP.RFC.Client.dll

2. 在 Global.asax.cs 的 applicaiton_start 中設定 SAP 連接配接參數

`SAP.RFC.RFCBase.GetConnString = ()=> "SAP連接配接參數,參考上一步txt中的内容,推薦從 CfgHelper.xml 中擷取";`

3. 直接調用 RFC 方法(靜态方法) `RFC_EFLOW_001.Invoke(new RFC_EFLOW_001.Query{}, 100)`

- 第一個參數是 Query 對象,表示輸入參數

- 第二個參數是數字,相當于 SQL 查詢中的 top 參數。(針對包含 table 類型的結果)

- 傳回值是 Result 對象,表示輸出結果

#### 異常備忘

**未能加載檔案或程式集'sapnco_ utils.DLL ”或它的某一個依賴項。 找不到指定的子產品。**

![](https://img.kancloud.cn/c3/50/c3501e84a148243d78619a533ca9bde0_1366x736.png)

解決方案:伺服器下載下傳安裝【Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)】

位址:https://www.microsoft.com/zh-cn/download/details.aspx?id=8328