C# 使用 SapNwRfc 调用SAP RFC

news2024/11/14 10:37:08

好久没写过相关代码,今天又来贡献一篇 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.coloradmin.cn/o/1414794.html

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

相关文章

三数之和----双指针

https://leetcode.cn/problems/3sum/description/?envType=study-plan-v2&envId=top-100-liked “三数之和”在某些人的口中被叫做“程序员之梦破碎的地方”。既然如此,这个题肯定是有难度的,尤其是其中的细节,很多,很细。 其中nums代表给定的数组,numsSize代表给定数…

短视频矩阵系统软件(源头独立开发)技术php7.40版本开发

短视频矩阵功能构建&#xff1a; 1. 关键词批量比距生成&#xff08;区域词行业词产品词&#xff09; 2. 多平台多账号一站式运营管理 3. 视频内容批量复制生成 4. 视频内容批量多平台投放 5. 视频数据分析及粉丝画像分布统计 6. 智能客服响应 7. 智能私域化线索收集 功…

第七篇【传奇开心果】beeware的toga开发移动应用示例:gui工具包介绍和常用组件使用方法示例

传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、beeware和toga介绍二、Toga常用组件使用方法示例三、归纳总结系列博文目录 beeware的toga开发移动应用示例系列 博文目录 一、beeware和toga介绍 1.BeeWare介绍 BeeWare是一个可以让Python开…

SPA单页面的讲解(超级详细)

目录 一、什么是SPA 二、SPA和MPA的区别 单页应用与多页应用的区别 单页应用优缺点 三、实现一个SPA 原理 实现 hash 模式 history模式 四、题外话&#xff1a;如何给SPA做SEO SSR服务端渲染 静态化 使用Phantomjs针对爬虫处理 一、什么是SPA SPA&#xff08;sin…

JS进阶-深入对象(二)

拓展&#xff1a;深入对象主要介绍的是Js的构造函数&#xff0c;实例成员&#xff0c;静态成员&#xff0c;其中构造函数和Java种的构造函数用法相似&#xff0c;思想是一样的&#xff0c;但静态成员和实例成员和java种的有比较大的差别&#xff0c;需要认真理解 • 创建对象三…

立创EDA学习:设计收尾工作

布线整理 ShiftM&#xff0c;关闭铺铜显示 调整结束后再使用快捷键”ShiftM“打开铺铜 过孔 在空白区域加上一些GND过孔&#xff0c;连接顶层与底层的铺铜。放置好”过孔“后&#xff0c;隐藏铺铜&#xff0c;观察刚才放置的过孔有没有妨碍到其他器件 调整铺铜 先打开铺铜区&…

C++初阶入门之命名空间和缺省参数的详细解析

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 目录 一.前言 二.命名空间 2.1命名冲突的例子 2.2解决方案 2.3命…

机器学习---无偏估计

1. 如何理解无偏估计 无偏估计&#xff1a;就是我认为所有样本出现的概率⼀样。 假如有N种样本我们认为所有样本出现概率都是 1/N。然后根据这个来计算数学期望。此时的数学期望就是我们平常讲 的平均值。数学期望本质就 是平均值。 2. 无偏估计为何叫做“无偏”&#xff1…

设计模式-生成器设计模式

什么是生成器设计模式 众所周知我们设计代码的时候要将代码设计出模块化的&#xff0c;一个功能是一个模块&#xff0c;那么生成器设计模式&#xff0c;是将一个类再度进行了一个拆分&#xff0c;让一个类的内部进行了单一职责化&#xff0c;其实我们在平时开发的时候就会不经…

【QT+QGIS跨平台编译】之七:【libjpeg+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、libjpeg介绍二、文件下载三、文件分析四、pro文件五、编译实践一、libjpeg介绍 libjpeg是一个广泛使用的jpeg图像压缩和解压的函数库,采用 C 语言开发。 2013年1月,Independent JPEG Group发布了版本9,对新引入的无损编码模式进行了改进。2022年1月,发布了版…

