AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.11.2015, 13:02   #1  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
Асинхронный сейв формы и вызов екшена
Все доброго дня. Нужна помощь.

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  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Я думаю, начать нужно с бизнес-логики. Вы на пост-событии сохранения вызываете событие сохранения. Ничего удивительного, что происходят какие-то коллизии в данных. Возможно вам следует использовать не пост обработчик save(saveOptions).then а сам обработчик события OnSave? В этом случае, сохранение не произойдет пока вы не выполните нужные проверки и не заполните нужные поля.

Кроме того, я бы посоветовал вам делать "кучу всего" в серверном плагине на pre событии сохранения. В этом случае возможно изменить поля сохраняемой записи до попадания в базу.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 13.11.2015, 14:57   #3  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
Суть в том что этот скрипт размещен на кнопке риббона. На OnSave формы выполняется свой тоже замудренный скрипт, который должен запускаться и на сейве формы и по клику на кнопке риббона. И когда жмакаешь на эту кнопку риббона происходит вызов save(saveOptions) который запускает скрипт с формы (тот что на OnSave ), по завершению которого (then) потом работает екшн (который на кнопке), а потом происходит опять сохранение и закрытие (тоже со скрипта на форме).
Логика замудренная, но как есть.
Старый 17.11.2015, 13:53   #4  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Мне кажется что что-то делается не так
1) если иден save и then то проиходит сохранение про которое форма не знает !!!
2) когда приходит success то запускается save("saveandclose") который берет все несохраненые данные и сохраняет.

Решение !!! заменить save("saveandclose") на close для отмены изменений постваить всем never
Старый 19.11.2015, 17:47   #5  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
А что означает "проиходит сохранение про которое форма не знает"?! Это как?
Суть в том что после сейва нужно сразу запустить екшн, а потом закрыть форму, со всеми данными которые поменялись во всем этом процессе.
Старый 19.11.2015, 18:16   #6  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Вы уж простите, но "как есть" - это ответ полу-менеджера, а не разработчика. Распутайте логику, разбейте на понятные методы, которые можно будет вызвать в разных обработчиках. В конце концов, вас никто не заставляет сохранять форму. Обновите нужные поля записи через веб-сервис, после чего обновите форму, чтобы поля обновились в интерфейсе.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Двойной вызов функции Karpa_S Dynamics CRM: Разработка 6 25.09.2015 15:29
CRM 2015 вызов функции после сохранения формы Karpa_S Dynamics CRM: Разработка 6 22.09.2015 17:21
Вопросы по кастомизации - вызов иной формы в зависимости от значения поля и прочее alou Dynamics CRM: Разработка 1 11.07.2012 14:20
Как определить создание формы Dicora Dynamics CRM: Функционал 2 22.09.2010 14:42
вызов своего функционала из формы glad Dynamics CRM: Разработка 8 12.09.2006 18:55
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:56.