Лабораторная работа
“Использование обработчиков событий Project Server”
Данная лабораторная работа демонстрирует как создавать и использовать обработчики событий Project Server. Целью лабораторной работы является создание обработчиков событий, которые будут записывать в журнал событий Windows информацию о действиях, которые пользователь провёл с проектом и о
-
Откройте Microsoft Visual Studio 2010
-
Создайте новый проект в Microsoft Visual Studio 2010: File -> New -> Project… и выберите тип проекта - Class Library, название - PSEventsLibrary, версию .Net Framework 3.5.
-
Добавьте в проект новый класс ProjectHandler
-
Добавьте ссылки на следующие сборки:
-
Microsoft.Office.Project.Server.Events.Receivers
-
Microsoft.Office.Project.Server.Library
-
Созданный класс ProjectHandler необходимо отнаследовать от Microsoft.Office.Project.Server.Events.ProjectEventReceiver
-
public class ProjectHandler:Microsoft.Office.Project.Server.Events.ProjectEventReceiver
{
}
-
Теперь добавьте метод, который будет записывать передаваемые ему сообщения в журнал событий сервера.
public static void WriteToEventLog(string textLog, EventLogEntryType logtype)
{
EventLog eventlog = new EventLog();
eventlog.Source = "Project Event Handler";
eventlog.WriteEntry(logtype.ToString() + ":" + textLog, logtype);
}
-
Переопределите события Project Server’а OnDeleting, OnCreated, OnPublished, OnSaved, OnCheckIn и в каждое событие добавьте вызов метода WriteToEventLog, с текстом, который будет записываться в журнал событий сервера при вызове.
В итоге получится следующее:
public override void OnDeleting(PSContextInfo contextInfo, ProjectPreEventArgs e)
{
WriteToEventLog(string.Format("Пользователь \"{0}\" удалил проект \"{1}\"", contextInfo.UserName, e.ProjectName), EventLogEntryType.Information);
base.OnDeleting(contextInfo, e);
}
public override void OnCreated(PSContextInfo contextInfo, ProjectPostEventArgs e)
{
WriteToEventLog(string.Format("Пользователь \"{0}\" создал проект \"{1}\"", contextInfo.UserName, e.ProjectName), EventLogEntryType.Information);
base.OnCreated(contextInfo, e);
}
public override void OnPublished(PSContextInfo contextInfo, ProjectPostPublishEventArgs e)
{
WriteToEventLog(string.Format("Пользователь \"{0}\" опубликовал проект \"{1}\"", contextInfo.UserName, e.ProjectName), EventLogEntryType.Information);
base.OnPublished(contextInfo, e);
}
public override void OnSaved(PSContextInfo contextInfo, ProjectPostEventArgs e)
{
WriteToEventLog(string.Format("Пользователь \"{0}\" сохранил проект \"{1}\"", contextInfo.UserName, e.ProjectName), EventLogEntryType.Information);
base.OnSaved(contextInfo, e);
}
public override void OnCheckIn(PSContextInfo contextInfo, ProjectPostEventArgs e)
{
WriteToEventLog(string.Format("Пользователь \"{0}\" вернул проект \"{1}\"", contextInfo.UserName, e.ProjectName), EventLogEntryType.Information);
base.OnCheckIn(contextInfo, e);
}
-
Теперь сборку необходимо подписать, для этого откройте свойства проекта и перейдите на вкладку Signing
-
Создайте новый ключ
-
Постройте сборку. Сборка готова к работе.
-
Скопируйте сборку в папку C:\Program Files\Microsoft Office Servers\14.0\Bin\ProjectServerEventHandlers на сервере.
-
Далее необходимо найти открытый ключ сборки, для этого запускаем Visual Studio Command Prompt (2010) и ввести команду:
sn -T “C:\Program Files\Microsoft Office Servers\14.0\Bin\ProjectServerEventHandlers\PSEventsLibrary.dll”
Полученный открытый ключ сохраняем куда-нибудь.
-
Теперь созданный обработчик событий необходимо зарегистрировать. Для этого открываем Project Web Access и переходим в Параметры сервера -> Обработчики событий на сервере .
-
В списке обработчиков событий в разделе Project находим события OnDeleting, OnCreated, OnPublished, OnSaved, OnCheckIn и добавляем по одному обработчику для каждого события:
-
Поле имя – произвольное допустимое значение.
-
Имя сборки – полное имя сборки, в данном случае будет
PSEventsLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c3aefa555354437b
Где PublicKeyToken это открытый ключ сборки, полученный ранее
-
Имя класса PSEventsLibrary.ProjectHandler
Через несколько минут созданный обработчик появится в списке обработчиков соответствующего события
-
Для проверки созданных обработчиков событий необходимо создать, изменить и сохранить или закрыть проект. При это в журнале событий будут появляться соответствующие записи
Лабораторная работа
“Создание рабочего процесса Project Server”
Данная лабораторная работа демонстрирует как создать тип проекта, стадии, фазы в Project Server, а также как создать простой рабочий процесс и привязать его к типу проекту.
-
Создание фаз рабочего процесса
-
Откройте Project Web Access в браузере.
-
Перейдите в Параметры сервера -> Корпоративные настраиваемые поля и таблицы подстановки
-
Создайте новую таблицу подстановки “Типы сосисок”
-
Создайте новое настраиваемое поле “Тип сосисок”
-
Перейдите в Параметры сервера -> Этапы рабочего процесса
-
Создайте фазы Прототип, Изготовление, Продукция
-
Перейдите в Параметры сервера -> Стадии рабочего процесса
-
Создайте стадию “Инициализация”
-
Создайте стадию “Копчение”
-
Создайте стадию “Купание в молоке”
-
Создайте стадию “Одомашнивание”
-
Создайте стадию “Упаковка”
-
Создайте стадию “Реализация”
-
Создание рабочего процесса в Visual Studio 2010
-
Откройте Visual Studio 2010 и создайте проект “ProjectWorkflow” типа Empty SharePoint Project
-
В проект добавьте Sequental Workflow “ProjWF”
-
После создания рабочий процесс откроется в режиме визуального редактирования
-
Двойным щелком мыши по блоку “onWorkflowActivated1” создайте метод, который будет выполняться при создании рабочего процесса. В этом методе необходимо создать контекст рабочего процесса SharePoint.
private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)
{
wfContext.Initialize(workflowProperties);
}
Контекст будет храниться в самом объекте Workflow:
public Microsoft.SharePoint.WorkflowActions.WorkflowContext wfContext = new Microsoft.SharePoint.WorkflowActions.WorkflowContext();
-
Добавьте идентификаторы стадии проекта, для дальнейшей привязки к компонентам рабочего процесса. Идентификаторы можно подсмотреть в Project Web Access в деталях по стадии
public Guid Stage_1 = new Guid("7d9dae3c-0450-4c49-a601-de2d3d6bd521");
public Guid Stage_2 = new Guid("a6833b80-c6d9-4b25-b321-02603ed964db");
public Guid Stage_3 = new Guid("3b791abd-ecbd-47c4-b392-c02eea355f95");
public Guid Stage_4 = new Guid("a09ac673-9045-4ece-8aa6-05b7771ad81c");
public Guid Stage_5 = new Guid("f548a8e2-b8d5-410d-b147-cfcb9bef6417");
public Guid Stage_6 = new Guid("4dcc89d8-5b40-4ac0-9b0f-de220668677a");
-
Добавьте идентификатор настраиваемого поля Тип сосиски
public Guid Proj_TypeMD_PROP_UID = new Guid("88112f68-09b5-4a21-8cb9-e746b2cac0c5");
-
В режиме визуального редактирования добавьте компонент ProjectSequence и задайте ему свойство InitiationData
-
Добавьте компонент SetProjectStage в ProjectSequence и задайте ему свойство WorkflowContext, AlwaysWait = True, а StageUid привяжите к Stage_1
-
Добавьте компонент ReadProjectProperty в ProjectSequence и задайте ему свойство WorkflowContext, MD_PROP_UID привяжите к Proj_TypeMD_PROP_UID, а свойство PropertyValues привяжите к:
public string[] ProjTypeValues = new string[0];
-
Добавьте компонент IfElseActivity в ProjectSequence и у ветки ifElseBranchActivity1 укажите DeclarativeConditionRule, создав Condition1 c кодом:
this.ProjTypeValues[0] == "Копчёные"
-
Скопируйте компонент ifElseBranchActivity2 в IfElseActivity, таким образом в IfElseActivity1 получится три ветки ifElseBranchActivity
-
У ветки ifElseBranchActivity2 укажите DeclarativeConditionRule, создав Condition2 c кодом:
this.ProjTypeValues[0] == "Молочные"
-
Дособерите рабочий процесс, устанавливая у компонентов SetProjectStage StageUid, AlwaysWait = true, увеличивая StageOrder
-
Рабочий процесс готов. Теперь его можно задеплоить.
-
Создание типа проекта “Сосиска”
-
Откройте таблицу Типы корпоративных проектов
-
Создайте тип проекта “Сосиска”, привязав его к созданному рабочему процессу
-
Тип проекта и рабочий процесс для него готовы к использованию. При создании проекта будет создан проект со стадиями, которые были определены в рабочем процессе:
Лабораторная работа
“Создание отчёта в Project Server”
-
Создайте библиотеку, в которой будут располагаться отчёты
-
Перейдите в параметры созданной библиотеки и добавьте тип содержимого “Отчёт в построителе отчётов”
-
Создайте новый отчёт в библиотеке “Отчёты”
-
Откроется построитель отчётов, в нём выберите “Table or Matrix Wizard”
-
Создайте новый набор данных (Create New DataSet) и создайте новый источник данных
-
В качестве источника данных укажите следующий запрос:
SELECT
t.taskname as [Название_задачи],
p.projectname as [Проект],
t.taskstartdate as [Начало],
t.taskfinishdate as [Окончание],
t.taskpercentcompleted as [Процент_выполнения]
FROM [MSP_EpmTask] t
inner join [MSP_EpmProject] p on p.projectuid=t.projectuid
where t.taskisprojectsummary=0 and t.taskfinishdate>getdate() and t.taskpercentcompleted
-
Распределите поля, возвращаемые в запросе:
-
Сохраните отчёт в библиотеку файлов “Отчёты”. Отчёт готов.
|