利用 SapNwRfc 在.net/c# 中跨系统调用 SAP RFC 功能,执行SAP中的函数
利用 SapNwRfc 在.net/c# 中跨系统调用 SAP RFC 功能,执行SAP中的函数
SapNwRfc -C#中使用的核心组件,在 framework .NET 5 平台使用
本文是在 .net 4.6.2 上测试使用,
实现效果如下,输入料号,点button1, 即可通过该winform,远程调用sap函数,然后返回 料号的 描述到 winform 画面上

步骤如下:
1. SAP中se37建立一个函数:ZKAVEN_F001 ,注意勾上启用远程模式。
该函数作用就是输入一个料号,查询出该料号的描述,和得到一个类似mara 表的关于物料代码信息的内表

输入参数:

输出参数:

输出表:

代码:很简单,就是获取一个料号描述给到上面的输出参数,给一个内表到上面的参数表

先sap自行测试下:
 
 
可以得到一个描述 和一个内表, 共两个输出

以上是SAP 中函数建立过程,没啥问题,sap自行测试已通过。
2.打开visual studio 2022, 创建一个.NET Framework 项目

本文用的.net4.6.2,最高可选到4.8

NuGet 搜索 SapNwRfc 并安装

winform画面添加一个 textbox,label ,button

后端完整先引用
using SapNwRfc;
完成代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using SapNwRfc; namespace SAPnwRFC_framework { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { callsap(); } void callsap() { string connectionString = "AppServerHost=10.100.100.100; SystemNumber=10; User=xx;Password=XXX; Client=7X0; Language=ZH; PoolSize=5; Trace=8"; var connection = new SapConnection(connectionString); connection.Connect(); label1.Text = "Logon SAP Server..."; var someFunction = connection.CreateFunction("ZKAVEN_F001"); //执行的sap 函数 var result = someFunction.Invoke<return_table>(new SomeFunctionParameters //执行sap 函数 { L_MATNR = textBox1.Text, }); label1.Text = result.L_MAKTX.ToString(); //得到SAP 输出单个值内容 connection.Disconnect(); } class SomeFunctionParameters //sap 输入内容 { [SapName("L_MATNR")] public string L_MATNR { get; set; } } class return_table //sap 输出内容 { [SapName("IT_MARA")] public TableAItem[] Itemsa { get; set; } [SapName("L_MAKTX")] public string L_MAKTX { get; set; } } class TableAItem //sap 输出的内表的数据,可以自行扩展 { [SapName("MATNR")] public string MATNR { get; set; } [SapName("ERNAM")] public string ERNAM { get; set; } } } }
以下是RFC连接参数的常见属性及其说明:
- 
DestinationName: 必需。指定目标连接的名称,这是在SAP系统中配置的RFC目标的名称。
- 
Client: 可选。指定RFC目标客户端。如果未指定,则使用默认客户端。
- 
User: 可选。指定用于连接的用户名。如果未指定,则使用登录用户名。
- 
Password: 可选。指定与User字段关联的密码。
- 
Language: 可选。指定在RFC目标上使用的语言。如果未指定,则使用SAP系统的默认语言。
- 
SystemNumber: 可选。指定目标系统的系统号。如果未指定,则使用默认的系统号。
- 
SystemID: 可选。指定目标系统的系统ID。如果未指定,则使用默认的系统ID。
- 
LogonGroup: 可选。指定登录组。如果未指定,则使用默认的登录组。
- 
PoolSize: 可选。指定连接池的大小。如果未指定,则使用默认的连接池大小。
- 
IdleTimeout: 可选。指定连接在自动关闭前可以保持空闲的时间(秒)。
- 
MaxPoolSize: 可选。指定连接池的最大大小。
- 
NoCompression: 可选。指定是否禁用对RFC目标的调用的压缩。
- 
Encrypted: 可选。指定是否对RFC目标的调用进行加密。
- 
Host: 可选。指定RFC目标的主机名或IP地址。
- 
Port: 可选。指定RFC目标的端口号。
- 
PartnerBytes: 可选。指定通过RFC连接传输的字节数。
- 
RfcRole: 可选。指定RFC角色。
- 
Exclusive: 可选。指定是否以独占模式连接到SAP系统。
- 
Asynchronous: 可选。指定是否以异步方式处理RFC调用。
- 
Retry: 可选。指定在放弃之前尝试进行RFC调用的次数。
- 
RetryDelay: 可选。指定两次重试尝试之间的延迟(秒)。
- 
AbapStatistics: 可选。指定是否获取ABAP统计信息。
- 
SapRouter: 可选。指定是否使用SAP路由器。
- 
MsgDest: 可选。指定消息目标的名称。
- 
Group: 可选。指定RFC目标组。
- 
SncMode: 可选。指定同步/异步RFC连接的安全网络通信模式。
- 
SncQoS: 可选。指定SNC服务质量设置。
- 
SncMyName: 可选。指定SNC本地名称。
- 
SncPartnerName: 可选。指定SNC伙伴名称。
- 
SncLibraryPath: 可选。指定SNC库的路径。
- 
SncQoP: 可选。指定SNC服务质量配置。
- 
Trace: 可选。指定跟踪级别。
- 
TraceDirectory: 可选。指定跟踪文件的目录。
- 
CodePage: 可选。指定代码页。
- 
Passwd: 可选。指定与用户名关联的加密密码。
- 
LogonCheck: 可选。指定是否进行登录检查。
- 
MaxMessageSize: 可选。指定
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号