Presentation is loading. Please wait.

Presentation is loading. Please wait.

C ервер Oracle Некоторые возможности интеграции. Сервер Oracle – некоторые возможности интеграции  Работа с COM- объектами на сервере  Формирование.

Similar presentations


Presentation on theme: "C ервер Oracle Некоторые возможности интеграции. Сервер Oracle – некоторые возможности интеграции  Работа с COM- объектами на сервере  Формирование."— Presentation transcript:

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 <= 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)   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 Спасибо Ваши вопросы


Download ppt "C ервер Oracle Некоторые возможности интеграции. Сервер Oracle – некоторые возможности интеграции  Работа с COM- объектами на сервере  Формирование."

Similar presentations


Ads by Google