setAndRefreshSelectedItem method
Перечитать из базы данных текущий объект (selectedItem) На время чтерния статус контроллера будет loading referenceList - ссылки для дочитывания. Если передан null - будут дочитаны все Одно из применений, перечитывание объекта с целью чтения его табличных частей при переходе из формы списка в форму элемента
Implementation
Future setAndRefreshSelectedItem(NsgDataItem item, List<String>? referenceList) async {
assert(item.isNotEmpty, 'Попытка перечитать с сервера объект с пустым guid (например, новый)');
selectedItem = item;
currentStatus = GetStatus.loading();
status = GetStatus.loading();
//11.02.2023 Зенков. Заменил на refresh, потому что иногда происходил конфликт обновления в процессе перерисовки
//Например, TaskTuner, открытие задачи на просмотр
refresh();
//sendNotify();
itemsRequested.broadcast();
try {
var newItem = await refreshItem(item, referenceList);
var index = dataItemList.indexOf(item);
if (index >= 0) {
dataItemList[index] = newItem;
} else if (newItem.isEmpty) {
currentStatus = GetStatus.error('Ошибка NBC-509. Данный объект более недоступен');
sendNotify();
throw Exception('Ошибка NBC-509. Данный объект более недоступен');
}
//запоминаем текущий элемент в бэкапе на случай отмены редактирования пользователем для возможности вернуть
//вернуть результат обратно
//selectedItem = null;
selectedItem!.copyFieldValues(newItem);
selectedItem!.state = newItem.state; // NsgDataItemState.fill;
backupItem = newItem;
await afterRefreshItem(selectedItem!, referenceList);
currentStatus = GetStatus.success(NsgBaseController.emptyData);
sendNotify();
selectedItemChanged.broadcast(null);
} on Exception catch (e) {
_updateStatusError(e);
}
}