2013-02-22 10 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에서 다음에 저장하면 업데이트를 덮어 쓸 수 있습니다. Project Pro는 사용자의 조작에 대해 아무 것도 모르기 때문에

저는 시스템에 대해 잘 모릅니다. 따라서 사용자가 대부분 Project Pro를 사용하고 있다고 생각합니다. 이 경우 이벤트 처리기를 Application.ProjectBeforePublishmsdn link 이벤트에 추가하고 Project Pro에서 필드를 업데이트 할 수 있습니다. 그러나 게시하기 전에 사용자에게 프로젝트 저장 여부를 묻는 메시지가 표시됩니다.

Project Pro를 사용하는 솔루션이 작동하지 않는 경우 - 게시 된 프로젝트에 어떻게 든 표시되고 프로젝트가 체크인되는 즉시 체크 아웃 할 수 있습니다. 체크 아웃하고 필드를 업데이트 한 다음 프로젝트를 저장하고 다시 게시하십시오.

+0

@melan 응답에 감사드립니다. 필자의 경우 사용자는 Project Pro와 PWA (50-50)를 사용합니다. 게시 된 프로젝트의 플래그 설정 -이 일은 내 마음을 넘어 섰지 만 결코 그렇게 할 방법을 찾지 못했습니다. – sid1385