## 像調用 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