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