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.hqwc.cn/news/433382.html

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

相关文章

ppt背景图片怎么设置?让你的演示更加出彩!

PowerPoint是一款广泛应用于演示文稿制作的软件&#xff0c;而背景图片是演示文稿中不可或缺的一部分。一个好的背景图片能够提升演示文稿的整体效果&#xff0c;使观众更加关注你的演示内容。可是ppt背景图片怎么设置呢&#xff1f;本文将介绍ppt背景图片设置的三个方法&#…

深度解析单片机:历史、发展与您关心的问题

什么是单片机&#xff1f; 定义&#xff1a;单片机是一种集成了中央处理器&#xff08;CPU&#xff09;、内存和外设功能的微型计算机系统。与传统计算机相比&#xff0c;单片机通常集成在一个芯片上&#xff0c;用于控制特定的应用。#单片机# 特点&#xff1a; 封装紧凑&…

苹果手机突然无服务了,这是怎么回事?

苹果手机无疑是一款备受青睐的智能设备&#xff0c;但有时候我们可能会面临一个令人困扰的情况——苹果手机突然无服务。这种情况可能会在任何时候发生&#xff0c;无论是在使用手机时&#xff0c;刚刚升级系统&#xff0c;或者是突然发现在本应有信号的区域却无法连接到运营商…

WPF自定义圆形百分比进度条

先看效果图 1.界面代码 <UserControl x:Class"LensAgingTest.CycleProcessBar1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.op…

Ansible自动化运维(三)Playbook 模式详解

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

php mysql字段默认值使用问题

前提是使用了事务&#xff0c;在第一个阶段 是A表操作保存&#xff0c;第二阶段操作B表&#xff0c;操作B表的时候使用了A表的一个字段&#xff0c;这个字段在第一阶段没有设置值&#xff0c;保存的时候使用字段默认值。 【这种情况 最好是在第一阶段 把后面要使用的字段设置好…

Elasticsearch:Simulate ingest API

Ingest pipeline 为我们摄入数据提供了极大的方便。在我之前的文章中&#xff0c;有非常多的有关 ingest pipeline 的文章。请详细阅读文章 “Elastic&#xff1a;开发者上手指南”。针对一组提供的文档执行摄取管道&#xff0c;可以选择使用替代管道定义。 Simulate ingest AP…

AWTK 开源串口屏开发(8) - 系统设置

AWTK 开源串口屏开发 - 系统设置 系统设置只是一个普通应用程序&#xff0c;不过它会用 默认模型 中一些内置的属性和命令&#xff0c;所以这里专门来介绍一下。 1. 功能 在这个例子会用到 默认模型 中一些下列内置的属性和命令&#xff1a; 内置属性 属性类型说明rtc_yea…

【数据库】聊聊explain如何优化sql以及索引最佳实践

在实际的开发中&#xff0c;我们难免会遇到一些SQL优化的场景&#xff0c;虽然之前也看过周阳的课程&#xff0c;但是一直没有进行细心的整理&#xff0c;所以本篇会进行详细列举explain的相关使用&#xff0c;以及常见的索引最佳实践&#xff0c;并通过案例进行讲解。 数据准…

Tensorflow2.0笔记 - tensor排序操作

本笔记主要记录sort,argsort,以及top_k操作&#xff0c;加上一个求Top K准确度的例子。 import tensorflow as tf import numpy as nptf.__version__#sort,argsort#对1维的tensor进行排序 tensor tf.random.shuffle(tf.range(10)) print(tensor) #升序 print("tf.sort(d…

Go 从标准输入读取数据

fmt.Scan系列 fmt.Scan函数定义如下&#xff1a; // Scan scans text read from standard input, storing successive space-separated values into successive arguments. // Newlines count as space. // It returns the number of items successfully scanned. // If tha…

区块链技术在金融领域的应用

区块链技术在金融领域的应用广泛&#xff0c;它提供了一种分布式、去中心化、透明且安全的方式来进行交易和资产管理。以下是一些区块链技术在金融领域的主要应用&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…