Announcement

Collapse
No announcement yet.

Валидация при записи на стороне сервера

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Валидация при записи на стороне сервера

    1. Предусмотрен ли какой нибудь механизм по валидации данных при записи на стороне сервера?
    2. Как вернуть ошибку при валидации со стороны сервера?

  • #2
    Валидация поля?
    Минимум есть Before Save Custom Script

    Comment


    • #3
      Есть. А как оттуда бросить культурный эксепшн?

      И например при сохранении через АПИ функция тоже отрабатывает? (не пробовал)

      Comment


      • #4
        Не думаю, что отрабатывает. Разве если сохранение непосредственно в базу вернёт ошибку

        Comment


        • #5
          Есть ли культурный способ вернуть ошибку сохранения в приложение?

          С валидацией проблем нет - доопределяем репозиторий и вставляем проверку, но требуется на клиента вернуть ошибку сохранения как то.

          class Task extends \Espo\Modules\Crm\Repositories\Task
          {

          public function save(Entity $entity, array $options = array())
          {
          $GLOBALS['log']->warning('Сработало!');

          if (Валидировано ) {
          return parent::save($entity, $options);
          } else {

          Вернуть ошибку в приложение!

          }

          }

          }

          Comment


          • #6
            Продолжение изысканий:

            Во view определяем

            errorHandlerBadStatus

            С сервера отправляем 409 статус со структурой

            {
            "reason" : "BadStatus",
            "data" : "То что хотим сказать"
            }

            Все бы хорошо, но два момента:
            1. В случае апдейта поля а не всей записи отлов 409 не происходит. Очевидно по причине что this в https://github.com/espocrm/espocrm/b...d/base.js#L519
            относится к вью поля, а не к вью записи. Что делать?
            2. Не происходит рефреш как в случае обычной ошибки и на клиенте запись остается отредактированной, хотя должна откатиться. Что делать?

            Comment


            • #7
              Можно было и хуки использовать. в beforeSave если не прошла валидация throw \Error();
              откатить значение поля
              $entity->set($fieldName, $entity->getFetched($fieldName));

              Comment


              • #8
                Откатить на клиенте - на сервере все хорошо - при выходе через 409 не отрабатывается откат на клиенте.

                resetModelChanges вроде как похоже на правду.

                errorHandlerBadStatus: function (data) {

                Espo.Ui.notify('Получена ошибка: ' + data, 'error', 10000);

                this.resetModelChanges();

                }


                Но п.1 все равно остается - нет ли более простого метода например расширить base или detail что бы не все view где возможно изменение кастомить?

                Comment

                Working...
                X