/// <summary> /// Обновление таблицы Dict_FreeHierarchyIncludedObjectChildren (кэш поиска и построения пути в дереве) /// </summary> public void UpdateIncludedObjectChildrenAsync(string userId) { Task.Factory.StartNew(() => { try { FreeHierarchyService.UpdateIncludedObjectChildren(userId, Tree_ID.GetValueOrDefault()); } catch { } }); }
/// <summary> /// Формирование дочерних объектов сразу по нескольким узлам /// </summary> /// <param name="tempList">Список объектов, по которым прогружаем дочерние</param> /// <param name="descriptor">Описатель дерева</param> public void LoadDynamicChildren(IEnumerable <FreeHierarchyTreeItem> tempList) { #if DEBUG var sw = new System.Diagnostics.Stopwatch(); sw.Start(); #endif var comparer = new FreeHierarchyTreeItemComparer(); //Это стандартные деревья foreach (var item in tempList) { if (item.IncludeObjectChildren) { if (Tree_ID <= 0) { item.IsFreeHierLoadedInitializet = true; } var brunch = item.AddStandartChildren(false, true, false, false); if (brunch != null) { item.Children.AddRange(brunch.OrderBy(b => b, comparer)); } } item.IsLocalChildrenInitializet = true; if (Tree_ID <= 0) { item.IsChildrenInitializet = true; } } #if DEBUG sw.Stop(); Console.WriteLine("LoadDynamicChildren: стандартные деревья {0} млс", sw.ElapsedMilliseconds); sw.Restart(); #endif if (Tree_ID <= 0) { return; } //Пока работает кроме ФИАС var parendIds = tempList .Where(tl => !tl.IsFreeHierLoadedInitializet) .Select(tl => tl.FreeHierItem_ID) .ToList(); var branches = FreeHierarchyService.GetBranches(Manager.User.User_ID, Tree_ID.GetValueOrDefault(), parendIds, false); if (branches == null) { return; } var itemsForPrepare = new List <TFreeHierarchyTreeItem>(); foreach (var branch in branches) { if (branch.Value == null) { continue; } itemsForPrepare.AddRange(branch.Value); } #if DEBUG sw.Stop(); Console.WriteLine("LoadDynamicChildren: GetBranches {0} млс", sw.ElapsedMilliseconds); sw.Restart(); #endif FreeHierarchyTreePreparer.PrepareGlobalDictionaries(itemsForPrepare); foreach (var item in tempList) { if (item.IsFreeHierLoadedInitializet) { continue; } List <TFreeHierarchyTreeItem> children; if (branches.TryGetValue(item.FreeHierItem_ID, out children) && children != null) { var brunch = FreeHierarchyTreePreparer.BuildBranch(item, children, this, false, null, false); if (brunch != null) { item.Children.AddRange(brunch.OrderBy(b => b, comparer)); } } item.IsChildrenInitializet = true; } #if DEBUG sw.Stop(); Console.WriteLine("LoadDynamicChildren: PrepareGlobalDictionaries and BuildBranch {0} млс", sw.ElapsedMilliseconds); #endif }