0

我正在开发 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。我认为这就是代码被破坏的地方。

4

1 回答 1

0

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

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

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

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

于 2013-02-23T01:15:37.697 回答