在项目中我们经常会遇到SAP与其他应用系统对接的情况,如OA对接SAP的FI、HR模块,生产系统对接SAP的MM模块等等。这里和大家介绍下C#如果调用SAP接口,从而调用SAP接口函数。

下面先贴出代码。这里我创建的是一个C# WInform程序。用于登录接口测试。界面如下图所示:

这里说明下,对于SAP连接来说,用户名、密码、服务器、系统版本号、SYStemID是缺一不可的。并且需要全部正确才行。一般SAP分为正式环境和测试环境。如下所示,是SAP的登录界面。

下面贴出SAP的登录代码,如下所示,在登录按钮的双击事件里面,调用如下代码,进行代码测试。记住要引用SAPnco文件才可以调用。dll的下载地址为:https://download.csdn.net/download/shenjqiang/12727993。

private void testSave(){#region loginRfcConfigParameters parms = new RfcConfigParameters();parms.Add(RfcConfigParameters.SystemID, textBox2.Text); // Set actual System IDparms.Add(RfcConfigParameters.SystemNumber, txtaccid.Text); // Set actual System Numberparms.Add(RfcConfigParameters.User, txtUserCode.Text);parms.Add(RfcConfigParameters.Password, txtPassword.Text);parms.Add(RfcConfigParameters.Client, "900"); // Set actual client IDparms.Add(RfcConfigParameters.Language, "ZH");parms.Add(RfcConfigParameters.PoolSize, "5");parms.Add(RfcConfigParameters.MaxPoolSize, "10");parms.Add(RfcConfigParameters.IdleTimeout, "6000");parms.Add(RfcConfigParameters.AppServerHost, textBox1.Text);parms.Add(RfcConfigParameters.GatewayHost, textBox1.Text);parms.Add(RfcConfigParameters.Name, "dev");//提供必要的登录参数和获得RfcDestination对象对应到SAP系统中,你要调用的fm。  RfcDestination SapRfcDestination = RfcDestinationManager.GetDestination(parms);RfcRepository SapRfcRepository = SapRfcDestination.Repository;///  return SapRfcDestination;#endregion#region提供必要的登录参数和获得RfcDestination对象对应到SAP系统中,你要调用的fm。  RfcDestination prd = RfcDestinationManager.GetDestination(parms);使用RfcDestination对象的repository属性创建一个IRfcFunction对象为fm提供调用  //RfcRepository SapRfcRepository = prd.Repository;IRfcFunction function = SapRfcRepository.CreateFunction("BAPI_MATERIAL_AVAILABILITY");IRfcTable tTable = function.GetTable("WMDVSX");function.SetValue("PLANT", "A000");function.SetValue("MATERIAL", "8550C0519002");function.SetValue("UNIT", "只");function.SetValue("STGE_LOC", "0053");function.Invoke(prd);MessageBox.Show("c");string errMsg = "";errMsg = function.GetValue("AV_QTY_PLT").ToString();MessageBox.Show("ddd" + errMsg);IRfcTable RETURN = function.GetTable("RETURN");if (RETURN.GetString("MESSAGE").ToString() != ""){string se = RETURN.GetString("TYPE").ToString().Trim();if (se == "I"){//Suess.Text = RETURN.GetString("MESSAGE").ToString();errMsg = "error code:" + function.GetString("NUMBER").Trim();}else if (se == "E" || se == "W"){errMsg = RETURN.GetString("MESSAGE").ToString();}}MessageBox.Show(errMsg);MessageBox.Show("cCCC");#endregion}

然后,我们就可以调用相关的接口函数了。如下所示,是我写的一个调用移库接口的函数:

        /// <summary>/// 移库接口(将仓库中的地址移到线边仓,线边仓的地址用模板文件名称作为参数传过来)/// </summary>/// <param name="prd"></param>/// <param name="OrderNum"></param>/// <param name="errMsg"></param>/// <returns></returns>public void StorageMoveToLineSilo(){#region loginRfcConfigParameters parms = new RfcConfigParameters();parms.Add(RfcConfigParameters.SystemID, textBox2.Text); // Set actual System IDparms.Add(RfcConfigParameters.SystemNumber, txtaccid.Text); // Set actual System Numberparms.Add(RfcConfigParameters.User, txtUserCode.Text);parms.Add(RfcConfigParameters.Password, txtPassword.Text);parms.Add(RfcConfigParameters.Client, "900"); // Set actual client IDparms.Add(RfcConfigParameters.Language, "ZH");parms.Add(RfcConfigParameters.PoolSize, "5");parms.Add(RfcConfigParameters.MaxPoolSize, "10");parms.Add(RfcConfigParameters.IdleTimeout, "6000");parms.Add(RfcConfigParameters.AppServerHost, textBox1.Text);parms.Add(RfcConfigParameters.GatewayHost, textBox1.Text);parms.Add(RfcConfigParameters.Name, "dev");//提供必要的登录参数和获得RfcDestination对象对应到SAP系统中,你要调用的fm。  RfcDestination prd = RfcDestinationManager.GetDestination(parms);//使用RfcDestination对象的repository属性创建一个IRfcFunction对象为fm提供调用  RfcRepository SapRfcRepository = prd.Repository;#endregionstring errMsg = "";IRfcFunction function = SapRfcRepository.CreateFunction("BAPI_GOODSMVT_CREATE");IRfcStructure strCode = function.GetStructure("GOODSMVT_CODE");strCode.SetValue("GM_CODE", "04");IRfcStructure strHeader = function.GetStructure("GOODSMVT_HEADER");strHeader.SetValue("PSTNG_DATE", DateTime.Today.ToString("yyyy-MM-dd"));strHeader.SetValue("DOC_DATE", DateTime.Today.ToString("yyyy-MM-dd"));strHeader.SetValue("PR_UNAME", txtUserCode.Text);IRfcFunction functioncmt = SapRfcRepository.CreateFunction("BAPI_TRANSACTION_COMMIT");IRfcTable tTable = function.GetTable("GOODSMVT_ITEM");functioncmt.SetValue("WAIT", "X");RfcSessionManager.BeginContext(prd);for (int i = 0; i < 1; i++){tTable.Append();tTable.CurrentRow.SetValue("MATERIAL", "77040600001258");//物料编号tTable.CurrentRow.SetValue("PLANT", "A000");//工厂tTable.CurrentRow.SetValue("STGE_LOC", "0039");//仓库tTable.CurrentRow.SetValue("MOVE_TYPE", "311");//同一工厂不同库存移库tTable.CurrentRow.SetValue("ENTRY_QNT", 5);//tTablw.SetValue("ENTRY_UOM", mdList[i].ENTRY_UOM);//tTablw.SetValue("QUANTITY", mdList[i].iquantity);//单位tTable.CurrentRow.SetValue("MOVE_PLANT", "A000");tTable.CurrentRow.SetValue("MOVE_STLOC", "0153");//移库到线边仓tTable.CurrentRow.SetValue("RESERV_NO", "0001");//预留编号tTable.CurrentRow.SetValue("RES_ITEM", "0017683144");//预留项目编号}function.Invoke(prd);//functioncmt.Invoke(prd);RfcSessionManager.EndContext(prd);IRfcStructure strReturn = function.GetStructure("GOODSMVT_HEADRET");errMsg = strReturn.GetValue("MAT_DOC").ToString();IRfcTable Return = function.GetTable("RETURN");if (Return.RowCount > 0){if (Return.GetString("TYPE").ToString().Trim() == "I"){errMsg = "凭证号:" + function.GetString("NUMBER").Trim();MessageBox.Show(errMsg);prd = null;}else if (Return.GetString("TYPE").ToString().Trim() == "E"){errMsg = Return.GetString("MESSAGE").ToString();MessageBox.Show(errMsg);prd = null;return;}}else{//IRfcStructure strReturn = function.GetStructure("GOODSMVT_HEADRET");//errMsg = strReturn.GetValue("MAT_DOC").ToString();}}

SAP 的接口使用ABAP开发的,这里我们调用时,一般需要和SAP开发人员进行接口参数对接,由SAP开发人员提供所需参数,然后我们来传递参数即可。所有的接口调用方式大同小异。只是传参和返回的数据不一样。因此其他函数也可以参考上面的来进行扩展。

欢迎有兴趣的小伙伴一起交流讨论!

C#如何连接SAP调用SAP接口函数相关推荐

  1. linux信号子系统,Linux时间子系统之(三):用户空间接口函数

    Linux时间子系统之(三):用户空间接口函数 作者:linuxer 发布于:2014-12-24 15:48 分类:时间子系统 一.前言 从应用程序的角度看,内核需要提供的和时间相关的服务有三种: ...

  2. vsomeip接口函数解析和程序编写

    Vsomeip接口函数的使用 我们一般用到的vsomeip的接口函数大致有四类: app:用于生成一个vsomeip对象 message:用于生成一条someip message对象 payload: ...

  3. Hook Com接口函数

    标 题:  [原创]COM接口函数通用Hook方法 作 者: zhangluduo 时 间: 2014-12-08,22:34:20 链 接: http://bbs.pediy.com/showthr ...

  4. java使用jco连接sap调用rfc函数,环境配置+代码

    Windows环境配置 1.将sapjco3.jar引入 2.配置sapjco3.dll文件 32位系统:将sapjco3.dll放到C:\Windows\System32下  或者放到jdk/bin ...

  5. php调用sap端rfc接口,SAP 接口编程之 RFC 系列(15) : 调用自定义函数

    从外部环境调用自定义函数 (FM, Function Module)与调用 SAP 内置的函数并没有不同,需要注意的是在 SAP 系统自定义 FM 的要点: 1)FM 必须是 Remote-enabl ...

  6. sapjco3调用sap接口

    一.环境 准备环境,本文用的是springboot项目,需要sapjco3.jar和sapjco3.dll文件,sqpjco3.dll文件需要放在system32文件夹下,sapjco3.jar因为m ...

  7. java 调用SAP RFC函数错误信息集锦

    RFC接口调用SAP如果有异常会通过com.sap.mw.jco.JCO$Exception: 抛出异常 在开发中遇到的异常有如下 用户名密码可能是错误或者用户无权限,确认用户,必要时联系SAP负责人 ...

  8. SpringBoot项目使用JCO实现调用SAP接口实例

    一.JCO接口介绍 JCO采用的是中间式接口,即外部系统将SAP系统所需的信息生成中间数据表,SAP系统直接读取中间文件或将中间表中的信息写入数据库中,中间式接口是比较常用的一种方式,这种方式外部系统 ...

  9. java使用JCO调用SAP接口

    博客参考:http://blog.csdn.net/jay_1989/article/details/51821069 (可以说我是基本照抄,所以本篇博客为转载) 其实在写这篇博客之前,已经有很多前辈 ...

