Обработчик событий 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. Я думаю, что это то, где код ломается.


person sid1385    schedule 22.02.2013    source источник


Ответы (1)


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

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

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

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

person melan    schedule 23.02.2013
comment
Спасибо за ответ @melan. Пользователей, в моем случае использующих и Project Pro, и PWA, примерно 50 на 50. Установка флага для опубликованного проекта - эта вещь приходила мне в голову, но так и не нашел способа сделать это. - person sid1385; 05.03.2013