В едином интерфейсе Dynamics CRM событие OnSave не работает
У меня есть обработчик событий для события формы OnSave:
function saveEntityForm(executionContext) {
executionContext.getFormContext().data.save().then();
}
когда я нажимаю кнопку Сохранить в форме, появляется всплывающее окно со следующими текстами:
Сохранение в процессе
Подождите, пока сохранение завершится Код ошибки: 0x83215603
Я использую единый интерфейс.
В чем может быть причина возникновения этой проблемы и как ее решить?
2 ответа
Сообщение "Подождите, пока завершится сохранение" появится только в том случае, если вы попытаетесь сохранить, когда форма уже сохраняется - форма не позволяет выполнять два сохранения одновременно. Вот почему вызов setTimeout работает - он задерживает вызов сохранения, и к этому моменту исходное сохранение будет завершено.
Однако обратите внимание, что это влияет на производительность и, в медленной сети, может даже не работать, так как форма может не сохраниться через XXX секунд!
Если этот код выполняется в обработчике событий onsave, вы должны сначала вызвать preventDefault(), чтобы остановить сохранение по умолчанию, а затем вызов executeContext.getFormContext(). Data.save() будет работать должным образом (см. Https https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/save-event-arguments/preventdefault)
Если этот код выполняется в обработчике onchange для определенного элемента управления, вы можете попробовать вызвать isDefaultPrevented или getSaveMode, чтобы определить, сохраняется ли форма, и если да, вызовите save ()https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/save-event-arguments/isdefaultprevented
Я решил проблему самостоятельно, добавив setTimeout для своего пользовательского кода вместо использования явного метода сохранения, как показано ниже:
function saveEntityForm(executionContext) {
// waiting few seconds to process the form
setTimeout(() => {
processForm(executionContext);
}, 3000);
}