Python可执行文件的转换

当开发者向普通用户分享程序时&#xff0c;为了方便用户在未安装Python环境的情况 下能够正常运行&#xff0c;需要将开发好的程序进行打包&#xff0c;转换成用户可运行的文件类 型。本节将介绍在Windows和Linux两种系统下&#xff0c;将Python类型的文件转换成可执 行文件的方…

搞定JACOCO企业实战!实现测试左移!

如何将JACOCO应用到企业实战中&#xff1f; 前言 1、下载 jacoco 官网&#xff1a;https://www.jacoco.org/jacoco/index.html 2、拷贝 jar 包 3、启动 jacocoagent&#xff0c;监控被测项目 java -javaagent:jacocoagent.jarincludes*,outputtcpserver,port6300,addressloca…

Open CASCADE学习|长方体的Brep数据

pload ALL box thebox 1 2 3 dump thebox *********** Dump of thebox ************* Shape : 34, FORWARD Dump of 34 TShapes 一共34个Tshapes&#xff0c;存储如下图所述的拓扑数据 ----------------- Flags : Free, Modified, Checked, Orientable, Closed, Infinit…

PyTorch初探:基本函数与案例实践

正文&#xff1a; 在熟悉了PyTorch的安装和环境配置后&#xff0c;接下来让我们深入了解PyTorch的基本函数&#xff0c;并通过一个简单的案例来实践这些知识。 1. 基本函数 PyTorch的核心是张量&#xff08;Tensor&#xff09;&#xff0c;它类似于多维数组&#xff0c;但可以…

野火霸道V2学习笔记

野火霸道V2学习笔记 STM32F103学习笔记说明基础配置配置KeilMDK配置串口下载程序美化Keil界面配置VScode 理论知识STM32命名方式例子 置位与清零GPIOGPIO简介GPIO和引脚的区别引脚的分类 GPIO 框图讲解保护二极管推挽输出开漏输出补充: 高阻态与悬空复用功能输出输入模式GPIO框…

SkiaSharp:.NET强大而灵活的跨平台图形库

在.Net 6之前&#xff0c;我们一般是使用System.Drawing.Common来生成图像。 但在.Net 6平台需要配置&#xff0c;才能在非Windows平台使用System.Drawing.Common。而从.Net 7开始&#xff0c;非Windows不再允许使用&#xff0c;官方也给我们推荐了几个替代库。 今天我们一起来…

兄弟HL-1208黑白激光打印机清零方法

兄弟HL-1208黑白激光打印机基本参数&#xff1a; 产品类型&#xff1a;黑白激光打印机&#xff08;定位类型家用&#xff09; 最大打印幅面&#xff1a;A4 最高分辨率&#xff1a;600600dpi 黑白打印速度&#xff1a;20ppm 内存标配&#xff1a;1MB&#xff0c;最大&#…

代码随想录算法训练营29期|day31 任务以及具体安排

理论基础 关于贪心算法&#xff0c;你该了解这些&#xff01; 题目分类大纲如下&#xff1a; #算法公开课 《代码随想录》算法视频公开课 (opens new window)&#xff1a;贪心算法理论基础&#xff01; (opens new window),相信结合视频再看本篇题解&#xff0c;更有助于大家…

廖雪峰Python教程实战Day 2 - 编写Web App骨架,运行后不显示网页如何解决

教程代码如下&#xff1a; import logging; logging.basicConfig(levellogging.INFO)import asyncio, os, json, time from datetime import datetimefrom aiohttp import webdef index(request):return web.Response(bodyb<h1>Awesome</h1>)asyncio.coroutine de…

快速幂算法详解

目录 介绍 原理1 实现过程 原理2 取余运算 介绍 快速幂算法的目的就是让计算机很快地求出&#xff0c;暴力相乘的话&#xff0c;电脑要计算b次。用快速幂&#xff0c;计算次数在级别&#xff0c;很实用。 原理1 (1)如果将a自乘一次&#xff0c;就会变成。再把自乘一次就…