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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.01.2014, 19:37   #1  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Странное поведение 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);
Так вот когда его меняют оно проставляет дату текущая + 15 мин, если то что выставили меньше текущая + 15 мин.
После чего просто тусуюсь на форме 1-2 мин и нажимаю сохранить.
И тут странность при нажатии сохранить выполняется снова эта функция и она снова меняет время. На OnSave этой функции нет!
Что за примочки CRM и как с ними бороться ?

[+] ... оно вообще постоянно вызывается при нажатии на кнопку сохранить
[+] остальные поля не передергиваются и не передергивается это поле если оно не заполнено, а если заполнено то оно передергивается на сохранении всегда хотя и не меняли его

Последний раз редактировалось spectr; 28.01.2014 в 19:52.
Старый 28.01.2014, 20:30   #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
Старый 29.01.2014, 10:16   #3  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Полагаю что-то на OnSave может менять это поле, поэтому происходит OnChange
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 29.01.2014, 11:19   #4  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Цитата:
Сообщение от a33ik Посмотреть сообщение
Я бы приатачился дебагером и посмотрел откуда происходит вызов. При такого типа атача ивента первым параметром (если не ошибаюсь) передаётся контекст вызова - из него можно посмотреть откуда было вызвано + по колстеку прошёлся бы. Наверняка как то можно отсечь такие вызовы.
Проверял в context.getEventSource().getName() стоит new_a1 значит это onChange поля ну или я что-то не то смотрел
Старый 29.01.2014, 11:25   #5  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Полагаю что-то на OnSave может менять это поле, поэтому происходит OnChange
Кроме это скрипта больше ничего нет.
Для чистоты эксперимента поменял это поле на другое такого же типа и получил тоже самое. Проблема именно в поле типа "Дата и время".
Старый 29.01.2014, 11:43   #6  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Сделал еще такую проверку:
  • Поцепил функцию на onSave
  • Проверил что onSave запускается перед повторным onChange
  • В onSave написал строчку
    Код:
    Xrm.Page.getAttribute("new_a1").removeOnChange(econsulting.TM.changeDateTime);

Получил желаемый результат поле не изменилось, но и onChange больше на нем нет тем самым в поле можно вводить что угодно

Вопрос
Что может вызывать onChange поля после сохранения ? onLoad больше не запускается.

Интересные факты
  • В CRM 2013 обновление страницы по нажатию на F5 или Ctrl+F5 вызывают функции на onSave
  • Если поле типа Дата и время было заполнено ранее и мы открыли запись и нажали сохранить то фокуса с повторным onChange нет

Последний раз редактировалось spectr; 29.01.2014 в 11:50.
Старый 29.01.2014, 17:21   #7  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Проверил на другой СРМ та же проблема
Свою проблему временно решил созданием еще одного поля которое будет эталоном и содержать дату ту которую ввел юзер.
И если эти 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  
slivka_83 is offline
slivka_83
Консультант-джедай
Аватар для slivka_83
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
1,683 / 374 (16) ++++++
Регистрация: 18.12.2008
Адрес: default city
Цитата:
Сообщение от spectr Посмотреть сообщение
Но что делать с этой проблемой ХЗ
В саппорт инцидент заводить
__________________
Крокодил, крокожу и буду крокодить.
Человек человеку - волк , а зомби зомби - зомби.
Экстремал и буду экстремать!
Блога
Старый 29.01.2014, 19:33   #9  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Пока делал скрипт напоролся на очень интересную штуку после чего сделал маленький тест и о БОГИ оно заработало !!!!!

И так вся проблема в типе Дата и время он принимает только до минуты а секунды режет ! Потому допускаю вот именно эта обрезка и передергивает поле.
И так получилось все очень просто:
Код:
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  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
отключи автосохранение и все будет работать.
каждые 30 сек происходит попытка сохранить данные, но они по какой-то причине не хотят сохранятся после чейнджа... в итоге форма висит в замкнутом цикле.... и апдейтит поле.
__________________
Все что вам нужно - это мозК
Еда - топливо... Одежда - необходимость...
Старый 29.01.2014, 19:52   #11  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Цитата:
Сообщение от -O_o- Посмотреть сообщение
отключи автосохранение и все будет работать.
каждые 30 сек происходит попытка сохранить данные, но они по какой-то причине не хотят сохранятся после чейнджа... в итоге форма висит в замкнутом цикле.... и апдейтит поле.
Проблема не в автосохранении так как onChange проходил после сохранения !
И автосохранение у меня отключено.

Проблему решил в посте выше. Алогично но работает
Старый 29.01.2014, 20:08   #12  
-O_o- is offline
-O_o-
Еда - топливо, Одежда - н
Аватар для -O_o-
Лучший по профессии 2015
Лучший по профессии 2014
 
727 / 80 (4) ++++
Регистрация: 11.05.2012
Адрес: Киев
Цитата:
Сообщение от spectr Посмотреть сообщение
Проблема не в автосохранении так как onChange проходил после сохранения !
И автосохранение у меня отключено.

Проблему решил в посте выше. Алогично но работает
а у меня без автосейва все заработало
но рад что есть решение ))
__________________
Все что вам нужно - это мозК
Еда - топливо... Одежда - необходимость...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Gareth Tucker: CRM 2013 New Features: Using Real-time Workflow for Validation Rules Blog bot Dynamics CRM: Blogs 0 07.12.2013 08:31
Gareth Tucker: CRM 2013 New Features: Access Teams Blog bot Dynamics CRM: Blogs 0 25.11.2013 07:12
crminthefield: Podcast and Overview: Microsoft Dynamics CRM 2011 Update Rollup 14 Blog bot Dynamics CRM: Blogs 0 12.07.2013 07:13
Странное исключение при создании (назначении) нового действия в CRM 4.0 Dicora Dynamics CRM: Функционал 2 14.09.2010 20:26
Ошибка бизнес-процесса Tarasov E Dynamics CRM: Разработка 9 18.02.2010 14:02

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:55.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.