1

我必须从 C# 中的 ERP 系统 (SAP) 中提取一些数据。无需详细介绍 SAP(我相信您不会想知道它)。

我正在从 C# 中调用一些远程函数并且它正在工作,但我遇到了一个奇怪的问题。我必须从 C# 在 SAP 中调用的函数之一称为 BAPI_USER_GET_DETAIL。

所以我在 C# 中这样做:

        s.Bapi_User_Get_Detail("No","10217502", out address, out alias, out companyName,
            out defaults, out islocked, out lastmodified, out logonData, out ref_user, out snc, out uclass, 
            ref activeGroups, ref addcomrem, ref addfax, ref addpag, ref addprt, ref addrfc,
            ref addrml, ref addsmtp, ref addssf, ref addtel, ref addtlx, ref addttx, ref adduri, 
            ref addx400, ref extidhead, ref extidpart, ref groups, ref parameter, ref parameter1,
            ref profiles, ref return0, ref systems, ref uclasssys); 

        Console.WriteLine(companyName._Company);
        Console.ReadLine();

SAP 需要所有这些字段,因此这是非常正常的代码。我需要out在这个函数中提取一个参数。即company在我执行此过程之后的参数我应该在该company字段内有一个值,并且手表在这里显示:

在此处输入图像描述

我遇到的问题是注意到 _Company 具有我需要的价值,但我做不到companyName._Company(Visual Studio 不喜欢这样)。但是,如果我如上所示在手表中执行此操作,它会正确显示。它给了我公司名称。那么手表如何正确显示值。我必须在 C# 中错误地做一些简单的事情。

编辑

由于 SAP 中的保护级别,Err 看起来像是某种错误。我想知道如何公开它...
4

1 回答 1

1

据我所知,最可能的解释是that _Company私有字段。这就是为什么不能直接从代码访问它的原因。Watch 窗口使用反射(或类似技术)来获取所有成员,包括私有成员和受保护成员。

编辑:
如果 SAP 将其设为私有,那可能是有充分理由的。但是,如果您无论如何都想选择价值,您可以尝试这样的事情

companyName.GetType().GetField("_Company", BindingFlags.NonPublic).GetValue(companyName);
于 2011-02-18T20:23:43.507 回答