利用 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
: 可选。指定
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异