Впредыдущей статье серии, «Автоматизация управления задачами с помощью SharePoint», опубликованной в Windows IT Pro/RE № 6 за 2010 год, был описан процесс работы системы автоматизации управления задачами в компании. Решение рассматривалось на примере разработки и внедрения систем, которые позволяют автоматизировать работу в отделах компании. Напомню последовательность шагов, необходимых для разработки и внедрения системы в отделе. На первом этапе принимается решение о внедрении в данном отделе компании определенной системы.

Если принято положительное решение по автоматизации отдела, создается задача, и к системе предъявляются соответствующие бизнес-требования. Данный этап является первым в жизненном цикле задачи и называется «Новая задача». Следующий этап — согласование функциональных требований для данной системы, он называется «Разработка и согласование ФТ». Если функциональные требования готовы, необходимо перейти на новый этап и произвести ИТ-анализ требований. После завершения ИТ-анализа начинается этап разработки системы автоматизации, затем идет этап тестирования системы. За удачным тестированием следует этап введения системы в эксплуатацию.

Это последний этап в цикле жизни задачи. На каждом из этапов, которые проходит задача, есть возможность снять задачу с реализации и приостановить ее выполнение на заданный период. На этапе разработки и согласования функциональных требований система позволяет выставить задачу на согласование нескольким сотрудникам. На этапе ИТ-анализа система дает возможность создать в рамках задачи несколько подзадач, чтобы распределить работу между несколькими исполнителями.

Итак, приступая к настройке SharePoint, для начала нужно определиться с полями данных. Необходимо решить, какие поля должны быть доступны для редактирования. В системе, описанной в предыдущей статье, присутствуют поля, представленные в таблице 1 (окончание). Таблица также показывает разрешения на редактирование полей на каждом из этапов и тип данных в поле. В таблице «Э1» означает первый этап «Новая задача», «Э2» — второй этап «Разработка и согласование ФТ», «Э3» — третий этап «Анализ ИТ», «Э4» — четвертый этап «Разработка», «Э5» — пятый этап «Тестирование», «Э6» — шестой этап «Ввод в эксплуатацию»; «Ч» означает, что на данном этапе сотруднику доступно только чтение данного поля, «Р» — редактирование, «Н» — поле недоступно для редактирования и чтения в форме редактирования записи. Столбец «Создание записи» соответствует форме создания новой записи в системе.

После того как все необходимые поля для работы определены, необходимо продумать кнопки управления. Нам требуется кнопка, которая будет переводить задачу на следующий этап, назовем ее «Следующий этап». Также нужна кнопка, возвращающая задачу на предыдущий этап, — «Предыдущий этап». Помимо этого, необходима кнопка сохранения записи «Сохранить», кнопка, которая не будет сохранять произведенные изменения в полях, — «Отмена». Кнопка «Снять» позволяет снять задачу с реализации.

Кнопка «Приостановить» дает возможность приостановить выполнение задачи на определенное время. Учитывая, что после приостановки задачи она может быть восстановлена для работы, необходимо создать кнопку «Восстановить». Реализация выставления задачи на согласование потребует кнопки «Согласовать», а в согласованиях нужны кнопки «Принято», «Не принято», «Не требуется». Так как на этапе «Анализ ИТ» система должна позволять делить задачу на подзадачи, необходима кнопка «Создать подзадачу». И наконец, после удачного внедрения задачи необходимо закрыть задачу. Из сказанного выше следует, что необходимо создать набор кнопок, доступных пользователю в зависимости от этапа, на котором находится данная задача (см. таблицу 2).

Теперь можно переходить непосредственно к реализации самого решения в SharePoint. Для этого необходимо открыть SharePoint и создать новый узел, назовем его «Технологические проекты». В данном узле создаем список, в котором и будут храниться задачи, назовем его «Задачи направления». Теперь пришло время создать в списке «Задачи направления» поля, перечисленные в таблице 1. Следует обратить внимание, что поле «Курирующий технолог» соответствует полю по умолчанию «Кем создано», таким образом, для создания данного поля необходимо просто переименовать поле «Кем создано». Поля «Бизнес-обоснования/бизнес-требования», «Функциональные требования», «Техническое задание» и т. д. имеют тип «Подстановка (данные, уже имеющиеся на этом узле)». Они заполняются подстановкой данных из уже имеющихся на этом узле.

