1 / 20

C ервер Oracle

C ервер Oracle. Некоторые возможности интеграции. Сервер Oracle – некоторые возможности интеграции. Работа с COM- объектами на сервере Формирование документа MS-Excel Формирование PDF документа Как без COM? Работа с функциями ОС сервера Принципиальная схема работы

lilka
Download Presentation

C ервер Oracle

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. Работа с COM-объектами на сервере – Схема работы СЕРВЕР Область процессов экземпляра БД Oracle Внешние проецессы Oracle Listener Экземпляр БД Хранимые PL/SQL объекты Oracle Net RPC Обработчик RPC Данные БД Oracle COM Feature Внешние COM серверы COM/DCOM

  5. Работа с COM-объектами на сервере – Установка математического обеспечения

  6. Работа с COM-объектами на сервере – Конфигурирование служб Oracle Net • LISTENER.ORA LISTENER = (ADDRESS_LIST= … (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC0) ) … ) • TNSNAMES.ORA EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC) (KEY = EXTPROC0)) (CONNECT_DATA = (SID = plsextproc))) )

  7. Работа с COM-объектами на сервере – Настройка серверной части • Компиляция объектов Oracale COM Automation Feature SQL> CONNECT PARUS/PARUSINA@DATABASE SQL> @<ORACLE_HOME>\COM\COMWRAP.SQL

  8. Работа с COM-объектами на сервере – Установка надстроек для работы с COM-серверами MS Word, MS Excel, MS Power Point, MAPI • Компиляция объектов надстроек для Excel, Word, PowerPoint, MAPI SQL> CONNECT PARUS/PARUSINA@DATABASE SQL> @<ORACLE_HOME>\COM\DEMOS\EXCELSOL.SQL SQL> @<ORACLE_HOME>\COM\DEMOS\WORDSOL.SQL SQL> @<ORACLE_HOME>\COM\DEMOS\PPTDSOL.SQL SQL> @<ORACLE_HOME>\COM\DEMOS\MAPISOL.SQL

  9. Работа с COM-объектами на сервере - Документация • Oracle COM Automation Feature Developer's Guide • 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

  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 whereROWNUM <= 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;endloop; 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/ • PL/PDF • http://www.plpdf.com/plpdf-sdk.html

  12. Работа с COM-объектами на сервере – Как без COM? • XML - XLS • http://msdn.microsoft.com/ru-ru/office/aa905546.aspx

  13. Работа с COM-объектами на сервере – Как без COM? • POI-HSSF (PoorObfuscationImplementation - HorribleSpreadSheet Format) и POI-XSSF (PoorObfuscationImplementation – XML SpreadSheet Format) • http://poi.apache.org/spreadsheet/index.html • Java Excel API • http://jexcelapi.sourceforge.net/

  14. Работа с функциями ОС сервера – Принципиальная схема работы СЕРВЕР Область процессов экземпляра БД Oracle Внешние проецессы Экземпляр БД PL/SQL-обёртка Java Class ОС Oracle JVM Прикладные PL/SQL объекты

  15. Работа с функциями ОС сервера – Пример выполнения команды ОС create or replace and compile java source named "OsUtils" as importjava.io.IOException; importjava.io.InputStream; importjava.io.BufferedReader; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; classStreamGobbler extends Thread { InputStream is; String type; StreamGobbler (InputStream is, String type) { this.is = is; this.type = type; } publicvoid run () { try { InputStreamReaderisr = newInputStreamReader(is); BufferedReaderbr = newBufferedReader(isr); String line; while ((line = br.readLine()) != null) OsUtils.result.append(line).append("\n"); } catch (IOExceptionioe) {ioe.printStackTrace();} } } publicclassOsUtils { publicstaticStringBuffer result; publicstaticintrunCommand (String command) throwsThrowable { result = newStringBuffer(); Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(command); StreamGobblererrorGobbler = newStreamGobbler(proc.getErrorStream(), "ERROR"); StreamGobbleroutputGobbler = newStreamGobbler(proc.getInputStream(), "OUTPUT"); errorGobbler.start(); outputGobbler.start(); proc.waitFor(); returnproc.exitValue(); } } 1. Java Class, выполняющий команду операционной системы runCommand Экспортируемая функция интерфейса класса Runtime.getRuntime() Runtime.exec(<КОМАНДА ОС>)

  16. Работа с функциями ОС сервера – Пример выполнения команды ОС create or replace function udo_f_run_os_command (p_cmd in varchar2) return number aslanguage java name 'OsUtils.runCommand (java.lang.String) return int'; 2. PL/SQL-обёртка declareresultnumber;beginresult := 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 BEGINdbms_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));EXCEPTIONWHENno_data_foundTHENEXIT;END;ENDLOOP;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) createprocedure UDO_P_START_PRINTINGas NJOB binary_integer;begindbms_job.submit(job => NJOB ,what => 'begin UDO_P_DO_PRINTING; end;');end; createprocedure UDO_P_DO_PRINTINGasbegin 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. Спасибо Ваши вопросы

More Related