我想从SAP Server到Visual Studio中的C#程序中获取一些数据。 SAP和该程序之间的连接已经在起作用,但是我真的不知道如何将数据从服务器导入到程序中。
namespace ConsoleApp1
{
class Program //: IDestinationConfiguration
{
static void Main(string[] args)
{
fn f = new fn();
RfcDestination destination = f.GetRfcDestination("vhcalnplci", "brachi", "Abap2017", "001", "EN", "vhcalnplci", "00", "20", "10");
RfcSessionManager.BeginContext(destination);
destination.Ping();
IRfcFunction function = destination.Repository.CreateFunction("/BODS/RFC_READ_TABLE");
IRfcTable addresses = function["ADDRESSES"].GetTable();
Console.WriteLine("STREET");
for (int index = 0;
index < addresses.RowCount;
++index)
{
Console.WriteLine(addresses[index]["STREET"].GetString());
}
}
}
}
如您所见,我已经编写了一些代码,但是不幸的是,当我尝试执行该程序时,出现以下错误:
SAP.Middleware.Connector.RfcInvalidParameterException:“容器元数据/ BODS / RFC_READ_TABLE的元素地址未知”
在下面的代码行中:
IRfcTable addresses = function["ADDRESSES"].GetTable();
我知道错误是因为RFC_READ_TABLE模块中不存在该元素,但是正如我所说,我并不真正知道如何获取数据以及该部分程序真正需要的代码。我已经阅读了SAP的编程指南,但也许会帮助某人帮助我:.NET Connector Programming Guide
答案 0 :(得分:1)
从我的角度来看,您的问题太广泛了,无法在此简单回答。 您似乎缺乏有关SAP系统及其功能和数据模型的基础知识。 与SAP系统配合使用的推荐方法是使用适合您需求的特定功能模块(BAPI),如果无法立即使用这种功能模块,请在ABAP中开发自己的功能。 p>
如果选择任何RFC_READ_TABLE功能模块,则表明您希望像数据库一样访问SAP System,而事实并非如此。它是ERP system(使用数据库)。对于所有RFC_READ_TABLE变体,您甚至需要了解SAP的内部数据库表设计及其表依赖性,并且必须在函数调用中指定适当的SQL语句。这种方法容易出错,不是从SAP系统访问数据的推荐方法。
仅举一个例子,如果您想读取存储的客户数据(包括他们的地址),请使用远程功能模块BAPI_CUSTOMER_GETLIST。
最后是您的源代码:
RfcSessionManager.BeginContext(destination)
创建了连接资源泄漏,但没有再次结束上下文。仅当确实需要进行状态调用序列时才调用此函数。您在这里不需要它。function.Invoke(destination)
。