Валидация
Скрипты позволяют гибко валидировать значения полей для предотвращения ошибок заполнения форм.
Дата окончания не раньше даты начала
Добавим в форму «Отпуск» проверку дат начала и окончания отпуска. Эту форму мы создавали в разделе Быстрый старт. Добавим в скрипт формы следующий блок кода:
form.onChange(['Дата начала', 'Дата окончания']) .validate('Дата окончания', state => { const [start, end] = state.changes; if (!start || !end) return null; if (start.date && end.date && start.date >= end.date) return { errorMessage: 'Не может быть раньше даты начала' }; return null; });
Теперь при заполнении формы отобразится ошибка, если мы случайно выберем дату окончания отпуска раньше даты начала:
Заполнено хотя бы одно поле
Иногда бывает нужно проверить, заполнено ли одно из нескольких полей формы. Например, электронная почта или телефон в форме обратной связи. Добавить такую проверку поможет следующий скрипт:
form.onChange(['Эл. почта', 'Телефон'], true) .validate('Эл. почта', state => { const [email, phone] = state.changes; const emailIsEmpty = !email || !email.text; const phoneIsEmpty = !phone || !phone.text; if (emailIsEmpty && phoneIsEmpty) return { errorMessage: 'Заполните электронную почту или телефон' }; return null; });
Здесь мы передаем список полей в метод onChange
. Затем добавляем валидацию, внутри которой проверяем, что хотя бы одно из переданных полей заполнено. Если нет, пользователь увидит сообщение об ошибке, указанное в ключе errorMessage
.
Подсказка: с помощью скриптов валидации можно уточнять действия в бизнес-процессе. Представим, что для перехода процесса на следующий этап не хватает важной информации — в примере ниже это отсутствие информации из чека, например при возврате товара. При этом для корректной и оперативной обработки заявки необходимо вернуть задачу на предыдущий этап, сохранив все изменения этапа текущего. Чтобы это сработало ответ на запрос скрипта должен иметь вид:
return { errorMessage: "Receipt line should be specified.", canApprove: false, canSave: true, canReject: true };