Тема 3. Интеграционные возможности ПП «Парус-Предприятие 8» Кошкин Алексей Антонович, Руководитель проектов «Центра Информационных Технологий и Консалтинга Парус» koshkin@parus.ru Тема 3. Интеграционные возможности Типовые задачи интеграции • Переход с другого приложения на Парус – полный перенос данных • Выгрузка данных для различных систем из Паруса • Разработка конвертера для периодического переноса данных в Парус • Организация связи с другой системой для работы с ее данными из Паруса по запросу Тема 3. Интеграционные возможности Общие проблемы интеграции • Выбор метода реализации (быстрый в разработке, гибкий, производительный, легкий в поддержке) • Формат передачи данных • Сопоставление данных с уже имеющимися • Удаление дублей и очистка данных • Преобразование данных (кодировка, формат файлов, размерность, тип данных, логические преобразования) Тема 3. Интеграционные возможности Средства интеграции двух уровней Средства Oracle Средства Клиента позволяют взаимодействовать c: позволяют взаимодействовать с: Парус 8 WEB http/smtp Другие БД (ADO, COM) Клиент Win-приложения (COM, ActiveX) Другие БД Сервер Файлы Файлы Тема 3. Интеграционные возможности Средства интеграции Oracle web-сервисы почтовые сервера xml-файлы xsl - трансформация валидация по схеме xml таблицы другие БД Oracle другие “не-oracle” СУБД ODBC-источники .txt с разделителем .txt произв. структуры utl_http utl_smtp Парус 8 dbms_xmldom dbms_xmlstore xmlType Парус-Клиент Destributed Database ( DBLink, HS ) СУБД Oracle utl_file • возможна авто-инициация (job) • файл обмена на сервере Тема 3. Интеграционные возможности Средства интеграции на клиенте Репликация Синхронизация БД Парус Экспорт/импорт разделов Парус 8 Парус-Клиент «Стандартный» Экспорт/иморт DBF Экспорт/импорт в файл СУБД Oracle • инициация с клиента • файл обмена на клиенте п.процедуры с blob/clob Пользовательские приложения + ActiveX dbf-файлы в формате Парус 8.5.4.0 03/2010 8.5.4.0 02/2008 - любые текстовые файлы - xml (для стандартных разделов) Широкие возможности ! Тема 4. Интеграция с помощью DBLink Особенности Репликации Парус • • • • • • • Отдельный сервис в лицензии Время на первоначальную настройку Перенастройка в случае обновления Парус Поддерживает XML и PRF Проверка и трансформация XML на клиенте Сложный контроль ошибок Ряд ограничений • СИС_Репликация.pdf Далее… Типовые задачи обмена данными: • связь с другими БД с помощью Database link • обмен в формате DBF • обмен в формате XML/TXT Тема 4. Интеграция с системами на основе СУБД Oracle Тема 4. Интеграция с помощью DBLink Для интеграции систем на Oracle часто используется Database link (DBLink) • • • Понятие DBLink и распределенных БД Для чего использовать DBLink Пример создания и использования DBLink Тема 4. Интеграция с помощью DBLink Распределенная БД DBLink к yyy Heterogenous services) DBLink к ххх Данные о новом сотруднике DBLink к Парусу Тема 4. Интеграция с помощью DBLink Для чего нужен DBLink? • • • Доступ к данным в режиме реального времени Пользователям не нужно регистрироваться и выдавать права во всех системах Одна технология для любых источников (Heterogonous services) Database link (связь базы данных) – односторонний указатель от сервера БД Oracle к другому серверу БД (не обязательно Oracle). Тема 4. Интеграция с помощью DBLink Создание DBLink 1. 2. 3. 4. Конфигурация Oracle Net Services на сервере БД Создание DBLink create [public] database link TESTLINK connect to <…> identified by <…> using <…>; Работа select * from employees@TESTLINK Создание синонимов Тема 4. Интеграция с помощью DBLink Ограничения DBlink • • Не все типы данных подлежат передаче Не все операции SQL поддерживаются (grant, analyze, describe, constraints) Для гетерогенных: DDL, связывание таблиц в запросе, специфические Oracle SQL конструкции • Производительность зависит от канала и сторонней системы Database link (связь базы данных) – односторонний указатель от сервера БД Oracle к другому серверу БД (не обязательно Oracle). Тема 5. Интеграция с системами, поддерживающими обмен в формате DBF Тема 5. Обмен данными в формате DBF Средства обмена данными в формате DBF: • • • • Экспорт/Импорт Парус Пользовательские приложения Разбор DBF на стороне сервера DBLink в связке с Heterogonous services (HS) Тема 5. Обмен данными в формате DBF DBF 1/9 «Стандартный» экспорт/импорт Парус в DBF +/- Для каждого раздела Парус своя структура файла +/- Импорт построчно с помощью стандартных серверных процедур + Ведется журнал ошибок + Подключение Парус-Конвертера для предварительной обработки данных - Не для всех разделов Тема 5. Обмен данными в формате DBF DBF 2/9 Пользовательские приложения и DBF • • • Любая структура DBF-файла Работа с DBF происходит на клиенте Использование ADO или COM-серверов Типовой алгоритм загрузки: Типовой алгоритм выгрузки: 1. Выдать диалог для выбора каталога 2. Загрузить файл во временную таблицу 3. Импортировать данные с помощью пользовательских процедур 1. Создать view для подготовки данных 2. Выдать диалог для выбора каталога 3. Выгрузить файл Тема 5. Обмен данными в формате DBF DBF 3/9 Загрузка из DBF с помощью MS Access var oApp = new ActiveXObject("Access.Application"); oApp.NewCurrentDatabase(sPath+sMdbFileName); var oDB = oApp.CurrentDb(); // подключение внешней таблицы к Access базе var tLinked = oDB.CreateTableDef("DBFHOUR"); tLinked.Connect = "dBase IV;DATABASE="+sPath; // sPath = c:\temp oDB.TableDefs.Append(tLinked); // … то же самое повторяем для таблицы DBFDAY var qdfNew = oDB.CreateQueryDef("qHOURDAY", "select DBFHOUR.RN, RN_DAY, WORKEDHOUR, HOURSTYPE, FLAG, WORKDATE, RN_CLN, DAYSTYPE from DBFHOUR, DBFDAY where DBFHOUR.RN_DAY=DBFDAY.RN"); var oRs = qdfNew.OpenRecordset(); oRs.MoveFirst(); StoredProc.StoredProcName="UDO_P_DBF_IMPORT"; while (!oRs.EOF) { … Тема 5. Обмен данными в формате DBF DBF 4/9 Выгрузка в DBF с помощью ADO var conn=new ActiveXObject("ADODB.Connection"); connStr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source='"+dbFolder+"';Extended Properties=dBASE III;User ID=Admin;Password="; conn.Open(connStr); var sqlOra="select numb, str, dat from udo_t_dbfdata"; Query.SQL.Text=sqlOra; Query.Open(); while(!Query.EOF) { sqlDBF="insert into "+tblFile+" (numb, str, dat) values ("+Query.FieldByName("numb").AsString()+", '"+Query.FieldByName("str").Value+"', "+strDate+")"; conn.Execute(sqlDBF); Query.Next(); } conn.Close(); Тема 5. Обмен данными в формате DBF DBF 5/9 DBLink + Heterogonous services (HS) • • • • Работа с DBF происходит на сервере Создается постоянная связь DBLink Необходима настройка серверной части Возможен конфликт если не-Oracle система использует монопольный доступ к файлам • Для не-windows платформ могут быть проблемы с наличием драйверов Тема 5. Обмен данными в формате DBF DBF 6/9 1. DBLink + Heterogonous services (HS) Проверка установлен ли HS в БД select view_name from dba_views where owner='SYS' and view_name='HS_FDS_CLASS'; Шаг 3. 2. Настройка источника данных ODBC на сервере 3. Создание файла инициализации HS %ORACLE_HOME%\HS\admin\initHSDBF.ora Шаг 2. Тема 5. Обмен данными в формате DBF DBF 7/9 4. DBLink + Heterogonous services (HS) Настройка Oracle Net Services (tnsnames и listener) listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (PROGRAM = hsodbc) (ORACLE_HOME = d:\oracle\ora92) (SID_NAME = HSDBF) … 5. tnsnames.ora HSDBF = (DESCRIPTION = (ADDRESS_LIST = … ) (CONNECT_DATA =(SID = HSDBF)) (HS = OK) … Создание DBLink create public database link HSDBF connect to dummy identified by "dummy" using 'HSDBF'; Тема 5. Обмен данными в формате DBF DBF 8/9 6. DBLink + Heterogonous services (HS) Проверка связи select table_name, column_name from dba_tab_columns@HSDBF; TABLE_NAME -----------------------------employee employee 7. COLUMN_NAME -----------------------workhour workdate Работа select * from employee@HSDBF; commit; update ... commit; ALTER SESSION CLOSE DATABASE LINK HSDBF; Тема 5. Обмен данными в формате DBF DBF 9/9 DBLink + Heterogonous services (HS) Преимущества: • • • • Работа в реальном времени, моментальное отображение изменений Поддержка всех sql-конструкций, которые предоставляет не-Oracle система Нет дублирования данных Не тратится время на загрузку/выгрузку/репликацию Тема 6. Интеграция с информационными системами, поддерживающими форматы XML и TXT Тема 6. Обмен данными в формате TXT TXT Ключевые особенности • Нет типов данных как таковых: необходимо четко определить формат даты и разделитель дробной части • Для файлов с разделителем: символразделитель и символ-ограничитель полей • Для структурированных: начало и конец секции • Кодировка может быть различной Тема 6. Обмен данными в формате TXT TXT Оптимальное решение для импорта Загрузка файла в CLOB Разбор на сервере Размещение во временных таблицах Обработка (процедура) Импорт в разделы Парус Преимущества • Значительно быстрее по сравнению с разбором на клиенте и вставке построчно • Более быстрый разбор + все функции Oracle и регулярные выражения • Возможно создание индексов во временных таблицах Тема 6. Обмен данными в формате TXT TXT Пример разбора текстового файла nROW integer; rROW UDO_IMP_BUFF%rowtype; Loop begin sRESULT := F_GET_NEXT_STRING(cCLOB); exit when sRESULT is null; nROW := nROW + 1; rROW.BATCH_ID := to_number( replace(strtok(sRESULT,sDELIMETER,1),',','.') ,'99999999999D999’ ,'NLS_NUMERIC_CHARACTERS = ''.,'''); rROW.ORDER_NR := replace(strtok(sRESULT,sDELIMETER,2),'-'); rROW.PRODUCT_NR := strtok(sRESULT,sDELIMETER,3); Тема 6. Обмен данными в формате TXT TXT Оптимальное решение для выгрузки Процедура на PLSQL Вставка CLOB в спец-таблицу FILE_BUFFER «Экспорт в файл» Преимущества • Логика обработки на сервере • Функция Паруса «Экспорт в файл» доступна во всех разделах • Доступны пользовательские процедуры с CLOB-параметрами Тема 5. Обмен данными в формате TXT TXT create directory OBMEN as 'c:\TEMP'; UTL_FILE • • • • v_file utl_file.file_type; v_file := utl_file.fopen( ‘c:\temp', 'parus.txt', 'w'); файл должен utl_file.putf(v_file,sTEXT); располагаться utl_file.fclose(v_file); на сервере возможна автоматическая выгрузка по расписанию рабочая папка указывается в параметрах init.ora либо в oracle directory работа с текстовыми файлами происходит построчно Тема 6. Обмен данными в формате TXT XML Типовые варианты работы DBMS_XMLDOM 1. Загрузка в CLOB/varchar2 Разбор с помощью XMLDOM Обработка и импорт в разделы Паруса DOM – Document object model Тема 6. Обмен данными в формате XML XML Типовые варианты работы -- Create table create table UDO_TMP_XML ( 2. Загрузка в CLOB/XMLType inxml xmltype, XSL-преобразвание в канонический вид outxml xmltype, inxsl xmltype, Вставка во временные таблицы rn number(17) Обработка и импорт в разделы ) Паруса update UDO_TMP_XML t set t.outxml = t.inxml.transform(t.inxsl); select t.outxml.getClobVal() into cCLOB from UDO_TMP_XML where …; nCONTEXT := DBMS_XMLSTORE.newContext('UDO_TMP_ORDERS'); nRESULT := DBMS_XMLSTORE.insertXML(nCONTEXT, cCLOB); Тема 6. Обмен данными в формате XML XML Типовые варианты работы 3. Загрузка в CLOB/XMLType Выборка данных с помощью XMLType ---------------------Обработка и импорт в разделы Паруса ID_0000000005 ID_0000000003 select EXTRACTVALUE(t.inxml, '/Nomenclator/Row/ID') from UDO_TMP_XML t select extractvalue( t.inxml ,'//child::node()[position()=1]/Row[position()=1]/ID' ) from UDO_TMP_XML t Тема 6. Обмен данными в формате XML Пример Задача: Наладить автоматический импорт данных в Парус по расписанию из DBF и XML Решение: DBF UTL_FILE UDO_PKG XML2 UDO_PRC канонический XML XSL-шаблон UDO_PRC Тема 6. Обмен данными в формате TXT MAIL Интеграция с почтовыми серверами • DBMS_SMTP • Сервер уведомлений (для win-платформы) РУК_Сервер_уведомлений.pdf Тема 5. Обмен данными в формате DBF Тенденция: Хранение и обработка данных на сервере БД Источники информации • Oracle Database Administrator's Guide 10g Release 2 (10.2) Part Number B14231-02 • Oracle® Database Heterogeneous Connectivity Administrator's Guide 10g Release 2 (10.2) Part Number B14232-01 • ADO Object Model http://msdn.microsoft.com/en-us/library/ms675944(v=VS.85).aspx