惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
D
DataBreaches.Net
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 【当耐特】
人人都是产品经理
人人都是产品经理
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
腾讯CDC
博客园_首页
The Cloudflare Blog
S
SegmentFault 最新的问题
C
Check Point Blog
美团技术团队
爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale

博客园 - 轻烟随风

SAP FICO财务模块常见BAPI函数清单 SAP 中 MB52 用到的核心函数和表 SAP SMW0 配置EXCEL 上载模板,供其他tcode 下载模板 SAP ABAP 查看TCODE enhanced 增强点,se38 批量查看 利用 SapNwRfc 在.net/c# 中跨系统调用 SAP RFC 功能,执行SAP中的函数 SAP ABAP 在alv报表上建立菜单栏工具栏 SAP ABAP ALSM_EXCEL_TO_INTERNAL_TABLE 导入excel 和 GUI_UPLOAD 导入 txt SAP ABAP BAPI_PRODORD_CHANGE 修改生产订单基本信息 项目管理-十大管理-信息系统项目管理师 sql server sa 账号登录失败,需开启混合身份验证 Vue pnpm run dev 出现 'vite' 不是内部或外部命令,也不是可运行的程序 SAP ABAP collect 函数 SAP ECC 740 创建表的索引 Oracle 查看死锁的相关sql 语句代码 SAP ABAP 函数CS_BOM_EXPL_MAT_V2获取CS03的bom 列表 SAP 客户端 GUI 的画面功能介绍 SAP ABAP 中的 STOP EXIT CHECK 的区别 SAP ABAP ISM_SD_GET_PRICING_CONDITIONS 订单价格定价 SAP ABAP 弹出对话框进行确认提醒的函数POPUP_TO_CONFIRM
利用 Sapnco 在.net/c# 中跨系统调用 SAP RFC 功能,执行SAP...
轻烟随风 · 2025-02-21 · via 博客园 - 轻烟随风

利用Sapnco 在.net/c# 中跨系统调用 SAP RFC 功能,执行SAP中的函数

Sapnco  -C#中使用的核心组件,sap官网有下,本文使用的版本在 framework  平台使用,

sap 官网地址,但是下载要权限,全名称为: 

SAP Connector for Microsoft .NET ,链接:https://support.sap.com/en/product/connectors/msnet.html?anchorId=section_512604546

核心功能其实就是用到两个dll:

sapnco.dll

sapnco_utils.dll

没有的可以到这个网盘下载  网盘地址

提取码: vhjz  

本文是在 .net 4.8 上测试使用

实现效果如下,输入料号,点button1, 即可通过该winform,远程调用sap函数,然后返回 料号的 描述到 winform 画面上

步骤如下:

1. SAP中se37建立一个函数:ZKAVEN_F001 ,注意勾上启用远程模式。

该函数作用就是输入一个料号,查询出该料号的描述,和得到一个类似mara 表的关于物料代码信息的内表 

输入参数:

输出参数:

 输出表:

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

 先sap自行测试下:

 

可以得到一个描述 和一个内表, 共两个输出

 以上是SAP 中函数建立过程,没啥问题,sap自行测试已通过。

2.打开visual studio 2022, 创建一个.NET Framework 项目

 本文用的 .net 4.8

右击项目,添加引用,引用下载的 两个dll

程序中先 using SAP.Middleware.Connector; 

winform 添加3个组件 textbox label button

完成代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SAP.Middleware.Connector;

namespace WindowsFormSAP_RFC1
{
    public partial class Form1 : Form
    {
     
        public Form1()
        {
            InitializeComponent();
        }

        public void nco()
        {
            RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000");
            // RfcDestinationManager.UnregisterDestinationConfiguration(ID);  //返注册
            nco(prd);
        }
        public void nco(RfcDestination prd)
        {
            RfcRepository repo =  prd.Repository;
            IRfcFunction companyBapi = repo.CreateFunction("ZKAVEN_F001");   //调用函数名
            companyBapi.SetValue("L_MATNR", this.textBox1.Text.ToString());   //设置Import的参数
            companyBapi.Invoke(prd);   //执行函数
            IRfcTable table = companyBapi.GetTable("IT_MARA");  //获取相应的品号内表
            string MAKTX = companyBapi.GetValue("L_MAKTX").ToString();  //获取品名

            this.label1.Text = MAKTX;   //显示品名
            prd = null;
            repo = null;
        }
        //登陆SAP前的准备工作
        public class MyBackendConfig : IDestinationConfiguration
        {
            public RfcConfigParameters GetParameters(String destinationName)
            {
                if ("PRD_000".Equals(destinationName))
                {
                    RfcConfigParameters parms = new RfcConfigParameters();
                    parms.Add(RfcConfigParameters.Name, "PRD_000");
                    parms.Add(RfcConfigParameters.AppServerHost, "10.100.112.11");   //SAP主机IP
                    parms.Add(RfcConfigParameters.SystemNumber, "10");  //SAP实例


                    parms.Add(RfcConfigParameters.User, "xxx");  //用户名
                    parms.Add(RfcConfigParameters.Password, "xxxxx");  //密码
                    parms.Add(RfcConfigParameters.Client, "710");  // Client
                    parms.Add(RfcConfigParameters.Language, "ZH");  //登陆语言
                    parms.Add(RfcConfigParameters.PoolSize, "5");

                    return parms;
                }
                else return null;
            }
            public bool ChangeEventsSupported()
            {
                return false;
            }
            public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            IDestinationConfiguration ID = new MyBackendConfig();  //连接池
            RfcDestinationManager.RegisterDestinationConfiguration(ID);
            nco();
        }
    }
}

 另一边利用 SapNwRfc 实现同样功能,可参考 链接:https://www.cnblogs.com/cnishop/p/18729102