【问题标题】:Need Help at Getting data from SAP to C#在将数据从 SAP 获取到 C# 方面需要帮助
【发布时间】:2018-12-25 05:14:17
【问题描述】:

我想从 SAP 服务器获取一些数据到我在 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

【问题讨论】:

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


【解决方案1】:

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

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

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

最后是你的源代码:

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

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多