Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


Шаблоны и примеры

Главная   Библиотека   Шаблоны и примеры

Java в Domino. Получение файловых элементов дизайна приложений Domino в виде потоковых данных

Николай Норкин

г. Киров

nickanor@mail.ru

Интересными для обработки программными средствами представляются файловые элементы дизайна приложений, размещённые в дизайне в виде файловых ресурсов и ресурсов картинок. Эти ресурсы можно использовать для обработки в качестве шаблонов либо частей для сборки документа (картинки использовать в качестве оформления рассылаемых почтовым роботом писем)

Для получения элементов дизайна приложения Lotus Notes/Domino используется класс стандартной библиотеки lotus.domino.NoteCollection

lotus.domino.NoteCollection notes = database.createNoteCollection(false);

notes.selectAllDesignElements(true);

notes.setSelectionFormula("(@Left($Flags; 6) = \"345CgQ\") & ($TITLE : $FileNames = \"".concat(filename).concat("\")"));

notes.buildCollection();

Таким способом можно получить ноту дизайна, хранящую файловый ресурс

А так - получить ноту,хранящую картинку

lotus.domino.NoteCollection notes = database.createNoteCollection(false);

notes.setSelectImageResources(true);

notes.setSelectionFormula("$TITLE : $ImageNames = \"".concat(image).concat("\""));

notes.buildCollection();

Дальнейшие шаги

  • получить DXL-описание элемента дизайна

if(notes.getCount() < 1) return;

lotus.domino.DxlExporter exporter = session.createDxlExporter();

exporter.setOutputDOCTYPE(false);

exporter.setConvertNotesBitmapsToGIF(true);

String dxl = exporter.exportDxl(notes);

  • получить xml-объект описания из строки dxl

javax.xml.parsers.DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();  

javax.xml.parsers.DocumentBuilder builder = factory.newDocumentBuilder();

org.w3c.dom.Document document = builder.parse( new java.io.ByteArrayInputStream(dxl.getBytes("UTF-8")));

  • выделить base64-код содержимого файла
  • вывести файл в поток

в данном проекте преобразование в массив байтов выполнено с помощью пакета com.ibm.xml

byte[] decodeBase64 = com.ibm.xml.enc.dom.Base64.decode(base64.getBytes());

java.io.ByteArrayInputStream stream = new java.io.ByteArrayInputStream(decodeBase64));

XML-структура файлового ресурса и картинки различна, поэтому описание, как выделить base64-код, приводится для обоих случаев раздельно

Получение base64-кода в dxl картинки

Обрабатывая объект org.w3c.dom.Document можно получить дополнительные сведения об элементе дизайна и файле картинки

org.w3c.dom.Node imageresource = null;

nodes = document.getElementsByTagName( "imageresource"); // информация об элементе дизайна

try {

imageresource = nodes.item(0);

try {

this.title = imageresource.getAttributes().getNamedItem("name").getNodeValue(); // название элемента дизайна

}

catch (Exception ex) {}

try {

this.alias = imageresource.getAttributes().getNamedItem("alias").getNodeValue(); // псевдоним

}

catch (Exception ex) {}

try {

this.comment = imageresource.getAttributes().getNamedItem("comment").getNodeValue(); // комментарий

}

catch (Exception ex) {}

}

catch (Exception ex) {}

try {

nodes = ((org.w3c.dom.Element) imageresource).getElementsByTagName("noteinfo");

node = nodes.item(0);

this.noteid = node.getAttributes().getNamedItem("noteid").getNodeValue(); // NoteID и UNID элемента дизайна

this.unid = node.getAttributes().getNamedItem("unid").getNodeValue();

}

catch (Exception ex) {}

try {

nodes = ((org.w3c.dom.Element) node).getElementsByTagName("modified");

node = nodes.item(0);

this.modified = this.toDate(node.getTextContent()); // дата-время изменения элемента дизайна

}

catch (Exception ex) {}

try {

nodes = ((org.w3c.dom.Element) imageresource).getElementsByTagName("item");

for (int i = 0; i < nodes.getLength(); i++) {

node = nodes.item(i);

if(node.getAttributes().getNamedItem("name").getNodeValue().equalsIgnoreCase("$MimeType"))

this.mimetype = node.getTextContent(); // тип файла

if(node.getAttributes().getNamedItem("name").getNodeValue().equalsIgnoreCase("$FileSize"))

this.filesize = Long.parseLong(node.getTextContent()); // и его размер

}

}

catch (Exception ex) {}

String base64 = this.findResource(imageresource); // Передаётся ветка тега imageresource

И, наконец, содержимое файла

protected String findResource(org.w3c.dom.Node imageresource) {

org.w3c.dom.NodeList nodes = null;

org.w3c.dom.Node node = null;

String resource = "";

try {

nodes = ((org.w3c.dom.Element) imageresource).getElementsByTagName("gif");

node = nodes.item(0);

resource = node.getTextContent();

}

catch (Exception ex) {}

if (!resource.equals("")) return resource;

try {

nodes = ((org.w3c.dom.Element) imageresource).getElementsByTagName("jpeg");

node = nodes.item(0);

resource = node.getTextContent();

}

catch (Exception ex) {}

return resource;

}

Получение base64-кода в dxl файлового ресурса

Для сокращения кода получение всех побочных параметров опущено. При необходимости можно будет полюбопытствовать в пакете, который будет приложен позднее отдельно

org.w3c.dom.Node fileresource = null;

org.w3c.dom.NodeList nodes = document.getElementsByTagName( "fileresource");

try {

fileresource = nodes.item(0);

}

catch (Exception ex) {}

String base64 = this.findResource(fileresource);

protected String findResource(org.w3c.dom.Node fileresource) {

org.w3c.dom.NodeList nodes = null;

org.w3c.dom.Node node = null;

String resource = "";

try {

nodes = ((org.w3c.dom.Element) fileresource).getElementsByTagName("filedata");

node = nodes.item(0);

resource = node.getTextContent();

}

catch (Exception ex) {}

return resource;

}

Благодарности

Автор выражает признательность Максиму Колосову за сохранение и поддержку проекта

Продолжение

Java в Domino. Вывод в поток присоединённых файлов

Java в Domino. Сохранение файлового потока в документе Notes

Пример обработки файловых потоков. Работа с бланком Microsoft Excel
 
  Опубликовано — 01/17/2021 |    



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :


Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU