В BPMSoft вы можете создавать и настраивать правила для ввода значений в текстовых полях, используя фиксированные маски, ограничения на символы, регулярные выражения и код JavaScript для валидации введенных значений. Например, можно установить маску для ввода номера мобильного телефона или номера документа контакта.
Создание и настройка правил ввода осуществляется в разделе «Правила ввода», расположенном в рабочем месте «Конструктор». Вы можете создавать правила, которые будут выполняться как для определенного пользователя, так и для группы, используя организационные и функциональные роли.
Рисунок 1 — Правила ввода
Правила ввода применимы только к полям с типом «Строка». Подробнее: Настройка полей. Для правила задаются параметры и условия, при которых оно выполняется. Подробнее о параметрах правила ввода смотрите в таблице 1.
Таблица 1 — Параметры правила ввода
Уникальное название правила ввода. Автоматически генерируемое значение на основании выбранного объекта. Значение можно изменить вручную.
Колонка на странице, для значения которой необходимо установить правило ввода. Значение выбирается из справочного окна, в котором отображаются все колонки выбранного объекта.
Требование к заполнению поля, которое визуально отображается в заданной форме. Маска ввода предназначена для единообразного внесения данных и запрещает ввод значений, которые не соответствуют установленным в правиле требованиям.
Маска отображается при установке курсора в поле, для которого необходимо указать значение. Доступные для заполнения символы отображаются в виде нижнего подчеркивания «_».
Для задания маски ввода используются следующие символы:
Маска может включать дополнительные символы, например, скобки, дефисы и т. д., а также пробелы.
Например, маска «+7 (999) 999-99-99» разрешает ввод номера телефона в формате «+7 (___) ___-__-__».
Примечание. При вставке скопированного значения в поле с маской необходимо, чтобы это значение полностью соответствовало заданной маске. В противном случае итоговое значение может отличаться, например, из-за наличия запрещенных символов или ограничений их количества
Регулярное выражение, которое будет применяться к полю при валидации. Валидация осуществляется при снятии фокуса с поля ввода и сохранении изменений.
Если значение поля не соответствует регулярному выражению, изменения не сохраняются.
Может быть использовано в случае, когда использование строгой маски невозможно. Например, валидация email адресов, которые не ограничены по количеству символов, но имеют определенную форму для заполнения.
С помощью регулярных выражений также возможно проверить полноту введенного значения в поле. Маска предназначена для определения формы значения, но позволяет сохранить изменения с неправильно введенным количеством символов. Например, при маске «+7 (999) 999-99-99» можно сохранить запись со значением «+7 (913) 000-__-__».
Пример: выражение «^\d{3}$» означает, что значение поля должно содержать три цифры
Фрагмент программного кода на языке JavaScript, в котором могут быть описаны как основные (в случае, если для правила установлен только данный параметр), так и дополнительные условия валидации поля. Валидация осуществляется при снятии фокуса с поля ввода и сохранении изменений.
Фрагмент кода должен завершаться возвращением значения true или false. При использовании условий if..else возврат значений должен быть предусмотрен во всех ветках.
Для получения значения колонки используйте конструкцию scope.get('ColumnCode’), где 'ColumnCode’ — код соответствующей колонки.
Использование запросов и объявление функций не допускается.
Фрагмент кода в базе хранится в виде текста без переноса строк, поэтому важно наличие всех точек с запятой в качестве разделительных символов. Используйте только одинарные кавычки.
В случае ошибки в коде результат не повлияет на валидацию (функция вернёт true), в консоль будет выведено описание ошибки
Примечание. Вы можете использовать ограничения как в комбинации, так и по отдельности. Например, можно установить маску и регулярное выражение для валидации и не прибегать к использованию остальных ограничений и проверок.
Настройка условий правила ввода осуществляется аналогично настройке расширенного фильтра для реестра записей. Подробнее о настройке расширенного фильтра смотрите в статье Фильтрация и группировка
Правила ввода не применимы для заданной даты. При настройке фильтра не используйте колонки с типами «Дата» или «Дата и время».
Рассмотрим пример создания маски для ввода мобильного телефона контакта. Для этого:
Рисунок 2 — Переход к созданию правила ввода
Рисунок 3 — Страница создания правила ввода
Примечание. При изменении объекта на другой название правила сбрасывается и устанавливается автогенерируемое значение на основании нового объекта.
Рисунок 4 — Условие для правила ввода
Примечание. Создать два правила для одной колонки одинаковых разделов невозможно. При попытке сохранить правило с аналогичными настройками отображается ошибка «Правило для этих колонок уже существует».
В результате созданное правило отобразится в реестре раздела «Правила ввода». При выполнении заданных условий в поле будет установлена маска. Например, при создании контакта из России отображается установленная в правиле маска номера телефона.
Рисунок 5 — Пример маски ввода значения
Если значение введено не верно, то при переходе к настройке других параметров контакта, отображается сообщение об ошибке. Сохранить контакт с неверно введенным значением нельзя.
Рисунок 6 — Пример сообщения об ошибке
Примечание. Для переноса созданных правил на другую среду необходимо прикрепить к переносимому пакету данные объекта «Правила ввода» (WSPattern). Также может потребоваться прикрепление к пакету данных, указанных в правилах Контакта (Contact) или Роли (SysAdminUnit). Колонку «Объект» (WSFolder, объект SysShema) к данным записей «Правила ввода» рекомендуется не прикреплять во избежание ошибок при переносе. Однако, колонки WSModuleName, WSSchemaName (Название схемы объекта) и WSSchemaId (Id объекта) должны быть прикреплены.
Рассмотрим пример создания правила для валидации номера договора, значение которого должно содержать текущую дату. Если текущая дата в значении не задана, сохранить такой договор невозможно. Для этого:
Рисунок 7 — Страница создания правила для валидации значения
Например, для проверки значения номера договора на содержание текущей даты можете указать следующий фрагмент кода:
let now = new Date(Date.now()).toLocaleString().split(',')[0]; let dateLength = 10; let columnValue = scope.get('Number'); let dateFromColumn = columnValue.substr(0, dateLength); let result = now === dateFromColumn; return result;
Рисунок 8 — Настройка условий для правила
В результате созданное правило отобразится в реестре раздела «Правила ввода». При создании или редактировании договора с типом «Договор» осуществляется проверка значения введенного номера, которое должно включать текущую дату. Если значение введено некорректно, то внизу поля будет отображено сообщение об ошибке. Без ввода корректного значения сохранить договор невозможно
Рисунок 9 — Некорректное значение номера договора
Бизнес-правила Фильтрация и группировка Организационные роли Функциональные роли