Project Server 2010事件处理程序

时间:2013-02-22 12:59:00

标签: ms-project-server-2010 psi

我正在研究OnPublished事件处理程序,它将根据另一个字段的更改更新项目的一个自定义字段。

我收到错误

Event Handler for event \ProjectPublished\ of type \PS.UpdateProjectStatusChangeDate.EventHandlerUpdateField\ threw an exception: ProjectServerError(s) LastError=CICOCheckedOutToOtherUser Instructions: Pass this into PSClientError constructor to access all error information

这是代码

        //loading project data from server
        //Every change on this dataset will be updated on the server!
        ProjectDataSet projectDs = projectClient.ReadProject(projectId, projectSvc.DataStoreEnum.WorkingStore);

        foreach (projectSvc.ProjectDataSet.ProjectRow row in projectDs.Project)
        {
            if (row.PROJ_SESSION_UID != null)
            {
                sessionId = row.PROJ_SESSION_UID;
                break;
            }
        }
       //send the dataset to the server to update the database
       bool validateOnly = false;
       Guid jobId = Guid.NewGuid();
       projectClient.QueueUpdateProject(jobId, sessionId, projectDs, validateOnly);

与我们在项目处于签入状态时运行代码的其他答案不同,我们正在签出并分配新的SessionID。 但是当事件处理程序触发时,项目已经签出。那么我该如何获得SessionID。我认为这就是代码破解的地方。

1 个答案:

答案 0 :(得分:0)

逻辑上这是有道理的。检查项目时,意味着有人可以随时以任何方式更改它。

因此,即使您的想法有效,您也可以通过Project Pro的下一次保存来覆盖您的更新。因为Project Pro对你的操作一无所知。

我对您的系统一无所知,所以让我猜你的用户主要使用Project Pro。在这种情况下,您可以将事件处理程序添加到Application.ProjectBeforePublish msdn link事件,并从Project Pro更新字段。但请记住,在发布之前,系统会要求您的用户保存项目。

如果Project Pro的解决方案不适合您 - 您可以以某种方式标记已发布的项目,并在项目签入后立即 - 签出,更新字段,再次保存和发布项目。