sapui5 odata откатить модель после ошибки отправки изменений

Я отобразил список элементов (привязка агрегирования) и кнопку редактирования для каждого элемента, чтобы изменить значения элементов. Кнопка «Изменить» открывает всплывающее окно, в котором я могу изменить значения.

Я использую двустороннюю привязку и вызываю submitChanges () после редактирования значений во всплывающем окне и нажатия всплывающей кнопки «ОК».

submitChanges имеет два обратных вызова - успех и ошибка. Теперь, когда из бэкэнда приходит ошибка (например, другой пользователь в настоящее время редактирует элемент), я могу обработать и показать сообщение об ошибке. И данные в бэкэнде не меняются. Однако сама модель (во фронтенде) изменена, несмотря на ошибку.

Это то, чем должна заниматься сама служба OData? Или я должен что-то сделать во фронтенде? вызов resetChanges () бесполезен - после submitChanges нет изменений, которые можно было бы вернуть.

Какие-нибудь примеры или лучшие практики?


person sachad    schedule 24.02.2019    source источник


Ответы (1)


Если submitChanges не удается, и вы попадаете в обработчик ошибок, данные остаются в «отредактированной» форме во внешнем интерфейсе (чтобы вы могли попытаться отправить еще раз).

Логика вашего внешнего интерфейса решает, что делать:

  • по умолчанию продолжить редактирование и попытаться отправить позже
  • распространенной альтернативой является resetChanges (есть !! изменения после неудачного submitChanges) и oModel.refresh после этого, чтобы получить новую копию из бэкэнда, чтобы пользователь мог снова начать редактирование

И - конечно, вы можете предложить пользователю выбор - сбросить все и получить новую копию из бэкэнда - или, возможно, кнопку сброса в каждой строке, чтобы иметь возможность сбрасывать отдельные элементы по отдельности.

person iPirat    schedule 24.02.2019
comment
Вы имели в виду refresh (вместо возврата или сброса)? - person Boghyon Hoffmann; 24.02.2019
comment
Да :) только что проверил api. Спасибо! = ›Отредактировал ответ - person iPirat; 24.02.2019
comment
@iPirat спасибо за ответ! Ты прав! Изменения ЕСТЬ. Надеюсь, я никого не путаю с этой частью. Я могу resetChanges в случае ошибки обратный вызов. - person sachad; 25.02.2019
comment
Имейте в виду, что resetChanges может также сбросить другие ожидающие, но не связанные изменения. - person cschuff; 26.02.2019
comment
Правда что. Также submitChanges отправляет все изменения. Включая изменения, которых нет на экране. Лучшая практика: при выходе из экрана (любой вид перехода), чтобы спросить пользователя, сбросить или отправить изменения - person iPirat; 26.02.2019