13.11.2015, 13:02 | #1 |
Участник
|
Асинхронный сейв формы и вызов екшена
Все доброго дня. Нужна помощь.
Xrm.Page.data.save().then(function(){ CallAction(Xrm.Page.data.entity.getId(), Xrm.Page.data.entity.getEntityName(), "new_action"); Xrm.Page.data.entity.save("saveandclose"); }); Суть вопроса. В общем происходит асинхронный сейв на саксесе которого завешен синхронный екшн, который там делает кучу всего + меняет некоторые значения на форме. И потом после изменений происходит сохранение и закрытие. Проблема в том что екшн отрабатывает, но все равно форма сохраняется со старыми данными. Если же поставить задержку на выполнение функции CallAction (setTimeout) хотя бы 10 милисек. все отрабатывает нормально. Но я думаю что не совсем правильно делать setTimeout, а другого ничего придумать не могу. Нужен совет, как это обойти. Спасибо. Последний раз редактировалось Karpa_S; 13.11.2015 в 13:09. |
|
13.11.2015, 14:30 | #2 |
Moderator
|
Я думаю, начать нужно с бизнес-логики. Вы на пост-событии сохранения вызываете событие сохранения. Ничего удивительного, что происходят какие-то коллизии в данных. Возможно вам следует использовать не пост обработчик save(saveOptions).then а сам обработчик события OnSave? В этом случае, сохранение не произойдет пока вы не выполните нужные проверки и не заполните нужные поля.
Кроме того, я бы посоветовал вам делать "кучу всего" в серверном плагине на pre событии сохранения. В этом случае возможно изменить поля сохраняемой записи до попадания в базу.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
13.11.2015, 14:57 | #3 |
Участник
|
Суть в том что этот скрипт размещен на кнопке риббона. На OnSave формы выполняется свой тоже замудренный скрипт, который должен запускаться и на сейве формы и по клику на кнопке риббона. И когда жмакаешь на эту кнопку риббона происходит вызов save(saveOptions) который запускает скрипт с формы (тот что на OnSave ), по завершению которого (then) потом работает екшн (который на кнопке), а потом происходит опять сохранение и закрытие (тоже со скрипта на форме).
Логика замудренная, но как есть. |
|
17.11.2015, 13:53 | #4 |
Участник
|
Мне кажется что что-то делается не так
1) если иден save и then то проиходит сохранение про которое форма не знает !!! 2) когда приходит success то запускается save("saveandclose") который берет все несохраненые данные и сохраняет. Решение !!! заменить save("saveandclose") на close для отмены изменений постваить всем never |
|
19.11.2015, 17:47 | #5 |
Участник
|
А что означает "проиходит сохранение про которое форма не знает"?! Это как?
Суть в том что после сейва нужно сразу запустить екшн, а потом закрыть форму, со всеми данными которые поменялись во всем этом процессе. |
|
19.11.2015, 18:16 | #6 |
Moderator
|
Вы уж простите, но "как есть" - это ответ полу-менеджера, а не разработчика. Распутайте логику, разбейте на понятные методы, которые можно будет вызвать в разных обработчиках. В конце концов, вас никто не заставляет сохранять форму. Обновите нужные поля записи через веб-сервис, после чего обновите форму, чтобы поля обновились в интерфейсе.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|