本文就说明在C#中如何编写代码来调用SAP中的RFC函数获取数据。

首先需要引用两个NCO3.0的DLL

DLL下载地址:http://files.cnblogs.com/mengxin523/SAP_DotNetConnector3.zip

 //程序代码页面引用:
using SAP.Middleware.Connector; //代码如下:
namespace SAP_RFC { public partial class Form1 : Form { string MATNR = string.Empty; public Form1() { InitializeComponent(); } public void nco() { IDestinationConfiguration ID = new MyBackendConfig(); RfcDestinationManager.RegisterDestinationConfiguration(ID); RfcDestination prd = RfcDestinationManager.GetDestination("PRD_000"); RfcDestinationManager.UnregisterDestinationConfiguration(ID); nco(prd); } public void nco(RfcDestination prd) { RfcRepository repo = prd.Repository; IRfcFunction companyBapi = repo.CreateFunction("ZRFC_MARA_INFO"); //调用函数名 companyBapi.SetValue("MATNR", MATNR); //设置Import的参数 companyBapi.Invoke(prd); //执行函数 IRfcTable table = companyBapi.GetTable("IT_MARA"); //获取相应的品号内表 string MAKTX = companyBapi.GetValue("MAKTX").ToString(); //获取品名 DataTable dt = new DataTable(); //新建表格 dt.Columns.Add("品号"); //表格添加一列 for (int i = ; i < table.RowCount; i++) { table.CurrentIndex = i; //当前内表的索引行 DataRow dr = dt.NewRow(); dr[] = table.GetString("MATNR"); //获取表格的某行某列的值 dt.Rows.Add(dr); //填充该表格的值 } if (MATNR == "") { for (int i = ; i < dt.Rows.Count; i++) { this.comboBox1.Items.Add(dt.Rows[i][].ToString()); //填充下拉框 } } this.label1.Text = MAKTX; //显示品名 prd = null; repo = null; } //登陆SAP前的准备工作 public class MyBackendConfig : IDestinationConfiguration { public RfcConfigParameters GetParameters(String destinationName) { if ("PRD_000".Equals(destinationName)) { RfcConfigParameters parms = new RfcConfigParameters(); parms.Add(RfcConfigParameters.AppServerHost, "192.168.1.3"); //SAP主机IP parms.Add(RfcConfigParameters.SystemNumber, ""); //SAP实例 parms.Add(RfcConfigParameters.User, "MENGXIN"); //用户名 parms.Add(RfcConfigParameters.Password, ""); //密码 parms.Add(RfcConfigParameters.Client, ""); // Client parms.Add(RfcConfigParameters.Language, "ZH"); //登陆语言 parms.Add(RfcConfigParameters.PoolSize, ""); parms.Add(RfcConfigParameters.MaxPoolSize, ""); parms.Add(RfcConfigParameters.IdleTimeout, ""); return parms; } else return null; } public bool ChangeEventsSupported() { return false; } public event RfcDestinationManager.ConfigurationChangeHandler ConfigurationChanged; } private void Form1_Load(object sender, EventArgs e) { comboBox1.Items.Clear(); nco(); comboBox1.SelectedIndex = ; } //当下拉框索引变化的时候传递品号进去查询出品名出来 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { MATNR = comboBox1.Text.ToString(); nco(); } } }

我想这个C#代码很简单,我就不多做详细说明了。结果如下:

SAP中品号信息如下:

由此可见数据完全OK,调用成功。

程序在第一次载入的时候有点慢,在链接SAP和登陆。后续在下拉框变化的时候就立马显示出品名出来了,丝毫没有任何停顿。第二次链接SAP的时候大概是不必在登陆了,SAP系统中已有登陆信息,运行T-CODE:SM04

红色框中这两个即是我们的RFC调用所留下的登录会话。一旦我们的C#程序退出之后,这两个RFC也就退出了。

如果我们的C#程序是ASP.NET的话,页面关闭之后这个RFC登录信息都还在的。除非IIS关闭,否则只有等到SAP系统超时退出这两个登陆会话了。

原文:http://blog.csdn.net/mengxin523/article/details/6710091

.NET连接SAP系统专题:C#调用RFC代码(三)的更多相关文章

  1. Java连接Sap系统调并调用RFC函数

    参考博客:https://blog.csdn.net/qq_36026747/article/details/81287462                   https://www.cnblog ...

  2. .NET连接SAP系统专题:SAP中新建可远程调用的RFC(二)

