Страница 1 из 1
Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 10:18
Александр
специально для СК
задача - заполнить 7 выпадающих списков данными в зависимости от текущего значения того или иного выпадающего списка (из этих 7ми) т.е. из
Классификатора
и в зависимости от выбранных значений получить описание позиции
вот картинка

- 30.gif (30.27 КБ) 70647 просмотров
1. Штатный Классификатор на объектах
минусы
- очень тормозной
- можно использовать только одно значение для одной позиции - а мне нужно для каждой позиции 3 минимум
2. Сделал классификатор на объектах
минусы
- очень тормозной ПРИЧЕМ - мы сделали view для скорости - еще что-то - но никак 8 сек на 200 позиций хоть убейся!
плюсы
- можно использовать несколько значений для одной позиции
вот типа этого

- 31.gif (6.53 КБ) 70647 просмотров
атрибутов здесь не видно - но они есть
в атрибуты входит
1. Англоязычное наименование позиции
2. Русскоязычное наименование позиции
3. Код позиции
отступление
у меня работа с классификатором проходит в 2 этапа
1й заполняю выпадающие списки и в зависимости от из текущих значений получаю код комбинации
например в таком виде -
T00-15F3-11-00L2-14-15-00
2й в соответствии с кодом вытаскиваю из ini файла расшифровку позиции
например так
T00-15F3-11-00L2-14-15-00='&FromProdName -> &ProdName Upgrade, &LangR, сетевой, доп. лицензия &PNote'
вот теперь приступим
3й вариант классификатора на XML
минусы
- голову сломаешь пока поймешь что-же нужно там расположить... ну это везде так
плюсы
- 'высокая' скорость (2 сек на 200 позиций) (конечно зависит от объема инфы - но по любому быстрее чем в Лоции)
- можно использовать несколько значений для одной позиции
... продолжение следует
Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 10:27
Александр
формат XML довольно простой если не лезть слишком глубоко
т.е. узлы (=объекты) и атрибуты
в моем случае это выглядит так
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8"?>
<TemplateList>
<Template eName="Autodesk" rName="Autodesk" Code="00">
<ChannelType eName="Commercial" rName="Коммерческий" Code="15">
<ProductType eName="New" rName="Новый" Code="15">
<ProductExtType eName="" rName="" Code="00">
<LicenceType eName="..." rName="Без учета лицензии" Code="00">
<LicenceExtType eName="" rName="" Code="00">
<LicenceAddType eName="" rName="" Code="00"/>
</LicenceExtType>
</LicenceType>
<LicenceType eName="Single License Manager (SLM)" rName="Локальная лицензия" Code="14">
<LicenceExtType eName="" rName="" Code="00">
<LicenceAddType eName="" rName="" Code="00"/>
</LicenceExtType>
...
или еще вот кусочек оттуда
Код: Выделить всё
<ProductExtType eName="Подписка на квартальное обновление" rName="Подписка на квартальное обновление" Code="15">
<LicenceType eName="Single License Manager (SLM)" rName="Локальная лицензия" Code="14">
<LicenceExtType eName="..." rName="Чистая локальная лицензия" Code="00">
<LicenceAddType eName="" rName="" Code="00"/>
</LicenceExtType>
</LicenceType>
<LicenceType eName="Network License Manager (NLM)" rName="Сетевая лицензия" Code="15">
<LicenceExtType eName="1-5 seats" rName="1-5 рабочих мест" Code="03">
<LicenceAddType eName="" rName="" Code="00"/>
</LicenceExtType>
<LicenceExtType eName="6-20 seats" rName="6-20 рабочих мест" Code="04">
<LicenceAddType eName="" rName="" Code="00"/>
</LicenceExtType>
<LicenceExtType eName="21-50 seats" rName="21-50 рабочих мест" Code="05">
<LicenceAddType eName="" rName="" Code="00"/>
</LicenceExtType>
т.е. мы видим дерево (узел+3атрибута) - максимальная вложенность 7 уровней
по уровню на каждый список
XML - это простой текстовый файл с разметкой
в итоге мы можем делать поиск узлов, читать дочерние узлы, читать атрибуты, вобщем читать все что угодно и что немаловажно с помощью Лоции
этот файл узлы с атрибутами закрывает первую часть моей задачи - заполнение списков и получение кода комбинации
продолжение следует...
Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 10:32
Александр
вторая часть - по уникальному коду получить расшифровку позиции
если раньше мы использовали формат ini файла, то с переходом на xml было ужасно лень писать его обработку в скриптах...
и мы недолго думая заменили формат ini на xml
типа вот так
ini файл
Код: Выделить всё
[T0] ;Шаблон Autodesk
; ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ Шаблон Autodesk
; *** Commercial Шаблон Autodesk
; New
T00-15F1-15-00L1-14-00-00='&ProdName коммерческий, &LangR, локальный &PNote'
--T00-15F1-15-00L2-14-14-00='&ProdName коммерческий, &LangR, локальный,доп.лицензия &PNote'
T00-15F1-15-00L1-15-00-00='&ProdName коммерческий, &LangR, сетевой &PNote'
--T00-15F1-15-00L2-15-15-00='&ProdName коммерческий, &LangR, сетевой, доп.лицензия &PNote'
T00-15F1-15-00L1-00-00-00='&ProdName коммерческий, &LangR &PNote'
; Trial (Demo)
T00-15F1-12-00L0-00-00-00='&ProdName &LangR Trial(Demo) &PNote'
; Upgrade
T00-15F3-11-00L1-00-00-00='&FromProdName -> &ProdName Upgrade, &LangR &PNote'
T00-15F3-11-00L1-14-00-00='&FromProdName -> &ProdName Upgrade, &LangR, локальный &PNote'
--T00-15F3-11-00L2-15-15-00='&FromProdName -> &ProdName Upgrade, &LangR, локальный, доп.лицензия &PNote'
T00-15F3-11-00L1-15-00-00='&FromProdName -> &ProdName Upgrade, &LangR, сетевой &PNote'
--T00-15F3-11-00L2-14-15-00='&FromProdName -> &ProdName Upgrade, &LangR, сетевой, доп. лицензия &PNote'
T00-15F3-11-13L1-00-00-00='&FromProdName -> &ProdName Competiteve Upgrade &PNote'
xml файл
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8"?>
<!-- -->
<!-- XML Source File Created with SAPIEN Technologies PrimalScript 2007 -->
<!-- -->
<!-- NAME: -->
<!-- -->
<!-- AUTHOR: Alexandr Zaytsev -->
<!-- DATE : 20.01.2009 -->
<!-- -->
<!-- COMMENT: -->
<!-- Формирование названий ПО по шаблонам -->
<!-- -->
<!-- ProdName- New полное название из прайса поставщика -->
<!-- ProdN- New сокращенное название из прайса поставщика -->
<!-- FromProdName- Upgrade/Exchange полное название из прайса поставщика -->
<!-- LangR- язык (русская транскрипция) -->
<!-- LangE- язык (английская транскрипция) -->
<!-- Box- тип упаковки -->
<!-- PNote- дополнительное описание позиции -->
<!-- CompanyName- полное наименование компании разработчика -->
<!-- LicExt- дополнительный тип лицензии-->
<!-- -->
<!-- Autodesk Commercial -->
<!-- New -->
<TemplateList>
<channel>
<item>
<title>T00-15F1-15-00L1-14-00-00</title>
<description>ProdName коммерческий, LangR, локальный PNote</description>
</item>
<item>
<title>T00-15F1-15-00L2-14-14-00</title>
<description>ProdName коммерческий, LangR, локальный,доп.лицензия PNote</description>
</item>
<item>
<title>T00-15F1-15-00L1-15-00-00</title>
<description>ProdName коммерческий, LangR, сетевой PNote</description>
</item>
<item>
<title>T00-15F1-15-00L2-15-15-00</title>
<description>ProdName коммерческий, LangR, сетевой, доп.лицензия PNote</description>
</item>
<item>
<title>T00-15F1-15-00L1-00-00-00</title>
<description>ProdName коммерческий, LangR PNote</description>
</item>
<!-- Trial -->
<item>
<title>T00-15F1-12-00L0-00-00-00</title>
<description>ProdName LangR Trial(Demo) PNote</description>
</item>
<!-- Upgrade -->
<item>
<title>T00-15F3-11-00L1-00-00-00</title>
<description>FromProdName -> ProdName Upgrade, LangR PNote</description>
</item>
<item>
<title>T00-15F3-11-00L1-14-00-00</title>
<description>FromProdName -> ProdName Upgrade, LangR, локальный PNote</description>
</item>
<item>
<title>T00-15F3-11-00L2-15-15-00</title>
<description>FromProdName -> ProdName Upgrade, LangR, локальный, доп.лицензия PNote</description>
</item>
тут xml другого формата - без атрибутов - поскольку они не нужны
т.е. в xml можно использовать любые комбинации структур данных какие надо
продолжение следует...
Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 10:39
Старик Крупский
Всё! Понял! Ты просто используешь XML как хранилище классификатора. А я-то подумал, что ты объектный классификатор каждый раз выгружаешь в XML, потом обратно считываешь из XML и все получается быстро

)
Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 10:51
Александр
да именно так

