Доступ к свойствам задачи через отражение работает только в том случае, если в моем коде явно доступны свойства - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь получить доступ к свойству Task в MS Project через System.Type.GetProperty("Finish"), но похоже, что свойство (и другие подобные ему, например, Number1) не доступно через отражение, если только мой код специально использует это свойство. Это настройка компилятора, которую я могу изменить? Я пишу механизм синхронизации, поэтому невозможно заранее определить, какое поле Task может запросить клиентская система.

Таким образом, в приведенном ниже примере информация будет нулевой.

System.Type ty = typeof(Task);
System.Reflection.PropertyInfo info = ty.GetProperty("Finish");

, но с кодом ниже информация возвращается как действительный объект PropertyInfo.

Task tk = activeProject.ProjectSummaryTask;
object done = tk.Finish;
System.Type ty = typeof(Task);
System.Reflection.PropertyInfo info = ty.GetProperty("Finish");

В основном я ожидал, что GetProperty() будет работать для всех свойств, перечисленных в API для Task (которых довольно много).

Вот ссылка на API для свойства Finish: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.msproject.task.finish?view=office-project-server

1 Ответ

0 голосов
/ 02 мая 2019

Используйте метод GetField объекта Task , чтобы вернуть значение для переменного поля.

Вам нужно будет идентифицировать поле по внутреннему идентификатору поля - используйте внутреннюю константу (например, pjTaskFinish) или ее числовое значение (188743716).

В качестве альтернативы вы можете преобразовать понятные имена полей в константы, используя метод FieldNameToFieldConstant объекта Application.

ps VBA-версия документации содержит больше информации;большинство, если не все, объекты / методы / свойства одинаковы.

...