scripts:validation

Валидация

Скрипты позволяют гибко валидировать значения полей для предотвращения ошибок заполнения форм.

Дата окончания не раньше даты начала

Добавим в форму «Отпуск» проверку дат начала и окончания отпуска. Эту форму мы создавали в разделе Быстрый старт. Добавим в скрипт формы следующий блок кода:

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
};

Была ли эта статья полезной?

Да, спасибо! Нет, остался вопрос