Перед тем как создать это поле, необходимо создать в данном узле библиотеку документов с соответствующим названием, то есть для поля «Бизнес-обоснования/бизнес-требования создаем библиотеку документов с названием «Бизнес-обоснования/бизнес-требования». Далее при создании данного поля нужно будет указать в разделе «Дополнительные параметры столбца» получение данных из библиотеки «Бизнес-обоснования/бизнес-требования». И так далее для всех полей, имеющих тип «Подстановка» (данные, уже имеющиеся на этом узле, экран 1).

После того как список и все необходимые поля созданы, перейдем к созданию взаимосвязи между полями и этапами. Здесь понадобится знание языка JavaScript. Так как каждый элемент формы, каждое поле имеют заданный идентификатор, с помощью метода getElementById мы можем получить указатели на элементы формы, то есть на поля. Далее, применяя свойство display со значением none, мы делаем элемент формы — поле невидимым.

Посмотрим, как все это выглядит на практике. Для этого необходимо открыть Designer 2007 и подключиться к созданному выше узлу (кнопки «Файл», «Открыть узел», «Ввести имя узла» и «Открыть»). На вкладке «веб-узел» открыть папку List, «Задачи направления», страницу EditForm.aspx (см. экран 2).

Открытие файла EditForm.aspx

На экране 3 представлено содержимое файла EditForm.aspx.

Содержимое файла EditForm.aspx

Далее необходимо перейти в список «Задачи направления», создать в нем запись, открыть ее для редактирования (экран 4) и посмотреть HTML-код страницы (экран 5), где зеленым цветом выделен идентификатор поля «Название».

Код страницы редактирования записи

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

В кавычках указывается идентификатор поля. Следует заметить, что идентификатор данного поля в моем списке может отличаться от идентификатора в вашем списке. Для того чтобы скрыть поле «Название» на странице, необходимо вставить в файл EditForm.aspx код листинга 2.

Если поле необходимо сделать снова доступным, нужно применить оператор:

p1.parentElement.parentElement.

   parentElement.style.display=" inline";

Аналогичным образом необходимо скрыть все поля формы. На экране 6 приведен код страницы EditForm.aspx после скрытия всех ее полей.

Код страницы EditForm.aspx после скрытия полей

А на экране 7 показана форма редактирования записи после скрытия полей.

Для того чтобы установить взаимосвязь полей и этапов, необходимо обратиться к таблице 1 (окончание), где представлена информация о редактировании полей по этапам. Обратите внимание на столбец «Создание записи». В данном столбце доступны для редактирования поля «Название», «Направление», «Приоритет», «Дата поступления задачи от бизнес-заказчика», «Желаемый срок внедрения задачи», «Планируемая дата начала работы с ФТ», «Планируемая дата окончания работы с ФТ» и т. д..

Этот столбец характеризует форму создания новой записи, на которую попадает пользователь после нажатия кнопки «Создать» в списке задач (экран 8). Файл, отвечающий за форму создания новой записи, хранится в папке List, «Задачи направления», страница NewForm.aspx на экране 2. Для того чтобы при создании новой записи пользователю были доступны для редактирования только необходимые поля, указанные в таблице 1 (окончание), нужно произвести скрытие всех остальных полей, которые не должны быть доступны для редактирования, аналогично способу, описанному выше.

После реализации формы создания новой записи реализуем форму редактирования записи на этапе «Новая задача». Для этого открываем файл EditForm.aspx и вставляем следующий код, представленный на экране 9. В нем p4 — указатель на поле «Этап», p5 — указатель на поле «Приоритет», p8 — указатель на поле «Дата поступления задачи от бизнес-заказчика», p9 — указатель на поле «Желаемый срок внедрения» и т. д. (см. в таблице 1 (окончание) доступные поля для редактирования в столбце «Э1»).

После реализации этапа «Новая задача» идет реализация этапа «Разработка и согласование ФТ». В соответствии с таблице 1 (окончание) пишем код, представленный в листинге 3.

В этом листинге указатели означают следующее: p5 — «Приоритет», p16 — «Фактическая дата начала работы с ФТ», p17 — «Фактическая дата окончания работы с ФТ», p18 — «Функциональные требования», p19 — «ИТ-менеджер», p20 — «Планируемая дата начала работы с Анализом ИТ», p21 — «Планируемая дата окончания работы с Анализом ИТ», p41 — «Комментарий исполнителя», p43 — «Причина». Таким образом, файл EditForm.aspx принимает вид, показанный на экране 10.

После этапа «Разработка и согласование ФТ» необходимо аналогичным образом реализовать этапы «Анализ ИТ», «Разработка», «Тестирование» и «Введение в эксплуатацию». Следует заметить, что этап «Анализ ИТ» может иметь не только запись с типом «Задача», но и запись с типом «Согласование» и запись с типом «Задача выставлена на согласование». В данном случае для каждого из вариантов следует написать свой код для сокрытия необходимых полей (экран 11).

