Получение ProjectSiteUrl из Project Online не работает

Я написал следующий код, чтобы получить свойство ProjectSiteUrl из проекта, опубликованного в Project Online.

using (ProjectContext projContext = new ProjectContext(pwaUrl))
{
    using (SecureString securePassword = new SecureString())
    {
        Helper.GetSecurePassword(projContext, securePassword, emailID, password);

        for (int i = 0; i < listGuid.Count; i++)
        {
            #region Load Project
            string spoGuid = listGuid[i].ProjectGuid;

            if (!string.IsNullOrEmpty(spoGuid))
            {


                Guid id = Guid.Parse(spoGuid);

                var projBlk = projContext.LoadQuery(
                        projContext.Projects
                        .Where(p =>
                            p.Id == id
                        )
                        .Include(p => p.Id,
                        p => p.Tasks,
                        p => p.TaskLinks,
                        p => p.ScheduledFromStart,
                        p => p.ProjectSiteUrl,
                            p => p.Name,
                            p => p.IncludeCustomFields,
                            p => p.IncludeCustomFields.CustomFields,
                            P => P.IncludeCustomFields.CustomFields.IncludeWithDefaultProperties(
                                lu => lu.LookupTable,
                                lu => lu.LookupEntries,
                                lu => lu.LookupEntries.IncludeWithDefaultProperties(
                                    entry => entry.FullValue,
                                    entry => entry.InternalName)
                            )
                        )
                    );

                projContext.ExecuteQuery();

                poFieldValues.Add(LoadProjectsinPO(projBlk, projContext));

            }
            #endregion
            //if (i > 5)
            //{
            //    break;
            //}
            if (i % 5 == 0)
            {
                Thread.Sleep(sleepDelay);
            }
        }
    }
}

При попытке доступа к свойству ProjectSiteUrl я получаю null. Раньше я получал правильный ProjectSiteUrl, но за последние несколько недель я получаю нуль. Никаких изменений в коде не было.

Что-то изменилось в способе доступа к этому свойству в Project Online?


person Abdul Hameed    schedule 03.05.2018    source источник


Ответы (2)


Я изменил порядок загрузки свойств в Load Query, и теперь ProjectSiteUrl загружается нормально. Хотя не знаю, почему он работает. Был бы признателен, если бы кто-нибудь объяснил это.

 var projBlk = projContext.LoadQuery(
                        projContext.Projects
                        .Where(p =>
                            p.Id == id
                        )
                        .Include(p => p.Id,
                        p => p.ProjectSiteUrl, // Moved ProjectSiteUrl as second loading parameter.
                        p => p.Tasks,
                        p => p.TaskLinks,
                        p => p.ScheduledFromStart,

                            p => p.Name,
                            p => p.IncludeCustomFields,
                            p => p.IncludeCustomFields.CustomFields,
                            P => P.IncludeCustomFields.CustomFields.IncludeWithDefaultProperties(
                                lu => lu.LookupTable,
                                lu => lu.LookupEntries,
                                lu => lu.LookupEntries.IncludeWithDefaultProperties(
                                    entry => entry.FullValue,
                                    entry => entry.InternalName)
                            )
                        )
                    );
person Abdul Hameed    schedule 07.05.2018
comment
@sasfrog нет, я этого не делал. как и некоторые другие мои вопросы, на которые я сам ответил, я не знаю, почему это работает. - person Abdul Hameed; 24.05.2018

Я не удивлен, что вам пришлось переместить его на основе запроса в тот момент, когда вы начинаете идти по пути получения задач, затем настраиваемых полей, а затем значений поиска, это становится беспорядочным. Я бы рекомендовал не получать все сразу, просто получить то, что вам нужно, на уровне проекта, затем на уровне задачи, уровне ресурса, уровне назначения и т. д. Кроме того, используйте Odata для извлечения информации из базы данных отчетов, это намного быстрее. База данных отчетов содержит самую последнюю опубликованную информацию, поэтому она устраняет любой беспорядок, который мог быть вызван использованием черновых данных.

person Don    schedule 27.10.2019