forum.bitel.ru http://forum.bitel.ru/ |
|
Как создать документ? http://forum.bitel.ru/viewtopic.php?f=23&t=6186 |
Страница 1 из 1 |
Автор: | Феанор [ 02 дек 2011, 17:23 ] |
Заголовок сообщения: | Как создать документ? |
subj, и как прикрепить к нему файл? =) через апи желательно =) |
Автор: | KostiK [ 05 дек 2011, 20:18 ] |
Заголовок сообщения: | Re: Как создать документ? |
API Для генерации документов Document DocumentManager |
Автор: | Феанор [ 06 дек 2011, 13:40 ] |
Заголовок сообщения: | Re: Как создать документ? |
KostiK писал(а): API Для генерации документов Document DocumentManager Ну я там поискал, что уж вы так. Но если уж на то пошло, то: 1. откуда взять ru.bitel.bgbilling.kernel.plugin.server.BGPluginServer plugin, который в DocumentManager(java.sql.Connection con, ru.bitel.bgbilling.kernel.plugin.server.BGPluginServer plugin). new BGPluginServer() прокатывает, но только ничего не работает. 2. Document(). Где в методах этого класса какой нибудь setFile, addFile с аргументом inputStream ну или byteArray. Меня не напрягло и я руками делаю вставки в contract_document_{plugin_id} вставляю документ, по номеру записи создаю файл, вставляю на него ссылку в filestorage_files_list_{plugin_id}. Но как то меня напрягает эти номера высчитывать, сейчас 1 файл 1 документ и вроде ошибиться сложно, но что если где то пропустится запись или два файла - уже запутаться можно, у вас это уже есть и работает =) |
Автор: | KostiK [ 06 дек 2011, 14:49 ] |
Заголовок сообщения: | Re: Как создать документ? |
1)Создавать нудно так. Код: BGPluginManagerServer.getManager().getPluginByUID( event.getPluginId() ); 2) В Document нет такого метода, прикрепление файла происходит по другому. После того как, создадите документ, т.е. вызвав метод: Код: documentManager.updateDocument( "new", document ); У документа появится documentId. Вот этот id нужен для того, чтобы прикрепить файл к документу Пример для 5.2 Код: // сам файл документа File file = new File( filePath ); // добавляем строку FileStorage fileStorage = new FileStorage( "куда сохранять файл, берется из конфига плагина file.storage.root.path", String.valueOf( plugin.getPluginUID() ), con ); BGServerFile documentFile = new BGServerFile(); documentFile.setOwnerId( documentId ); documentFile.setTitle( "Имя файла" ); documentFile.setSize( file.length() ); documentFile.setComment( "Сгенерированный Файл" ); documentFile.setDate( new Date() ); documentFile.setUserId( event.getUserId() ); //какой пользователь создал файл fileStorage.updateFile( documentFile ); // if( documentFile.getId() > 0 ) { try { // открываем поток куда писать FileOutputStream out = fileStorage.save( documentFile.getId() ); // и декодируем туда String filedata = Base64.encode( new FileInputStream( file ) ); Base64.decode( new ByteArrayInputStream( filedata.getBytes() ), out ); // закрываем стрим out.close(); // удаляем временный файл file.delete(); } catch( Exception e ) { // и удаляем зазря только добавленную строчку fileStorage.deleteFile( documentFile.getId() ); print( "Ошибка сохранения файла.\nИли пришли битые данные файла.\n" + e.getMessage() ); } } Если вы пишите для 5.2, используя динамические Java классы, то есть еще событие GenerateDocumentEvent. Я начал писать генерацию документов по шаблону формата .odt, используя при этом динамические Java классы. Но пока разработка притормозилась. Если вы примерно этим же занимаетесь, то можно обсудить функционал и допилить. Думаю это актуально. |
Автор: | Феанор [ 07 дек 2011, 08:58 ] |
Заголовок сообщения: | Re: Как создать документ? |
KostiK писал(а): 1)Создавать нудно так. Код: BGPluginManagerServer.getManager().getPluginByUID( event.getPluginId() ); 2) В Document нет такого метода, прикрепление файла происходит по другому. После того как, создадите документ, т.е. вызвав метод: Код: documentManager.updateDocument( "new", document ); У документа появится documentId. Вот этот id нужен для того, чтобы прикрепить файл к документу Пример для 5.2 Код: // сам файл документа File file = new File( filePath ); // добавляем строку FileStorage fileStorage = new FileStorage( "куда сохранять файл, берется из конфига плагина file.storage.root.path", String.valueOf( plugin.getPluginUID() ), con ); BGServerFile documentFile = new BGServerFile(); documentFile.setOwnerId( documentId ); documentFile.setTitle( "Имя файла" ); documentFile.setSize( file.length() ); documentFile.setComment( "Сгенерированный Файл" ); documentFile.setDate( new Date() ); documentFile.setUserId( event.getUserId() ); //какой пользователь создал файл fileStorage.updateFile( documentFile ); // if( documentFile.getId() > 0 ) { try { // открываем поток куда писать FileOutputStream out = fileStorage.save( documentFile.getId() ); // и декодируем туда String filedata = Base64.encode( new FileInputStream( file ) ); Base64.decode( new ByteArrayInputStream( filedata.getBytes() ), out ); // закрываем стрим out.close(); // удаляем временный файл file.delete(); } catch( Exception e ) { // и удаляем зазря только добавленную строчку fileStorage.deleteFile( documentFile.getId() ); print( "Ошибка сохранения файла.\nИли пришли битые данные файла.\n" + e.getMessage() ); } } Если вы пишите для 5.2, используя динамические Java классы, то есть еще событие GenerateDocumentEvent. Я начал писать генерацию документов по шаблону формата .odt, используя при этом динамические Java классы. Но пока разработка притормозилась. Если вы примерно этим же занимаетесь, то можно обсудить функционал и допилить. Думаю это актуально. У меня 5.1, задача была какая - периодически создавать сервисные карты и складывать их в плагин документс. Спасибо за кусок кода, файлсторадж как-то не думал использоваьт - это грубо говоря то, что делает записи в file_storage_list и ими управляет,типа добавляет ссылки на файлы и удалеяет? А именами файлов она же рулит? Когда owner_id (ссылка на документ) и id файла одни - это все хорошо и код как у вас, а вот если в документ будет два файла. Тогда получается documentFile.getId() будет меньше чем имя файла... меня вот этот момент напрягал =) |
Автор: | KostiK [ 07 дек 2011, 12:24 ] |
Заголовок сообщения: | Re: Как создать документ? |
Феанор писал(а): У меня 5.1, задача была какая - периодически создавать сервисные карты и складывать их в плагин документс. Спасибо за кусок кода, файлсторадж как-то не думал использоваьт - это грубо говоря то, что делает записи в file_storage_list и ими управляет,типа добавляет ссылки на файлы и удалеяет? А именами файлов она же рулит? Когда owner_id (ссылка на документ) и id файла одни - это все хорошо и код как у вас, а вот если в документ будет два файла. Тогда получается documentFile.getId() будет меньше чем имя файла... меня вот этот момент напрягал =) Да Вы правильно все поняли. Файлсторадж делает записи в той таблице, и именами тоже. Почему же меньше чем имя файла? Файлы сохраняются под номерами. а реальные имена их остаются в табличке. И если у документа несколько файлов, то они достаются из этой таблички по коду документа и коду файла( код файла является именем файла). |
Автор: | SemWit [ 05 фев 2018, 14:02 ] |
Заголовок сообщения: | Re: Как создать документ? |
Добрый день! Подскажите, пожалуйста, способ создания документа и прикрепления файла для 6.2 через API. В документации описан интерфейс DocumentsService, но не смог найти его реализацию. Или файл прикреплять так же как и в 2011 году? |
Автор: | Artur [ 07 фев 2018, 12:20 ] |
Заголовок сообщения: | Re: Как создать документ? |
Здравствуйте. В документации по API есть описание веб-сервиса DocumentsService (https://bgbilling.ru/v7.1/javadoc/index.html) В этом веб-сервисе есть метод updateDocument(), используйте его. Описание параметров почитайте в описании к параметрам. Приклеплять файлы к документу с помощью метода uploadDocumentFile(). |
Автор: | SemWit [ 08 фев 2018, 22:39 ] |
Заголовок сообщения: | Re: Как создать документ? |
Спасибо, всё получилось! Не надо было искать класс реализующий этот сервис, а использовать его непосредственно. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |