我有以下代码更新某些任务字段。这段代码的问题在于我必须在逐个更新每个任务后发布整个项目。因此,例如,如果我有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桌面应用程序一样。
答案 0 :(得分:0)
为了它的价值,我能够创建一堆任务,然后使用此代码通过一次发布更新所有新/现有任务的自定义字段:
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;