Интеграция между системами Directum RX и системой Галактика на платформе ORACLE

13 2

Вводная

На одном из проектов для успешного внедрения системы Directum RX 4.0, потребовалась автоматизация процессов ведения справочников Должности, Подразделения и Сотрудники, которые у заказчика ведутся в другой системе, а именно, в системе “Галактика”. У заказчика 32-разрядная система “Галактика” развернута на платформе ORACLE.

При разработке своей библиотеки для получения данных из системы “Галактика” я столкнулась с несколькими проблемами:

  1. Разрядность систем. Как, выше, я уже упоминала, у заказчика развернута система Галактика 32-разрядная, в то время как Directum RX – 64-разрядный.
  2. Версия Oracle DataBase, которая была установлена n-лет назад, больше не обновлялась. Версия у заказчика была – 10g (10.0.5). (навскидку на тот момент последняя версия была – 21c (21.7.0.0))

Борьба с Oracle

Главная проблема состояла в следующем: версии Oracle Database желательно работать с той же версией библиотеки Oracle Client, что была и при установке. Oracle Client – это часть программного обеспечения Oracle Database, который не является базой данных, но помогает "разговаривать" с базой данных Oracle.

Такую старую версию я нашла на официальном сайте, но скачать не получилось, так как она уже не поддерживается. Версия, которую мне удалось скачать и установить, не смогла достучаться до базы Oracle. Пришлось поднимать документацию, по которой устанавливалась система Галактика у заказчика. Уже как раз там мы и нашли дистрибутивы библиотеки Oracle Client нужной нам версии.

Воспользовавшись коробочной 64-разрядной библиотекой Oracle Client и подключившись с ее помощью к базе данных, я и разработала свою библиотеку в Visual Studio, с помощью которой получала данные из Галактики.

То есть на сервере были установлены и 32 и 64-разрядные библиотеки Oracle Client.

В переменные среды были добавлены:

  • ORACLE_HOME – путь к каталогу, где установлено программное обеспечение клиента Oracle,
  • TNS_ADMIN – путь, где находится файл tnsnames.ora,

Также в Path занесены пути нахождения данных библиотек.

Также в ISS в соответствующем пуле в дополнительных параметрах я указала true для 32 разрядных приложений. Проблема была решена.

Обновление версии Directum RX

Когда пришло время обновляться на новую версию Directum RX 4.2, данная библиотека Oracle Client отказалась работать.

В справке версии Directum RX 4.1 есть момент, проливший свет на ситуацию:

" <…> веб-сервер, среда разработки и все микросервисы Directum RX переведены на версию .NET Core 3.1. Если вы используете какие-либо сторонние компоненты в своей разработке, то переведите их на указанную версию. При этом сторонние библиотеки для прикладной разработки Directum RX должны быть собраны под .NET Standard 2.0.

Если же ваши сторонние компоненты поддерживают работу только с .NET Framework и используются в вычислениях сервиса асинхронных событий Worker, то для совместимости оставлена возможность перенастроить сервис на работу под .NET Framework 4.8."

В управлении пакетами NuGet я скачала и установила пакет odp.net.x64. Воспользовавшись библиотекой Oracle.DataAccess, я разработала два класса для соединения:

Класс DBOracleUtils - для непосредственного подключения к Oracle.

Утилитарный класс DBUtils с параметрами для подключения именно к базе данных Oracle заказчика (на файле не актуальные данные подключения).

Таким образом, проблема по подключению без устаревшей библиотеки OracleClient была устранена, интеграция между системами возобновлена и работает, система Directum RX обновлена до нужной версии.

Антон Максунов

Получается у вас выполняются запросы к БД при получении данных? А запись производится? То есть интеграция односторонняя или двусторонняя? Чисто технически у Галактики есть com, который конечно жутко медленный и морально устарел и умеет работать только в 1 поток (потому что занимает конфигурационные файлы) и любит часто падать без видимых причин, но тем не менее при записи данных выполняет всю положенную прикладную логику, без которой складывать данные в Галактику просто опасно.

Елена Свитюк

Антон, интеграция односторонняя - я забираю данные (мне по техническому заданию не нужно было отдавать ничего в Галактику)

Авторизуйтесь, чтобы написать комментарий