как ВНЕШНЕЕ альтернативное хранилище
борюсь за каждую секунду - здесь выиграл аж целых 6 на каждую операцию
работает быстрее - однозначно
кроме того нам например нужен КЛАДР классификатор адресов России
если сделать его аналог в Лоции то мы умрем на 2000 тысячах комбинаций
республика-область-город
между тем на xml такие классификаторы используются в web - odnoklassniki к примеру, и на других сайтах для локализации юзера и работаю
в Реальном Времени!!!! и есть бесплатно! это однозначный прорыв в скорости

(я имею в виду скорость привязанную к структуре данных Лоции - с проверками на права)
код к мастер классу показать? или и так все ясно?

Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 11:04
CDuke
Идея с XML очень интересная. Идея 5 баллов
Но как я понимаю этот XML файл хранится у каждого пользователя на компьютере или вы расшарили этот файл в сети?
Ведь вроде хранить этот файл в БД не получится?
Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 11:09
Александр
да

у нас 2 варианта на случай сбоев
в обновлении Лоции на сети есть своя папка с шаблонами и прочими нашими файлами, вместе с этими
там же есть есть ini в котором прописано откуда брать файлы - из сети или из клиента
при очередном обновлении все копируется на клиентские места
и в зависимости от стабильности работы сети - я или юзер сам может изменить путь
в общем при отладке - берем из сети
потом переключаемся на локальные пути
хранить xml можно и в базе, у SQL2005 есть такой тип данных, но у Лоции вроде как не прописан
так что пока как внешние файлы

Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 11:15
CDuke
Будем ждать, может пропишут

Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 11:16
Alexey
Александр, как всегда на высоте!!! Вот сижу и завидую... так как наши Заказчики работают не с самой последней версией лоции, а точнее 4.12 да и еще и сборочка... жутики... а ведь такие решения тоже упростили бы и им и нам жизнь.
Так что Саша, еще раз +100.
Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 11:18
Александр
ты хоть скажи +100 в какой валюте?
буду виртуально копить
ps
кстати на счет версии - можно и заработать на апгрейде - не так ли?
аргументы есть убойные!

Re: Мастер класс ;-) Классификаторы на XML
Добавлено: 22 янв 2009, 12:19
Alexey
офтоп: +100 в граммах ))) Копи, копи... мот накопишь. А что касается апгрейда... то уже миллион раз уговаривали.. но никак... но попыток не оставляем... чтобы апгрейдик все же сделать...