ABAP接口部分-C#调用RFC

目录

  • ABAP接口部分-C#调用RFC
    • 创建表结构
    • 创建RFC函数
    • 创建C#项目
      • 引用SAP .Net Connector包
      • 绘制窗口的控件
      • 最终布局
        • 代码
    • 项目配置
    • 报错
      • SAP.Middleware.Connector.RfcDestinationManager报错
      • SAP.Middleware.Connector.RfcLoginexception报错
      • SAP.Middleware.Connector.RfcInvalidStateException报错
    • 运行结果
    • 总结

ABAP接口部分-C#调用RFC

创建表结构

1、 创建要返回的表结构;
事务代码:SE11
输入数据类型的名称,点击“创建”:
在这里插入图片描述

选择“结构”单选框,点击确定:
在这里插入图片描述

输入结构描述,自定义的组件名称,参考的组件类型,点击保存并激活:
在这里插入图片描述

创建RFC函数

事务代码:SE37
输入函数的名称,点击“创建”按钮:
在这里插入图片描述

输入函数组名称,如果没有,需要先创建,一个函数组允许有多个不同的函数:
在这里插入图片描述

选择远程,点击“立即开始”:
在这里插入图片描述

填写输入参数和关联类型,RFC函数要勾选“值传递”:
在这里插入图片描述

输入返回表的名称并参照我们之前创建的表结构名称:
在这里插入图片描述

输入语句,点击保存并激活:
在这里插入图片描述

创建C#项目

首先,需要下载Visual Studio 2019,安装C#相关模块。
之后,开始创建新项目:
1)选择“Windows窗体应用”(.net Framework),点击下一步:
在这里插入图片描述

填写项目名称,选择存储的位置,选择框架.NET的版本,点击“创建”按钮进行创建:

在这里插入图片描述

引用SAP .Net Connector包

