====== Вывод полей из LINQ-запроса в Диаграмму Ганта ======
Вы можете настроить произвольные поля для вывода в диаграмме Ганта, которые будут наиболее точно отвечать вашим потребностям и бизнес-процессу. \\
По умолчанию все дополнительные поля, которые настроит администратор системы, у пользователя в интерфейсе Ганта будут скрыты, но при необходимости пользователь может:
- вывести их через стандартный инструмент отображения скрытых колонок в табличной части диаграммы,
- сохранить это представление для дальнейшей работы. \\ {{ :product:linq:gantt:linq_example_15.png?nolink |}}
Для корректной работы функционала необходимо, чтобы запрос возвращал данные.
Пример пошаговой настройки изложен здесь: "[[product/linq/gantt/example_1|Как вывести "Отклонение базового плана" и "Статус отклонения" в Диаграмму Ганта]]".
=====Доступные для вывода LINQ-запросы=====
Вы можете настроить для отображения в [[product/objects/gant|диаграмме Ганта]] поля из любого настроенного [[product:linq:new|LINQ-запроса]], в котором:
* включена опция «Может использоваться в диаграмме Ганта»;
* есть поле ObjectId (т.е. запрос возвращает записи о данных по [[product:objects:object_tree|объектам дерева проектов]]).
Эта настройка -- сквозная для всей системы. Настроить разные LINQ-запросы для вывода в Диаграмме Ганта нельзя.
Если в системе нет ни одного подходящего LINQ-запроса, то раздел содержит только текст «Нет ни одного источника данных с колонкой "ObjectId"».
Выберите тот LINQ-запрос в выпадающем списке, поля из которого хотите вывести в Гант -> Настроить.
{{ :product:linq:gantt_settings_2.png |}}
===== Настройка полей из LINQ-запроса=====
==== Какие поля выводить ====
Вы можете выводить поля из LINQ-запроса выборочно. Вы сами определяете, что именно нужно выводить в Ганте, отмечая чек-боксом в колонке {{:product:linq:gantt:linq_example_12.png?nolink}} те поля, которые должны появиться у пользователя в "Пользовательских колонках" в Ганте.
По умолчанию все чек-боксы не активны.
==== Название и Псевдоним ====
* «Название поля» -- то название поля, который возвращает LINQ-запрос.
* Поле ObjectId настроить нельзя.
* «Псевдоним» -- то, как это поле будет отображаться в диаграмме Ганта в интерфейсе пользователя. По умолчанию название не указано.
==== Тип поля ====
Поле «Тип» содержит выпадающий список с типами данных полей.
Поддерживаемые типы данных:
* **Строка**. Без указания формата данных. Значение по умолчанию.
* **Число**. \\ При указании данного типа правее отображается выпадающий список с указанием формата данных. \\ Три значения с сортировкой сверху-вниз: «Число», «Денежный» и «Процент». \\ По умолчанию указывается формат «Число». \\ Используются региональные настройки операционной системы.
* **Дата**. При указании данного типа правее отображается выпадающий список с указанием формата данных. Два значения с сортировкой сверху-вниз: «Дата» и «Дата и время». По умолчанию указывается формат «Дата». Использовать региональные настройки операционной системы.
* **Индикатор**:
* При указании данного типа правее добавляется подсказка и кнопка «Добавить» для добавления нового индикатора.
* При нажатии на кнопку «Добавить» добавляется индикатор соответствующего цвета.
* Цвет индикатора определяется на основе уже добавленных индикаторов по следующему алгоритму сверху вниз:
* Добавить индикатор с зеленым цветом (63D16F) по умолчанию, если его нет.
* Добавить индикатор с оранжевым цветом (F6B40E) по умолчанию, если его нет.
* Добавить индикатор с красным цветом (EE1927) по умолчанию, если его нет.
* Если индикаторы со всеми тремя цветами выше присутствуют, то добавить индикатор с синим цветом (00C2FF) по умолчанию.
* У каждого индикатора есть поле ввода для указания логического выражения. Поддерживаются числа и операторы сравнения (=, !=, >=, <=, >, <).
* Проверка на корректность составленного логического выражения не производится.
* Логика сопоставления значения конкретному индикатору осуществляется по принципу их расположения сверху вниз до первого выполнения условия. \\ К примеру, логическое выражение составлено так:
если А > 10, то зеленый индикатор;
если А > 20, то красный индикатор
то значению А = 25 будет присвоен зеленый индикатор, т.к. по порядку расположения индикаторов сверху вниз условие зеленого индикатора выполнилось первым и остальные не проверяются.
* Любой индикатор можно удалить.
* Цвет каждого индикатора можно изменить через стандартную палитру.
{{ :product:linq:gantt:linq_example_11.png }}
По нажатию на кнопку «Сохранить» страница «Настройка полей из LINQ-запроса...» закрывается. Открывается страница «Настройка диаграммы Ганта»:
==== Проверка настройки ====
Если настройка уже произведена, и поля для отображения выбраны, они выводятся на странице "Настройка диаграммы Ганта" в виде краткой таблицы, содержащей название включенного поля и его тип, соответственно.
{{ :product:linq:gantt:linq_example_14.png?nolink |}}
* Если у поля указан псевдоним, то отображается он.
* Если нет, то название поля из LINQ-запроса.
Над таблицей отображается название настроенного LINQ-запроса.
Созданную настройку можно отвязать и создать новую -- кнопка "Отвязать настройки".
Если в колонке {{:product:linq:gantt:linq_example_12.png?nolink}} (Отображать в диаграмме Ганта) страницы «Настройка полей из LINQ-запроса «Название_запроса» не активен ни один чекбокс, то в разделе «Настройка полей из LINQ-запроса» страницы «Настройка диаграммы Ганта» отображается выпадающий список с LINQ-запросами и кнопкой «Настроить».
При этом настройки для раннее настраиваемого LINQ-запроса сохраняются, если снова выбрать его и нажать «Настроить».
=====Механизм отображения полей из LINQ-запроса =====
Изменения одинаковы для диаграммы Ганта, открытой с уровня любого объекта Системы.
==== Как пользователю вывести поля в Ганте ====
В выпадающем списке (у любой из колонок диаграммы Ганта) выводится новый пункт «Пользовательские столбцы». Пункт виден, только если к Ганту настроен и привязан LINQ-запрос.
При наведении на пункт «Пользовательские столбцы» выводится список с названиями тех полей LINQ запроса, у которых активирован чекбокс в колонке {{:product:linq:gantt:linq_example_12.png?nolink}} (Отображать в диаграмме Ганта).
{{ :product:linq:gantt:linq_example_15.png?nolink |}}
Названия полей LINQ-запроса берутся из колонки «Псевдоним», если оно заполнено. Если не заполнено, то из колонки «Название».
Каждое поле имеет чекбокс. По умолчанию не отмечен.
При активации чекбокса:
* В таблицу диаграммы Ганта добавляется соответствующее поле LINQ-запроса с данными.
* Запрос данных по полю LINQ-запроса происходит следующим образом:
* LINQ-запросу передается идентификатор объекта, с карточки которого открыта диаграмма Ганта.
* LINQ-запросом возвращается таблица с данными, включающая поля:
* ObjectId – идентификаторы объекта (который был передан LINQ-запросу) и всех его дочерних объектов.
Происходит сопоставление идентификаторов объектов, подгруженных в диаграмму Ганта, с идентификаторами объектов поля ObjectId и заполнение поля соответствующими данными.
Запрос данных по полю происходит разово. Данные сохраняются до обновления страницы с диаграммой Ганта.
Поля LINQ-запроса доступны только для просмотра.
==== Правила отображение Индикатора ====
Поля с типом «Индикатор»:
* Содержат индикатор в форме круга, выровненный по центру ячейки поля.
* Цвет индикатора согласно настроенному логическому выражению.
* Размер индикатора вписан в высоту ячейки поля.
Если данные ячейки поля не соответствуют ни одному заданному логическому выражению (или выражения составлены некорректно), то индикатор в ней не отображается, ячейка поля пустая.
При сохранении настроек отображения диаграммы Ганта (Опция «Сохранить настройки»), сохраняется видимость и порядок полей LINQ-запроса согласно выбранным настройкам.
При изменении настроек видимости полей на странице «Настройка полей из LINQ-запроса «Название_запроса»» изменяются и сохраненные настройки отображения диаграммы Ганта. \\
//Например, если у поля LINQ-запроса был деактивирован чекбокс в колонке {{:product:linq:gantt:linq_example_12.png?nolink}} (Отображать в диаграмме Ганта), то из таблицы диаграммы Ганта данное поле пропадает, несмотря на то, что оно было отображено при сохранении настроек отображения диаграммы Ганта (Опция «Сохранить настройки»).//
Если у соответствующего объекта, загруженного в диаграмму Ганта, LINQ-запрос по соответствующему полю вернул пустое значение, то и в соответствующей строке этого поля отображается пустое значение.
==== Фильтр по пользовательским полям ====
''Начиная с версии 3.29'' появилась возможность фильтровать строки в табличной части по значениям пользовательских полей - данных, включенных в Гант из привязанного LINQ-запроса.
Фильтрация доступна по текстовым значениям столбцов, а также по столбцам с типом «Индикатор».
\\
{{ releases:3_29:gant_user_filter.png |}}
\\
Фильтры по по пользовательским полям работают по аналогии с [[product:objects:gant:interface#фильтры1|фильтрами для системных полей]] - для всех фильтров работает возможность множественной фильтрации.
* При выборе нескольких значений для одного фильтра выборка формируется с использованием логического «ИЛИ» – общая выборка увеличивается.
* При фильтрации по нескольким фильтрам выборка формируется с использованием логического «И» – общая выборка уменьшается.
==== Экспорт ====
Экспорт диаграммы Ганта:
* в .pdf и .png **поддерживает** поля LINQ-запроса;
* в .xls **не поддерживает** поля LINQ-запроса.
=====Обработка ошибок =====
Если тип у включенного для отображения {{:product:linq:gantt:linq_example_12.png?nolink}} поля LINQ-запроса не может быть сконвертирован в тип, указанный в колонке «Тип», то в диаграмме Ганта данное поле отображает пустые данные. Ошибка в диаграмме Ганта не выводится.
Если поле LINQ-запроса отображено в диаграмме Ганта, то при изменении типа поля в самом LINQ-запросе (когда возникает ситуация невозможности конвертации в тип, указанный в колонке «Тип»), поле отображает пустые данные. Ошибка в диаграмме Ганта не выводится.
Переименованное поле в LINQ-запросе расценивается, как новое поле.
Проверка на корректность составленного логического выражения у типа «Индикатор» не производится. В диаграмме Ганта у соответствующего поля с некорректно составленным логическим выражением отображается пустое значение.
=====Требования к написанию корректного LINQ-запроса=====
С целью фильтрации возвращаемых данных LINQ-запрос должен учитывать передаваемый диаграммой Ганта идентификатор объекта (RootProjectId) с карточки которого она открыта. Требование не обязательное и необходимо для оптимизации запроса. Для оптимизации запроса добавьте в него следующую строку:
var objectID = parameters.GetValueOrDefault("RootProjectId", new Guid("daba2cbb-a4a9-4708-9366-5dd3ead1f172"));
где
* ''RootProjectId'' – передаваемый диаграммой Ганта идентификатор объекта,
* ''new Guid("daba2cbb-a4a9-4708-9366-5dd3ead1f172")'' – идентификатор любого объекта системы, необходимый для отладки запроса.
LINQ-запрос должен обязательно возвращать поле ObjectId – идентификаторы объекта (который был передан LINQ-запросу диаграммой Ганта) и всех его дочерних объектов. \\
В противном случае данный запрос не будет виден в списке для привязки к диаграмме Ганта.