C# 用RFC的方式调用SAP接口

假如我们有一个SAP的接口文档

ZED_GET_PO							
Note	Parameter Name	"Type
- F. Field
- S. Structure
- T. Table"	Associated Type	"Mandatory
- Y. Yes
- N. No"	Data Type	Length	Note
传入数据	IM_EBELN	F		Y	CHAR	10	PO号码
传出数据	EX_HEAD	S	ZSED_PO_APON				传出PO信息
传出数据	EX_TYPE	F			CHAR	1	S - 成功,E - 失败
传出数据	EX_MSG	F			CHAR	220	失败返回的错误消息
传出数据	EX_PDF	F	XSTRING				PDF数据流
传出数据	ET_PR	T	ZSED_PR_APON				采购申请信息ZSED_PO_APON Structure							
Field 字段	Type 类型	Length 长度	Decimals 小数位	Note			
NAME_CN	CHAR	40	0	Name CN			
NAME_EN	CHAR	40	0	Name EN			
EKNAM	CHAR	18	0	Description of purchasing group			
TEL_NUMBER	CHAR	30	0	Telephone no.: dialling code+number			
SMTP_ADDR	CHAR	241	0	E-Mail Address			
LIFNR	CHAR	10	0	供应商代码			
NAME_CN_F	CHAR	40	0	供应商中文名称			
NAME_EN_F	CHAR	40	0	供应商英文名称			
VERKF	CHAR	30	0	联系人			
TEL_NUMBER_F	CHAR	30	0	电话			
SMTP_ADDR_F	CHAR	241	0	邮箱			
EBELN	CHAR	10	0	订单号(合同号)			
WAERS	CUKY	5	0	合同货币			
LOEKZ	CHAR	1	0	合同删除标识			
FRGKE	CHAR	1	0	合同审批标识			
NETWR	CURR	13	2	合同总金额(不含税)			
NETWR_TAX	CURR	13	2	合同总金额(含税)			ET_PR Structure							
Field 字段	Type 类型	Length 长度	Decimals 小数位	Note			
BANFN	CHAR	10	0	采购申请			
BNFPO	NUMC	5	0	采购申请行项目		

接口分析如下

这个SAP接口 ZED_GET_PO 主要用于获取采购订单(PO)相关信息。从提供的描述看,它包含了一组入参和多组出参,以及两个结构体定义。我将先对接口参数和结构体进行解释,然后分析整体功能。

接口参数

  1. 传入数据

    • IM_EBELN:标识为“F”(Field),是一个必须输入的参数(Mandatory - Y),表示采购订单号码,采用CHAR数据类型,长度为10。
  2. 传出数据

    • EX_HEAD:标识为"S"(Structure),关联结构是 ​ZSED_PO_APON​,用于输出采购订单的详细信息。
    • EX_TYPE:标识为"F"(Field),表示接口执行的状态,其中“S”表示成功,“E”代表失败,数据类型为CHAR,长度为1。
    • EX_MSG:标识为"F"(Field),表示如果执行失败,返回的错误信息,数据类型为CHAR,长度为220。
    • EX_PDF:标识为"F"(Field),为PDF格式的数据流,数据类型为XSTRING,主要应用场景可能是输出采购订单的PDF文档。
    • ET_PR:标识为"T"(Table),关联结构是 ​ZSED_PR_APON​,用于输出采购申请相关信息。

结构体解析

  1. ZSED_PO_APON Structure(采购订单结构)

    • 包含了订单的多种信息,例如订单号、供应商代码、联系方式、金额等,都是基础的数据类型,如CHAR, CUKY(货币),CURR。
  2. ET_PR Structure(采购申请结构)

    • 包含了采购申请的编号和行项目等信息,类型较为简单,主要由CHAR和NUMC构成。

功能分析

这个接口主要用于:

  • 输入一个采购订单号码(IM_EBELN),
  • 返回该采购订单的详细信息(EX_HEAD,结构为ZSED_PO_APON),
  • 返回接口调用的状态(成功或失败)及相关信息(EX_TYPE和EX_MSG),
  • 可能还会提供订单的PDF文档(EX_PDF),
  • 输出与该采购订单相关联的采购申请信息(ET_PR,结构为ZSED_PR_APON)。

整体而言,这个接口为业务系统提供完整的采购订单处理功能,从查询订单详情到获取关联的采购申请,以及在需要时输出文档形式,适合于供应链管理和采购管理类业务的集成场景。

 调用例子

