如何使用 SAP .NET Connector 从 SAP 系统获取数据?

5

我正在开发一个Windows应用程序,在这里我想从SAP系统中提取数据并在datagridview中显示...

我已经仅提取了列名称,如名称、城市等...

我不知道如何从这些列中提取数据,有没有人可以帮我提供代码?

我正在使用RFC_READ_TABLE函数模块和RFC目标管理器。

谢谢提前!!!


我已经从表中提取了字段名。现在我想从每列中提取值,每列大约有5000个条目。 - Jeswin Rebil
2个回答

9

尚未测试,但基本工作原理如下:

首先创建连接。

RfcDestination destination = mDestinationManager.GetDestination("MYDESTINATION");

创建函数

IRfcFunction readTable = destination.Repository.CreateFunction("RFC_READ_TABLE");

在调用函数之前设置参数。

// we want to query table KNA1
readTable.SetValue("QUERY_TABLE", "KNA1");
// fields will be separated by semicolon
readTable.SetValue("DELIMITER", ";");
参数是通过从函数中检索表、使用Append()函数添加行并使用SetValue()来设置该行中每个列的值来创建的。
// Parameter table FIELDS contains the columns you want to receive
// here we query 2 fields, KUNNR and NAME1
IRfcTable fieldsTable = readTable.GetTable("FIELDS");
fieldsTable.Append();
fieldsTable.SetValue("FIELDNAME", "KUNNR");
fieldsTable.Append();
fieldsTable.SetValue("FIELDNAME", "NAME1");

// the table OPTIONS contains the WHERE condition(s) of your query
// here a single condition, KUNNR is to be 0012345600
// several conditions have to be concatenated in ABAP syntax, for instance with AND or OR
IRfcTable optsTable = readTable.GetTable("OPTIONS");
optsTable.Append();
optsTable.SetValue("TEXT", "KUNNR = '0012345600'");

调用函数。
readTable.Invoke(destination);

处理数据

IRfcTable dataTable = readTable.GetTable("DATA");

foreach(var dataRow in dataTable)
{
    string data = dataRow.GetValue("WA");
    string[] columns = data.Split(';');
}

这是我已经有的代码,你的代码绝对正确,但我发现我调用的表中没有条目,这是我犯的错误,现在我调用另一个表它可以正常工作...非常感谢你的主动帮助。现在我遇到了一些表中的数据缓冲区超出限制,我不知道为什么,如果你能帮我就请帮忙吧。 - Jeswin Rebil
1
RFC_READ_TABLE有一些限制。曾经有一篇SAP笔记描述了对RFC_READ_TABLE的修改(将整个函数模块复制到客户命名空间中并在那里进行更改),以消除某些限制。这个SCN主题描述了这些变化:http://scn.sap.com/thread/338270。 - Dirk Trilsbeek
我不理解,如果您能的话,请告诉我该怎么做以避免出现该错误?我的表名是PA0002。 - Jeswin Rebil
您使用的函数模块存在一定的限制(512个字符宽度),可能会对某些列类型和SAP Unicode系统造成问题。我不知道是否有SAP标准函数模块可供使用,因此您需要自己创建一个(在SAP系统中,使用ABAP语言)。我之前评论中提供的链接介绍了如何修改RFC_READ_TABLE的复制版本。如果您无法在SAP系统中自行完成此操作,则可能需要向ABAP开发人员寻求帮助。然后,您可以调用该新函数模块而不是RFC_READ_TABLE,这样应该就可以正常工作了。 - Dirk Trilsbeek
是的,我现在非常清楚了......非常感谢你,伙计,我想把这个信息告诉我的SAP同事,并想做些什么...由于我的声望不高,甚至无法为这篇帖子投票 :( - Jeswin Rebil
非常感谢您提供这个简洁的代码示例。它帮了我大忙! - Sagi

0
对于RFC_READ_TABLE,您可能还想考虑在sourceforge.net上免费使用的.net ExtracTable工具。它使用RFC_READ_TABLE,并将报告导出到Excel或CSV文件中。 由于RFC_READ_TABLE可能会在记录超过512个字符时出现问题,因此上述工具会处理此类情况。否则,您将不得不为这些SAP表编写自己的拆分和合并例程。但是,这种方法总是有利有弊。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接