private static TerritorialUsluga FindParent(DevExpress.ExpressApp.IObjectSpace objSpace, string code) { TerritorialUsluga parent = null; // если ищем категорию услуги с длиной кода 6 if (code.Length > 5) { parent = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", code.Substring(0, 5))); if (parent != null) { return(parent); } } // если не найден родитель в категории с кодами, длина которых = 5 // или ищем категорию для подкатегории (длина 5) if (code.Length > 4) { parent = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", code.Substring(0, 4))); if (parent != null) { return(parent); } } // если не найден родитель в категории с кодами, длина которых = 4 или 5 // или ищем категорию для подкатегории (длина 4 или 5) if (code.Length > 3) { parent = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", code.Substring(0, 3))); if (parent != null) { return(parent); } } // родитель не найден return(null); }
/// <summary> /// Добавляет в базу классификаторы из файла XML /// </summary> /// <param name="updater">Пространство объектов ObjectSpace</param> /// <param name="xmlPath">Путь до файла классификатора</param> public static void UpdateDbFromXml(DevExpress.ExpressApp.IObjectSpace objSpace, string xmlPath) { List <TerrUslTemp> list = TerritorialUsluga.GetListFromXML(xmlPath); /* * Длина кода услуги различается (есть 3, 4, 5 и 6-и значные коды) * Услуга с меньшим кодом является категорией других, 4х, 5-и значные - подкатегории */ var cat3 = list.Where(t => t.Code.Length == 3); var cat4 = list.Where(t => t.Code.Length == 4); var cat5 = list.Where(t => t.Code.Length == 5); var cat6 = list.Where(t => t.Code.Length == 6); int createdCount = 0; foreach (var cat in cat3) { var terrUsl = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", cat.Code)); if (terrUsl == null) { terrUsl = objSpace.CreateObject <TerritorialUsluga>(); terrUsl.CopyValueFrom(cat); createdCount++; } } if (createdCount != 0) { objSpace.CommitChanges(); } createdCount = 0; foreach (var cat in cat4) { var terrUsl = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", cat.Code)); if (terrUsl == null) { terrUsl = objSpace.CreateObject <TerritorialUsluga>(); terrUsl.CopyValueFrom(cat); createdCount++; var parent = TerritorialUsluga.FindParent(objSpace, cat.Code); if (parent != null) { terrUsl.parent = parent; parent.children.Add(terrUsl); } } } if (createdCount != 0) { objSpace.CommitChanges(); } createdCount = 0; foreach (var cat in cat5) { var terrUsl = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", cat.Code)); if (terrUsl == null) { terrUsl = objSpace.CreateObject <TerritorialUsluga>(); terrUsl.CopyValueFrom(cat); createdCount++; var parent = TerritorialUsluga.FindParent(objSpace, cat.Code); if (parent != null) { terrUsl.parent = parent; parent.children.Add(terrUsl); } } } if (createdCount != 0) { objSpace.CommitChanges(); } createdCount = 0; foreach (var cat in cat6) { var terrUsl = objSpace.FindObject <TerritorialUsluga>(CriteriaOperator.Parse("Code=?", cat.Code)); if (terrUsl == null) { terrUsl = objSpace.CreateObject <TerritorialUsluga>(); terrUsl.CopyValueFrom(cat); createdCount++; var parent = TerritorialUsluga.FindParent(objSpace, cat.Code); if (parent != null) { terrUsl.parent = parent; parent.children.Add(terrUsl); } } } if (createdCount != 0) { objSpace.CommitChanges(); } }