从SAP到C#获取数据时需要帮助

时间:2018-07-17 13:19:07

标签: c# .net sap sap-connector saprfc

我想从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

1 个答案:

答案 0 :(得分:1)

从我的角度来看,您的问题太广泛了,无法在此简单回答。 您似乎缺乏有关SAP系统及其功能和数据模型的基础知识。 与SAP系统配合使用的推荐方法是使用适合您需求的特定功能模块(BAPI),如果无法立即使用这种功能模块,请在ABAP中开发自己的功能。 p>

如果选择任何RFC_READ_TABLE功能模块,则表明您希望像数据库一样访问SAP System,而事实并非如此。它是ERP system(使用数据库)。对于所有RFC_READ_TABLE变体,您甚至需要了解SAP的内部数据库表设计及其表依赖性,并且必须在函数调用中指定适当的SQL语句。这种方法容易出错,不是从SAP系统访问数据的推荐方法。

仅举一个例子,如果您想读取存储的客户数据(包括他们的地址),请使用远程功能模块BAPI_CUSTOMER_GETLIST。

最后是您的源代码:

  1. 您通过调用RfcSessionManager.BeginContext(destination)创建了连接资源泄漏,但没有再次结束上下文。仅当确实需要进行状态调用序列时才调用此函数。您在这里不需要它。
  2. 您没有设置或填写用于调用功能模块的任何导入参数。
  3. 您没有在SAP系统中执行/调用功能模块。这需要调用function.Invoke(destination)
  4. 您试图访问参数“ ADDRESSES”,该参数在所选功能模块/ BODS / RFC_READ_TABLE中不可用。看一下SAP系统,并通过事务SE37检查功能模块接口公开了哪些参数和表。