alibek » 11.04.2006 (Вт) 16:17
Эх... Тема совсем не туда свернула.
Ладно, попробую объяснить.
Есть система электронного документооборота. Работает она на IIS+ASP.NET, в качестве БД используется MSSQL, но он используется не напрямую, а через своего провайдера, промежуточный сервер (который разруливает доступ, блокировки и прочие изыски).
На клиентских компах используется браузер; при установке клиента устанавливаются необходимые библиотеки (DLL и OCX).
Каждый документ описывается XML-схемой данных, система поддерживает единый способ доступа к данным, адресуясь к XML-полям, нужный уровень абстракции реализуется промежуточным сервером.
В системе предусмотрен базовый набор разных типов документов, дополнительно имеется набор типов документов, нужных для документооборота (входящие/исходящие сообщения, файловая библиотека, позволяющая хранить разные версии файлов и т.п.).
При необходимости функциональность системы можно расширить, создав нужный конкретной организации документ (например, вести кадровый учет, добавив приказы и т.п.). Для этого составляется XML-схема и создается ActiveX Control, реализующий требуемый интерфейс. От компонента требуется, чтобы он правильно себя инициализировал, умел получать данные, передаваемые ему системой и обеспечивал корректное обновление этих данных. Данные эти передаются в объекте; допустим объект DocData, содержащий коллекцию Sections, в которой содержится одна или несколько записей Rows. А Rows - это что-то вроде строки в БД, у нее есть коллекция значений, например поле "Имя пользователя" - DocData.Sections(sMainSection).Rows(1).Value("UserName").
Компонент должен корректно принимать эти данные и сохранять (заполняя коллекции DocData и вызывая метод Update), дальше этими данными (сохранением их в БД или извлечением из БД, если документ открывается) занимается система.
Для печати документов используется XSL. Схема данных у меня есть (я ее сам описываю в XML-описании документа). XSL также хранится в БД, к каждому документу может быть привязан один или несколько XSL-файлов.
Когда пользователь желает распечатать документ, он нажимает кнопку на панели инструментов.
При этом система извлекает данные документа (в соответствии со схемой данных в XML-описании), передает их в XSL и формирует HTML-код, который отображается в форме Print Preview (построенной на основе браузера).
Все это длинное толкование нужно для того, чтобы объяснить, почему я никак не могу повлиять на процесс формирования печатного документа. Я могу только написать XSL.
Lasciate ogni speranza, voi ch'entrate.