У меня тяжелая операция, которая работала правильно (но слишком долго):
_terminationHandler.InsertOrUpdateEmployeeTerminationDetails(TerminationFilters.Current, EmployeeTerminationItems, EmployeeTerminations.Current);
В Графике, который определен следующим образом:
public class MPEmployeeTerminationMaint : PXGraph<MPEmployeeTerminationMaint>
, который генерирует содержимое сетки данных в этих 2 вкладки (будет создано несколько записей): Мне было рекомендовано использовать PXLongOperation
:
public async virtual void MPEmployeeTermination_TerminationDate_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
PXLongOperation.StartOperation(this, () =>
{
_terminationHandler.InsertOrUpdateEmployeeTerminationDetails(TerminationFilters.Current, EmployeeTerminationItems, EmployeeTerminations.Current);
});
}
Операция начинается: Однако через некоторое время происходит сбой пользовательского интерфейса (или что-то произошло): Но исключение не выдается. Так что нет никаких исключений или других намеков на то, что произошло. Если вы измените редактируемое свойство, вы получите исключение: Страница Acumatica "trace" будет пустой.
Если я не отправлю this
на PXLongOperation
, это проблема решена:
PXLongOperation.StartOperation(Guid.NewGuid(), () =>
{
_terminationHandler.InsertOrUpdateEmployeeTerminationDetails(TerminationFilters.Current, EmployeeTerminationItems, EmployeeTerminations.Current);
});
однако у меня нет тогда указания пользователю, что происходит длинная операция (очевидно: нет никакой связи между длинной операцией и пользовательским интерфейсом без this
больше).
Что определяется неправильно?
Я хочу улучшить взаимодействие с пользователем и позволить ему продолжать работать с пользовательским интерфейсом, когда происходит тяжелая операция. Если я смогу достичь этой цели по-другому - это тоже нормально. Например, вместо этого я могу использовать Guid.NewGuid (), но тогда мне нужно вручную обновить sh пользовательский интерфейс и, кроме того, данные не будут сохранены.
Буду очень признателен за любой совет.