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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.01.2014, 02:05   #1  
vasya-serega is offline
vasya-serega
Участник
 
145 / 17 (1) ++
Регистрация: 12.05.2013
Адрес: Украина
Поочередное выполнение запросов в JS
Есть проблема, не знаю, как решить.
На форме задачи вызывается JS-обработчик, который делает 2 действия: обновляет значение поля и выполняет запрос на смену состояния сущности
Код:
Xrm.Page.getAttribute(fieldName).setValue("some text");
XrmServiceToolkit.Soap.SetState("task", id, 0, 3);
// попытка сохранения изменений
Xrm.Page.data.entity.save();
Когда я пытаюсь сохранить изменения, сделанные моей функцией в последней строке, что-то гарантированно не выполнится. Либо запрос, когда форма начнет сохраняться и загружаться, либо значения поля fieldName не изменится.
Подскажите, как можно сию неприятность обойти?
Старый 08.01.2014, 03:00   #2  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Советую вам разобраться с фреймворком, который используете и заставить его выполнять запрос синхронно - т.е. не идти дальше до тех пор, пока обращение к эндпоинту не вернёт результат.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 08.01.2014, 03:33   #3  
vasya-serega is offline
vasya-serega
Участник
 
145 / 17 (1) ++
Регистрация: 12.05.2013
Адрес: Украина
В описании к этой функции в либе сказано, что она выполняется синхронно, если не указана callback функция. Можно было бы конечно в неё перенести часть логики, которая сейчас находится в другом месте, но попытка написать
Код:
XrmServiceToolkit.Soap.SetState("task", id, 0, 3, TestCallback);
приводит к ошибке
Uncaught Error: No response received from the server.
Старый 08.01.2014, 19:17   #4  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Вы не можете:
1) Вы не можете изменить статус а потом сохранить, потому что у вас может быть статус "закрыта" и тогда любые изменения отобьются;
2) Вы не можете запустить сохранение, а после запустить изменение статуса через JS (поправочка в 2013 такое уже можно делать)
Вы можете:
1) Вы можете это перенести весь функционал на плагин, БП или сборку;
2) Вы можете провести апдейт всех измененных полей через SOAP или REST запрос после чего изменить статус и просто закрыть форму (Xrm.Page.ui.close(); ну и может еще надо будет сделать такое).
Старый 08.01.2014, 19:31   #5  
vasya-serega is offline
vasya-serega
Участник
 
145 / 17 (1) ++
Регистрация: 12.05.2013
Адрес: Украина
Цитата:
Сообщение от spectr Посмотреть сообщение
Вы не можете:
...
2) Вы не можете запустить сохранение, а после запустить изменение статуса через JS (поправочка в 2013 такое уже можно делать)
Во как, спасибо за информацию.
Старый 09.01.2014, 11:31   #6  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Цитата:
Сообщение от vasya-serega Посмотреть сообщение
Во как, спасибо за информацию.
Да там появилась функция обратного вызова:
Цитата:
Saves the record asynchronously with the option to set callback functions to be executed after the save operation is completed.

JScript Copy Code
Xrm.Page.data.save().then(successCallback, errorCallback)


Parameters

The successCallback and errorCallback functions are executed depending on whether an error is returned.

The successCallback will not have any arguments passed to it. It will simply be called if the operation succeeds.

The errorCallback will be passed an object with the following properties:

errorCode

Type: Number. The error code.

message

Type: String. A localized error message.

Remarks

This method is only available for Updated Entities.
За это сообщение автора поблагодарили: vasya-serega (1).
Старый 25.01.2014, 19:16   #7  
vasya-serega is offline
vasya-serega
Участник
 
145 / 17 (1) ++
Регистрация: 12.05.2013
Адрес: Украина
Цитата:
JScript Copy Code
Xrm.Page.data.save().then(successCallback, errorCallback)
Круто! Буду знать, спасибо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axforum blogs: Полезная доработка JS библотеки SDK.REST Blog bot Dynamics CRM: Blogs 0 07.11.2013 11:11
Программный js код Dekan Dynamics CRM: Разработка 0 07.08.2009 07:54
mscrm4ever: CRM 4.0 Creating a JS Resource Manager Blog bot Dynamics CRM: Blogs 0 27.06.2009 10:05
Как отсрочить выполнение скриптов (timeout)? Dekan Dynamics CRM: Разработка 2 07.06.2009 14:07
JS editor для CRM 4.0 scint Dynamics CRM: Разработка 9 01.06.2009 09:11
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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