|
|
#1 |
|
Участник
|
дата изменения определенного поля, CRM 2011
коллеги и сотоварищи!
подскажите, пожалуйста, как узнать дату изменения конкретного поля в форме какой-либо сущности, и вывести её отдельным полем в форме этой же сущности! спасибо |
|
|
|
|
#2 |
|
Консультант-джедай
|
Програмно (JS) выявлять изменение этнужного поля и заносить дату изменения в другое поле
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
#3 |
|
Чайный пьяница
|
Цитата:
Вам не кажется, что задача немного надумана? Зачем такой функционал нужен - какой бизнес-велью от такого функционала?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
#4 |
|
Участник
|
Цитата:
Цитата:
к примеру, у некоего объекта есть цена, и чтобы понять насколько она актуальна - неплохо бы видеть дату последнего изменения цены. для написания плагинов, я так понимаю, надо c# знать, я пока не силен в нем. |
|
|
|
|
#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. |
|
|
|
|
#6 |
|
Moderator
|
Разрешите аудит для поля цена. Получите историю изменения цены без единой строчки кода.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
#7 |
|
Moderator
|
Если не хотите чтобы аудит нагружал систему, то можно завести рабочий процесс, который срабатывает на изменение поля "цена" и:
а) Обновляет поле "Последнее изменение цены" б) Создает примечание с заголовком "Изменилась цена". Так вы еще и историю получите.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
#8 |
|
Участник
|
Артем Enot Грунин
О, спасибо большое
|
|
|
|
|
#9 |
|
Участник
|
Все же если кто подскажет, что не так со скриптом, буду благодарен!
|
|
|
|
|
#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). | |
|
|
#11 |
|
Консультант-джедай
|
Цитата:
Сообщение от mistah
Написал скрипт, функция first вызывается при загрузке, функция second - при сохранении. Скрипт плохой))
Так как, во-первых, не позволяет сохранять изменения, а, во-вторых, берет дату 01.01.1970. Подскажите, пожалуйста, как его подправить, чтобы он делал то, что надо. поле new_price - которое меняется, в поле new_date_price пишется дата.
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога
|
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
#12 |
|
Участник
|
a33ik, спасибо! Теперь отрабатывает корректно, хотя дата возвращается почему-то все та же - 01.01.1970.
и на сервере время правильное |
|
|
|
|
#13 |
|
Участник
|
Цитата:
Сообщение от slivka_83
Чет логики не пойму Вашего скрипта. Вам всего то нужно на onSave проверить изменилось ли поле с ценой (с помощью getIsDirty()) и если изменилось то записать текущую дату в поле с датой
![]() логика такая - на онлоаде берем текущее значение, на онсэйве проверяем, равно ли оно новому значению, если нет - пишем дату куда следует. Последний раз редактировалось mistah; 15.12.2011 в 15:55. |
|
|
|
|
#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). | |
|
|
#15 |
|
Участник
|
Артем Enot Грунин, признаю, спасибо, все работает!
|
|
|
|
|
#16 |
|
Moderator
|
Обращайтесь
В вашем случае лучше все же использовать Workflow. Результат будет не мгновенный, но зато он будет, если кто-то, например, загрузит ваши данные из Эксель.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
#17 |
|
Участник
|
Цитата:
БП срабатывает на изменение нужного мне поля. БП пишет в кастомное поле ВРЕМЯ ВЫПОЛНЕНИЯ процесса и обновляет запись. Далее, я бы кастомное поле (где будет дата и время последнего редактирования отслеживаемого первого поля) бросил бы на форму и сделал бы ему field security - т.е. разрешил бы поле читать только нужным категориям юзеров. ЗЫ. А если очень надо, то БП можно запустить и из-под JS.
__________________
Материалы для внедренцев Microsoft Dynamics CRM теперь на сайте Infoleat.com и в моем блоге CRM для бизнеса |
|
|
|
|
#18 |
|
Moderator
|
Цитата:
Цитата:
JS всемогущ, ибо воистину!
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. ![]() MS Certified Dirty Magic Professional
|
|
|
|
|
#19 |
|
Участник
|
Цитата:
Сообщение от Fighter
Я бы это реализовывал бизнес-процессом:
БП срабатывает на изменение нужного мне поля. БП пишет в кастомное поле ВРЕМЯ ВЫПОЛНЕНИЯ процесса и обновляет запись. Далее, я бы кастомное поле (где будет дата и время последнего редактирования отслеживаемого первого поля) бросил бы на форму и сделал бы ему field security - т.е. разрешил бы поле читать только нужным категориям юзеров. ЗЫ. А если очень надо, то БП можно запустить и из-под JS. Fighter, Да, я примерно так и сделал. Только процесс пишет в поле просто дату изменения карточки сущности при изменении нужного поля1. Про field security я успел подумать, но пока не реализовывал, сделал для поля Доступ на чтение. Про это ниже) Цитата:
Против диверсантов я решил применить к полю Доступ только на чтение. Но, что странно - теперь БП не запускается автоматически при изменении поля1 (нету в системных заданиях) . Если запустить вручную - прописывает дату, как положено. Если убрать Доступ только на чтение для поля - запускается автоматически при изменении поля1 и прописывает дату, как положено. Почему так может быть, у кого-нибудь есть идеи? |
|
|
|
|
#20 |
|
Kostya Afendikov
|
Сделайте невозможность редактирования поля с помощью JScript на загрузке форме, а не в свойстве атрибута "на чтение"
|
|
|
|
| За это сообщение автора поблагодарили: mistah (1). | |
|
|
|