    何谓RFC,就是一个Function,可以被非SAP系统调用,比如VB,C#,Java等.如果我们在RFC中INCLUDE了相关的业务逻辑,那么我们就可以完全操控SAP中的业务数据了.就像在TTE里, ...

  3. .NET连接SAP系统专题:.NET调用RFC几种方式(一)

    本来今天是要写一篇关于NCO3.0的东西,就是关乎.NET调用SAP的RFC的,支持VS2010和.NET 4.0等.现在网上到处都是充斥着NCO1.X和NCO2.0,需要用VS2003来使用,都是一 ...

  4. .NET连接SAP系统专题:BAPI_TRANSACTION_COMMIT的使用方法(十)

    from:http://scnblogs.techweb.com.cn/mengxin/archives/5.html 为什么.net调用SAP的BAPI接口需要调用BAPI_TRANSACTION_ ...

  5. C#通过RFC连接sap系统

    先理解一下 RFC(Romote Function Call)远程函数调用 调用前提: 1.要想通过C# 通过RFC调用SAP端,SAP端要存在RFC远程调用的函数才行(例如SAP端通过SE37创建) ...

  6. C#与SAP系统的接口调用

    Sap作为ERP的龙头企业,在企业信息化建设中是有目共睹的,特别是财务.人力.物流等发挥着极大作用,占领着半壁江山,所以与企业系统用SAP软件的接口对接很是普遍,简单介绍一下与SAP接口的一点点儿心得 ...

  7. JAVA连接SAP

    1.首先需要在SAP事务码SE37中新建一个可以被远程调用的RFC 事务码:SE37 新建一个函数组:输入事务码SE37回车后,来到函数构建器屏幕,到上面一排菜单栏:转到 -> 函数组 -> ...

  8. 登陆到 SAP 系统后的用户出口

    增强类型:smod 增强名称:SUSR0001 组件(退出功能模块):EXIT_SAPLSUSF_001 功能:用户每次登陆SAP系统后都会调用这个SUSR0001增强,可以在FUNCTION EXI ...

  9. C#如何通过NCO3.0来连接SAP并调用SAP中的RFC

    ,这是SAP针对.Net开发的专用组件,安装完成之后在C:\Program Files\SAP\SAP_DotNetConnector3_x86目录下面会有sapnco_utils.dll sapnc ...

随机推荐

  1. C++模板详解

    参考:C++ 模板详解(一) 模板:对类型进行参数化的工具:通常有两种形式: 函数模板:仅参数类型不同: 类模板:   仅数据成员和成员函数类型不同. 目的:让程序员编写与类型无关的代码. 注意:模板 ...

  2. strcpy()的实现

    看到有一个博客讲的比平时理解的更深入,mark一下:strcpy函数的实现 这里只写平时理解的,三个要点: //strcpy自己实现 char *strcpy(char *dest, const ch ...

  3. WCF綁定

    服务之间的通信方式是多种多样的,有多种可能的通信模式.包括:同步的请求与应答(Request/Reply)消息,或者异步的即发即弃(Fire-and-Forget)消息等等,在通信时传输的消息编码格式 ...

  4. Slideout吐槽

    前言: 今天有点事,只尝试做一个侧边栏.SlideOut一个侧边栏,对着github,ReadMe看,并尝试着写了.还不错,关键是当与bootstrap一起时,什么效果都没了, 这是什么情况,明天想再 ...

  5. Python中list的实现

    原文链接这篇文章介绍了Python中list是如何实现的.在Python中list特别有用.让我们来看下list的内部是如何实现的.来看下面简单的程序,在list中添加一些整数并将他们打印出来. &g ...

  6. cocos中添加显示文字的三种方式(CCLabelTTF 、CCLabelBMFont 和CCLabelAtlas)

    CCLabelTTF CCLabelTTF 每次调用 setString (即改变文字)的时候,一个新的OPENGL 纹理将会被创建..这意味着setString 和创建一个新的标签一样慢. 这个类使 ...

  7. U盘分区信息清除

    diskpart select disk 1 clean 清除选中(优U)盘的所有信息;

  8. ECMAScript 6 入门学习笔记(持续更新)

    1.let命令(作用同var) ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. { let a = 10; var b = 1; } ...

  9. Docker 入门教程(转)

    add by zhj: 可以简单的认为docker是对LXC(Linux Container)封装,它提供一种比LXC高级的API.Docker使用Go语言开发,利用了Linux提供的LXC,AUFS ...

  10. Primitive Objects

    [Primitive Objects] Unity can work with 3D models of any shape that can be created with modelling so ...