Перейти к содержанию

Представления

Представления в Tessa являются источником табличных данных, которые могут использоваться для автодополнения, для выпадающих списков, для справочников с поиском, группировкой и постраничным отображением, для отчётов с выгрузкой в html или csv и др. Редактирование, отладка, предпросмотр и настройка прав для представлений выполняются на вкладке Представления.

Свойства представления

Добавим представление, используя кнопку "+" -> Представление на верхней панели (справа от кнопки обновления).

Для созданного представления укажем:

  • Алиас - уникальный алиас представления, посредством которого к представлению возможно обращение как из расширений, так и для связи с ссылочными контролами, такими как Reference. Назовём представление AbDocumentTypes.

  • Имя - отображаемое имя представления по умолчанию, используется как имя узла по умолчанию в дереве рабочего места (отображаемого в TessaClient), а также при импорте/экспорте представлений. Непосредственное значение этого свойства не выводится пользователю, но бывает полезно указать поясняющее название для удобства работы с представлением. Например, “Document types”.

  • Группа - это группа, используемая для группировки представлений в редакторе. Не выводится пользователю, поэтому может быть любой. Укажем Ab, чтобы группировка была такой же, как в схеме данных и в типах карточек.

Нажмём кнопку Сохранить всё, чтобы сохранить представление.

Представление – источник табличных данных, и обычно оно задаётся шаблонизируемым SQL-запросом к БД. Поэтому представление может возвращать любые данные или справочники (причём не только с карточками, но и с таблицей-перечислением, как в нашем случае), а также отчёты (такие как отчёты КИД по завершённым заданиям, которые объединяют множества таблиц и используют агрегатные функции для определения количества заданий, сгруппированного по каждому сотруднику или департаменту).

Рассмотрим другие свойства представления, которые задаются в многострочных полях ввода:

  • Метаданные – метаинформация с указанием параметров пейджинга (постраничного отображения), названий выводимых колонок, сортировок, параметров фильтрации, сабсетов (группировок) и ссылок (т.е. описаний, на какие сущности ссылается каждая строка таблицы; например, строка может ссылаться как на документ, так и на контрагента, указанного в этом документе). Подробное описание синтаксиса есть в руководстве разработчика и руководстве администратора.

  • Запрос – шаблонизируемый SQL с запросом SELECT. Шаблонизируемость позволяет системе изменять запрос в зависимости от того, какие параметры, группировки и сортировки выбраны. Например, добавлять в выражение ORDER BY имя колонки, для которой выполняется сортировка.

  • Описание – это произвольное текстовое описание представления, т.е. комментарий. Система никак не использует значение этого поля.

Метаинформация представления и шаблонизируемый запрос

Укажем следующие значения в полях Метаданные и Запрос:

#view(DefaultSortColumn: DocTypeName, DefaultSortDirection: asc, Paging: no) #column(Alias: DocTypeID, Hidden: true) #column(Alias: DocTypeName, Caption: Name, Hidden: false, SortBy: t.Name) #param(Alias: Name, Caption: Name, Hidden: false, Type: nvarchar, Multiple: true) #reference(ColPrefix: DocType, RefSection: AbDocumentTypes, DisplayValueColumn: DocTypeName, IsCard: false, OpenOnDoubleClick: false)

select t.ID as DocTypeID, t.Name as DocTypeName from AbDocumentTypes t with(nolock) where 1=1 #param_expr(Name, t.Name) order by #order_by

