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; }
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【汇总】解决Spring-Web与Spring-WebFlux冲突

【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一&#xff1a;The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二&#xff1a;The Java/XML…

C语言-算法-背包

[USACO07DEC] Charm Bracelet S&#xff08;01背包&#xff09; 题目描述 Bessie has gone to the mall’s jewelry store and spies a charm bracelet. Of course, she’d like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. E…

基于frp工具实现内网穿透,跨局域网远程SSH登录

文章目录 一.概述1.1 为什么要内网穿透&#xff1f;1.2 什么是frp&#xff1f; 二.frp安装管理流程2.1 frp下载2.2 部署2.3 通过systemd系统服务管理启动程序 三.frp配置测试&#xff08;通过SSH访问内网机器C&#xff09;3.1 服务端配置文件frps.toml修改3.2 客户端配置文件fr…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展&#xff0c;网络传输中的数据安全性受到了前所未有的关注。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;为数据在客户端和服务器之间的传输提供了加密和身份验证&#xff0c;从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

护眼落地灯哪个牌子更好更专业?经典落地灯排名

不知道各位家长有没有发现&#xff0c;近几年来小小年纪就戴眼镜的孩子真的越来越多了&#xff01; 根据专家数据统计&#xff0c;在全国青少年近视率中小学生就占其40%比重&#xff0c;也代表了10个学生中就有4、5个是戴眼镜的。造成这个趋势的原因也不难理解&#xff0c;一是…

多个SSH-Key下,配置Github SSH-Key

首先&#xff0c;检查 github 的连接性&#xff0c;因为DNS污染的原因&#xff0c;很多机器ping不通github&#xff0c;就像博主的机器&#xff1a; 怎么解决DNS污染的问题&#xff0c;博主查了很多教程&#xff0c;测试出一个有效的方法&#xff0c;那就是修改hosts文件。host…

dubbo和eureka的区别

dubbo可以作为客户端&#xff0c;也可以作为服务端&#xff0c;因此他内置了很多序列化框架可供选择&#xff0c;通过配置可以进行选择。默认是hession&#xff0c;还有gson&#xff0c;fastJson&#xff0c;jdk自带的序列化。 eureka只能作为服务端&#xff0c;他序列要与客户…

01_ESP32 MicroPython开发环境搭建

一、工作原理 Python源代码->Python解释器(MicroPython)-->二进制代码(01010)-->硬件电路(ESP32)-->高低电平输出-->其他设备 二、准备工作&#xff1a; 硬件&#xff1a;ESP32开发版&#xff0c;有很多个版本可选&#xff0c;我这里用的是ESP-32开发板&…

关于一个微信自动回复的平台

这是去年整的项目&#xff0c;源码在此。那个时候刚好在学习golang&#xff0c;那么学了那不得用起来嘛&#xff1f;于是就mk代码。 基本功能如下 pc端&#xff1a;主要功能就是登陆微信。 微信小程序&#xff1a;主要是为了方便管理自动回复的状态&#xff0c;在pc端登陆完…

【CANoe使用大全】——报文发送(IG)

&#x1f64b;‍♂️【CANoe使用大全】系列&#x1f481;‍♂️点击跳转 文章目录 1.仿真报文概述2.IG模块的使用2.1.IG模块打开方式 3.添加报文4.添加报文后的配置4.1.发送方式配置4.1.1.鼠标触发4.1.2.键盘触发4.2.3.周期发送 4.3 信号值修改编辑 1.仿真报文概述 报文发送一…

每日一题——LeetCode1346.检查整数及其两倍数是否存在

方法一 循环查找 用indexOf查找每个元素的两倍是否存在在数组中&#xff0c;找到了就直接return true&#xff0c;循环结束还没找到就return false var checkIfExist function(arr) {for(let i0;i<arr.length;i){let index arr.indexOf(arr[i]*2)if(index>0 &&…

代码随想录算法训练营第十六天 |104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数(待补充)

104.二叉树的最大深度 1、题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 2、文章讲解&#xff1a;代码随想录 3、题目&#xff1a; 给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长…

可以实时监控电脑的软件有哪些?好用的四款电脑监控软件【高人气收藏分享】

在当今数字化时代&#xff0c;电脑已经成为我们工作和生活中不可或缺的工具。然而&#xff0c;有时候我们需要对电脑进行监控&#xff0c;以确保工作效率和保护个人隐私。因此&#xff0c;选择一款好的电脑监控软件非常重要。本文将介绍四款好用的电脑监控软件&#xff0c;并探…

06 栈

目录 1.栈 2.实现 3.OJ题 1. 栈 1. 栈的概念和结构 栈: 这一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&…

使用BootStrapBlazor组件搭建Bootstarp风格的Winform界面

项目地址https://gitee.com/zhang_jie_sc/my-blazor-winforms 1.安装Bootstrap.Blazor.Templates 模板 在power shell中输入dotnet new install Bootstrap.Blazor.Templates::7.6.1&#xff0c;安装7.6.1是因为版本8以后就要强制使用net8.0了&#xff0c;很多语法不一样&…

Java集合相关面试题

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

BIGVGAN: A UNIVERSAL NEURAL VOCODER WITHLARGE-SCALE TRAINING——TTS论文阅读

笔记地址&#xff1a;https://flowus.cn/share/a16a61b3-fcd0-4e0e-be5a-22ba641c6792 【FlowUs 息流】Bigvgan 论文地址&#xff1a; BigVGAN: A Universal Neural Vocoder with Large-Scale Training Abstract 背景&#xff1a; 最近基于生成对抗网络&#xff08;GAN&am…

SpringBoot activemq收发消息、配置及原理

SpringBoot集成消息处理框架 Spring framework提供了对JMS和AMQP消息框架的无缝集成&#xff0c;为Spring项目使用消息处理框架提供了极大的便利。 与Spring framework相比&#xff0c;Spring Boot更近了一步&#xff0c;通过auto-configuration机制实现了对jms及amqp主流框架…

《WebKit技术内幕》学习之十五(3): Web前端之未来

3 Web应用和Web运行环境 3.1 Web应用 HTML5提供了强大的能力&#xff0c;而不是支持Web网页这么简单。就目前而言&#xff0c;它已经初步提供了支持Web网页向Web应用方向发展的能力。相对于本地应用&#xff08;Native Application&#xff09;&#xff0c;Web前端领域也能够…

NIO-Selector详解

NIO-Selector详解 Selector概述 Selector选择器&#xff0c;也可以称为多路复⽤器。它是Java NIO的核⼼组件之⼀&#xff0c;⽤于检查⼀个或多个Channel的状态是否处于可读、可写、可连接、可接收等。通过⼀个Selector选择器管理多个Channel&#xff0c;可以实现⼀个线程管理…