Добавление переменной watch показывает поле, но компиляции не нравится поле? - PullRequest
1 голос
/ 18 февраля 2011

Мне нужно получить некоторые данные из системы ERP (SAP) в C #.Не вдаваясь в подробности о SAP (я уверен, что вы не хотели бы знать об этом).Я вызываю некоторую удаленную функцию из C # и она работает, но у меня странная проблема.Одна из функций, которую мне нужно вызвать в SAP из C #, называется 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, и часы показывают, что прямо здесь:

enter image description here

ПроблемаУ меня есть уведомление, что _Company имеет значение, которое мне нужно, но я не могу сделать companyName._Company (Visual Studio не нравится это).Однако, если я делаю это в моих часах, как показано выше, они отображаются правильно.Это дает мне название компании.Так как же часы показывают значение правильно?Я, должно быть, неправильно делаю что-то простое в C #.

Редактировать

Ошибка выглядит так, как будто это какая-то ошибка из-за уровня защиты в SAP .. Интересно, как я могу это разоблачить ...

1 Ответ

1 голос
/ 18 февраля 2011

Из того, что я вижу, наиболее вероятным объяснением является that _Company - личное поле.Вот почему он не доступен напрямую из кода.Окно Watch использует отражение (или аналогичный метод), чтобы получить всех участников, включая приватных и защищенных.

Редактировать:
Если SAP сделал его закрытым, это, вероятно, по уважительной причине.Но если вы все равно хотите выбрать значение, вы можете попробовать что-то вроде этого

companyName.GetType().GetField("_Company", BindingFlags.NonPublic).GetValue(companyName);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...