logo
logo
Да просто ведь все.. Нет? [Дим(м) 05/03/2004 22:08]
Да нет здесь, на мой взгляд, ничего сложного. Например, можно сделать так:
- в качестве ключа используется, например, путь к файлу базы или какой-нть уникальный идентификатор, который не позволит перепутать базы
- а в качестве значения просто набор строк, по одной на каждый иерархический список в базе (т.е. для разных баз кол-во таких строк может быть различным).
 
Сами эти строки упорядочены в соответствии со следованием самих списков в базе (есть ведь у них какой-то порядок или ассоциированы со списком по его имени.
 
Каждая такая строка представляет собой последовательность из 0 и 1, где 0 означает, что узел свернут, а 1 - развернут. Естественно, отдельная цифра нужна для каждого узла. Даже для тех, которые находятся внутри свернутых узлов - развернули статью Продукты, а в ней подстатья Бакалея свернута, а вот чаще используемая Мясные - уже развернута.
 
Дальше. Очевидно, что если длина строки не совпадает с общим кол-вом узлов соотв. списка, то данные "свернутости" неактуальны и их нужно проигнорировать. Кроме того, там же можно хранить версию (дату модификации) базы, для которой эти строки были сохранены. И тоже игнорировать "свернутость", если открыли другую версию.
Оптимальнее, конечно, было бы хранить не версию всей базы, а версию конкретного списка - чтобы "свернутость" была все же более устойчивой. Но я не уверен, что внутренний формат AC хранит эти номера редакций списков, а вводить их только ради этого, конечно же, не стоит.
 
Dervish: Ну чтож, возможный вариант. Только мне не очень нравится "ассоциированы со спискомпо его имени", получается, что в реестре будут храниться названия узлов списка. А это уже утечка информации. Впрочем, необязательно хранить по названию.