Извлечение 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?
1 ответ
Я изменил порядок загрузки свойств в 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)
)
)
);
Я не удивлен, что вам пришлось переместить его на основе запроса в тот момент, когда вы начинаете идти по пути получения задач, затем настраиваемых полей и затем значений поиска, это становится беспорядочным. Я бы рекомендовал не получать все сразу, просто получите то, что вам нужно, на уровне проекта, затем на уровне задачи, уровне ресурсов, уровне назначения и т. Д. Плюс используйте Odata, чтобы получить информацию из базы данных отчетов, это намного быстрее. База данных отчетов содержит самую последнюю опубликованную информацию, поэтому она устраняет любой беспорядок, который кто-то мог вызвать при использовании черновых данных.