private void Process(List <object> list, Action <List <object> > prevProcessDelegate) { if (CurrentAction == ActionName && list != null) { var selectedObjects = list.Where(l => ((IPXSelectable)l).Selected == true).ToList(); using (IUnitOfWork unitOfWork = new PXCacheTransaction(CachesForBackup)) { PXDBAttributeAttribute.Activate(View.Cache); Graph.SelectTimeStamp(); PXRedirectRequiredException redirect = null; int processed; try { processed = ProcessAction(selectedObjects); } catch (PXRedirectRequiredException ex) { redirect = ex; processed = 1; } if (processed > 0) { unitOfWork.Commit(); } if (redirect != null) { throw redirect; } View.Cache.Clear(); if (processed != selectedObjects.Count) { throw new PXOperationCompletedException(ErrorMessages.SeveralItemsFailed); } } } else if (prevProcessDelegate != null) { prevProcessDelegate.Invoke(list); } }