Экспорт, импорт и подготовка карточек к печати
Функции экспорта и импорта доступны только в базовом API.
Экспорт
Платформа позволяет экспортировать любые данные (карточки, секции, наборы строк и отдельные строки) в формат XML, а также импортировать их обратно. С этой функциональностью неразрывно связана также и задача печати данных — так как проще всего реализовать её через специальный формат экспорта.
Для получения XML-представления данных карточки можно использовать метод SaveXml объектов CardData, SectionData, SubSectionData, и RowData, а также коллекций этих объектов.
FileStream file = new FileStream("C:\\MyCard.xml", FileMode.Create);
card.SaveXml(file, ExportFlags.LinkedCards & ExportFlags.LinkedRows);
Для управления логикой экспорта можно создать собственный инспектор на основе базового класса DocsVision.Platform.ObjectManager.ExportCardInspector.
Импорт
Позволяет загрузить в систему данные на основании строки (или файла) в формате XML, ранее выгруженного из этой же (или другой) базы данных Docsvision.
|
Корректность импорта не гарантируется, если версия базы данных, из которой данные были экспортированы, отличается от версии базы, куда они импортируются. |
Для импорта предназначен метод ImportCards объекта CardManager. Импортируемый XML должен соответствовать стандартной схеме карточек Docsvision. Проверка на соответствие этой схеме обязательно выполняется перед началом собственно загрузки данных, и в случае несоответствия менеджер объектов вернет ошибку. Таким образом, передавать на вход метода произвольный XML-документ бессмысленно.
Для управления логикой работы импорта предназначен специальный тип объектов — DocsVision.Platform.ObjectManager.ImportCardInspector. Этот объект полностью реализует процесс импорта, осуществляет контроль целостности данных и выполняет разрешение конфликтов.
| Карточки, содержащие отсылки к версии компонентов, не рекомендуется напрямую импортировать в версию 6.1 и выше, если они выгружены из версии 5.5. |
По умолчанию в менеджере объектов реализовано 2 типа объектов-инспекторов, обладающих разным поведением:
-
ImportCardInspectorCopier— создаёт копию карточки (с другими идентификаторами всех строк), используя данные из XML в качестве шаблона. -
ImportCardInspectorReplacer— заменяет содержимое импортируемой карточки. Существующие строки будут заменены, отсутствующие строки буду добавлены в существующий экземпляр.
Объект-инспектор нужно создавать явно, передав в его конструктор ссылку на сессию:
FileStream file = new FileStream("myCard.xml", FileMode.Open);
ImportCardInspectorReplacer inspector = new ImportCardInspectorReplacer(session);
CardDataCollection cards = session.CardManager.ImportCards(file, inspector);
Если существующих типов инспекторов недостаточно для реализации необходимой логики импорта, можно разработать собственный объект-инспектор. Для этого нужно создать новый класс, унаследовав его от базового DocsVision.Platform.ObjectManager.ImportCardInspector, и переопределить методы этого класса, отвечающие за импорт отдельных структур.
Печать
Печать данных карточки может быть выполнена как стандартными средствами системы, так и любым другим способом на усмотрение разработчика. При использовании собственных методов печати целесообразно получить данные карточки в формате XML, а затем преобразовать их в формат, удобный для печати (либо экспортировать во внешнюю систему, осуществляющую печать).
Использование стандартных средств предполагает применение к данным карточки XSLT- или InfoPath-преобразования, описание которого задаётся на этапе проектирования схемы данных карточки (см. Раздел "Transformations").
CardType type = session.CardManager.CardTypes[new Guid("идентфикатор_типа")];
CardTransformationCollection trans = type.Transformations;
После применения XSLT-преобразования данные карточки принимают формат XML или HTML-документа, который впоследствии может быть распечатан. Для применения XSLT-преобразования можно воспользоваться стандартными методами XML-парсера:
CardData card = session.CardManager.GetCardData(cardId); (1)
MemoryStream stream = new MemoryStream();
card.SaveXml(stream);
stream.Position = 0;
XmlDocument cardXML = new XmlDocument();
cardXML.Load(stream);
CardType type = session.CardManager.CardTypes[new Guid("идентфикатор_типа")]; (2)
CardTransformation trans = type.Transformations[0];
XmlDocument transformXML = new XmlDocument();
transformXML.LoadXml(trans.Data.ToString());
XslCompiledTransform XSLTransform = new XslCompiledTransform();
XSLTransform.Load((IXPathNavigable)transformXML); (3)
System.Text.StringBuilder builder = new System.Text.StringBuilder();
XmlWriter html = XmlWriter.Create(builder); (4)
XSLTransform.Transform((IXPathNavigable)cardXML, html);
| 1 | Получаем данные карточки получение XML карточки. |
| 2 | Получаем шаблон печати. |
| 3 | Формируем трансформацию. |
| 4 | Применяем преобразование. |
Преобразованный документ может быть передан для печати во внешнее приложение (например, Microsoft Internet Explorer или Microsoft Word), либо в элемент управления WebBrowser, если создаётся .NET-приложение.