C# 连接SAP,并调用RFC函数

C# 连接SAP,并调用RFC函数 
(基于Com组件)


非原创,见到好文,收藏。

C# 连接SAP,并调用RFC函数 
(基于Com组件) 收藏 
1) 新建工程后,首先添加3个Com组建的引用,分别为 SAPFunctionsOCX,SAPLogonCtrl,SAPTableFactoryCtrl;
2) 项目添加引用
using SAPFunctionsOCX;
using SAPLogonCtrl;
using SAPTableFactoryCtrl;
3) 连接并调用RFC
SAPLogonControlClass connctl = new SAPLogonControlClass();
//下面的参数值根据实际情况赋值
connctl.Client = "200";
connctl.Language = "EN";
connctl.ApplicationServer = "xxx.xxx.xxx.xxx";//Application server 
IP
connctl.SystemNumber = 00;
connctl.User = "XXXX";
connctl.Password = "XXXXXXX";

Connection conn = (Connection)connctl.NewConnection();
//登陆
if (conn.Logon(null,true))
{
MessageBox.Show("Successful");
}

SAPFunctionsClass functions = new SAPFunctionsClass();
functions.Connection = conn;
//这里就可以传入Function Name
Function fucntion = (Function)functions.Add("RFC_READ_TABLE");。
//这里是传入值参数
Parameter parameter1 = 
(Parameter)fucntion.get_Exports("QUERY_TABLE");
parameter1.Value = "VEKP";
Parameter parameter2 = (Parameter)fucntion.get_Exports("DELIMITER");
parameter2.Value = ";";
//这里是传入表的参数,这里有两个表OPTIONS和FIELDS
Tables Tables1 = (Tables)fucntion.Tables;
Table table0 = (Table)Tables1.get_Item("OPTIONS");
table0.AppendGridData(1, 1, 1, "EXIDV = '00000000001000000022'");
Table talble1 = (Table)Tables1.get_Item("FIELDS");
talble1.AppendGridData(1, 1, 1, "VENUM");
talble1.AppendGridData(2, 1, 1, "VPOBJKEY");
talble1.AppendGridData(3, 1, 1, "VSTEL");
//调用函数,并读取数据
if (fucntion.Call())
{
Tables1 = (Tables)fucntion.Tables;
Table talbe2 = (Table)Tables1.get_Item("DATA");
MessageBox.Show(talbe2.get_Cell(1, 1).ToString());
}
//退出登陆
conn.Logoff();

=========

所有ABAP 函数模块在SAP函数制作器(事务码SE37)中管理。其中一定数量的是能够远程函数调用的。这些允许远程调用的函数模块被称为RFM。RFM 遵守一定的附加规则, 例如,不允许使用修改参数。RFM 接口由输入、输出和表参数和定义的异常组成。输入和输出参数通常是基于字典定义的简单字段(例如,KNA1-KUNNR)或者由字段组成的结构。所有输出参数都是可选的,输入和表参数可以是必要的。简单字段也被描述为标量参数。可选的标量输入参数可以包含一个默认值,在调用者没有使用该参数时使用。在函数制作器中,可以通过双击相应区域跳转到所有参数的相关字典定义。这里最重要的属性是数据类型、长度、可能使用的转换例程和允许的值集合。BAPI 和工具概览BAPI是RFM 的子集。必须根据BAPI 编程指南中定义的方针来开发BAPI,并且必须在业务对象资源库(BOR)中定义它们为对象类型的方法。下面是最重要的BAPI 规范的清单:已发布的BAPI 是同步访问SAP 的标准接口。客户可以开发子集的BAPI。把BAPI 附加到子类,而不要修改SAP 对象类型。BAPI 通常向上兼容并且编写了完善的文档。 可以通过编写对相应函数的CALL FUNCTION 来在ABAP 中调用BAPI。 BAPI 通常没有异常。 BOR 对象类型通常带有用来访问相关表的的键字段。如果具有实例依赖的BAPI,键字段做为重要输入参数出现在RFC 级别。实例无关的BAPI 不使用键字段。BAPI 在BOR 中可以具有不同于函数制作器的参数名称。表参数也可以在BOR 中标记为输入、输出或输入/输出。这对调用BAPI 没有影响。从4.0 版以后,执行数据库修改的BAPI 不再包含COMMIT WORK 语句。应用必须使用Bapi.Service.TransactionCommit 来实现外部提交。 BAPI 主要使用内部数据表示法。GUI 转换例程不会被自动调用。SAP 提供转换BAPI,这样应用可以在内部和外部格式之间转换。 特殊的帮助之对象类型的BAPI 用来解释键(例如,国家键)和为输入字段提供值集合。

你可能感兴趣的:(C#,ABAP)