Работает только для MS SQL |
---|
Иерархия задач — это интерфейс для просмотра дерева подчиненных задач. В иерархии могут быть собраны задачи из различных категорий. Источником данных для иерархии является хранимая процедура, поэтому в иерархию может быть заложена любая логика связи между родительским и дочерними объектами. Чаще всего иерархии используются для работы с задачами, но в общем случае иерархии могут отображать любые объекты (например, орг. структуру, состав вложенных групп и т.п.). |
---|
В иерархии можно:
•Скрывать/раскрывать отдельные ветви,
•Менять текст и отдельные параметры задач,
•Перемещать или копировать задачи в другую ветку,
•Открывать карточки задач для просмотра и редактирования.
Эти возможности описаны в Руководстве пользователя.
В пользовательском режиме интерфейс доступен по ссылке: https://адрес_1Формы/spa/task-hierarchy/{id}
где id — это идентификационный номер иерархии.
Пример иерархии задач для отдела HR — в ней отображаются вакансии, открытые в подразделениях, и анкеты кандидатов на эти вакансии.
Пример иерархии задач
Как правило, иерархия используется для отображения задач (в настройках такой иерархии параметр "Тип данных" имеет значение "Задача"). Задачи могут быть связаны между собой по принципу "родительская — подчиненная" или по ссылке через ДП Lookup. Кроме того, иерархия может использоваться и для представления других "древовидных" структур — например, организационной структуры (в настройках такой иерархии параметр "Тип данных" имеет значение "Прочее").
Иерархия может включать в себя только обычные, статические столбцы, а может также дополняться динамическими столбцами. Динамические столбцы создаются в момент получения данных для иерархии, и количество этих столбцов зависит от полученных данных. Например, в иерархии отображаются данные по проектам. В этом случае в строках иерархии перечисляются проекты и их этапы, а столбцах — данные по месяцам (на скриншоте ниже это цветовой идентификатор статуса риска). Количество месяцев зависит от длительности конкретного проекта, при настройке иерархии это количество неизвестно, поэтому столбцы с этими данными формируются динамически.
Настройка иерархии
Окно настройки иерархии задач:
Окно настройки иерархии
Параметр |
Описание |
||
---|---|---|---|
Имя |
Название иерархии |
||
Хранимая процедура получения данных |
Процедура, которая возвращает данные для статических столбцов. Процедура вызывается рекурсивно — сначала для головной задачи, потом для каждой дочерней и т.д. Входящие параметры: @TaskId int = null, •@TaskId (int) — ID текущей задачи (используется для реализации рекурсии), •@RootTaskId (int) — ID корневой задачи (вершины иерархии), •@SessionUserId (int) — ID пользователя, который просматривает иерархию (необходим для контроля прав доступа), •@XmlParam (xml) — фильтр, •@OnlyOneRow (bit) — служебный параметр, признак получения полного/тестового набора данных. Значение этого параметра заполняется автоматически, достаточно определить его в хранимой процедуре (в общем случае в этот параметр передается значение 0; если передается 1, то возвращается не вся выборка для иерархии, а только одна запись с тестовыми данными, необходимая для настройки таблицы "Настройки вывода колонок", см. ниже), •@DataType (varchar (20)), значение по умолчанию 'GetChilds' — служебный параметр, необходим для обновления иерархии. Значение этого параметра заполняется автоматически. Если параметр имеет значение 'GetChilds', то процедура возвращает все дочерние задачи для @TaskID; если параметр имеет значение 'GetItem', то процедура возвращает данные конкретной задачи @TaskId.
Список полей, возвращаемых процедурой, может меняться. Обязательные поля: •Id (int) — ID задачи, •ParentId (int) — ID родительской задачи, •IsEncrypted (bit) — признак зашифрованности задачи, •HasChildren (bit) — признак наличия у данной задачи подчиненных задач.
|
||
Хранимая процедура получения списка категорий для постановки задачи |
(не обязательно) Процедура, которая возвращает список категорий, в которые пользователи смогут поставить подзадачи через контекстное меню. Входящие параметры: @HierarchyId int = null, •@HierarchyId (int) — ID иерархии, •@TaskId (int) — ID корневой задачи (вершины иерархии), •@SessionUserId (int) — ID пользователя, который просматривает иерархию (необходим для контроля прав доступа), •@XmlParam (xml) — фильтр. Процедура должна возвращать поля: •SubcatId (int) — ID категории, •Description (text) — название категории |
||
Хранимая процедура получения динамических данных |
(не обязательно) Процедура, которая формирует динамические столбцы. В качестве динамического может быть указан только один столбец, который "тиражируется". Например, динамический столбец содержит данные о проценте выполнения задачи и "тиражируется" по месяцам. Входящие параметры: @TaskId int = null, •@TaskId (int) — ID текущей задачи (используется для реализации рекурсии), •@RootTaskId (int) — ID корневой задачи (вершины иерархии), •@SessionUserId (int) — ID пользователя, который просматривает иерархию (необходим для контроля прав доступа), •@XmlParam (xml) — фильтр, •@OnlyOneRow (bit) — признак получения полного/тестового набора данных. Значение этого параметра заполняется автоматически, достаточно определить его в хранимой процедуре (в общем случае в этот параметр передается значение 0; если передается 1, то возвращается не вся выборка для иерархии, а только одна запись с тестовыми данными, необходимая для настройки таблицы "Настройки вывода динамических колонок", см. ниже), •@DataType varchar (20), значение по умолчанию 'GetChilds' — служебный параметр, необходим для обновления иерархии. Значение этого параметра заполняется автоматически. Если параметр имеет значение 'GetChilds', то процедура возвращает все дочерние задачи для @TaskID; если параметр имеет значение 'GetItem', то процедура возвращает данные конкретной задачи @TaskId. Процедура должна возвращать поля (названия полей могут быть другими): •Id (int) — ключ, по которому будет происходить объединение с набором данных для статических столбцов (также по столбцу Id), •СolName (text) — заголовок динамического столбца, который будет отображаться в пользовательском интерфейсе, •ColFieldName (text) — название динамического столбца; должно начинаться с латинской буквы, может содержать латинские буквы и цифры (название не должно соответствовать какой-либо колонке данных, возвращаемых хранимой процедурой, оно используется для внутренней логики и большого значения не имеет), •ColValue (тип зависит от значения) — значения в ячейках динамического столбца, •ColOrder (int) — порядок динамического столбца (столбцы будут отображаться слева направо по возрастанию этого значения), •ColStyle (text) — описание стиля ячейки динамического столбца (см. ниже), •ColLink (text) — ссылка, которая будет открываться по клику на ячейку динамического столбца. Значение этой колонки будет записано в свойство href тега <a>. Чтобы открыть задачу в модальном окне, в данное поле надо записать следующее. Если по клику на задачу должна открываться карточка этой задачи, то первый и второй параметры совпадают. Передача двух разных параметров позволяет реализовать такой сценарий: по клику на задачу в иерархии открывается другая задача, связанная с ней какой-то бизнес-логикой (например, через ДП Lookup). Например, в иерархии "Подразделения" -> "Вакансии" -> "Анкеты кандидатов" по клику на вакансию открывается карточка приказа, утверждающего новое штатное расписание. В этом случае в первый параметр передается ID задачи с приказом, а во второй параметр — ID задачи с вакансией. Второй пример — иерархия "Совещания" -> "Вопросы повестки" -> "Решения по вопросам повестки". В карточке вопроса указывается проект, на котором возник этот вопрос. В иерархии по клику на строку с вопросом открывается карточка проекта. В этом случае в первый параметр передается ID проекта, а во второй параметр — ID задачи с вопросом •ColIco (text) — колонка, содержащая адрес иконки для ячейки динамического столбца. Если в данной настройке есть значение, то будут использоваться указанные иконки. Путь к иконке может указываться относительно приложения, например: '../img/icon1.png' |
||
Id корневой задачи |
(не обязательно) ID задачи, которая является вершиной иерархии (параметр @RootTaskId, см. выше) |
||
Тип данных |
Возможные значения: •Задача — если иерархия строится по задачам, •Прочее — если иерархия строится по другим объектам системы (например, по элементам орг.структуры) |
||
Разрешить drag-and-drop |
Если флажок включен, то пользователь сможет менять порядок задач в иерархии (т.е. менять родительские задачи), перетаскивая строки мышью.
|
||
Загружать все дерево сразу |
Если флажок включен, то дерево загружается/обновляется целиком, рекурсивно вызывая обновление каждого узла, у которого есть подчиненные задачи. В этом случае дерево после загрузки отображается полностью раскрытым. Если флажок отключен, то дерево загружается частями, при открытии ветки подгружается ее содержимое |
||
Разрешить пользователям изменять отображение |
Если флажок включен, то пользователи могут менять список и порядок отображаемых столбцов (кроме закрепленных). В пользовательском интерфейсе отображается кнопка Поля. |
||
Разрешить инлайн редактирование |
Если флажок включен, то для иерархии с типом данных "Задачи" в пользовательском интерфейсе по двойному клику на поле с типом TaskText поле переходит в режим редактирования, и после сохранения (клавишей "Ввод") исправления вносятся в текст задачи |
||
Передавать в ХП полный путь |
Если настройка включена, динамически формируется текстовая переменная, которая включает себя полный путь кликов пользователя, и передаётся в API метод /app/v1.2/api/tasksHierarchies/{taskhierarhyid}/nodes Это позволяет отображать в иерархии набор данных при раскрытии 2-3 уровня, в зависимости от того, откуда пользователь попал на этот уровень. |
||
ID внешнего объекта |
Присваивается автоматически при первом сохранении настроек иерархии |
||
Открыть настройки фильтрации |
(отображается после первого сохранения настроек иерархии) По клику на ссылку открывается окно для выбора фильтра (аналогичного фильтру отчетов и портальных блоков). Параметры фильтрации передаются в хранимую процедуру в параметре @XmlParam в виде XML-структуры. Если для иерархии настроена фильтрация, в пользовательском интерфейсе отображается кнопка Фильтр |
||
Кнопки управления |
|||
В таблице отображается список кнопок, которые будут отображаться в пользовательском интерфейсе в виде контекстного подменю "Совершить действие для выбранных". Настройка кнопки описана здесь. |
|||
Настройки вывода колонок |
|||
При сохранении иерархии в таблицу автоматически добавляются все поля, возвращаемые хранимой процедурой (каждое поле — отдельная строка таблицы). После этого в таблице можно настроить внешний вид выводимых полей — цвет, выравнивание и пр., по аналогии с портальным блоком "Таблица". Чтобы изменить порядок следования колонок в иерархии, перетащите строки таблицы настроек в нужном порядке: |
|||
Отображать |
Если флажок отключен, то колонка не будет отображаться (по умолчанию отображаются все колонки). |
||
Столбец из хранимой процедуры |
Название колонки в SQL-процедуре |
||
Заголовок колонки |
Название колонки, как оно должно отображаться в иерархии |
||
Подсказка для наименования колонки |
Всплывающая подсказка, которая будет отображаться при наведении курсора мыши на название колонки |
||
Ширина колонки в %, px |
Ширина колонки в % от общей ширины иерархии или в px (указывается слитно, без пробела) |
||
Выравнивание текста |
Выберите один из доступных вариантов выравнивания текста (по левому краю, по центру, по правому краю) |
||
Брать ссылку из столбца |
Выберите колонку, содержащую ссылку, которая будет открываться по клику мыши. Значение этой колонки будет записано в свойство href тега <a>. Чтобы открыть задачу в модальном окне, в данное поле надо записать следующее. Если по клику на задачу должна открываться карточка этой задачи, то первый и второй параметры совпадают. Передача двух разных параметров позволяет реализовать такой сценарий: по клику на задачу в иерархии открывается другая задача, связанная с ней какой-то бизнес-логикой (например, через ДП Lookup). Например, в иерархии "Подразделения" -> "Вакансии" -> "Анкеты кандидатов" по клику на вакансию открывается карточка приказа, утверждающего новое штатное расписание. В этом случае в первый параметр передается ID задачи с приказом, а во второй параметр — ID задачи с вакансией. Второй пример — иерархия "Совещания" -> "Вопросы повестки" -> "Решения по вопросам повестки". В карточке вопроса указывается проект, на котором возник этот вопрос. В иерархии по клику на строку с вопросом открывается карточка проекта. В этом случае в первый параметр передается ID проекта, а во второй параметр — ID задачи с вопросом |
||
Брать стилизацию из столбца |
Если в данной настройке есть значение, то текст в этой колонке будет выводиться с указанными атрибутами форматирования (вместо форматирования по умолчанию) |
||
Брать иконку из столбца |
Для дополнительной визуализации в иерархии могут использоваться иконки. Использование для строки той или иной иконки прописывается в хранимой процедуре, поэтому для визуализации может использоваться любая бизнес-логика — например, иконка может соответствовать статусу задачи, принадлежности к категории, значению определенного параметра и т.п. Чтобы использовать иконки, в хранимой процедуре необходимо возвращать текстовую колонку с URL иконки (адрес может быть относительным для приложения). |
||
Тип колонки |
Возможные значения: •Text, •TaskText, •Html, •UserId, •Date, •DateTime, •Percent, •Number, •Money, •Boolean.
|
||
Формат вывода данных |
|||
Максимальное количество выводимых символов |
Действует для колонок с типом Text и TaskText. Если значение не указано — текст отображается полностью. Вместо обрезанных символов выводится многоточие. При наведении курсора на поле во всплывающей подсказке отображается полный текст |
||
Закрепленная |
Одну или несколько первых (левых) колонок можно закрепить, это удобно если в иерархии отображается много колонок и требуется горизонтальная прокрутка, или если есть динамические колонки, количество которых заранее не известно. Закрепленные колонки не участвуют в горизонтальной прокрутке и всегда остаются видны. Если флажок включен, колонка закреплена.
|
||
Доступно пользователям |
Если флажок включен, а также включена настройка "Разрешить пользователям изменять отображение" (см. выше), то пользователи смогут включать/отключать отображение данного столбца (с помощью кнопки Поля), менять ширину столбца и порядок следования незакрепленных столбцов. |
||
Настройки вывода динамических колонок |
|||
Брать порядок из столбца |
Колонка ColOrder из хранимой процедуры |
||
Брать имя поля из столбца |
Колонка ColFieldName из хранимой процедуры |
||
Брать заголовок из столбца |
Колонка ColName из хранимой процедуры |
||
Брать подсказку для наименования колонки из столбца |
Колонка с текстом, который будет отображаться во всплывающем окне при наведении курсора мыши на название динамической колонки |
||
Брать значение из столбца |
Колонка ColValue из хранимой процедуры |
||
Ширина колонки в %, px |
Ширина колонки в % от общей ширины иерархии или в px (указывается слитно, без пробела) |
||
Выравнивание текста |
Выберите один из доступных вариантов выравнивания текста (по левому краю, по центру, по правому краю) |
||
Брать ссылку из столбца |
(не обязательно) Колонка ColLink из хранимой процедуры |
||
Брать стилизацию из столбца |
(не обязательно) Колонка ColStyle из хранимой процедуры |
||
Брать иконку из столбца |
(не обязательно) Колонка ColIco из хранимой процедуры |
||
Тип колонки |
Возможные значения: •Text, •TaskText, •Html, •UserId, •Date, •DateTime, •Percent, •Number, •Money, •Boolean. |
||
Формат вывода данных |
(не обязательно) |
||
Доступно пользователям |
Если флажок включен, и включена настройка "Разрешить пользователям изменять отображение" (см. выше), то пользователи смогут включать/отключать отображение динамических колонок (с помощью кнопки Поля). |
Основная колонка
Одна из колонок, отображаемых в иерархии, выбирается в качестве основной (в иерархии задач такая колонка обычно соответствует тексту задачи). Для такой колонки в настройках вывода колонок надо указать тип TaskText.
Слева от такой колонки отображается символ стрелки, по нажатию на нее раскрывается/сворачивается ветвь иерархии.
Стрелки для раскрытия/сворачивания ветви иерархии
Для описания стилей могут использоваться следующие типовые значения:
Значение |
CSS стиль, который соответствует данному значению |
---|---|
Default |
Нет стиля |
Success |
background-color:#dff0d8 (зеленый) |
Info |
background-color:#d9edf7 (голубой) |
Warning |
background-color:#fcf8e3 (желтый) |
Danger |
background-color:#f2dede (розовый) |
TotalsRow |
font-weight: bold |
BackRed |
background-color: pink |
BackGreen |
background-color: lightgreen |
BackBlue |
background-color: lightblue |
BackYellow |
background-color: gold |
TextRed |
color: red |
TextGreen |
color: green |
Если необходимо задать несколько атрибутов, их надо перечислить через пробел. |
---|
Помимо типовых значений для задания стиля можно использовать любые значения цвета и фона в формате 'Color#ХХХХХХ' для цвета текста и 'Background#ХХХХХХ' для цвета фона (где ХХХХХХ — шестизначное обозначение цвета в формате HEX).
Аналогичным образом можно указывать значение высоты строки в формате 'HeightXXXpx' (где ХXХ — количество px).
Если необходимо задать несколько значений, их можно перечислить через запятую. Например, 'Color#ff0000,Background#00ff00' или 'Color#ff0000,Height40px'
Кроме того, для отображения задач в иерархии могут использоваться стили из табличного представления категорий:
Значение |
Описание |
CSS |
---|---|---|
task-closed |
для завершенных задач — серый шрифт |
color: gray |
task-rejected |
для отклоненных задач — серый перечеркнутый шрифт |
color: gray; text-decoration: line-through |
task-new |
для новых задач — жирный шрифт |
font-weight: bold |
task-overdue |
для просроченных задач — красный шрифт |
color: red |
В дополнение к этим стилям может использоваться стиль task-state, который отображает текст одной строкой без переносов (white-space: nowrap). Например, 'task-state task-closed'. Этот стиль действует для колонок с типом Html.
Для колонки с типом TaskText всегда применяется стиль с автоматическим переносом строки, который имеет преимущество (white-space: normal !important). |
---|
Настройка отображения столбцов
Первоначально при загрузке иерархии отображаются только те статические колонки, для которых включен флажок "Отображать", а также динамические колонки (если они настроены).
Если для иерархии включена настройка "Разрешить пользователям изменять отображение", то пользователи могут менять список отображаемых колонок, их порядок и ширину. В пользовательском интерфейсе в правом верхнем углу иерархии будет отображаться кнопка Поля. По клику на кнопку открывается окно со списком доступных для отображения колонок, в котором пользователь может выбрать нужные ему колонки. Для выбора доступны только те колонки (статические и динамические), для которых включен флажок "Доступно пользователям".
Для статических колонок с включенной настройкой "Закрепленная" возможности управления видимостью, порядком и шириной не действуют. |
---|
Права доступа к иерархии
В поле "ID внешнего объекта" при наведении курсора мыши на строку всплывает кнопка , по клику на нее открывается окно для настройки прав доступа. Доступ выдается на уровне групп. Если включен флажок "Виден всем", то иерархию смогут просматривать все пользователи. Чтобы добавить группу, участники которой получат право просматривать иерархию, нажмите кнопку Добавить в блоке "Право просмотра".
Настройка прав доступа к иерархии
Обработка параметров фильтра
Если для иерархии настроен фильтр, в процедуру будут передаваться параметры и значения фильтра в формате XML. Имя параметра передается как атрибут Name. Для периода передаются два значения — From и To, для остальных параметров передается значение Value.
Для обработки параметров фильтра удобно использовать процедуру crm_repGetParams.
В процедуре для построения иерархии обращение к этой процедуре может выглядеть следующим образом:
Примеры хранимых процедур для иерархий
Пример процедуры отбора данных по подзадачам
Пример иерархии вакансий в подразделениях (по ссылкам Lookup)
Пример процедуры, возвращающей список категорий для постановки подзадач