После реализации взаимосвязи полей и этапов необходимо создать кнопки, представленные в таблице 2. Рассмотрим код, необходимый для функционирования кнопки «Предыдущий этап». В коде мы присваиваем каждой кнопке уникальный идентификатор (id=cas3 и т. д.), а при нажатии на кнопку мыши запускается сценарий, проверяющий, на каком из этапов в данный момент находится задача (p4.value==’Разработка и согласование ФТ’ и т. д.). После определения этапа сценарий записывает в поле «Операция» значение «пр» (p54.value=’пр’;), а затем сохраняет запись (k1.click ();). Следует отметить, что k1 является указателем на кнопку «Сохранить», которая присутствует в форме редактирования записи по умолчанию. То есть

var k1=document.getElementById

("ctl00_ctl11_g_68aff84b_8b82_

4f35_ada5_6cb23961c182_

ctl00_toolBarTbltop_RightRptControls_

ctl01_ctl00_diidIOSaveItem");

где текст в кавычках представляет собой идентификатор кнопки «Сохранить» и определяется аналогично идентификатору поля, как описано выше. Ваш идентификатор может отличаться от моего (см. листинг 4).

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

var cas3=document.getElementById ("cas3");

cas3.style.display="none";

А сейчас перейдем к рассмотрению кода для кнопки «Следующий этап». В листинге 5 приведен код для перехода с этапа «Новая задача» на этап «Разработка и согласование ФТ», аналогичным образом будет выглядеть код для перехода с этапа «Разработка и согласование ФТ» на этап «Анализ ИТ» и т. д. В данном коде выполняется проверка на заполнение поля «Желаемый срок внедрения задачи», при необходимости можно добавить проверку и на другие поля. В данном коде следует обратить внимание на то, что после нажатия кнопки «Следующий этап» в поле «Операция» записывается значение «сл». Аналогично значению «пр» значение «сл» используется в бизнес-процессе и означает «следующий». Поле «Операция» и принимаемые им значения, как было отмечено выше, будут детально описаны в следующей статье серии.

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

При нажатии кнопки «Возобновить» в поле «Операция» записывается значение «вз». При нажатии на кнопку «Внедрена» в поле «Операция» записывается «зк». Сценарий для кнопки «Согласовать» записывает в поле «Операция» значение «ссг». Аналогично для кнопок «Принято» записывается «принято», для «Не принято» записывается «не принято», для «Не требуется» записывается «не требуется». Рассмотрим более подробно код для кнопки «создать подзадачу» (см. листинг 6).

В данном сценарии присваиваем переменной phref адрес создания новой записи. Далее к строке добавляем переменную parent_task, в которой прописываем идентификатор данной записи. Переменная p52.value содержит значение, указанное в поле «Идентификатор». В следующей статье мы создадим бизнес-процесс, который в пользовательское поле «Идентификатор» будет записывать значение поля «ИД», которое является системным полем, созданным в списке SharePoint по умолчанию. Далее сценарий открывает в окне сформированный выше адрес URL. Теперь необхо димо в файле NewForm.aspx добавить сценарий, который будет разбирать созданный выше адрес URL, и в поле «Родительская задача» (p50.value) записывать значение переменной parent_task (см. листинг 7).

Завершающим этапом будет вывод полей для чтения. Рассмотрим код, позволяющий реализовать доступ полей только для чтения для этапа «Новая задача», для всех других этапов код выглядит аналогично (листинг 8).

Подведем итог

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

Анастасия Сипко (sakra@bk.ru) — программист, имеет сертификат Microsoft Certified (Technology Specialist)

Соответствие полей и этапов

Соответствие полей и этапов (окончание)

Задачи направления

Взаимосвязь кнопок управления и этапов задачи

Редактирование записи

Получение указателей на поле «Название»

Сокрытие поля «Название»

Код для этапа «Разработка и согласование ФТ»

Форма редактирования записи после скрытия полей

Создание новой записи

Реализация этапа «Новая задача»

Реализация этапа «Новая задача» и этапа «Разработка и согласование ФТ»

Реализация этапа «Анализ ИТ»

Код функционирования кнопки «Предыдущий этап»

Код для перехода с этапа «Новая задача» на этап «Разработка и согласование ФТ»

Код создания кнопки «Создать подзадачу»

Сценарий записи в parent_task

Доступ для полей только для чтения