我必须从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
(视觉工作室不喜欢这样)。但是,如果我在手表中执行此操作,如上所示,则会正确显示。它给了我公司名称。那么手表如何正确显示价值呢?我必须在C#中做一些简单的事情。
由于SAP中的保护级别,Err看起来像是某种错误。我想知道如何揭露这个......
答案 0 :(得分:1)
从我可以看到的最可能的解释是that _Company
是一个私人领域。这就是为什么不能直接从代码访问它。 Watch窗口使用反射(或类似技术)来获取包括私有和受保护的所有成员。
修改强>
如果SAP将其设为私有,则可能是有充分理由的。但是如果你想要选择价值,你可以试试这样的东西
companyName.GetType().GetField("_Company", BindingFlags.NonPublic).GetValue(companyName);