利用 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: 可选。指定

posted @   轻烟随风  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示