|  15.12.2011, 09:58 | #1 | 
| Участник | дата изменения определенного поля, CRM 2011 
			
			коллеги и сотоварищи! подскажите, пожалуйста, как узнать дату изменения конкретного поля в форме какой-либо сущности, и вывести её отдельным полем в форме этой же сущности! спасибо | 
|  | 
|  15.12.2011, 10:36 | #2 | 
| Консультант-джедай | 
			
			Програмно (JS) выявлять изменение этнужного поля и заносить дату изменения в другое поле    
				__________________ Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать!  Блога | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  15.12.2011, 12:53 | #3 | 
| Чайный пьяница | Цитата: Вам не кажется, что задача немного надумана? Зачем такой функционал нужен - какой бизнес-велью от такого функционала? 
				__________________ Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  15.12.2011, 13:25 | #4 | 
| Участник | Цитата: Цитата: к примеру, у некоего объекта есть цена, и чтобы понять насколько она актуальна - неплохо бы видеть дату последнего изменения цены. для написания плагинов, я так понимаю, надо c# знать, я пока не силен в нем. | 
|  | 
|  15.12.2011, 14:43 | #5 | 
| Участник | 
			
			Написал скрипт, функция first вызывается при загрузке, функция second - при сохранении. Скрипт плохой)) Так как, во-первых, не позволяет сохранять изменения, а, во-вторых, берет дату 01.01.1970. Подскажите, пожалуйста, как его подправить, чтобы он делал то, что надо. поле new_price - которое меняется, в поле new_date_price пишется дата. Код: var data1;
function first()
{
data1 = crmForm.all.new_price.DataValue;
}
function second()
{
var currentTime = new Date();
var month = currentTime.getMonth();
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var data2 = crmForm.all.new_price.DataValue;
if (data1 !== data2)
{
crmForm.all.new_date_price.DataValue = day + month + year;
}
crmForm.Save();
}Последний раз редактировалось mistah; 15.12.2011 в 14:53. | 
|  | 
|  15.12.2011, 14:55 | #6 | 
| Moderator | 
			
			Разрешите аудит для поля цена. Получите историю изменения цены без единой строчки кода.
		 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  15.12.2011, 14:57 | #7 | 
| Moderator | 
			
			Если не хотите чтобы аудит нагружал систему, то можно завести рабочий процесс, который срабатывает на изменение поля "цена" и: а) Обновляет поле "Последнее изменение цены" б) Создает примечание с заголовком "Изменилась цена". Так вы еще и историю получите. 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  15.12.2011, 15:07 | #8 | 
| Участник | 
			
			Артем Enot Грунин О, спасибо большое   | 
|  | 
|  15.12.2011, 15:08 | #9 | 
| Участник | 
			
			Все же если кто подскажет, что не так со скриптом, буду благодарен!
		 | 
|  | 
|  15.12.2011, 15:13 | #10 | 
| Чайный пьяница | 
			
			Попробуйте такое: X++: function first()
{
window.data1 = crmForm.all.new_price.DataValue;
}
function second()
{
var currentTime = new Date();
var month = currentTime.getMonth();
var day = currentTime.getDate();
var year = currentTime.getFullYear();
var data2 = crmForm.all.new_price.DataValue;
if (window.data1 != data2)
{
crmForm.all.new_date_price.DataValue = day + month + year;
crmForm.all.new_date_price.ForceSubmit = true;//для случая когда поле заблокировано для редактирования
}
}
				__________________ Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  15.12.2011, 15:36 | #11 | 
| Консультант-джедай | Цитата: 
		
			Сообщение от mistah
			   Написал скрипт, функция first вызывается при загрузке, функция second - при сохранении. Скрипт плохой)) Так как, во-первых, не позволяет сохранять изменения, а, во-вторых, берет дату 01.01.1970. Подскажите, пожалуйста, как его подправить, чтобы он делал то, что надо. поле new_price - которое меняется, в поле new_date_price пишется дата.   
				__________________ Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать!  Блога | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  15.12.2011, 15:41 | #12 | 
