Валидация
Скрипты позволяют проверять корректность заполнения и показывать произвольные ошибки валидации полей формы. Основные примеры сценариев использования:
- Проверить корректность данных в нескольких полях сразу;
- Проверить заполнение одного из нескольких полей;
- Корректировать бизнес-процесс, позволяя сохранять форму, но блокируя переход на следующий этап;
- Гибко проверить отсутствие дубликатов задачи через реестр.
Для валидации поля необходимо подписаться на изменение необходимых полей формы через onChange и вызвать одну из функций валидации: validate или validateAsync.
interface form {
onChange(
fieldNames: string[],
executeOnLoad: boolean = false
): ChangeHandler
}
interface ChangeHandler {
validate(
fieldName: string,
validateFunc: (state: FormState) =>
{
errorMessage: string
canApprove?: boolean,
canSave?: boolean,
canReject?: boolean
} | undefined
)
validateAsync(
fieldName: string,
validateFunc: (state: FormState) =>
Promise<{
errorMessage: string,
canApprove?: boolean,
canSave?: boolean,
canReject?: boolean
} | undefined>
)
}
В метод validate передается 2 параметра:
- fieldName — название или код поля, около которого требуется показать ошибку;
- validateFunc — функция-обработчик, принимающая на вход объект состояния формы и возвращающая результат: объект ошибки либо пустое значение (undefined / null), если ошибки нет.
Объект ошибки включает следующие поля:
- errorMessage — обязательное текстовое поле, текст из которого будет отображаться как ошибка валидации;
- canSave — необязательное поле типа boolean. Если передано true, то разрешено сохранение формы;
- canApprove — необязательное поле типа boolean. Если передано true, то разрешено утверждение этапа;
- canReject — необязательное поле типа boolean. Если передано true, то разрешен тип «Против» согласования этапа.
Метод validateAsync отличается тем, что функция-обработчик validateFunc должна вернуть не результат, а Promise (обещание) с результатом. Применяется в том случае, если для валидации полей используются дополнительно загружаемые данные.
Пример простого скрипта, который проверяет, что заполнено хотя бы одно из двух полей:
form
.onChange(['Эл. почта', 'Телефон'], true)
.validate('Эл. почта', state => {
const [phone, email] = state.changes;
if (!phone.text && !email.text)
return {
errorMessage: 'Заполните электронную почту или телефон'
};
});
Функция проверки будет вызываться при изменении любого из полей («Эл. почта» или «Телефон») и при открытии формы. Текст ошибки будет отображаться под полем «Эл. почта»:

Готовые варианты скриптов для валидации полей можно посмотреть в статье Примеры скриптов.