27.01.2016, 18:19 | #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 раз. Как такое вообще возможно?! Может кто сталкивался с подобным. |
|
27.01.2016, 22:01 | #2 |
Чайный пьяница
|
Попробуйте так:
Код: 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 |
Участник
|
Результат тот же, к сожалению.
|
|
27.01.2016, 23:54 | #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 |
|
28.01.2016, 09:51 | #5 |
Участник
|
Тоже не получается. context.getDepth() в обеих случаях возвращает 0.
|
|
28.01.2016, 10:06 | #6 |
Участник
|
С SDK:
Цитата:
|
|
28.01.2016, 16:39 | #7 |
Участник
|
Попробовал повесить обработчик на поле на форме. Итог тот же. Срабатывает в основном 2 раза. Но было замечено повторные срабатывания 1 раз и 3 раза.
|
|
02.02.2016, 16:52 | #8 |
Участник
|
Товарищи, даже и представить не мог как эта штука мешает в кодинге. Если кто-то поможет решить эту проблему, буду очень благодарен.
|
|
10.02.2016, 01:36 | #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.02.2016, 13:22 | #10 |
Участник
|
vasya-serega, спасибо за совет. Я уже так пробовал, никаких изменений. У меня такое чувство что после выполнения setValue() срабатывает fireOnChange на поле, что и приводит ко второму выполнению функции. Вот как это обойти?
|
|
11.02.2016, 18:47 | #11 |
Участник
|
А вот это пробовали
http://www.powerobjects.com/2015/09/...mics-crm-2015/ Мне помогло и я никак не могу понять, что в коде было не так и почему он ансапортед. |
|
12.02.2016, 12:27 | #12 |
Участник
|
Ksani, спасибо за совет. Это я попробовал в первую очередь. Данное решение помогло, но так же принесло с собой кучу новых проблем еще более глобальных. По этому совместимость со старыми формами не подходит к сожалению.
|
|
15.06.2016, 16:15 | #13 |
Участник
|
Если вы изменяете поле на пусто вручную и потом срабатывает testFunc, то всё логично.
Надо бы на onSave валидации вешать. |
|
22.06.2016, 11:59 | #14 |
Участник
|
Изменение поля происходит скриптом, там в примере видно.
|
|
|
|