Дополнение к MS Project Server для простой совместной детализации и редактирования проектов

Интерфейс PWA в Project Server предоставляет пользователям разнообразные возможности совместной работы над проектами, но в основном они касаются отслеживания выполнения и отчетности по проектам. Если рассмотреть процесс планирования – декомпозиции работ, установки сроков, назначения ресурсов, то главную роль в нем играет менеджер проекта (планировщик). Обычно это участник привилегированной группы пользователей «Руководители проектов», имеющий полные права на доступ к проекту. Он извлекает проект для редактирования «от и до», и чаще всего делает это даже не в PWA, а работает в Project Professional.

Проблема многопользовательского редактирования проекта в Project Server

Зачастую руководитель проекта не обладает всей информацией, необходимой для создания плана: не знает этапов всех технологических процессов, не знает, какие ресурсы способны выполнить те или иные работы. Эта ситуация особенно характерна для больших организаций с разветвленной иерархией, например, проектных институтов. В этом случае логично было бы поручить детализацию крупных этапов проекта руководителям подразделений, начальникам отделов.

Но в Project Server отсутствуют встроенные средства для реализации параллельного многопользовательского редактирования проектов. Этот его недостаток широко известен пользователям MS Project, и связан с тем, что архитектура Project Server предполагает работу с проектом как с единым целым. Сервер не предоставляет возможностей по разграничению доступа к отдельным частям проектов. Перечислим возможные пути решения проблемы.

Примеры возможных решений

1. Можно предоставить доступ к редактированию проекта начальникам отделов, но у такого подхода есть серьезные недостатки. Временное повышение привилегий пользователей сложно как технически, так и организационно. Это сложно и для самих пользователей: всех их надо обучить, ведь Project Server сам по себе непростой продукт. Следствием недостаточной квалификации пользователей может стать угроза безопасности: например, пользователь забудет вернуть проект после детализации, и заблокирует детализацию для остальных участников. Или даже он может случайно испортить проект во время своего сеанса редактирования (например, удалить задачи, за которые он не отвечает).

2. Руководитель проекта может получить данные от начальников отделов через внешние документы, например, файлы Excel. Но для их использования потребуется проделать много ручной работы по переносу состава работ и ресурсов в PWA. Либо можно упростить задачу, выполнив детализацию в Project Professional с использованием PlanBridge. Но для этого понадобится завести все корпоративные ресурсы, которые могут назначить начальники отделов, в рабочую группу проекта, а затем выгрузить в обменный документ Excel. А ведь в большой организации этих ресурсов может быть несколько сотен, и с этим огромным списком неудобно обращаться. К тому же, при таком подходе нарушается принцип «одного окна»: пользователь вынужден для планирования своих задач использовать Excel, а для отчетности по ним – Project.

Наше решение – модуль детализации задач для Project Web App

Описанная проблема возникла при внедрении Project Server в одном из крупных проектных институтов Санкт-Петербурга. После рассмотрения возможных альтернатив было решено разработать дополнительный компонент для Project Server, который позволит проводить детализацию задач пользователям, не обладающим правами на редактирование проекта целиком. Наша компания была выбрана для реализации этой системы, и мы успешно справились с задачей.

Созданный нами дополнительный модуль предоставляет пользователю следующие возможности.

  • Отображение в PWA отдельных задач, на которые назначен пользователь (начальник отдела), или его подчиненные, определяемые по СДРес.
  • Добавление, удаление и изменение задач нижнего уровня внутри задачи, на которую назначен начальник отдела. Благодаря возможности назначать пользователей на эти задачи появляется возможность постепенного формирования структурной декомпозиции работ «сверху вниз» группой из нескольких пользователей.
  • Редактирование сроков детализирующих задач с соблюдением директивных сроков детализируемой задачи, возможность выхода за пределы которых может настраиваться администратором.
  • Изменение полей задач нижнего уровня, различных типов: текст, число, дата, флаг, таблица подстановки.
  • Разноска в поле детализирующих задач показателей, директивно заданных в поле задачи вышестоящего уровня. Например, это может быть бюджет какой-то группы работ.

Сценарий использования модуля детализации задач

