.NET 连接 SAP 系统专题:C# Formwork4.0 调用 RFC 代码
本文就说明在 C#中如何编写代码来调用 SAP 中的 RFC 函数获取数据。(Winform32)
首先需要引用两个 NCO3.0 的 DLL,下载地址在文后。
1. sapnco_utils.dll;
2. sapnco.dll;
然后在程序代码页面引用:
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 = 0; i < table.RowCount; i++)
{
}
table.CurrentIndex = i;
//当前内表的索引行
DataRow dr = dt.NewRow();
dr[0] = table.GetString("MATNR");
//获取表格的某行某列的值
dt.Rows.Add(dr);
//填充该表格的值
if (MATNR == "")
{
}
for (int i = 0; i < dt.Rows.Count; i++)
{
}
this.comboBox1.Items.Add(dt.Rows[i][0].ToString());
//填充下拉框
this.label1.Text = MAKTX;
//显示品名
prd = null;
repo = null;
}
//登陆 SAP 前的准备工作
public class MyBackendConfig : IDestinationConfiguration
{
public RfcConfigParameters GetParameters(String destinationName)
{
if (" ".Equals(destinationName))
{
RfcConfigParameters parms = new RfcConfigParameters();
parms.Add(RfcConfigParameters.AppServerHost, "");
//SAP 主机 IP
parms.Add(RfcConfigParameters.SystemNumber, "0");
//SAP 实例
parms.Add(RfcConfigParameters.User, "");
//用户名
parms.Add(RfcConfigParameters.Password, "");
//密码
parms.Add(RfcConfigParameters.Client, "888");
// Client
parms.Add(RfcConfigParameters.Language, "ZH");
//登陆语言
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 = 1;
//当下拉框索引变化的时候传递品号进去查询出品名出来
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
MATNR = comboBox1.Text.ToString();
nco();
{
}
}
}