Рассмотрим поле Метаданные:

  • #view указывает общие настройки для представления, такие как:

    • DefaultSortColumn – алиас колонки, сортировка по которой выполняется по умолчанию (т.е. при открытии узла с представлением или при выборе из выпадающего списка);

    • DefaultSortDirection – направление сортировки для этой колонки (“asc” – по возрастанию, “desc” – по убыванию);

    • Paging – пейджинг, т.е. режим постраничного отображения, когда представление возвращает тысячи строк, а одновременно на экране должно отображаться, скажем, 20 строк (значение “no” – пейджинг отсутствует).

  • #column описывает колонку, возвращаемую в запросе SELECT.

    • Alias – это алиас колонки, т.е. то имя колонки, которое возвращает SELECT в SQL-запросе.

    • Для колонки DocTypeID мы указываем Hidden: true, чтобы эта колонка не отображалась в таблице, которая выводится пользователю.

    • Caption определяет имя колонки, выводимое пользователю в заголовке. Для колонки DocTypeName с названием типа документа у колонки устанавливается заголовок Name.

    • SortBy – это выражение, которое подставляется в запрос на месте плейсхолдера #order_by при сортировке по этому представлению (причём направление сортировки asc или desc добавляется системой автоматически).

  • #param описывает параметр поиска (фильтрации) представления.

    • Alias – алиас параметра, который используется для шаблонизации запроса, а также для указания, каким образом будет выполняться фильтрация при вводе текста в ссылочный контрол Reference с автодополнением.

    • Caption – название параметра, выводимое пользователю в диалоге выбора параметров фильтрации.

    • Hidden позволяет скрыть параметр для выбора пользователем (если указано значение “true”). Это позволяет по-прежнему использовать параметр для фильтрации из контрола, или для связи представлений master-detail, или для вызова представлений из расширений и др.

    • Multiple: true указывает, что в параметр можно добавить несколько значений, связанных через “или”. Если параметр отображается пользователю (т.е. не скрыт через Hidden), то пользователь может задать несколько значений, например, Name равен Incoming ИЛИ Name равен Outgoing”.

  • #reference позволяет указать системе, что в каждой строке представления содержится ссылка на некоторую сущность системы. В нашей случае, это ссылка на тип документа, что указано в свойстве RefSection. В одной строке может быть несколько ссылок, так, в строке в представлении “ActionHistory” для логов аудита предоставляются ссылки как на карточку, с которой произведено действие (открытие, удаление и т.п.), так и на запись в логе аудита, которую можно открыть по двойному клику.

    • ColPrefix – префикс алиасов колонок, которые входят в ссылку. Система считает, что все колонки, алиасы которых начинаются на эту строку, входят в ссылку, а значит, например, могут записываться в карточку при выборе в контроле Reference. Для нашего представления – это колонка DocTypeID с числовым идентификатором типа документа и колонка DocTypeName с именем типа.

    • RefSection – разделённый пробелами список таблиц, на которые ссылается эта ссылка. Это свойство используется при выборе значений через кнопку с троеточием в ссылочных контролах Reference.

      Example

      Например, ссылочная колонка “AbDocuments.Type” в схеме данных в свойстве “Referenced table” ссылается на таблицу AbDocumentTypes, поэтому контрол Reference, связанный с этой колонкой, по кнопке с троеточием откроет диалог с выбором всех представлений, у которых в RefSection присутствует эта таблица AbDocumentTypes. Ниже мы увидим пример использования такой возможности.

    • DisplayValueColumn – алиас колонки, которая считается отображаемым значением для ссылки. Обычно это свойство используется только для определения названий карточек, открываемых по ссылке (название отображается в заголовке вкладки), если для карточки явно не была определена функция Digest, формирующая название по другим полям карточки.

    • IsCard – признак того, что ссылка ссылается на карточку. В рассматриваемом случае это не карточка, а строка таблицы-перечисления, поэтому указываем “false”.

    • OpenOnDoubleClick – признак того, что карточка будет открыта при двойном клике по строке представления. Поскольку тип документа – это не карточка, то указываем значение “false”.

Отладка представления

В поле Запрос мы записали SQL-запрос с плейсхолдерами #param_expr для подстановки параметра фильтрации Name и #order_by для сортировки по колонке DocTypeName. Посмотрим, каким будет сгенерирован запрос на вкладке Отладка, переключиться на которую можно в правом верхнем углу окна.

Кнопка на верхней панели (Сформировать текст запроса) генерирует текст для запроса, используя шаблонизацию текста в поле Запрос, Кнопка Выполнить запрос и отобразить данные выполняет запрос и выводит его результаты в таблице ниже Результат выполнения запроса. Справа указываются параметры фильтрации, передаваемые в запрос, причём некоторые из них являются системными:

  • Name – это наш параметр фильтрации по имени типа. Именно этот параметр должен использоваться при вводе данных в контроле Reference.

  • Текущий сотрудник – это системный параметр с идентификатором текущего пользователя. Используя его, можно, например, в представлении “My tasks” (мои задания) выводить только задания текущего пользователя.

  • Locale – идентификатор культуры (языка) текущего пользователя. Число “25” соответствует русскому языку. С помощью этого параметра можно локализовать значения в результате запроса Запрос.

Ниже в группе Сортировка указываются названия колонок, для которых возможна сортировка (для нас это DocTypeName с именем типа документа) и направление сортировки (по возрастанию, по убыванию, или отсутствует для колонки). Т.к. по умолчанию в метаинформации #view была указана колонка DocTypeName с направлением сортировки по возрастанию, то именно эти значения были выбраны.

В сгенерированном SQL-запросе видно, что плейсхолдер #order_by был заменён на “t.Name asc”, где “t.Name” - значение свойства SortBy в метаинформации #column для колонки DocTypeName. Таким образом, в SQL сортировка будет выполняться для поля AbDocumentTypes.Name по возрастанию.

Укажем слева в параметре Name значение In для оператора сравнения начинается с кликнем по имени параметра. Ещё раз нажмём на кнопку генерации и выполнения запроса.

