2013-02-22 102 views
0

我对OnPublished事件处理程序,将更新基于另一个场变化项目的一个自定义字段的工作。Project Server 2010的事件处理程序

我得到一个错误

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

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

回答

0

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

所以,即使你的想法的作品您的更新可以通过从下一个项目做临保存覆盖。因为Project Pro对你的操作一无所知。

我不知道你的系统过这么让我猜猜,你的用户提供项目临大多工作。在这种情况下,您可以将事件处理程序添加到Application.ProjectBeforePublishmsdn link事件中,并从Project Pro更新该字段。但请记住,您的用户将被要求在发布之前保存该项目。

如果与工程专业的解决方案并不为你工作 - 你可以标记发布莫名其妙,一旦该项目已签项目 - 做检查,更新的字段,然后再次保存并发布项目。

+0

感谢您的回答@melan。在我的情况下,用户使用Project Pro和PWA,比如50-50。为已发布的项目设置一个标志 - 这件事已经超越了我的想法,但从来没有找到任何方法来做到这一点。 – sid1385 2013-03-05 12:56:29