无法更改项目所有者

时间:2019-01-31 08:31:15

标签: csom ms-project-server-2013

我可以在代码中更改项目的名称,开始日期等,但是对项目所有者的更改不适用于项目服务器。 这是我的代码:

        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);

草稿项目的所有者最终成功地更改为预期的用户,但是在发布草稿项目后,所做的更改不适用于该项目。谁能说出我的代码是什么问题,还是上帝拒绝了项目服务器?!

1 个答案:

答案 0 :(得分:0)

您的代码非常接近,但是我认为不可能基于EnterpriseResource用户对象设置项目所有者。

相反,请尝试使用SharePoint用户对象。

var newOwner = projectContext.Web.SiteUsers.GetByLoginName("some name");
draft.Owner = newOwner;

这里的newOwner将是Microsoft.SharePoint.Client.User类型的对象,这是ProjectDraft类中的“所有者”字段所期望的。