Результаты такого же запроса, но с оператором содержит, будут выведены в выпадающем списке контрола с автодополнением, когда пользователь начнёт вводить in для ввода типа документа (ввод выполняется без учёта регистра символов, т.е. для значений параметра in или IN результат будет одинаковым). Будут выведены все строки, которые содержат значение “in”:

Параметр #param_expr(Name, t.Name) указывает, что при вводе параметра с алиасом Name (алиас задаётся в метаинформации #param, в нашем случае алиас и отображаемое имя одинаковы) значение этого параметра будет сравниваться с полем t.Name. Для выбранного значения параметра плейсхолдер #param_expr был заменён на AND ((t.Name like ('%' + @NAME_1+'%'))), и, если подставить значение параметра, то это будет AND t.Name like '%in%', т.е. поле AbDocumentTypes.Name должно содержать подстроку in.

Предпросмотр представления

Теперь переключимся на режим “Просмотр” (справа от “Отладка”). Этот режим позволяет увидеть, каким образом представление будет отображаться для пользователя в дереве рабочего места.

Кнопка фильтра (слева от кнопки обновления) открывает диалог фильтрации, где пользователь может выбрать фильтрацию по отображаемым параметрам (для которых не указано Hidden: true в метаинформации #param).

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

Именно так пользователь будет видеть представление, если он решит заполнить поле со ссылкой на тип документа через кнопку троеточия.

Права доступа на представление

Для представления осталось настроить последнюю важную деталь: список ролей, для которых представление доступно. Если представление недоступно для пользователя, то он не может получить его данные любым из способов (при вводе в контроле поле будет отображаться с красной рамкой, кнопка выпадающего списка работать не будет, а через троеточие или в дереве рабочего места в главном окне узел с представлением не будет отображён). Т.е. недоступное по правам представление для приложения TessaClient идентично отсутствующему представлению.

По умолчанию список ролей пуст, и представление доступно только для администраторов, т.к. администраторам доступны абсолютно все представления в системе. Чтобы представление с типами документов было доступно всем сотрудникам, добавим роль Все сотрудники (в которую входят все сотрудники), начав вводить это поле, а потом нажав два раза <Enter> для его добавления в список.

Связь представления со ссылочным контролом

Теперь сохраним представление и вернёмся в редактор типа карточки AbDocument.

Свяжем представление с контролом для ввода типа документа, указав его свойства:

  • Алиас представления – алиас представления, из которого будут получены данные при вводе в текстовое поле. У нас это “AbDocumentTypes”. Если значение не указано, то в поле нельзя будет ввести данные посимвольно с автодополнением, но можно будет выбрать представление другим способом (из выпадающего списка или по кнопке с троеточием).

  • Алиас параметра – алиас параметра, в который будет передана строка, которую пользователь начал вводить в поле для ввода. Причём строка передаётся в параметр с оператором содержит. У нас это параметр Name. Если пользователь ввёл букву “o”, то в параметр с алиасом Name в представлении с алиасом AbDocumentTypes будет передано значение “содержит ‘o’“. После этого SQL представления выполняется, возвращает две строки “Incoming” и “Outgoing”, которые и выводятся в выпадающем списке.

  • Алиас представления выпадающего списка – алиас представления, используемого для отображения данных по кнопке выпадающего списка со стрелкой “вниз”. При этом в представление не передаются параметры (если это не указано явно в настройках маппинга представления, о чём подробнее можно узнать в руководстве администратора). Выпадающий список обычно имеет смысл только для небольших справочников, таких как наш справочник типов документов. Поэтому запишем значение “AbDocumentTypes” в это поле.

  • Выпадающий список – флажок, который включает режим выпадающего списка. С отключённым флажком кнопка со стрелкой вниз отображаться не будет независимо от значения свойства Алиас представления выпадающего списка. Обычно и включают этот флажок, и задают алиас представления.

  • Разрешить открывать ссылки – флажок, разрешающий открытие карточки по двойному клику по значению в поле (или через контекстное меню на введённом значении). Карточка открывается по идентификатору, указанному во внешнем ключе колонки, с которой связан контрол. Поскольку тип документа – это не карточка, то снимем этот флажок.

Свойства контрола будут выглядеть следующим образом:

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

Это означает, что или нет ни одного представления, доступного по правам доступа (по списку ролей), или в системе нет подходящих представлений, размещённых в рабочих местах. Можно скрыть кнопку троеточия, поставив флажок Скрывать кнопку выбора, т.к. для такого небольшого по размерам справочника нет смысла организовывать сложный выбор из различных представлений с фильтрацией.

Но мы рассмотрим, как добавить представление в рабочее место, чтобы оно отображалось при нажатии кнопки с троеточием.

Back to top