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);
            }
        }