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