public Vendor_Output Z_GET_VENDOR_DATA(string LIFNR)
{//创建sap的连接var dest = RfcDestinationHelper.GetDestination();//创建方法IRfcFunction myfun = dest.Repository.CreateFunction("Z_GET_VENDOR_DATA");myfun.SetValue("LIFNR", LIFNR);//参数myfun.Invoke(dest);//执行IRfcStruct rfcStruct = myfun.GetStructure("VENDORDATA");//返回对象string name1 = rfcStruct.GetString("NAME1");//返回字符串string ort01 = rfcStruct.GetString("ORT01");return new Vendor_Output() { Name = name1, City = ort01 };
}

关于连接部分

using SAP.Middleware.Connector;  // 引用SAP NCo命名空间class Program
{static void Main(string[] args){// 定义SAP系统连接参数RfcConfigParameters rfcConfigParams = new RfcConfigParameters();rfcConfigParams.Add(RfcConfigParameters.Name, "yourSAPDestination");rfcConfigParams.Add(RfcConfigParameters.AppServerHost, "host");  // 服务器地址rfcConfigParams.Add(RfcConfigParameters.SystemNumber, "00");     // 系统编号rfcConfigParams.Add(RfcConfigParameters.Client, "client_no");    // 客户端rfcConfigParams.Add(RfcConfigParameters.User, "username");       // 用户名rfcConfigParams.Add(RfcConfigParameters.Password, "password");   // 密码rfcConfigParams.Add(RfcConfigParameters.Language, "EN");         // 语言// 建立到SAP的连接RfcDestination rfcDest = RfcDestinationManager.GetDestination(rfcConfigParams);RfcRepository rfcRepo = rfcDest.Repository;try{// 获取RFC函数元数据IRfcFunction rfcFunction = rfcRepo.CreateFunction("YOUR_RFC_FUNCTION_NAME");// 设置RFC的输入参数,例如rfcFunction.SetValue("IM_PARAM", "value");// 调用RFC函数rfcFunction.Invoke(rfcDest);// 获取RFC的输出参数,例如string result = rfcFunction.GetString("EX_RESULT");Console.WriteLine($"Result: {result}");}catch (RfcBaseException e){Console.WriteLine(e.ToString());}}
}

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

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

相关文章

Springboot开发之 Excel 处理工具(一) -- Apache POI

一、简介 Apache POI(Poor Obfuscation Implementation)是一个用Java编写的免费开源的跨平台Java API,它提供了对Microsoft Office格式文档的读写功能。 1. poi 的核心功能: 读取Excel:支持读取旧版Excel格式&#…

xocde编辑器支持修改为中文吗?不支持

xocde编辑器支持修改为中文吗? 不支持

rttys服务器和客户端

rttys服务器 1.下载 https://github.com/zhaojh329/rttys/releases2.解压运行 libev交叉编译 cd libev ./configure --hostarm-linux CCaarch64-poky-linux-gcc --prefix/home/michael/rtty_install make install DESTDIR/home/michael/rtty_installrtty客户端 1.git地…

RabbitMQ —— 理解及应用场景

一、MQ相关的概念 RabbitMQ 是一种分布式消息中间件,消息中间件也称消息队列MQ,那么什么是MQ呢?请继续阅读下文。 1.1、MQ的基本概念 什么是MQ MQ(message queue),从字面意思上看就个 FIFO 先入先出的队列,只不过队列…

2024 年解锁 Android 手机的 7 种简便方法

您是否忘记了 Android 手机的 Android 锁屏密码,并且您的手机已被锁定?您需要使用锁屏解锁 Android 手机?别担心,您不是唯一一个忘记密码的人。我将向您展示如何解锁 Android 手机的锁屏。 密码 PIN 可保护您的 Android 手机和 G…

Node.js中基于node-schedule实现定时任务之详解

文章目录 一、定时任务二、node-schedule、1、安装2、引入3、基于Cron表达式的规则4、基于Date的规则5、基于RecurrenceRule的规则6、API7、状态监听 一、定时任务 实际工作中,可能会遇到定时清除某个文件夹内容,定时发送消息或发送邮件给指定用户&…

Django集成OpenAI

Django集成OpenAI 通过前面 django 框架的基本开发知识,我们现在可以开始在 django 上做稍微深一点当然应用开发了。 这一章开始编写怎么集成调用 openai ,设置环境以及 openai 的基础知识。 大家都知道 ai 的多模态逐渐扩大,各种应用层出…

怎么采集阿里巴巴1688的商品或商家数据?

怎么使用简数采集器批量采集阿里巴巴1688的商品或商家相关信息呢? 简数采集器暂时不支持采集阿里巴巴1688的相关数据,谢谢。 简数采集器采集网络网页数据非常简单高效:输入要采集的网址,简数智能算法会自动提取出网页上的关键信…

探索数据结构:集合、线性结构、树状结构和图形结构

在计算机科学中,数据结构是用于组织和存储数据的基础。不同的数据结构有不同的特点和适用场景。今天,我们将深入探讨四种主要的数据结构:集合、线性结构、树状结构和图形结构。通过对它们的理解,您可以更好地选择和应用这些结构来…

IOS Swift 从入门到精通:算术运算,运算符重载,符合赋值运算,比较运算,条件,结合条件,三元运算,Swift语句,范围运算

目录 算术运算符 运算符重载 复合赋值运算符 比较运算符 条件 结合条件 三元运算符 Switch 语句 范围运算符 总结 算术运算符 现在您已经了解了 Swift 中的所有基本类型,我们可以开始使用运算符将它们组合在一起。运算符是那些像和 这样的小数学符号-&…

外贸找客户软件

外贸找客户软件在帮助外贸企业或个人寻找潜在客户、提高销售效率方面起着重要作用。以下是一些常用的外贸找客户软件,它们各有特点和优势,可以根据具体需求选择使用。 阿里巴巴国际版: 阿里巴巴国际版App为外贸人提供了一个巨大的B2B平台&am…

qt 开发对信号槽进行二次封装,实现信号槽管理接口。

最近做的一个项目,由于工程需要模块之间能够互相通信,但又不想模块之间耦合度太高 使用信号槽的话,需要两个类的对象或者指针在其中一个类都要体现,这样达不到效果, 想要一个管理类对这些互相通信的类之间进行管理,只需要在各自的类注册发送者和接收者即可,双方通过一…

Charles抓取安卓应用https包演示

一、准备软件 夜神安卓模拟器 (yeshen.com) Charles (charlesproxy.com) 二、配置抓包 2.1 Charles安装PC根证书 记住这里的ip端口 三、安卓模拟器配置 3.1 配置安卓客户端网络代理 填写上文的ip端口,保存 3.2 安装根证书 3.2.1 导出根证书 linux主机执行 op…

推荐4款实用工具,非常好用,建议收藏

PDFREAL PDFReal 是一个功能强大的在线PDF编辑工具,提供多种实用的PDF处理功能。用户可以在一个网站上完成包括PDF合并、PDF拆分、PDF压缩、PDF保护、PDF解锁等多种操作。此外,PDFReal 还支持将文本转换为PDF、将图片转换为PDF、添加水印、提取页面内容等…

基于Django、Bootstrap的电影推荐系统,算法基于用户的协同过滤算法,有爬虫有可视化后台

背景 基于Django和Bootstrap的电影推荐系统结合了用户协同过滤算法,通过爬虫技术获取电影数据,并在可视化后台展示推荐结果。该系统旨在提供个性化的电影推荐服务,帮助用户发现符合其喜好的电影。 用户协同过滤算法是一种常用的推荐算法&am…

qt开发-09_分裂器

QSplitter 是 Qt 框架中的一个非常实用的控件,用于创建可调整大小的窗格。它允许用户通过拖动子窗口间的边界(也称为分割条)来动态调整子窗口的尺寸。这在开发需要多个视图同时显示,且用户需要根据需要调整每个视图大小的应用程序…

【408考点之数据结构】表达式求值和括号匹配

表达式求值和括号匹配 表达式求值 表达式求值是计算机科学中的一个基本问题,涉及将数学表达式转换为计算机可以理解和处理的形式。通常,我们使用栈来辅助求值过程,特别是在处理中缀表达式转后缀表达式和后缀表达式求值时。 中缀表达式转后…

机器学习python实践——由特征选择引发的关于卡方检验的一些个人思考

最近在用python进行机器学习实践,在做到特征选择这一部分时,对于SelectPercentile和SelectKBest方法有些不理解,所以去了查看了帮助文档,但是在帮助文档的例子中出现了"chi2",没接触过,看过去就更…

基于SpringBoot+Vue在线考试报名系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,…

【APP移动端性能测试】第四节.APP移动端常见的性能测试点(下)

文章目录 前言五、流量性能测试 5.1 流量基本情况说明 5.2 流量的测试步骤 5.3 流量的优化方法六、电量性能测试 6.1 电量基本情况说明 6.2 电量的测试步骤 6.2 电量的结果分析七、APP启动测试 7.1 APP启动的两种方式 7.2 APP启动的测…