ConvertDataConnection
ConvertDataConnection - преобразующее загружающее соединение с данными, которое получает данные из другого загружающего соединения с данными и позволяет изменить структуру данных. Полный список селекторов для модификации структуры данных можно найти в статье справочника по синтаксису платформы WT, а здесь кратко познакомимся с часто используемыми.
Пример практического применения ConvertDataConnection рассматривается в Уроке 26. Работа с JSON на форме.
Работать будем с формой и запросами из раздела Подготовка.
Добавление новых полей
Частым случаем применения ConvertDataConnection является необходимость расширить набор полей исходного DataConnection. Например, добавить поля Added, Updated и Deleted, чтобы при редактировании записи на форме устанавливать статус, который проверять при сохранении изменений в базу данных.
Для этих целей используется селектор типа Value, который добавляет колонку с именем из атрибута Name
и типом данных из атрибута DataType
. Для каждой строки в ячейку новой колонки ставиться значение, указанное в качестве значения тэга. Изменить значения полей можно через set-проперти AddRow, AddRows, UpdateRow, UpdateRows, UpdateColumn и UpdateColumnCellsValues в команде типа ValueSetCommand.
Подстановка значений
Вторым по частоте использования является селектор типа Substitution, который добавляет колонку с именем из атрибута Name
, а значение для нее берет из матрицы подстановки по ключу из поля, указанному в атрибуте Field
.
Подстановка сработает только при обновлении ConvertDataConnection, которое будет при загрузки формы и при обновлении источника данных, если не задан элемент ManualRefresh со значением True, а так же по команде типа DataConnectionRefreshCommand.
Поэтому при добавлении записи или редактировании колонки с ключом для подстановки нужно задавать значение
Замена подстрок
Бывают ситуации, когда в SQL-запросе формируется текстовая строка, в которой необходимо заменить подстроку. Например, в строку встраивается ключ, а на форме вместо ключа должно подставиться конкретное значение.
В качестве примера в запросе будем формировать строку из фамилии клиента и в круглых скобках указывать идентификатор города. На форме в ConvertDataConnection вместо идентификатора будем подставлять название города.
Скорректируем запрос TestClientSelectSqlQuery, добавив поле TitleWithCity:
Добавим в ClientPrimaryGetDataConnection новое поле TitleWithCity, а затем переделаем ClientConvertDataConnection:
Для тэга <Field>
в атрибуте Name
укажем имя новой колонки, в которой будет происходить замена. А в качестве значения тэга <Field>
передадим соединение с данными со списком городов. Это соединение будет выступать матрицей замены, где первый столбец - ключ, по которому будет идти замена.
Укажем ClientConvertDataConnection в качестве источника данных в таблице ResultDatabaseTable, и скорректируем ее колонки.
Запустим форму, чтобы проверить результат:
Форматирование строки
Бывает необходимость собрать текстовую строку, содержащую данные из других полей той же строки соединения с данными. Для этого используется селектор типа Format. В качестве значения тэга ожидается строка-шаблон, с указанием в фигурных скобках {}
имен полей исходного соединения с данными, которые будут источниками значений.
Скорректируем запрос TestClientSelectSqlQuery, добавив поле CityTitle:
Добавим в ClientPrimaryGetDataConnection новое поле CityTitle, а затем переделаем ClientConvertDataConnection:
Укажем его в качестве источника данных в таблице ResultDatabaseTable, и скорректируем ее колонки.
Запустим форму, чтобы проверить результат:
Сложные шаблоны
Для форматирования строки по шаблону существует еще один селектор типа TemplateFormat, который позволяет использовать в шаблоне условные операторы.
В качестве шаблонизатора используется Scriban. Подробнее можно почитать по ссылке.
Давайте рассмотрим пример, добавления в имя клиента постфикса (арх.), если запись находится в архиве:
Укажем его в качестве источника данных в таблице ResultDatabaseTable, и скорректируем ее колонки.
Запустим форму, чтобы проверить результат:
Вложенные массивы
Для обработки вложенных массивов используется селектор типа Action, который поддерживает операций по работе с массивами, перечисленные в статье Array.
Скорректируем запрос TestClientSelectSqlQuery, добавив поля с вложенными массивами:
Результат выполнения этого запроса будет иметь вид:
Добавим в ClientPrimaryGetDataConnection новые поля Materials и TotalPrice, а затем переделаем ClientConvertDataConnection:
Укажем его в качестве источника данных в таблице ResultDatabaseTable, и скорректируем ее колонки.
Запустим форму, чтобы проверить результат:
Last updated