Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемРуслан Твердохлебов
1 C ервер Oracle Некоторые возможности интеграции
2 Сервер Oracle – некоторые возможности интеграции Работа с COM- объектами на сервере Формирование документа MS-Excel Формирование PDF документа Как без COM? Работа с функциями ОС сервера Принципиальная схема работы Пример выполнения команды ОС Отправка (SMTP) с вложением
3 Работа с COM- объектами на сервере Установка Oracle COM Automation Feature Схема работы Установка математического обеспечения Конфигурирование служб Oracle Net Настройка серверной части Установка надстроек для работы с COM- серверами MS Word, MS Excel, MS Power Point, MAPI Документация
4 СЕРВЕР Внешние проецессыОбласть процессов экземпляра БД Oracle Работа с COM- объектами на сервере – Схема работы Экземпляр БД Хранимые PL/SQL объекты Oracle Listener Обработчик RPC Oracle COM Feature Данные БД Внешние COM серверы COM/DCOM Oracle Net RPC
5 Работа с COM- объектами на сервере – Установка математического обеспечения
6 Работа с COM- объектами на сервере – Конфигурирование служб Oracle Net LISTENER = (ADDRESS_LIST= … (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC0) ) … ) LISTENER.ORA EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC0)) (CONNECT_DATA = (SID = plsextproc))) ) TNSNAMES.ORA
7 Работа с COM- объектами на сервере – Настройка серверной части SQL> CONNECT \COM\COMWRAP.SQL Компиляция объектов Oracale COM Automation Feature
8 Работа с COM- объектами на сервере – Установка надстроек для работы с COM- серверами MS Word, MS Excel, MS Power Point, MAPI SQL> CONNECT \COM\DEMOS\EXCELSOL.SQL \COM\DEMOS\WORDSOL.SQL \COM\DEMOS\PPTDSOL.SQL \COM\DEMOS\MAPISOL.SQL Компиляция объектов надстроек для Excel, Word, PowerPoint, MAPI
9 Работа с COM- объектами на сервере - Документация Oracle COM Automation Feature Developer's Guide Oracle COM Automation PL/SQL Demos
10 Работа с COM- объектами на сервере – Формирование документа MS-Excel declare N binary_integer := 2; I binary_integer; FILENAME varchar2(255); CELLINDEX varchar2(40); CELLCOLUMN varchar2(40); begin FILENAME := 'd:\excel'; I := ORDEXCEL.CREATEEXCELWORKSHEET(''); I := ORDEXCEL.INSERTDATA('A1', ' Номер ', 'BSTR'); I := ORDEXCEL.INSERTDATA('B1', ' Мнемокод ', 'BSTR'); I := ORDEXCEL.INSERTDATA('C1', ' Наименование ', 'BSTR'); I := ORDEXCEL.INSERTDATA('D1', ' Сумма ', 'BSTR'); for C1_REC in (select AG.AGNABBR, AG.AGNNAME from AGNLIST AG where ROWNUM
11 Работа с COM- объектами на сервере – Формирование документа PDF Apache FOP (Formatting Objects Processor) + XSL Formatting Objects (XSL-FO) PL/PDF
12 Работа с COM- объектами на сервере – Как без COM? XML - XLS
13 Работа с COM- объектами на сервере – Как без COM? POI-HSSF (Poor Obfuscation Implementation - Horrible SpreadSheet Format) и POI-XSSF (Poor Obfuscation Implementation – XML SpreadSheet Format) Java Excel API
14 Работа с функциями ОС сервера – Принципиальная схема работы СЕРВЕР Внешние проецессыОбласть процессов экземпляра БД Oracle Экземпляр БД Oracle JVM PL/SQL- обёртка Java Class ОС Прикладные PL/SQL объекты
15 Работа с функциями ОС сервера – Пример выполнения команды ОС create or replace and compile java source named "OsUtils" as import java.io.IOException; import java.io.InputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; class StreamGobbler extends Thread { InputStream is; String type; StreamGobbler (InputStream is, String type) { this.is = is; this.type = type; } public void run () { try { InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line; while ((line = br.readLine()) != null) OsUtils.result.append(line).append("\n"); } catch (IOException ioe) {ioe.printStackTrace();} } public class OsUtils { public static StringBuffer result; public static int runCommand (String command) throws Throwable { result = new StringBuffer(); Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(command); StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "ERROR"); StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "OUTPUT"); errorGobbler.start(); outputGobbler.start(); proc.waitFor(); return proc.exitValue(); } 1. Java Class, выполняющий команду операционной системы Runtime.getRuntime() Runtime.exec( ) runCommand Экспортируемая функция интерфейса класса
16 Работа с функциями ОС сервера – Пример выполнения команды ОС create or replace function udo_f_run_os_command (p_cmd in varchar2) return number as language java name 'OsUtils.runCommand (java.lang.String) return int'; 2. PL/SQL- обёртка declare result number; begin result := udo_f_run_os_command('C:\WINNT\system32\cmd.exe /c dir'); end; 3. Использование для прикладных целей exec dbms_java.grant_permission(user, 'SYS:java.io.FilePermission', 'C:\WINNT\system32\cmd.exe', 'execute' ); 4. Назначение дополнительных прав доступа
17 Отправка (SMTP) с вложением conn:=utl_smtp.open_connection(MAIL_SERVER, MAIL_PORT); utl_smtp.ehlo(conn, MAIL_SERVER); utl_smtp.command(conn, 'AUTH LOGIN'); utl_smtp.command(conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(MAIL_USER)))); utl_smtp.command(conn, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(MAIL_USER_PASS)))); utl_smtp.mail(conn, MAIL_SENDER); utl_smtp.open_data(conn); write_mime_header(conn, 'To', MAIL_RECIVIER); write_mime_header(conn, 'Subject', MAIL_SUBJECT); write_mime_header(conn, 'Sender', MAIL_SENDER); write_mime_header(conn, 'From', MAIL_SENDER); write_mime_header(conn, 'Content-Language', 'ru'); write_mime_header(conn, 'Content-Type', 'text/plain; charset=Windows-1251'); write_mime_header(conn, 'Content-Transfer-Encoding', '8bit'); utl_smtp.write_data(conn, utl_tcp.crlf); utl_smtp.write_raw_data(conn, utl_raw.cast_to_raw(MESSAGE)); utl_smtp.write_data(conn, utl_tcp.crlf); utl_smtp.write_data(conn, utl_tcp.crlf); utl_smtp.write_data(v_Mail_Conn, '--'|| MAIL_SEPARATOR || utl_tcp.crlf ); utl_smtp.write_data(conn, 'Content-Type: '||ATT_MIME_TYPE||';'|| utl_tcp.crlf ); utl_smtp.write_data(conn, ' name="'||ATT_NAME||'"'|| crlf ); utl_smtp.write_data(conn, 'Content-Transfer-Encoding: base64'|| utl_tcp.crlf ); utl_smtp.write_data(conn, 'Content-Disposition: attachment;'|| utl_tcp.crlf ); utl_smtp.write_data(conn, ' filename="'||ATT_FILE_NAME||'"' || utl_tcp.crlf); utl_smtp.write_data(conn, crlf ); ps:=1; LOOP BEGIN dbms_lob.read(ATT_BLOB_DATA, 48, ps, att_raw_data); ps := ps + 48; utl_smtp.write_raw_data(conn, utl_encode.base64_encode(att_raw_data)); EXCEPTION WHEN no_data_found THEN EXIT; END; END LOOP; utl_smtp.write_data(conn, '--' || MAIL_SEPARATOR || '--'); utl_smtp.write_data(conn, crlf ); utl_smtp.write_data(conn, crlf ); utl_smtp.close_data(conn); utl_smtp.rset(conn); utl_smtp.quit(conn);
18 Примеры применения 1. Эмуляция сервера печати для формирования тяжелых отчетов ( Пользовательская процедура Парус 8 + DBMS_JOB, DB Scheduler + ORDExcel + PrNotifier) create procedure UDO_P_START_PRINTING as NJOB binary_integer; begin dbms_job.submit(job => NJOB,what => 'begin UDO_P_DO_PRINTING; end;'); end; create procedure UDO_P_DO_PRINTING as begin I := ORDEXCEL.CREATEEXCELWORKSHEET(''); I := ORDEXCEL.INSERTDATA('A1', ' Номер ', 'BSTR'); I := ORDEXCEL.SAVEEXCELFILE(FILENAME); I := ORDEXCEL.EXITEXCEL();... P_NOTQUEUE_BASE_INSERT(nMSG_ID => GEN_ID,nADDR_COMPANY => GET_SESSION_COMPANY,sADDR_USER =>... ); end;
19 Примеры применения 2. Автоматическая рассылка отчетности (DBMS_JOB, DB Scheduler + ORDExcel + UTL_SMTP) 3. Ускорение печати тяжелых отчетов (XML – XLS, ORDExcel) 4. Реализация конвертеров ( Исполнение команд ОС (UDO_F_RUN_OS_COMMAND) + UTL_FILE + PL/SQL + Парус 8 API)
20 Спасибо Ваши вопросы
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.