【问题标题】:Using CSOM to update multiple tasks with only 1 project publish使用 CSOM 更新多个任务,仅发布 1 个项目
【发布时间】:2016-02-18 22:37:33
【问题描述】:

我有以下代码可以更新某些任务字段。这段代码的问题是,我必须在逐个更新每个任务后发布整个项目。例如,如果我有 500 个任务要更新,则该项目必须发布 500 次。如您所见,这完全是矫枉过正、缓慢且不必要。

using (ProjectContext projectContext = GetClientContext(psCred))
{
    projectContext.Load(projectContext.Projects);
    projectContext.ExecuteQuery();

    foreach (var project in projectContext.Projects)
    {
        var draftProject = project.CheckOut();
        projectContext.Load(draftProject.Tasks);
        projectContext.ExecuteQuery();

        projectContext.Load(draftProject.Task);
        projectContext.ExecuteQuery();

        foreach (var task in draftProject.Tasks)
        {
            task["FIELD"] = "VALUE";

            var job = draftProject.Update();
            projectContext.WaitForQueue(job, int.MaxValue);

            job = draftProject.Publish(true);
            projectContext.WaitForQueue(job, int.MaxValue);
        }
    }
}

我希望有一种方法可以一次更新所有项目任务,最后只发布一次,就像 Microsoft Project 桌面应用程序那样。

【问题讨论】:

    标签: ms-project csom project-server psi project-online


    【解决方案1】:

    不管怎样,我能够创建一堆任务,然后使用此代码通过一次发布更新所有新/现有任务的自定义字段:

    DraftProject projCheckedOut = proj2Edit.CheckOut();
    
    _projContext.Load(projCheckedOut.Tasks, ts => 
        ts.Include(
            t => t.Id, 
            t => t.Name, 
            t => t.CustomFields, 
            t => t.OutlineLevel,
            t => t.IsSummary));
    _projContext.ExecuteQuery();
    
    // Lookup custom field internal name from our StringDictionary
    string intNamePref = _customFields["Custom Field1"];
    
    var tasks = projCheckedOut.Tasks;
    
    foreach (var t in tasks)
    {
        t[intNamePref] = 2;
    }
    projCheckedOut.Publish(true);
    _projContext.ExecuteQuery();
    

    提示,要让 .Include lambda 工作,我必须使用以下方法添加:

    using Microsoft.SharePoint.Client;
    

    【讨论】:

    • 是的,它适用于自定义字段,但非开箱即用的字段会以这种方式更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多