====== Вывод полей из 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-запросу диаграммой Ганта) и всех его дочерних объектов. \\ В противном случае данный запрос не будет виден в списке для привязки к диаграмме Ганта.