28.01.2014, 19:37 | #1 |
Участник
|
Странное поведение CRM 2013 что с ним делать?
Есть у меня небольшой скриптец на изменение поля new_a1 тип дата и время:
Код: if (Xrm.Page.getAttribute("new_a1").getValue() != null){ var dd = Xrm.Page.getAttribute("new_a1").getValue(); var cd = new Date(); cd.setMinutes(cd.getMinutes()+15); if (dd.getTime() < cd.getTime()){ Xrm.Page.getAttribute("a1").setValue(cd); } } Код: Xrm.Page.getAttribute("new_a1").addOnChange(econsulting.TM.changeDateTime); После чего просто тусуюсь на форме 1-2 мин и нажимаю сохранить. И тут странность при нажатии сохранить выполняется снова эта функция и она снова меняет время. На OnSave этой функции нет! Что за примочки CRM и как с ними бороться ? [+] ... оно вообще постоянно вызывается при нажатии на кнопку сохранить [+] остальные поля не передергиваются и не передергивается это поле если оно не заполнено, а если заполнено то оно передергивается на сохранении всегда хотя и не меняли его Последний раз редактировалось spectr; 28.01.2014 в 19:52. |
|
28.01.2014, 20:30 | #2 |
Чайный пьяница
|
Я бы приатачился дебагером и посмотрел откуда происходит вызов. При такого типа атача ивента первым параметром (если не ошибаюсь) передаётся контекст вызова - из него можно посмотреть откуда было вызвано + по колстеку прошёлся бы. Наверняка как то можно отсечь такие вызовы.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
29.01.2014, 10:16 | #3 |
Moderator
|
Полагаю что-то на OnSave может менять это поле, поэтому происходит OnChange
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
29.01.2014, 11:19 | #4 |
Участник
|
Цитата:
|
|
29.01.2014, 11:25 | #5 |
Участник
|
|
|
29.01.2014, 11:43 | #6 |
Участник
|
Сделал еще такую проверку:
Получил желаемый результат поле не изменилось, но и onChange больше на нем нет тем самым в поле можно вводить что угодно Вопрос Что может вызывать onChange поля после сохранения ? onLoad больше не запускается. Интересные факты
Последний раз редактировалось spectr; 29.01.2014 в 11:50. |
|
29.01.2014, 17:21 | #7 |
Участник
|
Проверил на другой СРМ та же проблема
Свою проблему временно решил созданием еще одного поля которое будет эталоном и содержать дату ту которую ввел юзер. И если эти 2 даты совпадают ничего не делаю если нет то провожу проверку. После чего меняю или нет дату введенную юзером и вкидываю ее в второе поле. Выглядит это так: Код: if (Xrm.Page.getAttribute("new_a1").getValue() != null){ if (Xrm.Page.getAttribute("new_a2").getValue() != null && Xrm.Page.getAttribute("new_a1").getValue().getTime() == Xrm.Page.getAttribute("new_a2").getValue().getTime()){ return; } var dd = Xrm.Page.getAttribute("new_a1").getValue(); var cd = new Date(); cd.setMinutes(cd.getMinutes()+15); if (dd.getTime() < cd.getTime()){ Xrm.Page.getAttribute("new_a1").setValue(cd); } } Xrm.Page.getAttribute("new_a2").setValue(Xrm.Page.getAttribute("new_a1").getValue()); |
|
29.01.2014, 17:54 | #8 |
Консультант-джедай
|
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
29.01.2014, 19:33 | #9 |
Участник
|
Пока делал скрипт напоролся на очень интересную штуку после чего сделал маленький тест и о БОГИ оно заработало !!!!!
И так вся проблема в типе Дата и время он принимает только до минуты а секунды режет ! Потому допускаю вот именно эта обрезка и передергивает поле. И так получилось все очень просто: Код: if (Xrm.Page.getAttribute("new_a1").getValue() != null){ var dd = Xrm.Page.getAttribute("new_a1").getValue(); var cd = new Date(); cd.setSeconds(0); cd.setMilliseconds(0); cd.setMinutes(cd.getMinutes()+15); if (dd.getTime() < cd.getTime()){ Xrm.Page.getAttribute("new_a1").setValue(cd); } } |
|
29.01.2014, 19:42 | #10 |
Еда - топливо, Одежда - н
|
отключи автосохранение и все будет работать.
каждые 30 сек происходит попытка сохранить данные, но они по какой-то причине не хотят сохранятся после чейнджа... в итоге форма висит в замкнутом цикле.... и апдейтит поле.
__________________
Все что вам нужно - это мозК Еда - топливо... Одежда - необходимость... |
|
29.01.2014, 19:52 | #11 |
Участник
|
Цитата:
И автосохранение у меня отключено. Проблему решил в посте выше. Алогично но работает |
|
29.01.2014, 20:08 | #12 |
Еда - топливо, Одежда - н
|
Цитата:
но рад что есть решение ))
__________________
Все что вам нужно - это мозК Еда - топливо... Одежда - необходимость... |
|
|
|