我可以在代码中更改项目的名称,开始日期等,但我对项目所有者的更改不适用于项目服务器。这是我的代码:
ProjectContext projectContext = new ProjectContext("http://servername:12247/PWA/");
var projectContextVar = projectContext.LoadQuery(
projectContext.Projects.Include(
p => p.Id,
p => p.Name,
p => p.StartDate,
p => p.FinishDate,
p => p.IncludeCustomFields,
p => p.IncludeCustomFields.CustomFields,
p => p.Owner.LoginName
));
projectContext.ExecuteQuery();
PublishedProject pubPro = null;
foreach (var p in projectContextVar)
{
if (new Guid("86C21C48-71BE-E811-80C4-00155D011303") == p.Id)
{
pubPro = p;
}
}
DraftProject draft;
draft = pubPro.Draft;
JobState job1 = projectContext.WaitForQueue(draft.CheckIn(true), 20);
draft = pubPro.CheckOut();
projectContext.Load(draft);
projectContext.ExecuteQuery();
var resources = projectContext.EnterpriseResources;
projectContext.Load(resources);
projectContext.ExecuteQuery();
foreach (EnterpriseResource er in resources)
{
if (er.Name.Equals("some name"))
{
var o = er.User;
projectContext.Load(o);
projectContext.ExecuteQuery();
projectContext.Load(draft.Owner);
projectContext.ExecuteQuery();
draft.Owner = o;
Console.WriteLine("changed...");
}
}
draft.Update();
JobState jobState = projectContext.WaitForQueue(draft.Publish(true), 10);
草稿项目的所有者最终成功更改为预期的用户,但在发布草稿项目后,更改不适用于该项目。 任何人都可以说我的代码有什么问题,或者上帝禁止项目服务器吗?!
您的代码非常接近,但我认为不可能基于 EnterpriseResource 用户对象设置项目所有者。
相反,请尝试使用 SharePoint 用户对象。
var newOwner = projectContext.Web.SiteUsers.GetByLoginName("some name");
draft.Owner = newOwner;
这里的 newOwner 将是类型为 Microsoft.SharePoint.Client.User 的对象,这是 ProjectDraft 类中的"所有者"字段所期望的。