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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 27.01.2016, 18:19   #1  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
CRM 2016 setValue() double onChange
Всем добрый вечер. Столкнулся с такой проблемой в CRM 2016.
На онлоаде формы вешается функция Xrm.Page.getAttribute("name").addOnChange(testFunc);

На изменение поля "name" идет проверка.

testFunc = function(){
if(Xrm.Page.getAttribute("name").getValue())
Xrm.Page.getAttribute("name").setValue(null);
Xrm.Utility.alertDialog("Поле 'Name' пустое");
}

И что в итоге получаем. При внесении в поле какого либо значения, поле очищается и показывается алерт. Но Показывается 2 раза (вызов функции происходит 2 раза). Как только убираем строку Xrm.Page.getAttribute("name").setValue(null), то срабатывает 1 раз.

Как такое вообще возможно?! Может кто сталкивался с подобным.
Старый 27.01.2016, 22:01   #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
Попробуйте так:

Код:
testFunc = function(){
	if(Xrm.Page.getAttribute("name").getValue()) {
		Xrm.Page.getAttribute("name").setValue(null);
		Xrm.Utility.alertDialog("Поле 'Name' пустое");
	}
}
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 27.01.2016, 23:35   #3  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
Результат тот же, к сожалению.
Старый 27.01.2016, 23:54   #4  
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
А если так:

Код:
testFunc = function(context){
	if (context.getDepth() > 1)
		return;

	if(Xrm.Page.getAttribute("name").getValue()) {
		Xrm.Page.getAttribute("name").setValue(null);
		Xrm.Utility.alertDialog("Поле 'Name' пустое");
	}
}
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 28.01.2016, 09:51   #5  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
Тоже не получается. context.getDepth() в обеих случаях возвращает 0.
Старый 28.01.2016, 10:06   #6  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
С SDK:
Цитата:
  • Updating an attribute using setValue will not cause the OnChange event handlers to run. If you want the OnChange event handlers to run you must use fireOnChange in addition to setValue.
  • When Microsoft Dynamics CRM for tablets is not connected to the server setValue will not work.
  • You cannot set the value of composite attributes. More information: Write scripts for composite attributes.
Порпробуй метод перевесить с лоада на сам onChange поля на форме
Старый 28.01.2016, 16:39   #7  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
Попробовал повесить обработчик на поле на форме. Итог тот же. Срабатывает в основном 2 раза. Но было замечено повторные срабатывания 1 раз и 3 раза.
Старый 02.02.2016, 16:52   #8  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
Товарищи, даже и представить не мог как эта штука мешает в кодинге. Если кто-то поможет решить эту проблему, буду очень благодарен.
Старый 10.02.2016, 01:36   #9  
vasya-serega is offline
vasya-serega
Участник
 
145 / 17 (1) ++
Регистрация: 12.05.2013
Адрес: Украина
Попробуйте убирать обработчик и заново его привязывать
X++:
if(Xrm.Page.getAttribute("name").getValue())
// remove
Xrm.Page.getAttribute("name").removeOnChange(testFunc);
	Xrm.Page.getAttribute("name").setValue(null);
//add
Xrm.Page.getAttribute("name").addOnChange(testFunc);
	Xrm.Utility.alertDialog("Поле 'Name' пустое");
}
Старый 10.02.2016, 13:22   #10  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
vasya-serega, спасибо за совет. Я уже так пробовал, никаких изменений. У меня такое чувство что после выполнения setValue() срабатывает fireOnChange на поле, что и приводит ко второму выполнению функции. Вот как это обойти?
Старый 11.02.2016, 18:47   #11  
Ksani is offline
Ksani
Участник
Аватар для Ksani
MCBMSS
 
27 / 17 (1) ++
Регистрация: 31.08.2009
Адрес: Солнечная Страна
А вот это пробовали
http://www.powerobjects.com/2015/09/...mics-crm-2015/

Мне помогло и я никак не могу понять, что в коде было не так и почему он ансапортед.
Старый 12.02.2016, 12:27   #12  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
Ksani, спасибо за совет. Это я попробовал в первую очередь. Данное решение помогло, но так же принесло с собой кучу новых проблем еще более глобальных. По этому совместимость со старыми формами не подходит к сожалению.
Старый 15.06.2016, 16:15   #13  
EugeneVSNR is offline
EugeneVSNR
Участник
 
27 / 10 (1) +
Регистрация: 19.08.2014
Если вы изменяете поле на пусто вручную и потом срабатывает testFunc, то всё логично.

Надо бы на onSave валидации вешать.
Старый 22.06.2016, 11:59   #14  
Karpa_S is offline
Karpa_S
Участник
 
57 / 10 (1) +
Регистрация: 24.05.2015
Адрес: Киев
Изменение поля происходит скриптом, там в примере видно.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 15 Blog bot Dynamics CRM: Blogs 1 10.02.2016 10:26
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 17 Blog bot Dynamics CRM: Blogs 0 10.05.2014 06:30
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2013 Update Rollup 2 Blog bot Dynamics CRM: Blogs 0 15.04.2014 01:15
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 16 Blog bot Dynamics CRM: Blogs 0 23.01.2014 03:15
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 10 Blog bot Dynamics CRM: Blogs 0 17.08.2012 03:27
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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