В результате установки модуля в главное меню добавляется пункт «Детализация задач», нажатие на который открывает страницу модуля детализации.

detalization01

Страница выбора проекта

Главная страница модуля содержит таблицу для выбора проекта. В ней отображаются проекты узла PWA, в которых существуют назначения на текущего пользователя, или его подчиненных по СДРес. Также присутствуют фильтры, которые позволяют вывести только проекты, содержащие назначения определенных ресурсов в определенном периоде.

detalization02

В результате выбора проекта в таблице открывается страница выбора задачи в проекте.

Страница выбора задачи

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

detalization03

Форма детализации задач

Форма содержит таблицу, в которую пользователь может добавлять произвольное количество детализирующих задач. В ячейках таблицы пользователь вводит значения полей задач. Также можно изменять порядок добавляемых задач.

detalization04

Задача «Резерв руководителя» – фиктивная задача, содержащая остатки значений полей нормирования, заданных сверху для детализируемой задачи. В данном примере есть единственное поле нормирования – «Трудочасы». Его значение в задаче резерва должно быть неотрицательным – значит, сумма трудочасов по всем детализирующим задачам не превышает трудочасы, установленные для детализируемой задачи. За этим автоматически следит обработчик формы.

В результате нажатия кнопки «Сохранить изменения» происходит собственно детализация – добавление в проект новых задач нижнего уровня.

detalization05

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

detalization06

Если он выберет уже продетализированную задачу, откроется заполненная форма детализации, куда он может добавлять новые задачи, а также удалять старые, если они еще не начали выполняться.

detalization07

Настройка системы детализации

Для инсталляции модуля детализации желательно привлечь квалифицированного специалиста, который имеет представление о настройке IIS, сайтах и веб-сервисах, веб-частях SharePoint, администрировании Project Server. Однако мы предоставили заказчику достаточно подробную инструкцию, чтобы установку мог осуществить рядовой администратор Project Server. В дальнейшем, для настройки полей на страницах и других правил поведения системы детализации задач, используется специальная таблица подстановки, доступная только администраторам.

detalization08

Также у администратора сервера есть возможность изменить тексты кнопок, сообщений и предупреждений, появляющихся в ходе использования модуля.

Техническая реализация модуля

Описание архитектуры решения и реализации его компонентов может стать темой для отдельной заметки, или даже нескольких. Возможно, мы опубликуем ее в будущем, но сейчас следует отметить основные особенности реализации. Мы использовали собственные оригинальные наработки, и нам пришлось временами отступать от рекомендаций Microsoft, что было достаточно смелым шагом.

  • Для увеличения скорости поиска задач и проектов и получения информации о них потребовалось частично отказаться от использования PSI и организовать прямой доступ к базе данных Project Server. Причем база данных Reporting, рекомендуемая Microsoft, не подошла по соображениям скорости ее обновления. Мы воспользовались БД Published.
  • Часть модуля работает от имени администратора Project Server и авторизует обычных пользователей сервера, чтобы выполнить те изменения, которые они запрашивают в форме детализации. Иначе, при прямом подключении рядовых пользователей, PSI не позволил бы вносить нужные изменения.
  • Ни один из готовых табличных элементов форм (grid control), как от Microsoft, так и от сторонних разработчиков, не подошел нам для создания формы детализации. Пришлось реализовать его самостоятельно при помощи ASP.NET и jQuery.

Заслуживает интереса тот факт, что за пару лет до создания нашего модуля в этом же проектном институте безуспешно пыталась внедрить свой компонент другая компания из Санкт-Петербурга, широко известная своими рекламными заявлениями о множестве уникальных экспертов в своем составе. После неудачи последовали громкие обвинения Project Server в ненадежности, опубликованные на профильных форумах и сообществах. Нельзя сказать, что мы сами считаем Project Server идеально надежной программой – у Microsoft есть намного более стабильные продукты. Но это не означает, что на его основе нельзя создать полезную и качественную разработку. Просто потребуется глубокое понимание его внутреннего устройства, опыт, тщательное и внимательное тестирование.

Понравилось наше решение? Закажите разработку для своей компании!

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>