![]() |
#1 |
Участник
|
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 раз. Как такое вообще возможно?! Может кто сталкивался с подобным. |
|
![]() |
#2 |
Чайный пьяница
|
Попробуйте так:
Код: testFunc = function(){ if(Xrm.Page.getAttribute("name").getValue()) { Xrm.Page.getAttribute("name").setValue(null); Xrm.Utility.alertDialog("Поле 'Name' пустое"); } }
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
![]() |
#3 |
Участник
|
Результат тот же, к сожалению.
|
|
![]() |
#4 |
Чайный пьяница
|
А если так:
Код: 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 |
|
![]() |
#5 |
Участник
|
Тоже не получается. context.getDepth() в обеих случаях возвращает 0.
|
|
![]() |
#6 |
Участник
|
С SDK:
Цитата:
|
|
![]() |
#7 |
Участник
|
Попробовал повесить обработчик на поле на форме. Итог тот же. Срабатывает в основном 2 раза. Но было замечено повторные срабатывания 1 раз и 3 раза.
|
|
![]() |
#8 |
Участник
|
Товарищи, даже и представить не мог как эта штука мешает в кодинге. Если кто-то поможет решить эту проблему, буду очень благодарен.
|
|
![]() |
#9 |
Участник
|
Попробуйте убирать обработчик и заново его привязывать
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 |
Участник
|
vasya-serega, спасибо за совет. Я уже так пробовал, никаких изменений. У меня такое чувство что после выполнения setValue() срабатывает fireOnChange на поле, что и приводит ко второму выполнению функции. Вот как это обойти?
|
|
![]() |
#11 |
Участник
|
А вот это пробовали
http://www.powerobjects.com/2015/09/...mics-crm-2015/ Мне помогло и я никак не могу понять, что в коде было не так и почему он ансапортед. |
|
![]() |
#12 |
Участник
|
Ksani, спасибо за совет. Это я попробовал в первую очередь. Данное решение помогло, но так же принесло с собой кучу новых проблем еще более глобальных. По этому совместимость со старыми формами не подходит к сожалению.
|
|
![]() |
#13 |
Участник
|
Если вы изменяете поле на пусто вручную и потом срабатывает testFunc, то всё логично.
Надо бы на onSave валидации вешать. |
|
![]() |
#14 |
Участник
|
Изменение поля происходит скриптом, там в примере видно.
|
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|