【问题标题】:Project Server 2010 Event HandlerProject Server 2010 事件处理程序
【发布时间】:2013-02-08 02:38:37
【问题描述】:

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

【问题讨论】:

    标签: ms-project-server-2010 psi


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢@melan 的回答。就我而言,用户使用 Project Pro 和 PWA,例如 50-50。为已发布的项目设置一个标志 - 这件事已经在我脑海中浮现,但从未找到任何方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多