Beispiel #1
0
        public List <DeletedItem> GetDeletionList(Type objectClass, int id)
        {
            logger.Debug("Поиск зависимостей для класса {0}...", objectClass);
            var info = DeleteConfig.ClassInfos.Find(i => i.ObjectClass == objectClass);

            if (info == null)
            {
                throw new InvalidOperationException(String.Format("Удаление для класса {0} не настроено в DeleteConfig", objectClass));
            }

            uint entityId = Convert.ToUInt32(id);

            try {
                CheckDlg         = new CheckOperationDlg();
                CheckDlg.Visible = false;
                var self = info.GetSelfEntity(this, entityId);
                PreparedOperation = info.CreateDeleteOperation(self);
                DeletedItems.Add(new DeletedItem {
                    ItemClass = info.ObjectClass,
                    ItemId    = entityId,
                    Title     = self.Title
                });
                countReferenceItems = FillChildOperation(info, PreparedOperation, new TreeIter(), self);
            } catch (Exception ex) {
                QSMain.ErrorMessageWithLog("Ошибка в разборе зависимостей удаляемого объекта.", logger, ex);
            }

            return(DeletedItems);
        }
Beispiel #2
0
        private bool Run(IDeleteInfo info, uint id)
        {
            try {
                CheckDlg = new CheckOperationDlg();
                CheckDlg.Show();

                var self = info.GetSelfEntity(this, id);
                PreparedOperation = info.CreateDeleteOperation(self);

                DeletedItems.Add(new DeletedItem {
                    ItemClass = info.ObjectClass,
                    ItemId    = id,
                    Title     = self.Title
                });

                countReferenceItems = FillChildOperation(info, PreparedOperation, new TreeIter(), self);
                bool isCanceled = CheckDlg.IsCanceled;
                CheckDlg.Destroy();

                if (isCanceled)
                {
                    return(false);
                }
            } catch (Exception ex) {
                CheckDlg.Destroy();
                QSMain.ErrorMessageWithLog("Ошибка в разборе зависимостей удаляемого объекта.", logger, ex);
                return(false);
            }

            bool userAccept = DeleteDlg.RunDialog(this);

            if (userAccept)
            {
                ExcuteDlg = new DeleteOperationDlg();
                ExcuteDlg.SetOperationsCount(PreparedOperation.GetOperationsCount() + 2);
                ExcuteDlg.Show();
                BeforeDeletion?.Invoke();

                try {
                    IsHibernateMode = HasHibernateOperations(PreparedOperation);
                    PreparedOperation.Execute(this);
                    ExcuteDlg.AddExcuteOperation("Операции с журналом изменений");
                    DeleteConfig.OnAfterDeletion(sqlTransaction, DeletedItems);
                    ExcuteDlg.AddExcuteOperation("Завершение транзакции");
                    if (sqlTransaction != null)
                    {
                        sqlTransaction.Commit();
                    }
                    if (uow != null)
                    {
                        uow.Commit();
                    }
                    return(true);
                } catch (Exception ex) {
                    if (SqlTransaction != null)
                    {
                        sqlTransaction.Rollback();
                    }
                    QSMain.ErrorMessageWithLog("Ошибка при удалении", logger, ex);
                }
                finally
                {
                    ExcuteDlg.Destroy();
                }
            }
            return(false);
        }