В конечном счете то, что я ищу, - это событие onSaveComplete
.Обнаружение измененных атрибутов при заполнении формы
Проблема в том, что у нас есть плагины, которые изменяют данные сущности при их сохранении. Для большинства атрибутов это прекрасно, потому что данные обновляются в форме после завершения сохранения. Сценарии клиента проблематичны, хотя, поскольку, насколько я могу судить, нет событий, указывающих на то, что значение было обновлено плагином, когда объект был сохранен.
Лучшее решение, которое я придумал, чтобы вклиниться в onSave
случае, предотвратить сохранения по умолчанию действие, и использовать data.save()
вместо:
function onSave(context) {
var args = context.getEventArgs();
args.preventDefault();
Xrm.Page.data.save().then(function() {
//check for changed attributes here
});
}
(Фактический код является немного более сложным, чтобы предотвратить рекурсию, и т. д., но вы получите эту идею)
В конечном итоге этот подход заканчивается довольно запутанным, и чем больше форм я его применяю, тем больше он чувствует себя настоящим взломом. Поэтому мой вопрос: есть ли лучший, более стандартный способ приблизиться к этому?
Атрибуты поля должны отражать любые изменения, которые делают ваши плагины - что именно вам нужно сделать в методе _onSaveComplete_? –
@JasonFaulkner Да, атрибуты отражают изменения, эта часть в порядке. Но в ответ на те изменения, которые были внесены в плагин, мне нужно применить некоторые дополнительные изменения в клиентском скрипте. Настолько эффективно, что я хочу, это событие, которое сообщает мне, когда некоторые атрибуты были изменены плагином. И если не конкретный атрибут изменил события, по крайней мере, общее событие сохранения, которое мне не нужно взломать. Что меня больше смущает, так это то, что с новой моделью сохранения async CRM 2013, как не может быть onSaveComplete типа из коробки. – dkr88
Я считаю, что ваш метод «взлома» - единственный поддерживаемый способ выполнить то, что вы хотите сделать. –