PSI: Получение значения корпоративного поля уровня проекта

Вопросы, связанные с разработкой приложений для Microsoft Project

PSI: Получение значения корпоративного поля уровня проекта

Сообщение N1ght » 18 мар 2015, 12:39

Доброго времени суток, коллеги!
Полез разбираться с PSI интерфейсом прожектовки в связи с производственной необходимостью. Стоит прожектовка 2010. Требуется из проекта вычитать значение корпоративного поля вида Проект - Текст.
Я написал код, который должен работать, но чудит. Суть такая. Известен ГУИД проекта и ГУИД корп. поля. Я вычитываю проект и в цикле foreach обегаю ProjectCustomFields датасета.
На сервере порядка 20+ корп.полей вида Проект - Текст, а foreach делает 12 проходов.
ProjectCustomFields.Count возвращает значение 12. Вопрос: как так-то? где остальные поля?

Ниже пример кода. Заранее благодарен за помощь.

Код: Выделить всё
#region аутентификация
        //Инициализация путей и
        const string PROJECT_SERVER_URI = "http://Сайт/PWA/";
        const string PROJECT_SERVICE_PATH = "_vti_bin/psi/Project.asmx";
        const string PROJECT_QUEUESVC_PATH = "_vti_bin/psi/queuesystem.asmx";
        UpdateEntFields.PrjWebService.Project projectSvc = new UpdateEntFields.PrjWebService.Project();
        UpdateEntFields.PrjWebService.ProjectDataSet pDS = new UpdateEntFields.PrjWebService.ProjectDataSet();
        UpdateEntFields.QueueSystemSvc.QueueSystem queueSvc = new UpdateEntFields.QueueSystemSvc.QueueSystem();

        string UsrLogin = "[b]Какой-то крутой логин[/b]";
        string UsrPassword = "[b]Какой-то подходящий пароль[/b]";
        string usrDomainName = "[b]Имя домена[/b]";
        ICredentials svcCredentials = new NetworkCredential(UsrLogin, UsrPassword, usrDomainName);


        projectSvc.Url = PROJECT_SERVER_URI + PROJECT_SERVICE_PATH;
        projectSvc.Credentials = svcCredentials;
        queueSvc.Url = PROJECT_SERVER_URI + PROJECT_QUEUESVC_PATH;
        queueSvc.Credentials = svcCredentials;
        #endregion

        #region Отладка функционала. Поиск пути.
        Guid DEBUG_PROJECT_GUID = new Guid("ee05bce1-856c-43a6-81d2-c3092481c1eb"); //<-- Гуид тестового проекта
        Guid UNIQUE_PROJECT_GUID = new Guid("5cb177ff-feb3-4e8c-be9e-d60db4bcfa6b"); //<-- Гуид кастомного поля уровня проекта

        //Вычитываем проект
        PrjWebService.ProjectDataSet crntPrjDs = projectSvc.ReadProject(DEBUG_PROJECT_GUID, PrjWebService.DataStoreEnum.WorkingStore);

        Console.WriteLine(crntPrjDs.ProjectCustomFields.Count);

        foreach (PrjWebService.ProjectDataSet.ProjectCustomFieldsRow row in crntPrjDs.ProjectCustomFields)
        {
          Console.WriteLine("MD_PROP_UID: " + row.MD_PROP_UID);
          if (row.MD_PROP_UID == UNIQUE_PROJECT_GUID)
          {
           
            if (row.TEXT_VALUE == "")
            {
             
            }

          }
        }
N1ght
Белый пояс
 
Сообщения: 22
Зарегистрирован: 06 ноя 2014, 11:46
Откуда: Москва

Re: PSI: Получение значения корпоративного поля уровня проек

Сообщение Brise » 18 мар 2015, 14:38

N1ght писал(а):На сервере порядка 20+ корп.полей вида Проект - Текст, а foreach делает 12 проходов.
ProjectCustomFields.Count возвращает значение 12. Вопрос: как так-то? где остальные поля?

Подозреваю, что в ProjectDataSet.ProjectCustomFields должны попадать далеко не все корпоративные поля. Какие именно поля там оказались? Есть какая-то закономерность?

Я для чтения корпоративных полей использовал веб-сервис WebSvcCustomFields и метод CustomFields.ReadCustomFieldsByEntity. Проблем не возникало.
Brise
Синий пояс
 
Сообщения: 145
Зарегистрирован: 01 апр 2013, 07:52
Откуда: Санкт-Петербург

Re: PSI: Получение значения корпоративного поля уровня проек

Сообщение N1ght » 18 мар 2015, 14:41

Brise писал(а):
N1ght писал(а):На сервере порядка 20+ корп.полей вида Проект - Текст, а foreach делает 12 проходов.
ProjectCustomFields.Count возвращает значение 12. Вопрос: как так-то? где остальные поля?

Подозреваю, что в ProjectDataSet.ProjectCustomFields должны попадать далеко не все корпоративные поля. Какие именно поля там оказались? Есть какая-то закономерность?

Я для чтения корпоративных полей использовал веб-сервис WebSvcCustomFields и метод CustomFields.ReadCustomFieldsByEntity. Проблем не возникало.


Самое интересное что попадают туда другие точно такие же поля из таблицы корп.полей, а моему не повезло. Спасибо за наводку попробую через WebCustomFields проломиться. о результатах отпишусь
N1ght
Белый пояс
 
Сообщения: 22
Зарегистрирован: 06 ноя 2014, 11:46
Откуда: Москва


Вернуться в Разработка и программирование для Microsoft Project

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1