下载安装SAP .NET CONNECTOR
步骤一:安装SAP .Net Connector
• 访问SAP服务市场网站(https://support.sap.com)下载并安装SAP .Net Connector,这是使用C#调用RFC的必要前提;
• 安装完成后,在Visual Studio的C#程序中,单击“引用”右键,选择“管理NuGet包”,搜索“sapnco”,并确认安装该包,并附加到项目中。
登录账号:qq邮箱,密码:a_…
安装目录:
D:\Software\SAP\SAP_DotNetConnector3_Net48_x64
从网上下载下来的文件:
在这里插入图片描述

现在使用的是:
在“引用”上右击,“添加项目引用”:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

效果如下:
在这里插入图片描述

还有一种方法,可以试试
右击,选择"管理NuGet程序包"
在这里插入图片描述

输入sapno:
在这里插入图片描述
在这里插入图片描述

App.config
创建App.config文件
创建winform项目之后会自动生成App.config文件,如果默认没有,可以在项目上右键–新建项–应用程序配置文件,命名为App.config。
代码:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<configSections>
		<sectionGroup name="SAP.Middleware.Connector">
			<sectionGroup name="ClientSettings">
				<section name="DestinationConfiguration" type="SAP.Middleware.Connector.RfcDestinationConfiguration,sapnco"/>
			</sectionGroup>
		</sectionGroup>
	</configSections>
	<SAP.Middleware.Connector>
		<ClientSettings>
			<DestinationConfiguration>
				<destinations>
					<add NAME="S4H" USER="KN089" PASSWD="Hs87654321" CLIENT="400" SYSNR="04" ASHOST="116.6.45.30" LANG="ZH" GROUP="PUBLIC" MAX_POOL_SIZE="10" IDLE_TIMEOUT="600"/>
				</destinations>
			</DestinationConfiguration>
		</ClientSettings>
	</SAP.Middleware.Connector>

	<startup>
		<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
	</startup>

	<startup useLegacyV2RuntimeActivationPolicy="true">
		<supportedRuntime version="v4.0"/>
	</startup>
</configuration>

引用SAP中间件:
在这里插入图片描述

获取登录信息,并注册客户端:
在这里插入图片描述

绘制窗口的控件

在这里插入图片描述

添加按钮,修改按钮的文本:
在这里插入图片描述

绘制一个DataGridView:
在这里插入图片描述

最终布局

在这里插入图片描述

代码
Form.cs代码
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 WindowsFormsApp1_RFC
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private RfcDestination _rfcDestination = null;
        public DataTable dtr = new DataTable();
        public void RegisterDestination()   //注册客户端
        {
            try
            {
                if (_rfcDestination == null)
                {
                    _rfcDestination = RfcDestinationManager.GetDestination("S4H");
                    //这里报错了
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            //在事件或者方法中调用
            this.RegisterDestination();
            this.InvokeRFCFunctionGetCompanyID(textBox1.Text);
        }

        public string InvokeRFCFunctionGetCompanyID(string IN_CARRID)
        {
            //this.dataGridView1.DataSource ="*;
            dtr.Clear();
            dtr.Columns.Clear();
            IRfcFunction function = null;
            string str = string.Empty;
            try
            {
                RfcRepository SapRfcRepository = _rfcDestination.Repository;
                function = SapRfcRepository.CreateFunction("Z_TEST_CSHAP_GET_SFLTGHT"); //调用服务器函数Z_TEST_CSHAP_GET_SFLTGHT
                function.SetValue("IN_CARRID", IN_CARRID);     //传入
                //function.SetValue("IN_AGE2", Inige2);     //传入参数
                function.SetParameterActive(0, true);
                function.Invoke(_rfcDestination);   //执行服务器调用的函数
                IRfcTable myrfcTable = function.GetTable("OUT_SFLIGHT");    //rfc server function 返回值table结构名称
                int liElement = 0;
                for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
                {
                    RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                    dtr.Columns.Add(metadata.Name);//循环创建列
                }
                foreach (IRfcStructure dr in myrfcTable)
                {
                    DataRow row = dtr.NewRow();//创建新行
                    for (liElement = 0; liElement <= myrfcTable.ElementCount - 1; liElement++)
                    {
                        RfcElementMetadata metadata = myrfcTable.GetElementMetadata(liElement);
                        row[metadata.Name] = dr.GetString(metadata.Name).Trim();
                    }
                    dtr.Rows.Add(row);
                }
                this.dataGridView1.DataSource = dtr;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            return str;
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

项目配置

在这里插入图片描述
在这里插入图片描述

报错

SAP.Middleware.Connector.RfcDestinationManager报错

在这里插入图片描述

解决:检查sapnco的版本,注意sapnco的版本和.NET框架的版本是否匹配,一开始我使用的是vs2022,版本太新,是.NET6的,现在使用vs2019,并且使用.NET4.8的版本,sapnco的版本是3.0,这样是可以的。
System.BadImageFormatException报错

一开始是:
在这里插入图片描述

试试改一下这个:
在这里插入图片描述

改完之后ok了。

SAP.Middleware.Connector.RfcLoginexception报错

在这里插入图片描述

解决:将app.config中的域名改成ip地址:
找到IP地址,我用的是域名
在这里插入图片描述

IP地址:116.6.45.30

SAP.Middleware.Connector.RfcInvalidStateException报错

函数模块不存在:
在这里插入图片描述

解决:登录SAP系统,查看是否是激活的状态,并且检查函数名称!!!
后面发现是一个字母写错了。
发现这个是未激活的状态,先激活一下:
在这里插入图片描述

注意函数名称!!!!
在这里插入图片描述

运行结果

解决完错误之后,点击执行,测试结果如下:
在这里插入图片描述

总结

  1. 注意sapnco与 .net版本的匹配
  2. 注意项目的设置,比如首选“Any cpu”或者“x64”
  3. 注意App.config的内容
  4. 注意函数名称,不要写错

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

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

相关文章

Docker基础教程 - 8 镜像仓库

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 8 镜像仓库 在安装 Docker 的时候&#xff0c;默认使用的是 DockerHub&#xff0c;后来为了提升速度&#xff0c;配置的镜像仓库是使用阿里云的镜像仓库&#xff0c;拉取的是别人制作的镜像&…

第五十三回 入云龙斗法破高廉 黑旋风下井救柴进-AI训练数据处理和读取

罗真人教了公孙胜五雷天罡正法&#xff0c;并让他记住“逢幽而止&#xff0c;遇汴而环”八个字。三人辞别了罗真人&#xff0c;戴宗先回去报信&#xff0c;李逵和公孙胜结伴而行。 走了三天&#xff0c;来到了武冈镇&#xff0c;李逵碰到一个铁匠&#xff0c;叫金钱豹子汤隆&a…

[Flutter get_cli] 配置 sub_folder:false报错

flutter get_cli 配置 get_cli:sub_folder:false报错如下 Because getx_cli_learn01 depends on get_cli from unknown source "sub_folder", version solving failed. 原因是在 pubspec.yaml文件中, get_cli:sub_folder:false要和 dependencies: xxx dev_depe…

【node版本问题】运行项目报错 PostCSS received undefined instead of CSS string

最近该项目没有做任何修改&#xff0c;今天运行突然跑不起来报错了 PostCSS received undefined instead of CSS string 【原因】突然想起来期间有换过 node 版本为 16.17.1 【解决】将 node 版本换回之前的 14.18.0 就可以了

突然发现一个很炸裂的平台!

平时小孟会开发很多的项目&#xff0c;很多项目不仅开发的功能比较齐全&#xff0c;而且效果比较炸裂。 今天给大家介绍一个我常用的平台&#xff0c;因含低代码平台&#xff0c;开发相当的快。 1&#xff0c;什么是低代码 低代码包括两种&#xff0c;一种低代码&#xff0c;…

正则表达式 || 遇到字符串里面有() 就在括号后面换行

<template><div class"vertical-layout"><header><h1>testPage</h1><p>(1)第一行内容xxxxxxxxx&#xff08;2&#xff09;第二行内容xxxxxxx(3)第三行内容</p></header><main><el-button click"goToO…

IPsec

在FW5和FW3之间建立一条IPSEC通道,保证10.0.2.0/24网段可以正常访问到192.168.1.0/24 最后测试&#xff1a;

xpath和lxml类库

数据提取之xpath 学习目标 了解 html和xml的区别掌握 xpath获取节点属性的方法掌握 xpath获取文本的方法掌握 xpath查找特定节点的方法 1. 为什么要学习xpath和lxml lxml是一款高性能的 Python HTML/XML 解析器&#xff0c;我们可以利用XPath&#xff0c;来快速的定位特定元…

linux centos系统搭建samba文件服务器 NetBIOS解析 (超详细)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; 前言———— Samba 是一个开源软件套件&#xff0c;可为 SMB/CIFS 客户端&#xff08;包括 Windows&#xff09;提供文件…

为什么选择Copilot for Microsoft365而不是Copilot Pro

最近很多小伙伴都用上了copilot&#xff0c;开始感受copilot在生产力工具中发挥的作用与带来的提升。 询问比较多的就是商业企业版的Copilot for Microsoft 365和个人家庭版的Copilot Pro有什么区别&#xff1f; 这篇文章一定会让你在两者之间选择最合适你的那个。 一、价格…

网络安全学习路线,入门到入坟,史上最全网络安全学习路线整理

很多小伙伴在网上搜索网络安全时&#xff0c;会出来网络安全工程师这样一个职位&#xff0c;它的范围很广&#xff0c;只要是与网络安全挂钩的技术人员都算网络安全工程师&#xff0c;一些小伙伴就有疑问了&#xff0c;网络安全现在真的很火吗&#xff1f; 那么寒哥就带大家看…

LCR 164. 破解闯关密码

解题思路&#xff1a; 贪心 class Solution {public String crackPassword(int[] password) {String[] strs new String[password.length];for(int i 0; i < password.length; i)strs[i] String.valueOf(password[i]);Arrays.sort(strs, (x, y) -> (x y).compareTo(…

c++ 哨兵线性搜索

顾名思义&#xff0c;哨兵线性搜索是线性搜索的一种&#xff0c;与传统线性搜索相比&#xff0c;比较次数减少了。在传统的线性搜索中&#xff0c;仅进行N次比较&#xff0c;而在哨兵线性搜索中&#xff0c;哨兵值用于避免任何越界比较&#xff0c;但没有专门针对正在搜索的元素…

第十篇 - 如何利用人工智能技术做好营销流量整形管理?(Traffic Shaping)- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市​​​​​​​。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先…

【ElasticSearch】docker下载安装ElasticSearch(详细)

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的ElasticSearch专栏&#xff0c;本篇博客由B战尚硅谷的ElasticSearch视频总结而来&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f306; 内容速览 &#x1f3…

mxxWechatBot微信机器人说明

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 免责声明&#xff1a;该工具仅供学习使用&#xff0c;禁止使用该工具从事违法活动&#xff0c;否则永久拉黑封禁账号&#xff01;&#xff01;&#xff01;本人不对任何工具的使用负责&am…

Unity性能优化篇(七) UI优化注意事项以及使用Sprite Atlas打包精灵图集

UI优化注意事项 1.尽量避免使用IMGUI(OnGUI)来做游戏时的UI&#xff0c;因为IMGUI的开销比较大。 2.如果一个UGUI的控件不需要进行射线检测&#xff0c;则可以取消勾选Raycast Target 3.尽量避免使用完全透明的图片和UI控件。因为即使完全透明&#xff0c;我们看不见它&#xf…

144.乐理基础-根三五音、大三和弦、小三和弦

内容参考于&#xff1a; 三分钟音乐社 上一个内容&#xff1a;143.乐理基础-和弦是什么&#xff1f;和声是什么&#xff1f;三和弦-CSDN博客 必须先看上一个内容&#xff0c;了解什么是和弦、什么是和声&#xff0c;以及三和弦的定义 上一个内容最后写了三和弦的定义&#x…

JimuReport积木报表 v1.7.2 版本发布,低代码报表工具

项目介绍 一款免费的数据可视化报表&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完成报…

实战|环信 Vue2 uniapp Demo重构焕新!经典再升级!

项目背景 当前环信 uni-app vue2 Demo 地址升级版本 Github 地址&#xff08;临时&#xff09; 原版本功能实现方式较混乱&#xff0c;代码逻辑晦涩难懂&#xff0c;不利于开发者参考或复用。此实战项目在确保原项目功能保留的情况下进行完全重写并新增大量功能&#xff0c;以…