Обработчик событий Project Server 2010

Я работаю над обработчиком событий 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 ответ

Логически это имеет смысл. Пока проект проверен, это означает, что кто-то может изменить его в любое время и любым способом.

Таким образом, даже если ваша идея сработает, ваше обновление может быть перезаписано при следующем сохранении в Project Pro. Потому что Project Pro ничего не знает о ваших манипуляциях.

Я ничего не знаю о вашей системе, поэтому позвольте мне предположить, что ваши пользователи в основном работают с Project Pro. В этом случае вы можете добавить свой обработчик событий в Application.ProjectBeforePublish msdn связать событие и обновить поле из Project Pro. Но имейте в виду, что вашим пользователям будет предложено сохранить проект перед публикацией.

Если решение с Project Pro не работает для вас - вы можете пометить опубликованные проекты каким-либо образом и, как только проект будет зарегистрирован, выполнить проверку, обновить поле, сохранить и снова опубликовать проект.

Другие вопросы по тегам