如何使用CSOM c#获取publishhedtask父Id
本文关键字:publishhedtask Id 获取 何使用 CSOM | 更新日期: 2023-09-27 18:15:35
我需要得到父级。使用c#和CSOM的PublishedTask Id。有人知道怎么做吗?
(客户端对象模型,Project Server Online,在SharePoint上运行)
下面的代码不起作用:
ProjContext.Load(PublishedProject.Tasks);
ProjContext.ExecuteQuery();
foreach (PublishedTask Task in PublishedProject.Tasks)
{
Console.WriteLine(Task.Parent.Id);
}
像这样修改Load()方法也不起作用:
ProjContext.Load(PublishedProject.Tasks, t => t.Include(pt => pt.Parent))
ProjContext.Load(PublishedProject.Tasks, t => t.Include(pt => pt.Id, pt => pt.Parent))
ProjContext.Load(PublishedProject.Tasks, t => t.Include(pt => pt.Id, pt => pt.Parent, pt => pt.Parent.Id))
在所有这些情况下,publishhedtask。父级未定义。PublishedTask.Parent.Id也是未定义的。当尝试在任何这些场景下访问这些属性时将抛出错误。
有人知道如何获得PublishedTask.Parent.Id吗?
解决方案是知道Task.Parent.Id何时为空,何时有值。下面的代码告诉我们:
public static bool IsNull(ClientObject clientObject)
{
//check object
if (clientObject == null)
{
//client object is null, so yes, we're null (we can't even check the server object null property)
return true;
}
else if (!clientObject.ServerObjectIsNull.HasValue)
{
//server object null property is itself null, so no, we're not null
return false;
}
else
{
//server object null check has a value, so that determines if we're null
return clientObject.ServerObjectIsNull.Value;
}
}
我在这里找到了这个函数:http://chrisdomino.com/Blog/Post/An-Investigation-Into-Nullability-In-The-SharePoint-Client-Object-Model
下面的代码与上面的函数一起工作。
ProjContext.Load(PublishedProject.Tasks);
ProjContext.Load(PublishedProject.Tasks, t => t.Include(pt => pt.Id, pt => pt.Parent));
ProjContext.ExecuteQuery();
foreach (PublishedTask Task in PublishedProject.Tasks)
{
string sParentId = null;
string sParentName = null;
if (!IsNull(Task.Parent))
{
sParentId = Task.Parent.Id.ToString();
sParentName = Task.Parent.Name;
string sMyName = Task.Name;
}
Console.WriteLine("{0}, {1}, {2}, {3}", Task.Name, sParentId, sParentName, Task.Work);
}