我可以在代码中更改项目的名称,开始日期等,但是对项目所有者的更改不适用于项目服务器。 这是我的代码:
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);
草稿项目的所有者最终成功地更改为预期的用户,但是在发布草稿项目后,所做的更改不适用于该项目。谁能说出我的代码是什么问题,还是上帝拒绝了项目服务器?!
答案 0 :(得分:0)
您的代码非常接近,但是我认为不可能基于EnterpriseResource用户对象设置项目所有者。
相反,请尝试使用SharePoint用户对象。
var newOwner = projectContext.Web.SiteUsers.GetByLoginName("some name");
draft.Owner = newOwner;
这里的newOwner将是Microsoft.SharePoint.Client.User类型的对象,这是ProjectDraft类中的“所有者”字段所期望的。