最新文章

  1. 12核心 联发科和台积电将研发7nm芯片
  2. 15年资深产品经理判官:怎样搭建完整的产品矩阵
  3. 有关数据库的多库查询
  4. python六十四课——高阶函数练习题(一)
  5. 逆水寒服务器维护7.5,逆水寒7.26日维护到什么时候 逆水寒7.26日游戏改动汇总介绍...
  6. eslint 无法格式化ts_vscode保存代码,自动按照eslint规范格式化代码设置
  7. IE8的 JS 引擎如此不堪(二) - 解决方案
  8. 当你遇到modifying layer that is being finalized的时候怎么办?
  9. 谷歌浏览器:拷贝为CURL的小技巧
  10. Swift之UITextField+富文本+代理传值
  11. python高阶函数map reduce filter sorted_【Python入门】7.高阶函数之 map( )、reduce( )、filter( )、sorted( )的用法...
  12. Azure Storage Explorer
  13. 当前读和快照读是什么 区别
  14. DDPush 任意门消息推送 开源免费实时信息推送服务器
  15. android矩阵计算器
  16. 个人陈述 计算机专业,研究生个人陈述范例,计算机专业
  17. 两台电脑如何共享文件?如何互相传输文件?
  18. ​万邦医药在创业板过会:上半年收入约1亿元,陶春蕾母子为实控人​
  19. 【备忘】Google Android开发入门与实战 PDF 下载
  20. CIO40知识星球—20年数字化组织架构演进V4.0

热门文章

  1. 从λ演算到函数式编程聊闭包(2):彻底理解JavaScript闭包规则
  2. postgres_exporter编译运行过程
  3. 腾讯云配置https
  4. suse linux 开启telnet,SuSE Telnet的设置
  5. Iidea 配置webContent项目,启动访问404
  6. 什么是众包测试,众包测试平台是什么?
  7. RC4算法原理与应用 —— 密码与密码工程实践No.1
  8. 维纳滤波器的基本原理
  9. 应用内可随时切换语言时,MJRefresh下拉文字的处理
  10. 计算机谱子佛系少女,​佛系少女