Сегодня нам надо окончательно разобраться с исходным кодом
справочников. Понять, как работают остальные генераторы.
Результат работы генератора кода - XML файл с блоками кода и другой
служебной информацией, достаточной для воссоздания исходного кода. Когда
генератор закончил свою работу, он добавляет созданный XML в очередь для преобразования. Для VisualBasicнаписан специальный компонент ADDIN, который преобразует
этот файл в исходный код проекта (MurometzProjectpackageconvertor,
MTZ_VBQUEUE.dll).Для того чтобы
запустить преобразование достаточно выбрать пункт меню add-ins\ConvertMTZprojectpackagetoVBprojectв среде VisualBasic. Надеюсь, что вы знакомы со средой VisualBasic, и сможете
самостоятельно подключить и запустить соответствующий addin.
Поскольку все проекты, которые находятся в очереди,
преобразуются за один раз, то полезно понимать, где искать исходный код, для
каждого конкретного документа, после завершения преобразования.
Все исходные коды размещаются в подпапках относительно папки,
в которую установлена программа, с именами, которые соответствуют названию
генератора кода.
Генератору объектной модели соответствует папка -VB Model.
Далее в папках создается столько подпапок, сколько типов
документов определено в системе, или столько сколько запросили у генератора.
Имена соответствуют названию (псевдониму) типа документа. Так для наших
справочников должна быть создана подпапка с названием ARD.
Предположим, что нам удалось получить исходный код. Понятно,
что надо как-то разобраться с тем, что там будет написано.
Начнем с объектной модели.
Объектная модель документа представляет собой древовидную
структуру. Корнем дерева является интерфейс с именем Application.
Он снабжен рядом стандартных свойств. Они вкратце описаны на
сайте. Кроме стандартных свойств, есть еще специфические - они соответствуют
разделам документа.
Так в нашем справочнике будут следующие специфичные
свойства:
Public
Property Get ARD_DOCTYPE(Optional ByVal Refresh As Boolean = True) As
ARD_DOCTYPE_COL
Public
Property Get ARD_DOCTHEME(Optional ByVal Refresh As Boolean = True) As
ARD_DOCTHEME_COL
Public
Property Get ARD_DOGTYPE(Optional ByVal Refresh As Boolean = True) As
ARD_DOGTYPE_COL
Public
Property Get ARD_BANK(Optional ByVal Refresh As Boolean = True) As ARD_BANK_COL
Public
Property Get ARD_ORGSTRUCT(Optional ByVal Refresh As Boolean = True) As
ARD_ORGSTRUCT_COL
Эти свойства позволяют нам получить доступ кколлекциям строк, которые соответствуют
данным каждого из разделов.
Хочу сразу сказать, что не зависимо от того, какова
структурная характеристика раздела документа (строка, дерево, коллекция) для
раздела всегда создается коллекция. Другое дело, что для однострочного раздела
в коллекцию нельзя добавить более одной строки, а для элемента древовидного
раздела предусмотрено свойство для обращения к дочерним строкам раздела.Таким образом, структура объектной библиотеки
унифицирована и схематично может быть представлена так:
Т.е. происходит чередование элемента, который несет
информацию и коллекции, которая, содержит такие элементы. Если у раздела есть
подчиненный, то доступнему возможен от
конкретной строки раздела (элемента).
Каждый элемент имеет метод Save, который сохраняет информацию в
базу данных.
Коллекция имеет методы Add и Delete,
которые позволяют создавать новые элементы и удалять информацию. Конечно, это
несколько поверхностный взгляд, и полезных методов очень много, но сегодняшняя
наша цель понимать, как устроен код в самых общих чертах.
Интерфейс пользователя.
Теперь посмотрим на код для интерфейса пользователя.
Прежде сего должен сказать, что библиотека интерфейса
пользователя представляет собой AxtiveX
компонент (OCX),
который может быть использован в прикладных приложениях.
На самом деле, это не один компонент, а целый набор.
Количество компонентов зависит от количества разделов в документе. Для каждого
раздела создается два компонента - панель редактирования и компонент для работы
с коллекцией. Дополнительно создается еще один компонент, который реализует
весь документ, и как нетрудно догадаться, собран из компонентов для работы с
разделами.
Кроме компонентов библиотека включает в себя еще и один
интерфейс, который позволяет непосредственно редактировать документ. Этот
интерфейс называется GUI.
И его основным методом является метод SHOW, который отображает форму для редактирования документа. На
вход этому методу должен быть передан объект, который реализует объектную
библиотеку документа. Интерфейс и объектная библиотека не связаны явно
(используется позднее связывание), это в частности позволяет осуществлять
компиляцию проектов в любом порядке.
Поскольку у всех документов интерфейсы вызова строго
стандартизированы, то документ можно "запустить" на исполнение сразу
после компиляции исходного кода (два проекта на каждый документ).
Для этого можно использовать программу Администратор пункт
меню Файл\Справочники, если это справочник, или Файл\Новый документ, если это
простой документ.
Я думаю, что для общего понимания сегодня сказано
достаточно.
В следующем выпуске мы приступим к реализации первого
документа и посмотрим, как сделать работу более привычной при помощи View для разделов.