2014-11-26 3 views
1

В конечном счете то, что я ищу, - это событие onSaveComplete.Обнаружение измененных атрибутов при заполнении формы

Проблема в том, что у нас есть плагины, которые изменяют данные сущности при их сохранении. Для большинства атрибутов это прекрасно, потому что данные обновляются в форме после завершения сохранения. Сценарии клиента проблематичны, хотя, поскольку, насколько я могу судить, нет событий, указывающих на то, что значение было обновлено плагином, когда объект был сохранен.

Лучшее решение, которое я придумал, чтобы вклиниться в onSave случае, предотвратить сохранения по умолчанию действие, и использовать data.save() вместо:

function onSave(context) { 
    var args = context.getEventArgs(); 
    args.preventDefault(); 

    Xrm.Page.data.save().then(function() { 
     //check for changed attributes here 
    }); 
} 

(Фактический код является немного более сложным, чтобы предотвратить рекурсию, и т. д., но вы получите эту идею)

В конечном итоге этот подход заканчивается довольно запутанным, и чем больше форм я его применяю, тем больше он чувствует себя настоящим взломом. Поэтому мой вопрос: есть ли лучший, более стандартный способ приблизиться к этому?

+0

Атрибуты поля должны отражать любые изменения, которые делают ваши плагины - что именно вам нужно сделать в методе _onSaveComplete_? –

+0

@JasonFaulkner Да, атрибуты отражают изменения, эта часть в порядке. Но в ответ на те изменения, которые были внесены в плагин, мне нужно применить некоторые дополнительные изменения в клиентском скрипте. Настолько эффективно, что я хочу, это событие, которое сообщает мне, когда некоторые атрибуты были изменены плагином. И если не конкретный атрибут изменил события, по крайней мере, общее событие сохранения, которое мне не нужно взломать. Что меня больше смущает, так это то, что с новой моделью сохранения async CRM 2013, как не может быть onSaveComplete типа из коробки. – dkr88

+0

Я считаю, что ваш метод «взлома» - единственный поддерживаемый способ выполнить то, что вы хотите сделать. –

ответ

0

Я совершил нечто похожее на событие JS после сохранения через другой «хак».

Вот как это работает:

  • Поместите ModifiedOn поле в форме
  • Подписаться на ModifiedOn «ы OnChange событий

Событие прикреплении к OnChange будет срабатывать каждый раз, когда форма (поскольку при изменении данных происходит ModifiedOn).

Очень вероятно, что ModifiedOn должен быть сделан только для чтения в форме, чтобы избежать конфликтов.

+0

МодифицированныйОн только что прочитан, когда я открываю запись, которая меняет дату модификации. – Chirag

Смежные вопросы