C# 使用 SapNwRfc 调用SAP RFC

好久没写过相关代码,今天又来贡献一篇 C# 使用 SapNwRfc 调用SAP RFC。用VS2022的WINFORM应用程序,使用NuGet中的SapNwRfc类库,call SAP系统中的RFC,传入7个参数,得到RFC返回的2张表的数据。

一、VS2022中新建WINFORM,Nuget中安装SapNwRfc组件。

二、WINFORM中,放两个LISTVIEW显示最后SAP返回的表数据

三、程序点击按钮,代码开一个单独线程处理CALL SAP的RFC,RFC运行后,返回2张表的数据,在LISTVIEW中显示出来。

四、SAP中的RFC定义:

表一结构:

​​​​​​​

表二结构:

五、全部C#代码,用Listview显示数据也是很快的,只要使用好 listView1.BeginUpdate();和 listView1.EndUpdate();把他们放在循环填数的外面:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using SapNwRfc;namespace SAPRFC2024
{public partial class Form1 : Form{public Form1(){Control.CheckForIllegalCrossThreadCalls = false;InitializeComponent();var l1 = new ColumnHeader(); l1.Text = "Z_BOM_LINE";    l1.Width = 200;   listView1.Columns.Add(l1);var l2 = new ColumnHeader(); l2.Text = "TEXT";          l2.Width = 150;   listView1.Columns.Add(l2);var l3 = new ColumnHeader(); l3.Text = "MATNR";         l3.Width = 200;   listView1.Columns.Add(l3);var l4 = new ColumnHeader(); l4.Text = "QUANTITY";      l4.Width = 50;    listView1.Columns.Add(l4);var l5 = new ColumnHeader(); l5.Text = "MEIN";          l5.Width = 50;    listView1.Columns.Add(l5);var l6 = new ColumnHeader(); l6.Text = "WORKSTATION";   l6.Width = 200;   listView1.Columns.Add(l6);var l7 = new ColumnHeader(); l7.Text = "Z_TYPE";        l7.Width = 50;    listView1.Columns.Add(l7);var h1 = new ColumnHeader(); h1.Text = "MNAME";         h1.Width = 200; listView2.Columns.Add(h1);var h2 = new ColumnHeader(); h2.Text = "ATBEZ";         h2.Width = 150; listView2.Columns.Add(h2);var h3 = new ColumnHeader(); h3.Text = "MWERT";         h3.Width = 200; listView2.Columns.Add(h3);var h4 = new ColumnHeader(); h4.Text = "ATWTB";         h4.Width = 50;  listView2.Columns.Add(h4);}private void toolStripButton1_Click(object sender, EventArgs e){Thread lsThread = new Thread(new ThreadStart(callsap));lsThread.IsBackground = true;lsThread.Start();}void callsap(){string connectionString = "AppServerHost=10.XXX.XXX.XXX; SystemNumber=00; User=XXXXXX;Password=XXXXXX; Client=XXXX; Language=ZH; PoolSize=5; Trace=8";var connection = new SapConnection(connectionString);connection.Connect();toolStripStatusLabel1.Text = "Logon SAP Server...";var someFunction = connection.CreateFunction("ZSAP_CU50_OUT");var result = someFunction.Invoke<return_table>(new SomeFunctionParameters{WERKS = "XXXXX",MATNR = "XXXXX",BADAT = "20240126",PM = "XXXXX",CC = "CC12",PA = "PA60",PKG = "XXXXX",});toolStripStatusLabel1.Text = "BOM:" + result.Itemsa.Count().ToString() + " CFG:" + result.Itemsb.Count().ToString();listView1.BeginUpdate();listView2.BeginUpdate();foreach (var one in result.Itemsa){ListViewItem item = new ListViewItem(one.Z_BOM_LINE);item.SubItems.Add(one.TEXT);item.SubItems.Add(one.MATNR);item.SubItems.Add(one.QUANTITY);item.SubItems.Add(one.MEIN);item.SubItems.Add(one.WORKSTATION);item.SubItems.Add(one.Z_TYPE);listView1.Items.Add(item);                }foreach (var one in result.Itemsb){ListViewItem item = new ListViewItem(one.MNAME);item.SubItems.Add(one.ATBEZ);item.SubItems.Add(one.MWERT);item.SubItems.Add(one.ATWTB);listView2.Items.Add(item);}listView1.EndUpdate();listView2.EndUpdate();}}class return_table{[SapName("OT_BOM_LIST")]public TableAItem[] Itemsa { get; set; }[SapName("OT_BOM_CFG")]public TableBItem[] Itemsb { get; set; }}class TableAItem{[SapName("Z_BOM_LINE")]public string Z_BOM_LINE { get; set; }[SapName("TEXT")]public string TEXT { get; set; }[SapName("MATNR")]public string MATNR { get; set; }[SapName("QUANTITY")]public string QUANTITY { get; set; }[SapName("MEIN")]public string MEIN { get; set; }[SapName("WORKSTATION")]public string WORKSTATION { get; set; }[SapName("Z_TYPE")]public string Z_TYPE { get; set; }}class TableBItem{[SapName("MNAME")]public string MNAME { get; set; }[SapName("ATBEZ")]public string ATBEZ { get; set; }[SapName("MWERT")]public string MWERT { get; set; }[SapName("ATWTB")]public string ATWTB { get; set; }}class SomeFunctionParameters{[SapName("WERKS")]public string WERKS { get; set; }[SapName("MATNR")]public string MATNR { get; set; }[SapName("BADAT")]public string BADAT { get; set; }[SapName("PM")]public string PM { get; set; }[SapName("CC")]public string CC { get; set; }[SapName("PA")]public string PA { get; set; }[SapName("PKG")]public string PKG { get; set; }}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nodejs前端学习Day1_补档

我给day1搞没了&#xff0c;还是觉得该补一个&#xff0c;有用 文章目录 前言一、学习目标二、学习目录三、为什么JavaScript代码可以在浏览器中运行四、为什么JavaScript可以操作DOM和BOM五、浏览器中的JavaScript运行环境总结 前言 补档 一、学习目标 二、学习目录 三、为什…

RustDesk私有化部署,自建远程桌面搭建教程

以linux操作系统为例&#xff1a; 解压安装 # 使用wget进行下载1.1.8-2版本&#xff08;最新版本可以看上述发布地址&#xff09; wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.8-2/rustdesk-server-linux-amd64.zip # 使用unzip解压 unzip rust…

Hive3.1.3基础

参考B站尚硅谷 目录 什么是HiveHive架构原理 Hive安装Hive安装地址Hive安装部署安装Hive启动并使用Hive MySQL安装安装MySQL配置MySQL 配置Hive元数据存储到MySQL配置元数据到MySQL Hive服务部署hiveserver2服务metastore服务编写Hive服务启动脚本&#xff08;了解&#xff09…

EventSource 长链接执行

EventSource 说明文档MDN 其他参考文档 一、利用node启服务 import fs from fs import express from express const app express() // eventSource 仅支持 get 方法 // 服务器端发送的数据必须是纯文本格式&#xff0c;不能是二进制数据。 app.get(/api, (req, res) > …

table用position: sticky固定多层表头,滑动滚动条border边框透明解决方法

问题&#xff1a;我们发现&#xff0c;只要设置了border边框&#xff0c;这个位置滑动有内容经过就会出现如图的情况。 解决的方法&#xff1a;用outline&#xff08;轮廓&#xff09;替代border,以达到我们想要的样式。 table thead tr {border: none;outline-color: #fff;ou…

Redis(八)哨兵机制(sentinel)

文章目录 哨兵机制案例认识异常 哨兵运行流程及选举原理主观下线(Subjectively Down)ODown客观下线(Objectively Down)选举出领导者哨兵选出新master过程 哨兵使用建议 哨兵机制 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新…

excel 设置密码保户

目录 前言设置打开密码设置编辑密码 前言 保户自己的数据不被泄漏是时常有必要的&#xff0c;例如财务数据中最典型员工工资表&#xff0c;如果不设置密码后果可想而知&#xff0c;下面我们一起来设置excel查看密码和编辑密码。我用的是wps,其它版本类似&#xff0c;可自行查资…

已经安装了CUDA,但是cmd执行nvcc -V报错:nvcc不是内部或外部命令,也不是可运行的程序或批处理文件

请注意&#xff0c;查看版本的指令是nvcc --version或nvcc -V&#xff0c;注意区分大小写 如果还是不能输出版本信息&#xff0c;那这个原因可能是由于没有在系统环境变量里添加CUDA。 先来看看CUDA是否安装成功&#xff1a; 在CUDA的安装路径下找到bandwidthTest.exe 和 devi…

一种通过增强的面部边界实现精确面部表示的多级人脸超分辨率

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 摘要Abstract文献阅读&#xff1a;一种通过增强的面部边界实现精确面部表示的多级人脸超分辨率二、使用步骤1、研究背景2、方法提出3、相关方法3.1、FSR网络结构3.2…

26.各品类中商品价格的中位数(ceil与floor函数)

题目&#xff1a; 题解&#xff1a; --这道题主要考察中位数的取法 SELECT category_id,cast(sum(price)/count(1) as DECIMAL(16,2)) medprice from( SELECTcategory_id,price,rn,max(rn)over(partition by category_id) max_rn from(SELECTcategory_id,price,row_number() …

Emergent Abilities of Large Language Models 机翻mark

摘要 证明通过扩大语言模型可以可靠地提高性能和样本效率在广泛的下游任务。相反&#xff0c;本文讨论了我们称之为大型语言模型的新兴能力的一种不可预测的现象。我们认为如果一个能力不存在于较小的模型中&#xff0c;但在较大的模型中存在&#xff0c;则该能力就是新兴的。…

开发微信小程序,将图片下载到相册的方法,saveImageToPhotosAlbum怎么用

在开发微信小程序的时候&#xff0c;经常能看到小程序里面有下载按钮&#xff0c;如何将小程序中的图片下载到手机相册中那&#xff0c;下面给大家说一下怎么做&#xff0c;代码如何去写。 一、到微信小程序后台开启“用户隐私保护指引” 1.进入小程序后台&#xff0c;侧拉拉到…

牛刀小试 - C++ 推箱子小游戏

参考文档 C笔记&#xff1a;推箱子小游戏 copy函数 memcpy()函数用法&#xff08;可复制数组&#xff09; 使用memcpy踩出来的坑&#xff0c;值得注意 完整代码 /********************************************************************* 程序名:推箱子小游戏 说明&#x…

前端怎么监听手机键盘是否弹起

摘要&#xff1a; 开发移动端中&#xff0c;经常会遇到一些交互需要通过判断手机键盘是否被唤起来做的&#xff0c;说到判断手机键盘弹起和收起&#xff0c;应该都知道&#xff0c;安卓和ios判断手机键盘是否弹起的写法是有所不同的&#xff0c;下面讨论总结一下两端的区别以及…

EMQX 单机及集群搭建

目录 1. 通过 Yum 源安装&#xff08;CentOS7 单机安装&#xff09; 1.1. 通过以下命令配置 EMQX Yum 源&#xff1a; 1.2. 运行以下命令安装 EMQX&#xff1a; 1.3. 运行以下命令启动 EMQX&#xff1a; 1.4. 访问 http://192.168.88.130:18083&#xff0c;默认用户名: adm…

C++ 重点内容:友元

目录 友元函数&#xff1a; 友元成员函数&#xff1a; 友元类&#xff1a; 友元是否有悖于OOP? 总结&#xff1a; 类因为具有封装和信息隐藏的特性&#xff08;类外函数无法访问类的私有、保护成员&#xff09;&#xff0c;C提出友元解决特定的编程需要&#xff1b;友元分…

idea用version标签配置版本号报错版本号missing

问题描述&#xff1a; 用<mybatis-plus.version>3.3.2</mybatis-plus.version>配置pom的版本号&#xff0c;报错 dependencies.dependency.version for com.baomidou:mybatis-plus-boot-starter:jar is missing. line 33, column 21详细报错如下&#xff1a; 详…

安卓开发——Activity及常用布局和控件的使用

Activity及常用布局和控件的使用 一、实验目的 掌握Android常用布局和控件的使用。 Activity组件使用和Intent机制&#xff0c;加强对Activity生命周期的理解 二、实验设备及器件 Android Studio&#xff0c;图标&#xff1a;http://10.37.59.210/download/icon/MobileShopI…

记签名机制

签名过程&#xff1a; 首先将数据源通过摘要算法获取到数字摘要 对数字摘要用私钥进行加密得到签名 将原始消息 以及签名发送给消息接收方 接收方用公钥解密得到数字摘要 用同样的摘要算法将原始消息进行计算 比较得到的数字摘要与解密后的是否一致 Android学习笔记——Androi…

网络分层和网络原理之UDP和TCP

温故而知新 目录 网络分层 应用层 http协议 传输层 介绍 UDP协议 TCP协议 网络层 数据链路层 物理层 网络分层 一. 应用层 应用程序 现成的应用层协议有超文本协议http(不仅仅有文本&#xff09;. http协议 http://t.csdnimg.cn/e0e8khttp://t.csdnimg.cn/e0e8k 自定义应…