Вопрос

Вызывать окно выбора клиента "перед сохранением" entity.

Стоит такая задача:

Из дизайнера справочников перед сохранением entity делать пару запросов к бд (проверку на дубли и тп), после чего выдавать сообщение "Такая запись уже найдена, желаете сохранить как основную?" При "да" делать еще запрос и апдейт бд. Если "нет" не сохранять entity.
Как можно реализовать такой функционал? Пробую сделать навесив на entity "перед сохранением" и выполняя задание-сценарий, в котором делаю запросы и отправку по вебсокету сообщения, принимаю на странице "ClientMessageBridge" и вызываю окошко выбора, но вот что дальше делать? Во встроенном процессе entity в любом случае сохраняется, разве что после ответа клиента делать новый метод и изменять entity. Но это выглядит как то слишком грязно, можно ли сделать более красиво?

Нравится

5 комментариев
Лучший ответ

Павлов Артём,

Просто возвращение false в скрипт-таске, действительно, не решит проблему с сохранением, разве только, если реализовать дополнительную обработку данного результата.

Чтобы не было сохранения записи, мы генерировали исключение таким образом:

throw new System.InvalidOperationException("You have no right to change this entry!");

Но Вам вариант с генерацией исключения, скорее всего, не подойдет.

Посмотрите https://academy.terrasoft.ru/documents/technic-sdk/7-14/sobytiynyy-sloy-entity , в ней обратите внимание на метод isCanceled в классе EntityBeforeEventArgs. Этот метод позволяет отменить выполнение события.

И все-таки рекомендую рассмотреть вариант с реализацией Вашей задачи на клиенте с помощью asyncValidate.

Вы можете попробовать реализовать эту задачу на клиенте в методе asyncValidate.

Посмотреть пример использования этого метода можно по ссылке.

Также, чтобы не выполнялось сохранение Entity на клиенте, Вы можете при нужных условиях возвращать результат не true, а false в событийном процессе метода saving.

Алла Савельева,

"Вы можете при нужных условиях возвращать результат не true, а false в событийном процессе метода saving"
Можно поподробнее с этим методом? я в событийном подпроцессе создаю задание-сценарий или что? как возвращать false?

Павлов Артём,

Да, в элементе задание сценарий в конце есть return true.

При нужных условиях можно реализовать return false.

Но, наверное, лучше дополнительные проверки реализовать в событии Validate.

Алла Савельева, Сценарий возвращает False, что нужно еще добавить чтобы не сохранялись изменения?

Павлов Артём,

Просто возвращение false в скрипт-таске, действительно, не решит проблему с сохранением, разве только, если реализовать дополнительную обработку данного результата.

Чтобы не было сохранения записи, мы генерировали исключение таким образом:

throw new System.InvalidOperationException("You have no right to change this entry!");

Но Вам вариант с генерацией исключения, скорее всего, не подойдет.

Посмотрите https://academy.terrasoft.ru/documents/technic-sdk/7-14/sobytiynyy-sloy-entity , в ней обратите внимание на метод isCanceled в классе EntityBeforeEventArgs. Этот метод позволяет отменить выполнение события.

И все-таки рекомендую рассмотреть вариант с реализацией Вашей задачи на клиенте с помощью asyncValidate.

Показать все комментарии