| Участник | 
			
			a33ik, спасибо! Теперь отрабатывает корректно, хотя дата возвращается почему-то все та же - 01.01.1970. и на сервере время правильное | 
|  | 
|  15.12.2011, 15:45 | #13 | 
| Участник | Цитата: 
		
			Сообщение от slivka_83
			   Чет логики не пойму Вашего скрипта. Вам всего то нужно на onSave проверить изменилось ли поле с ценой (с помощью getIsDirty()) и если изменилось то записать текущую дату в поле с датой     логика такая - на онлоаде берем текущее значение, на онсэйве проверяем, равно ли оно новому значению, если нет - пишем дату куда следует. Последний раз редактировалось mistah; 15.12.2011 в 15:55. | 
|  | 
|  15.12.2011, 19:10 | #14 | 
| Moderator | Цитата: Вот что это??? Код: crmForm.all.new_date_price.DataValue = day + month + year; Делать надо так, как сказал сливка. Если поле Dirty - обновлять поля. Хотя проще тупо на OnChange поля цена обновлять поле дата изменения цены: Код: crmForm.all.new_date_price.DataValue = new Date(); 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  16.12.2011, 08:44 | #15 | 
| Участник | 
			
			Артем Enot Грунин, признаю, спасибо, все работает!
		 | 
|  | 
|  16.12.2011, 12:52 | #16 | 
| Moderator | 
			
			Обращайтесь   В вашем случае лучше все же использовать Workflow. Результат будет не мгновенный, но зато он будет, если кто-то, например, загрузит ваши данные из Эксель. 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  20.12.2011, 18:19 | #17 | 
| Участник | Цитата: БП срабатывает на изменение нужного мне поля. БП пишет в кастомное поле ВРЕМЯ ВЫПОЛНЕНИЯ процесса и обновляет запись. Далее, я бы кастомное поле (где будет дата и время последнего редактирования отслеживаемого первого поля) бросил бы на форму и сделал бы ему field security - т.е. разрешил бы поле читать только нужным категориям юзеров. ЗЫ. А если очень надо, то БП можно запустить и из-под JS. 
				__________________ Материалы для внедренцев Microsoft Dynamics CRM теперь на сайте Infoleat.com и в моем блоге CRM для бизнеса | 
|  | 
|  20.12.2011, 22:43 | #18 | 
| Moderator | Цитата: Цитата: JS всемогущ, ибо воистину! 
				__________________ http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.   MS Certified Dirty Magic Professional | 
|  | 
|  21.12.2011, 13:06 | #19 | 
| Участник | Цитата: 
		
			Сообщение от Fighter
			   Я бы это реализовывал бизнес-процессом: БП срабатывает на изменение нужного мне поля. БП пишет в кастомное поле ВРЕМЯ ВЫПОЛНЕНИЯ процесса и обновляет запись. Далее, я бы кастомное поле (где будет дата и время последнего редактирования отслеживаемого первого поля) бросил бы на форму и сделал бы ему field security - т.е. разрешил бы поле читать только нужным категориям юзеров. ЗЫ. А если очень надо, то БП можно запустить и из-под JS. Fighter, Да, я примерно так и сделал. Только процесс пишет в поле просто дату изменения карточки сущности при изменении нужного поля1. Про field security я успел подумать, но пока не реализовывал, сделал для поля Доступ на чтение. Про это ниже) Цитата: Против диверсантов я решил применить к полю Доступ только на чтение. Но, что странно - теперь БП не запускается автоматически при изменении поля1 (нету в системных заданиях) . Если запустить вручную - прописывает дату, как положено. Если убрать Доступ только на чтение для поля - запускается автоматически при изменении поля1 и прописывает дату, как положено. Почему так может быть, у кого-нибудь есть идеи? | 
|  | 
|  21.12.2011, 13:54 | #20 | 
| Kostya Afendikov | 
			
			Сделайте невозможность редактирования поля с помощью JScript на загрузке форме, а не в свойстве атрибута "на чтение"
		 | 
|  | |
| За это сообщение автора поблагодарили: mistah (1). | |
|  | 
| 
 |