public static AvrTreeElement GetTreeElement(TreeListEditFormTemplateContainer container, HttpCookie newElementType) { if ((long?)DataBinder.Eval(container.DataItem, "ID") == null) { var elem = new AvrTreeElement(); if (newElementType != null) { if (newElementType.Value == "folder") { elem.ElementType = AvrTreeElementType.Folder; } else if (newElementType.Value == "layout") { elem.ElementType = AvrTreeElementType.Layout; } newElementType.Value = ""; } return(elem); } return(new AvrTreeElement((long)DataBinder.Eval(container.DataItem, "ID"), (long?)DataBinder.Eval(container.DataItem, "ParentID"), (long?)DataBinder.Eval(container.DataItem, "GlobalID"), (AvrTreeElementType)DataBinder.Eval(container.DataItem, "ElementType"), (long)DataBinder.Eval(container.DataItem, "QueryID"), (string)DataBinder.Eval(container.DataItem, "DefaultName"), (string)DataBinder.Eval(container.DataItem, "NationalName"), (string)DataBinder.Eval(container.DataItem, "Description"), (bool)DataBinder.Eval(container.DataItem, "ReadOnly"), (bool)DataBinder.Eval(container.DataItem, "IsShared"), (string)DataBinder.Eval(container.DataItem, "DescriptionEnglish"), (long)DataBinder.Eval(container.DataItem, "DescriptionID"), (string)DataBinder.Eval(container.DataItem, "LayoutAuthor"), (bool)DataBinder.Eval(container.DataItem, "IsUseArchiveData") )); }
public static string GetCopyLayoutNameXml(AvrTreeElement layout) { Utils.CheckNotNull(layout, "layout"); if (layout.ElementType != AvrTreeElementType.Layout) { throw new ArgumentException(@"Parameter should has ElementType == AvrTreeElementType.Layout", "layout"); } var newDefault = GetLayoutNameWithPrefix(layout.DefaultName, layout.QueryID, layout.ID, Localizer.lngEn, true); var xmlBuilder = new StringBuilder(@"<?xml version=""1.0"" encoding=""UTF-16""?><ROOT>"); xmlBuilder.AppendFormat(@"<LayoutName LanguageId=""{0}"" Translation=""{1}"" />", Localizer.lngEn, newDefault); if (ModelUserContext.CurrentLanguage != Localizer.lngEn) { var newNational = GetLayoutNameWithPrefix(layout.NationalName, layout.QueryID, layout.ID, ModelUserContext.CurrentLanguage, true); xmlBuilder.AppendFormat(@"<LayoutName LanguageId=""{0}"" Translation=""{1}"" />", ModelUserContext.CurrentLanguage, newNational); } xmlBuilder.Append(@"</ROOT>"); return(xmlBuilder.ToString()); }
private bool CanMoveFolder(List <AvrTreeElement> tree, long id, long parentId) { //проверим, можно ли переместить объект //чтобы не было перемещения в свой же дочерний объект bool can = false; AvrTreeElement node = tree.SingleOrDefault(c => c.ID == id); if (node != null) { List <AvrTreeElement> children = tree.Where(c => c.ParentID == node.ID).ToList(); //попытка перемещения в потомка can = children.All(c => c.ID != parentId); if (can) { foreach (AvrTreeElement child in children) { if (!CanMoveFolder(tree, child.ID, parentId)) { can = false; break; } } } } return(can); }
public static string ValidateElementName(AvrTreeElement element, bool isNewObject) { Func <string, long, long, string, bool, bool> exists = (s, l, arg3, arg4, arg5) => false; var defaultMessage = string.Empty; var nationalMessage = string.Empty; if (element.IsLayout) { exists = IsLayoutExists; defaultMessage = m_DefaultLayoutExists; nationalMessage = m_NationalLayoutExists; } if (element.IsFolder) { exists = IsFolderExists; defaultMessage = m_DefaultFolderExists; nationalMessage = m_NationalFolderExists; } if (exists(element.DefaultName, element.QueryID, element.ID, Localizer.lngEn, isNewObject)) { return(defaultMessage); } if (ModelUserContext.CurrentLanguage != Localizer.lngEn && exists(element.NationalName, element.QueryID, element.ID, ModelUserContext.CurrentLanguage, isNewObject)) { return(nationalMessage); } return(string.Empty); }
private static AvrTreeElement CreateFolderItem(long?parentId, string defaultName, string nationalName) { var item = new AvrTreeElement(BaseDbService.NewIntID(), parentId, null, AvrTreeElementType.Folder, m_TestQueryId, defaultName, nationalName, string.Empty, false); return(item); }
private bool IsFolderDepthTooBig(AvrTreeElement node) { int count = GetParentDepth(node); if (node.IsLayout) { count--; } return(ShowMessageIfFolderDepthTooBig(count)); }
public void TestCopyLayoutNameTest() { using (new CultureInfoTransaction(new CultureInfo("ru-RU"))) { var layout = new AvrTreeElement(-1, m_TestQueryId, null, AvrTreeElementType.Layout, m_TestQueryId, "asdfghj", "фывапр", "", false); string xml = AvrQueryLayoutTreeDbHelper.GetCopyLayoutNameXml(layout); Assert.IsNotNull(xml); Assert.AreEqual( @"<?xml version=""1.0"" encoding=""UTF-16""?><ROOT><LayoutName LanguageId=""en"" Translation=""Copy of asdfghj"" /><LayoutName LanguageId=""ru"" Translation=""Копия фывапр"" /></ROOT>", xml); } }
public ActionResult QueryLayoutTreeDeletePartial(long id) { //все проверки в CanDelete List <AvrTreeElement> tree = GetQueryTree(); AvrTreeElement node = tree.FirstOrDefault(c => c.ID == id); string errStr = String.Empty; try { if (node != null) { if (node.IsFolder) { //AvrQueryLayoutTreeDbHelper.DeleteFolder(node.ID); using (var avrDbService = new Folder_DB()) { avrDbService.Delete(node.ID); } } else if (node.IsLayout) { using (var avrDbService = new WebLayoutDB()) { avrDbService.Delete(node.ID); } } RefreshTree(); } } catch (Exception exc) { errStr = exc.Message; } return(PartialView("QueryLayoutTreePartial", GetQueryTree())); /* * return new JsonResult * { * JsonRequestBehavior = JsonRequestBehavior.AllowGet, * Data = new * { * result = errStr.Length == 0 ? "OK" : "ERROR", * errorString = errStr * } * }; */ }
private int GetParentDepth(AvrTreeElement node) { int count = 0; var model = Session["QueryTree"] as List <AvrTreeElement>; while (node != null) { if (!node.IsLayout) { count++; } node = model.SingleOrDefault(c => c.ID == node.ParentID); } return(count); }
public ActionResult QueryLayoutTreeMovePartial(long id, long?parentId) { /* * Правила: * 1) Query (корневой узел) переносить нельзя * 2) Layout можно присоединять только к Folder и Query * 3) Folder можно присоединять только к Folder и Query, но целевой Folder не может быть дочерним к перетаскиваемому. * 4) Объекты можно переносить только в рамках одного Query * 5) Published layout cannot be moved */ List <AvrTreeElement> tree = GetQueryTree(); AvrTreeElement node = tree.SingleOrDefault(c => c.ID == id); if (node != null && !node.IsQuery && parentId.HasValue && !node.IsPublished) { AvrTreeElement newParent = tree.SingleOrDefault(c => c.ID == parentId.Value); if (newParent != null && node.QueryID == newParent.QueryID && !newParent.IsLayout) { long?pid = newParent.IsQuery ? null : (long?)newParent.ID; if (node.IsLayout) { AvrQueryLayoutTreeDbHelper.SaveLayoutLocation(node.ID, pid); } else if (node.IsFolder) { // check if it is moving to the children or if there is published layout in it bool can = true; if (newParent.IsFolder) { can = CanMoveFolder(tree, node.ID, parentId.Value); } if (can) { AvrQueryLayoutTreeDbHelper.SaveFolder(node.ID, pid, node.QueryID, node.DefaultName, node.NationalName); } } RefreshTree(); } } return(PartialView("QueryLayoutTreePartial", GetQueryTree())); }
public JsonResult CheckLayout(long layoutId, bool forceViewShowing, bool forceLayoutShowing) { bool isNewLayout = false; bool isQueryCasheExists = false; string error = String.Empty; try { using (var manager = DbManagerFactory.Factory.Create(ModelUserContext.Instance)) { var ps = new List <object> { manager.Parameter("LayoutID", layoutId), }; var command = manager.SetSpCommand("dbo.spAsLayoutIsNew", ps.ToArray()); isNewLayout = command.ExecuteScalar <int>(ScalarSourceType.ReturnValue) == 1; List <AvrTreeElement> tree = GetQueryTree(); AvrTreeElement elem = tree.FirstOrDefault(c => c.ID == layoutId); if (elem != null) { isQueryCasheExists = ServiceClientHelper.DoesCachedQueryExists(elem.QueryID, ModelUserContext.CurrentLanguage, elem.IsUseArchiveData); } } } catch (Exception ex) { error = ex.Message; } return(new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { err = error, isQueryExists = isQueryCasheExists? "Yes": "No", isNewLayout = isNewLayout? "Yes" : "No", okFunction = string.Format("queryTreeList.showLayoutViewInternal({0}, {1}, {2}, {3}, '{4}');", layoutId, Bool2JsBool(isNewLayout), Bool2JsBool(forceViewShowing), Bool2JsBool(forceLayoutShowing), isNewLayout ? Translator.GetMessageString("msgCantShowView") : ""), Message = !isQueryCasheExists?Translator.GetMessageString("msgShouldOpenLayout") : (isNewLayout ? Translator.GetMessageString("msgCantShowView") : "") } }); }
public JsonResult CopyNode(long id) { //проверим, что это именно Layout List <AvrTreeElement> tree = GetQueryTree(); AvrTreeElement elem = tree.FirstOrDefault(c => c.ID == id); bool wasError = false; string errStr = String.Empty; long idLayoutCopy = 0; if ((elem == null) || !elem.IsLayout) { wasError = true; } else { AvrServiceCopyLayoutResult result = ServiceClientHelper.AvrServiceCopyLayout(id); if (result.IsOk) { idLayoutCopy = result.Model; } else { errStr = result.ErrorMessage; wasError = true; } } if (!wasError) { RefreshTree(); } return(new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { result = wasError ? "ERROR" : "OK", idflLayoutCopy = idLayoutCopy, errorString = errStr, url = Url.Action("QueryLayoutTree", GetQueryTree()), } }); }
public ActionResult QueryLayoutTreeUpdatePartial(AvrTreeElement treeElement) { //TODO выводим ошибки ввода куда? if (ModelState.IsValid) { //проверим, были ли изменения if (treeElement.ID > 0) { List <AvrTreeElement> tree = GetQueryTree(); AvrTreeElement elem = tree.FirstOrDefault(c => c.ID == treeElement.ID); if ((elem != null) && treeElement.IsEqual(elem)) { //TODO в противном случае надо показать диалог подтверждения сохранения return(PartialView("QueryLayoutTreePartial", GetQueryTree())); } } long id = 0; using (DbManagerProxy manager = DbManagerFactory.Factory.Create()) { try { manager.BeginTransaction(); if (treeElement.IsLayout) { AvrQueryLayoutTreeDbHelper.SaveLayoutMetadata( ModelUserContext.CurrentLanguage , treeElement.ID , treeElement.DefaultName , treeElement.NationalName , (long)DBGroupInterval.gitDateYear , treeElement.QueryID , treeElement.DescriptionID , treeElement.Description , treeElement.DescriptionEnglish , treeElement.ReadOnly , treeElement.IsShared ); AvrQueryLayoutTreeDbHelper.SaveLayoutLocation(treeElement.ID, treeElement.ParentID != treeElement.QueryID ? treeElement.ParentID : null); id = treeElement.ID; } else if (treeElement.IsFolder) { if (treeElement.ParentID == treeElement.QueryID) { treeElement.ParentID = null; } AvrQueryLayoutTreeDbHelper.SaveFolder(treeElement.ID, treeElement.ParentID, treeElement.QueryID, treeElement.DefaultName, treeElement.NationalName); id = treeElement.ID; } //long publishedId = 0; //var eventType = EventType.AVRLayoutFolderPublishedLocal; //только для инициализации //if (id > 0) //{ // if (treeElement.IsPublished && !treeElement.ReadOnly) // { // PublishRoutines(treeElement.ID, manager, treeElement.ElementType, true, out publishedId, out eventType); // } // else if (!treeElement.IsPublished && treeElement.ReadOnly && treeElement.GlobalID.HasValue) // { // PublishRoutines(treeElement.GlobalID.Value, manager, treeElement.ElementType, false, out publishedId, // out eventType); // } //} manager.CommitTransaction(); if (id > 0) { if (treeElement.IsPublished && !treeElement.ReadOnly) { PublishUnpublish(treeElement.ID, treeElement.ElementType, true); } else if (!treeElement.IsPublished && treeElement.ReadOnly && treeElement.GlobalID.HasValue) { PublishUnpublish(treeElement.ID, treeElement.ElementType, false); } } //if (publishedId > 0) //{ // EidssEventLog.Instance.CreateProcessedEvent(eventType, // publishedId > 0 ? publishedId : 0, 0, // EidssUserContext.User.ID, // manager.Transaction); //} } catch (Exception) { manager.RollbackTransaction(); throw; } } /* TODO вызов обрушивает систему * LookupManager.ClearByTable("Layout"); * LookupManager.ClearByTable("LayoutFolder"); * LookupManager.ClearByTable("Query"); * LookupManager.ClearAndReloadOnIdle();*/ } RefreshTree(); return(PartialView("QueryLayoutTreePartial", GetQueryTree())); }
public JsonResult EditTreeNode(AvrTreeElement node, FormCollection coll) { bool isNew = node.ID == 0; string errstr; string mesText = "Error"; bool isLayout; Boolean.TryParse(coll["IsLayout"], out isLayout); string nationalName = isLayout ? Translator.GetString("LayoutNameNational") : Translator.GetString("FolderNameNational"); string defaultName = isLayout ? Translator.GetString("LayoutNameEnglish") : Translator.GetString("FolderNameEnglish"); bool isEnglish; Boolean.TryParse(coll["IsEnglish"], out isEnglish); bool isValid = true; if (String.IsNullOrEmpty(node.DefaultName)) { isValid = false; mesText = String.Format(Translator.GetBvMessageString("ErrMandatoryFieldRequired"), defaultName); } else if (!isEnglish && String.IsNullOrEmpty(node.NationalName)) { isValid = false; mesText = String.Format(Translator.GetBvMessageString("ErrMandatoryFieldRequired"), nationalName); } if (isValid) { if (isNew) { HttpCookie cc = Request.Cookies["newElementType"]; if (cc != null) { bool createFolder = (node.IsFolder || (node.IsQuery && cc.Value == "folder")); bool createLayout = (node.IsLayout || (node.IsQuery && cc.Value == "layout")); if (createFolder) { node.ElementType = AvrTreeElementType.Folder; } else if (createLayout) { node.ElementType = AvrTreeElementType.Layout; } } } errstr = AvrQueryLayoutTreeDbHelper.ValidateElementName(node, isNew); mesText = String.IsNullOrEmpty(errstr) ? Translator.GetBvMessageString("Save data?") : errstr; } else { errstr = "error"; } // show confirmation return(new JsonResult { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new { result = errstr.Length > 0 ? "EXISTS" : "ASK", messageText = mesText, yesFunction = String.Format("treeList.UpdateEdit();"), noFunction = String.Empty, errorString = mesText } }); }
public ActionResult QueryLayoutTreeAddPartial(AvrTreeElement newNode) { //делаем дочерний элемент HttpCookie cc = Request.Cookies["newElementType"]; string errStr = String.Empty; if ((cc != null) && AvrPermissions.InsertPermission && !IsFolderDepthTooBig(newNode)) { bool createFolder = (newNode.IsFolder || (newNode.IsQuery && cc.Value == "folder")); bool createLayout = (newNode.IsLayout || (newNode.IsQuery && cc.Value == "layout")); if (createFolder || createLayout) { newNode.ElementType = createFolder ? AvrTreeElementType.Folder : AvrTreeElementType.Layout; using (DbManagerProxy manager = DbManagerFactory.Factory.Create()) { try { manager.BeginTransaction(); long nodeId = NewId(); long?parentId = newNode.ParentID != newNode.QueryID ? newNode.ParentID : null; if (createFolder) { AvrQueryLayoutTreeDbHelper.SaveFolder( nodeId , parentId , newNode.QueryID , newNode.DefaultName , newNode.NationalName); } else { AvrQueryLayoutTreeDbHelper.SaveLayoutMetadata( ModelUserContext.CurrentLanguage , nodeId , newNode.DefaultName , newNode.NationalName , (long)DBGroupInterval.gitDateYear , newNode.QueryID , NewId() , newNode.Description , newNode.DescriptionEnglish , false , newNode.IsShared ); AvrQueryLayoutTreeDbHelper.SaveLayoutLocation(nodeId, parentId); } //long publishedId = 0; //var eventType = EventType.AVRLayoutFolderPublishedLocal; //только для инициализации //if (newNode.IsPublished) //{ // PublishRoutines(nodeId, manager, // createFolder ? AvrTreeElementType.Folder : AvrTreeElementType.Layout, // true, out publishedId, out eventType); //} manager.CommitTransaction(); if (newNode.IsPublished) { PublishUnpublish(nodeId, createFolder ? AvrTreeElementType.Folder : AvrTreeElementType.Layout, true); } //if (publishedId > 0) //{ // EidssEventLog.Instance.CreateProcessedEvent(eventType, // publishedId > 0 ? publishedId : 0, 0, // EidssUserContext.User.ID, // manager.Transaction); //} } catch (Exception exc) { errStr = exc.Message; //TODO куда писать ошибки? manager.RollbackTransaction(); throw; } } } } else { errStr = "error"; } if (errStr.Length == 0) { RefreshTree(); } return(PartialView("QueryLayoutTreePartial", GetQueryTree())); }
public void CreateModifyDeleteFoldersTest() { lock (m_SyncLock) { EidssUserContext.CheckUserLoggedIn(); PresenterFactory.SharedPresenter.SharedModel.SelectedQueryId = m_TestQueryId; List <AvrTreeElement> original = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId); AvrTreeElement folder1 = CreateFolderItem(null, "Folder1", "Nat f1"); AvrQueryLayoutTreeDbHelper.SaveFolder(folder1.ID, folder1.ParentID, m_TestQueryId, folder1.DefaultName, folder1.NationalName); AvrTreeElement folder2 = CreateFolderItem(null, "Folder2", "Nat f2"); AvrQueryLayoutTreeDbHelper.SaveFolder(folder2.ID, folder2.ParentID, m_TestQueryId, folder2.DefaultName, folder2.NationalName); AvrTreeElement folder3 = CreateFolderItem(null, "Folder3", "Nat f3"); AvrQueryLayoutTreeDbHelper.SaveFolder(folder3.ID, folder3.ParentID, m_TestQueryId, folder3.DefaultName, folder3.NationalName); LookupManager.ClearAndReloadOnIdle(); List <AvrTreeElement> saved1 = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId); Assert.AreEqual(original.Count + 3, saved1.Count, "some folders not saved"); AvrTreeElement savedFolder1 = saved1.Find(ById(folder1.ID)); Assert.IsNotNull(savedFolder1); AvrTreeElement savedFolder2 = saved1.Find(ById(folder2.ID)); Assert.IsNotNull(savedFolder2); AvrTreeElement savedFolder3 = saved1.Find(ById(folder3.ID)); Assert.IsNotNull(savedFolder3); Assert.AreEqual(m_TestQueryId, savedFolder1.ParentID); Assert.AreEqual(m_TestQueryId, savedFolder2.ParentID); Assert.AreEqual(m_TestQueryId, savedFolder3.ParentID); AvrQueryLayoutTreeDbHelper.SaveFolder(savedFolder2.ID, savedFolder1.ID, m_TestQueryId, savedFolder2.DefaultName, savedFolder2.NationalName); AvrQueryLayoutTreeDbHelper.SaveFolder(savedFolder3.ID, savedFolder2.ID, m_TestQueryId, savedFolder3.DefaultName, savedFolder3.NationalName); LookupManager.ClearAndReloadOnIdle(); List <AvrTreeElement> saved2 = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId); AvrTreeElement updatedFolder2 = saved2.Find(ById(folder2.ID)); Assert.IsNotNull(updatedFolder2); AvrTreeElement updatedFolder3 = saved2.Find(ById(folder3.ID)); Assert.IsNotNull(updatedFolder3); Assert.AreEqual(folder1.ID, updatedFolder2.ParentID); Assert.AreEqual(folder2.ID, updatedFolder3.ParentID); int oldFoldersCount = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId).Count; // delete saved folders using (var avrDbService = new Folder_DB()) { Assert.IsTrue(avrDbService.Delete(folder3.ID), string.Format("could not delete folder '{0}' because of '{1}'", folder3.ID, avrDbService.LastError)); Assert.IsTrue(avrDbService.Delete(folder2.ID), string.Format("could not delete folder '{0}' because of '{1}'", folder2.ID, avrDbService.LastError)); Assert.IsTrue(avrDbService.Delete(folder1.ID), string.Format("could not delete folder '{0}' because of '{1}'", folder1.ID, avrDbService.LastError)); } LookupManager.ClearAndReloadOnIdle(); Assert.AreEqual(oldFoldersCount - 3, AvrQueryLayoutTreeDbHelper.ReLoadFolders(false, m_TestQueryId).Count); } }
public void UpdateFoldersTest() { lock (m_SyncLock) { PresenterFactory.SharedPresenter.SharedModel.SelectedQueryId = m_TestQueryId; long layoutId = CreateLayout(); try { List <AvrTreeElement> original = AvrQueryLayoutTreeDbHelper.LoadQueries(); original.AddRange(AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId)); EidssUserContext.CheckUserLoggedIn(); original.AddRange(AvrQueryLayoutTreeDbHelper.LoadLayouts(false, m_TestQueryId)); var final = new List <AvrTreeElement>(original); AvrTreeElement layout = original.Find(ById(layoutId)); Assert.IsNotNull(layout); AvrTreeElement folder1 = CreateFolderItem(null, "Folder1", "Nat f1"); AvrQueryLayoutTreeDbHelper.SaveFolder(folder1.ID, folder1.ParentID, m_TestQueryId, folder1.DefaultName, folder1.NationalName); AvrTreeElement folder2 = CreateFolderItem(folder1.ID, "Folder2", "Nat f2"); AvrQueryLayoutTreeDbHelper.SaveFolder(folder2.ID, folder2.ParentID, m_TestQueryId, folder2.DefaultName, folder2.NationalName); AvrTreeElement folder3 = CreateFolderItem(folder2.ID, "Folder3", "Nat f3"); AvrQueryLayoutTreeDbHelper.SaveFolder(folder3.ID, folder3.ParentID, m_TestQueryId, folder3.DefaultName, folder3.NationalName); final.AddRange(new[] { folder1, folder2, folder3 }); layout.ParentID = folder1.ID; LookupManager.ClearAndReloadOnIdle(); List <AvrTreeElement> saved = AvrQueryLayoutTreeDbHelper.LoadQueries(); saved.AddRange(AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId)); EidssUserContext.CheckUserLoggedIn(); saved.AddRange(AvrQueryLayoutTreeDbHelper.LoadLayouts(false, m_TestQueryId)); AvrTreeElement newFolder1 = saved.Find(ById(folder1.ID)); Assert.IsNotNull(newFolder1); AvrTreeElement newFolder2 = saved.Find(ById(folder2.ID)); Assert.IsNotNull(newFolder2); AvrTreeElement newFolder3 = saved.Find(ById(folder3.ID)); Assert.IsNotNull(newFolder3); AvrTreeElement newLayout = saved.Find(ById(layoutId)); Assert.IsNotNull(newLayout); Assert.AreEqual(m_TestQueryId, newFolder1.ParentID); Assert.AreEqual(newFolder1.ID, newFolder2.ParentID); Assert.AreEqual(newFolder2.ID, newFolder3.ParentID); Assert.AreEqual(m_TestQueryId, newLayout.ParentID); newLayout.ParentID = m_TestQueryId; layout.ParentID = m_TestQueryId; LookupManager.ClearAndReloadOnIdle(); int oldFoldersCount = AvrQueryLayoutTreeDbHelper.LoadFolders(false, m_TestQueryId).Count; // delete saved folders using (var avrDbService = new Folder_DB()) { Assert.IsTrue(avrDbService.Delete(folder3.ID), string.Format("could not delete folder '{0}' because of '{1}'", folder3.ID, avrDbService.LastError)); Assert.IsTrue(avrDbService.Delete(folder2.ID), string.Format("could not delete folder '{0}' because of '{1}'", folder2.ID, avrDbService.LastError)); Assert.IsTrue(avrDbService.Delete(folder1.ID), string.Format("could not delete folder '{0}' because of '{1}'", folder1.ID, avrDbService.LastError)); } LookupManager.ClearAndReloadOnIdle(); Assert.AreEqual(oldFoldersCount - 3, AvrQueryLayoutTreeDbHelper.ReLoadFolders(false, m_TestQueryId).Count); } finally { DeleteLayout(layoutId); } } }