Типы карточек¶
Тип карточки описывает сущность, такую как Документ, Контрагент или Настройки уведомлений. Для типа определяется:
-
способ хранения, а именно то, какие поля для каких таблиц в схеме данных используются в этом типе;
-
пользовательский интерфейс карточки, связанный с этими полями;
-
валидаторы, определяющие необходимые для заполнения поля и другие условия.
Помимо типов карточек, редактор типов позволяет создавать типы файлов и заданий, которые не рассматриваются в этом руководстве. Однако, их структура очень похожа на структуру типов карточек, поэтому не составит труда изучить их самостоятельно или обратиться к соответствующему руководству.
Свойства карточки¶
Выберем вкладку Карточки
в панели навигации слева, создадим тип карточки, выбрав пункт Добавить тип карточки
в контекстном меню узла Карточки
. Тип был создан в узле Карточки
внутри группы (без группы)
. Типы карточек группируются таким же образом, как и таблицы в схеме данных. Выберем созданный узел Card
и укажем его свойства:
-
Имя – уникальное имя типа карточки. Оно же определяет имя узла в редакторе, который соответствует типу. Имя может быть использовано в расширениях, а также при настройке решения, но обычный пользователь его не будет видеть;
-
Заголовок – заголовок типа карточки, т.е. его отображаемое для пользователей название. Значение может быть неуникальным, оно фигурирует при создании карточки, в заголовке вкладки для открытой карточки и в различных представлениях (например, в представлении со списком шаблонов, доступных пользователю);
-
Группа – название группы типов карточек. Оно требуется не только для группировки в редакторе, но и для группировки плиток при создании карточки, когда пользователю доступно для создания очень много карточек различных типов, и эти типы группируются в соответствии с этим полем. Причём пользователь по умолчанию видит именно название группы, но при разработке можно написать простое расширение, которое для заданного имени группы подставит другую локализованную строку. Именно таким образом локализуются все группы для стандартных типов карточек;
-
Формат дайджеста - определяет строку форматирования для дайджеста карточки, т.е. для названия, используемого в заголовке вкладки, истории действий и т.д. Для использования полей карточки доступна стандартная система плейсхолдеров (см. Руководство администратора). Наведя курсор на поле можно посмотреть всплывающую подсказку с примером. Если поле не заполнено - вычисление дайджеста выполняется стандартным образом (например, это номер карточки, если она включена в типовое решение и в ней присутствует секция с номером);
-
Идентификатор типа - идентификатор типа карточки. С помощью кнопок, расположенных справа от поля можно скопировать идентификатор типа или скопировать идентификатор типа и имя для использования в расширениях;
-
Флаг Административный указывает, что тип карточки предназначен только для использования администратором. Например, флаг ставится для карточек ролей, правил доступа и настроек. Система гарантирует, что пользователь, не являющийся администратором, не сможет создать карточку, изменить её или удалить, но сможет открыть в режиме только для чтения. Для нашей карточки документа флаг ставить не требуется, т.к. с ней могут работать не только администраторы;
-
Флаг Скрытый позволяет скрыть тип карточки из списка на создание, т.е. ни один пользователь или администратор не сможет явно создать карточку стандартным образом. Флаг обычно ставится для вспомогательных карточек (карточек-сателлитов), которые создаются расширениями (например, это карточка-сателлит типового процесса согласования с информацией по этапам согласования). В нашем случае установка этого флага не требуется;
-
Флаг Разрешить задания разрешает использование заданий для карточек этого типа. Включение этой настройки не добавляет автоматически команды для создания заданий в интерфейсе, но оно разблокирует системную вкладку
История заданий
и позволяет добавить такие команды, как начало процесса согласования или постановка задачи, в настройках типового решения (что будет рассмотрено ниже). Для таких типов карточек, как карточки ролей, карточки настроек и карточки-сателлиты, задания не требуются, поэтому эту настройку отключают. Для нашей карточки документа настройка должна быть включена, т.к. пользователи должны будут иметь возможности по согласованию документа; -
Флаг Фиксировать действия активирует ведение логов аудита при любом действии с карточкой (например, при создании, открытии, изменении, удалении, импорте, экспорте и др.). Включим эту возможность для создаваемой карточки документа;
-
Флаг Удалять в корзину активирует возможность по удалению карточки в корзину с возможностью восстановления. Если пользователь случайно удалит карточку, то в течение нескольких дней администратор сможет восстановить карточку (по умолчанию 30 дней, срок настраивается). Удалённая карточка физически удаляется из всех таблиц, поэтому она также исчезает из всех отчётов. Включим настройку для карточки документа;
-
Флаг Единственный экземпляр определяет, что только один экземпляр карточки может быть создан. Обычно эта опция активируется для всех карточек настроек. Такую карточку можно открыть, не зная её идентификатора, но зная имя типа карточки или идентификатор типа. Также для таких карточек активируется кэширование на сервере и на клиенте, это значительно ускоряет доступ к данным карточки, что также актуально для карточек настроек. Для нашей карточки документа эта опция должна быть отключена;
-
Флаг Загружать при инициализации - признак того, что карточка, существующая в единственном экземпляре, будет загружена и добавлена в кэш на клиенте в процессе загрузки приложения Tessa Client.
Ниже на изображении показано, как должны быть заполнены все свойства созданного типа.
Секции карточки¶
Сохраним тип карточки (кнопка Сохранить всё
сохраняет все изменённые типы карточек). Раскроем узел, в него вложены следующие узлы:
-
Секции – здесь указываются секции карточки, т.е. таблицы, которые включены в эту карточку, и поля, т.е. колонки, которые используются в карточке из выбранных таблиц. В качестве колонок можно выбрать либо обычные физические колонки (строки, числа и т.д.), либо комплексные колонки типа Reference для организации ссылок на другие таблицы (и соответственно на другие карточки). Если таблица включена в секции карточки не целиком (т.е. некоторые колонки не включены), то колонки, не включенные в тип, нельзя использовать в типе карточки, а в БД они будут заполнены значениями по умолчанию (либо из default constraint, либо Null);
-
Вкладки – здесь редактируется пользовательский интерфейс карточки, а именно вкладки, блоки и контролы;
-
Валидаторы – здесь указываются валидаторы, которые связываются с полями карточки и добавляют ограничения на эти поля. Например, определяют, что поле
AbDocuments.Type
(т.е. ссылка на тип документа) всегда должно быть задано.
Выберем узел Секции
, раскроем группу таблиц Ab
и выберем все колонки внутри таблицы AbDocuments
. Список выбранных колонок отображается как в дереве (посередине окна), так и в виде списка в правой области окна.
Пользовательский интерфейс карточки¶
Перейдём к узлу Вкладки
:
-
В верхней области отображает переключатель между редактируемыми вкладками. По умолчанию создана одна вкладка с названием в виде локализованной строки “Карточка” (настраивается в поле
Заголовок
); -
Посредством кнопки
+
может быть добавлена новая вкладка, для которой отдельно настраивается UI; -
Система справа от всех вкладок добавляет вкладку
История заданий
с деревом отправленных и завершённых заданий для карточки, если в свойствах типа был установлен флагРазрешить задания
.
В нашем случае мы используем единственную вкладку по умолчанию Карточка
. Внутри вкладок друг под другом размещаются блоки.
Выберем из выпадающего списка тип блока Колоночный блок
, добавим его кнопкой +
справа от списка.
Выберем добавленный блок в списке ниже, чтобы установить его свойства.
-
Заголовок – это строка с заголовком блока, которую пользователь увидит вместе с горизонтальным разделителем. Также эта строка определяет название блока в списке редактора. Назовём добавленный блок
Main information
; -
Алиас – это уникальное имя блока в пределах вкладки, посредством которого к блоку можно обращаться из расширений. Значение по умолчанию
Block1
можно не изменять; -
Количество колонок – количество колонок с контролами, которые содержит блок. Контролы автоматически выстраиваются сначала по колонкам слева направо, а затем по строкам сверху вниз. Укажем значение
2
для нашего блока, чтобы выводить контролы в 2 колонки; -
Вертикальный интервал между контролами – вертикальный отступ между строками, в которых размещаются контролы. Оставляем значение по умолчанию
5
; -
Горизонтальный интервал между контролами – горизонтальный отступ между колонками, в которых размещаются контролы. Оставляем значение по умолчанию
5
; -
Не оптимизировать колонки – опция, отключающая оптимизацию при отображении блока в одну колонку, что позволяет динамически увеличить количество колонок в коде расширений. В нашем блоке уже 2 колонки, и нам не требуется изменять количество колонок в коде расширений, поэтому флаг можно не отмечать;
-
Скрывать блок – скрывает блок из UI карточки. Скрытый блок можно будет сделать видимым в коде расширений. Не устанавливаем флаг для нашего блока;
-
Скрывать заголовок – скрывает заголовок блока. Если заголовок скрыт, то горизонтальный разделитель с текстом из свойства Caption не будет отображаться. Показать заголовок можно динамически посредством расширений. Рекомендуется скрывать заголовок блока, если он выглядит как часть соседнего блока, но посредством расширений такой блок со всеми контролами должен быть скрыт, или же если заголовок не должен отображаться по эстетическим соображениям. Не будем устанавливать флаг для создаваемого блока.
Под списком блоков есть область с настройками вкладки:
-
Вертикальный интервал между блоками – вертикальный отступ между блоками. Значение по умолчанию подходит для большинства случаев;
-
Предпросмотр – кнопки, отображающие UI карточки в режиме предпросмотра. Это позволяет увидеть, как выглядит карточка внешне, не запуская TessaClient и даже не сохраняя тип карточки;
-
Показать без расширений – отображает карточку без расширений, т.е. в строгом соответствии с установленными в редакторе типов свойствами;
-
Показать с расширениями – отображает карточку с выполнением расширений на метаинформацию
ICardMetadataExtension
, которые могут по каким-то критериям динамически изменить структуру карточки (её секции и поля) и пользовательский интерфейс. Например, как мы увидим далее, включив процесс согласования для этого типа карточки будет отображаться дополнительная вкладка “Процесс согласования” с настройками этапов процесса, а в схему карточки будут добавлены виртуальные секции для функционирования UI, причём заполнение и реакцию на изменение этих секций отрабатывают расширения типового решения. При разработке важно учесть, что для предпросмотра не работают расширенияICardUIExtension
, которые могут скрывать контролы и выполнять другие динамические изменения UI для нужд решения. Для проверки этих расширений требуется создать или открыть карточку в TessaClient.
-
Контролы и их связь с секциями¶
В области редактирования блока помимо свойств блока указывается список контролов, включённых в этот блок. Контролы добавляются так: выбирается тип контрола из выпадающего списка, и контрол этого типа добавляется в блок через кнопку +
. Добавим для редактирования номера документа контрол с типом Целое число
(это контрол, редактирующий целые числа).
Аналогично свойствам блока, выбрав контрол в списке можно редактировать свойства контрола. Свойства контролов различных типов похожи, поэтому рассмотрим для типа Целое число
все свойства подробнее.
-
Заголовок – заголовок контрола, который отображается пользователю рядом с контролом. Назовём контрол “Number”;
-
Алиас – имя контрола, которое может использоваться для обращения к нему из расширений. Задавать его необязательно, в отличие от свойства
Alias
для блока; -
Поля карточки – это поля карточки, с которыми связан контрол. Здесь можно указать только колонки, включённые в тип карточки в редакторе
Sections
, причём колонки должны иметь совместимый тип. В данном случае подойдут любые целочисленные колонки, которые не расположены внутри комплексных колонок; -
Формат поля – поле, позволяющее задать строку формата для отображения значения в контроле. Например, если поле не редактируемое, то число можно дополнить нулями слева до длины в 6 символов, используя строку формата
{0:######}
, где в поле{0}
передаётся первая выбранная колонка вCard fields
. Для описания различных способов форматирования вы можете обратиться к ресурсу MSDN к описанию методаString.Format
для .NET. Для нашего контрола с номером это свойство остаётся пустым, в этом случае в поле выводится числовое значение обычным образом; -
Всплывающая подсказка – строка с всплывающей подсказкой, которая позволяет сообщить пользователю о назначении этого контрола, если он наведёт на него мышь и задержит её на пару секунд. Всплывающая подсказка особенно полезна для описания назначения контрола типа “Флажок” (и “всплывает” она быстрее). Оставим это свойство пустым;
-
Поле не заполнено – текстовое сообщение, которое выводится, если поле в контроле было не заполнено, причём поле является обязательным для заполнения. Обычно для указания того, что поле должно быть заполнено, используются валидаторы (см. ниже), но это также можно определить для конкретного контрола посредством настроек
Mark as required
иField is required
; -
Минимальное значение – минимальное число, которое может быть введено в контроле. Можно указать 1, чтобы мог быть указан номер, начиная с 1, или оставить значение по умолчанию min, если ограничений быть не должно;
-
Максимальное значение – по аналогии, это максимальное число, которое может быть введено в контроле;
-
Цвет текста - цвет отображаемого текста;
-
Стиль текста - стиль шрифта отображаемого текста;
-
Отметить как обязательное - отметить поле как обязательное для заполнения;
-
Скрывать поле - скрыть поле;
-
Только для чтения – признак того, что контрол всегда доступен только для чтения, и пользователь не сможет ввести в него значение. Также контрол может быть доступен только для чтения, если у пользователя недостаточно прав на редактирование карточки или связанного поля (это определяется расширениями, например, расширениями типового решения для процесса согласования);
-
Скрывать заголовок – скрывает заголовок контрола. Если флаг стоит, то пользователь не увидит текста, заданного в свойстве заголовок;
-
Растягивать по ширине – указывает блоку, что для размещения этого контрола надо выделять целую строку со всеми колонками, а не только одну колонку в этой строке.
Укажем для контрола Заголовок
и Поля карточки
, выбрав колонку Number
через кнопку с троеточием. Свойства контрола должны быть заполнены как на изображении ниже:
Добавим контрол Type
для ввода типа документа. Это ссылка на одно из значений в таблице AbDocumentTypes
, которое мы определяли ранее: Incoming, Outgoing, Internal. Для ввода значения из справочника в Tessa используют контрол типа ссылка, который позволяет вводить значения, используя такие средства, как: автодополнение при вводе, выбор одного из значений из выпадающего списка или выбор значений из всех доступных справочников по кнопке с троеточием.
Для контрола также укажем заголовок и Поля карточки
– комплексную колонку Type
, в которой будет содержаться как идентификатор типа документа (колонка TypeID
), так и отображаемый текст для выбранного типа (колонка TypeName
).
Предпросмотр типа карточки, выбранный одной из кнопок Показать без расширений
или Показать с расширениями
, покажет следующую проблему:
Несмотря на то, что контрол Type
отобразился, и является связанным с полем AbDocuments.Type
в карточке, ввести в него значение невозможно, т.к. для контрола Ссылка
надо указать источник данных для автодополнения. Таким источником в Tessa выступают представления.
Подходящего представления для нашей таблицы AbDocumentTypes
нет, поэтому его надо создать. Сохраните тип карточки (Сохранить всё
на верхней панели) и переключите вкладку Представления
для редактирования представлений.