如何使用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吗?

如何使用CSOM c#获取publishhedtask父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);
                }