Download presentation
Presentation is loading. Please wait.
Published byMayra Bromell Modified over 9 years ago
1
C ервер Oracle Некоторые возможности интеграции
2
Сервер Oracle – некоторые возможности интеграции Работа с COM- объектами на сервере Формирование документа MS-Excel Формирование PDF документа Как без COM? Работа с функциями ОС сервера Принципиальная схема работы Пример выполнения команды ОС Отправка e-mail (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 PARUS/PARUSINA@DATABASE SQL> @ \COM\COMWRAP.SQL Компиляция объектов Oracale COM Automation Feature
8
Работа с COM- объектами на сервере – Установка надстроек для работы с COM- серверами MS Word, MS Excel, MS Power Point, MAPI SQL> CONNECT PARUS/PARUSINA@DATABASE SQL> @ \COM\DEMOS\EXCELSOL.SQL SQL> @ \COM\DEMOS\WORDSOL.SQL SQL> @ \COM\DEMOS\PPTDSOL.SQL SQL> @ \COM\DEMOS\MAPISOL.SQL Компиляция объектов надстроек для Excel, Word, PowerPoint, MAPI
9
Работа с COM- объектами на сервере - Документация Oracle COM Automation Feature Developer's Guide http://docs.oracle.com/cd/B19306_01/win.102/b14310/toc.htm http://docs.oracle.com/cd/B19306_01/win.102/b14310/toc.htm Oracle COM Automation PL/SQL Demos http://docs.oracle.com/cd/B19306_01/win.102/b14310/ch4plsql.htm http://docs.oracle.com/cd/B19306_01/win.102/b14310/ch4plsql.htm
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 <= 10) loop CELLCOLUMN := TO_CHAR(N); CELLINDEX := CONCAT('A', CELLCOLUMN); I := ORDEXCEL.INSERTDATA(CELLINDEX, N, 'I2'); CELLINDEX := CONCAT('B', CELLCOLUMN); I := ORDEXCEL.INSERTDATA(CELLINDEX, C1_REC.AGNABBR, 'BSTR'); CELLINDEX := CONCAT('C', CELLCOLUMN); I := ORDEXCEL.INSERTDATA(CELLINDEX, C1_REC.AGNNAME, 'BSTR'); CELLINDEX := CONCAT('D', CELLCOLUMN); I := ORDEXCEL.INSERTDATA(CELLINDEX, N, 'I2'); N := N + 1; end loop; I := ORDEXCEL.INSERTCHART(350, 200, 250, 250, 'D2:D15', 'xlPie'); select FILENAME||TO_CHAR(sysdate, 'HH24MISS') into FILENAME from DUAL; I := ORDEXCEL.SAVEEXCELFILE(FILENAME); I := ORDEXCEL.EXITEXCEL(); end;
11
Работа с COM- объектами на сервере – Формирование документа PDF Apache FOP (Formatting Objects Processor) + XSL Formatting Objects (XSL-FO) http://xmlgraphics.apache.org/fop/ http://xmlgraphics.apache.org/fop/ PL/PDF http://www.plpdf.com/plpdf-sdk.html http://www.plpdf.com/plpdf-sdk.html
12
Работа с COM- объектами на сервере – Как без COM? XML - XLS http://msdn.microsoft.com/ru-ru/office/aa905546.aspx http://msdn.microsoft.com/ru-ru/office/aa905546.aspx
13
Работа с COM- объектами на сервере – Как без COM? POI-HSSF (Poor Obfuscation Implementation - Horrible SpreadSheet Format) и POI-XSSF (Poor Obfuscation Implementation – XML SpreadSheet Format) http://poi.apache.org/spreadsheet/index.html http://poi.apache.org/spreadsheet/index.html Java Excel API http://jexcelapi.sourceforge.net/ http://jexcelapi.sourceforge.net/
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
Отправка E-Mail (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
Спасибо Ваши вопросы
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.