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