Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Общие вопросы Ирбис64 :  ИРБИС Irbis
 
Запись через http в бд Ирбиса
Пользователь: sio.ui@kemguki.ru (IP-адрес скрыт)
Дата: 26, February, 2016 12:44

еме сдЗдравствуйте. У нас есть задача по интеграции ирбиса с базой студентов и сотрудника вуза, таким образом, чтобы внешняя система вносила данные в базу читателей без участия операторов. Сгенерировать файл нужного формата во внешней системе и сделать руками импорт в Ирбисе можем уже сейчас, но хочется без людей.

Чтобы не усложнять, хочется использовать максимально простые / распространенные сетевые протоколы для этих действий.Идеальный вариант - что-то на базе HTTP (REST/SOAP веб/сервис и т.п.) Есть ли какие-то подобные возможности в ирбисе?

Если с этим туго, то может быть Z39.50? Позволяет ли Ирбисовская реализация Z39.50 записывать данные в базы данных?

Какие ещё способы записать в Ирбис есть? Вот системы, из которых мы потенциально можем захотеть работать с БД Ирбиса:
Oracle Database на Linux
1С Предприятие на Windows (но возможен в перспективе переезд на Linux, поэтому без COM)
PHP-проекты

Дворовенко Вадим Николаевич,
заведующий сектором информационного обеспечения Управления информатизации КемГИК

Re: Запись через http в бд Ирбиса
Пользователь: Gena (IP-адрес скрыт)
Дата: 26, February, 2016 13:29

Вадим Николаевич, у вас целый спектр возможных направлений решения этой задачи:

1. Использовать ВебИрбис для решения этой задачи. Он умеет читать записи, показывать их на экран, принимать от читателя/сервиса некоторую заполненную форму(POST или GET запрос) и редактировать или создавать новые записи в указанной базе. Живой пример этого - форма для самостоятельной регистрации читателей через ВебИрбис. Она и предполагает, что потенциальный читатель зайдет на сайт, введет некоторые данные и они улетят в базе предварительной регистрации, а далее оператор, убедившись, что все поля правильно заполнены, переносит данные из предварительной базы в основную. Так как в вашем случае передача будет вестись между программами, то можно сразу же кидать данные в основную БД. Пример реализации есть в штатном дистрибутиве и рассмотрен в документации. Есть свои минусы в работе, связанные с предварительной настройкой фреймов и ини-файла ВебИрбиса, но это уж на ваше усмотрение.

2. Можно использовать клиентскую библиотеку для прямого доступа к Серверу САБ ИРБИС64. Фактическим вы можете создать свой собственный АРМ, который будет одновременно работать и с базами системы экспортера и с базами системы импортера. Клиентская библиотека достаточно простая в понимании и позволяет решить почти что любую задачу по поиску, редактированию, созданию, показу записей. А так же куче еще чего. Описание в дистрибутиве САБ ИРБИС64 в файле irbis64_client_dll.doc

3. Можно написать свой собственный модуль для подключения к серверу САБ ИРБИС64 с обработкой протокола обмена данными своими собственными средствами. Протокол и принцип работы с сервером описаны в документе Сервер 64.doc. Там вообще никаких ограничений на работу. Сделать можно что угодно.

Последний вариант мы используем в работе для организации обмена данными между CRM и сервером САБ ИРБИС64 (как раз создание записей в базе читателей)

Re: Запись через http в бд Ирбиса
Пользователь: sio.ui@kemguki.ru (IP-адрес скрыт)
Дата: 29, February, 2016 05:04

Спасибо.
Вариант 1 не подходит, так как нужен режим полностью без оператора, кроме того нужно иметь возможность не только создавать, но и читать и обновлять существующие записи, а значит тем же способом злоумышленник сможет вытащить бд читателей, а там адреса, телефоны, паспортные данные, логины и пароли.
Вариант 2 понятен, но это сразу требует использования какого-то компилируемого языка под windows, в то время как хотелось бы использовать какой-то скриптовый кроссплатформенный язык.
Вариант 3 понятен, но документация по серверу крайне скудна, не описывает базовых моментов создания соединения. Только из того, что ирбис-сервер работает на tcp-порту 6666 понимаю, что видимо нужно открывать tcp-соединение. При этом встроенного функционала для работы с tcp в той же 1С нет.

А ваша CRM на чём работает? Можно ли заполучить куски кода?

Видимо придется делать некий конвертер Ирбис-TCP в HTTP, а уже из других систем работать через него.

Re: Запись через http в бд Ирбиса
Пользователь: Gena (IP-адрес скрыт)
Дата: 29, February, 2016 08:34

Вадим Николаевич, вы не совсем правильно поняли то, что я написал выше. Все эти три варианта могут работать полностью автономно. Без участия человека.

Вариант с оператором в веб-ирбисе штатный. Но никто не запрещает перенастроить регистрацию прямо в базу РДР без дополнительного подтверждения со стороны человека. Тут я хотел показать саму суть: ВебИрбис может выполнять прием внешних данных в виде POST или GET запросов и сохранять их в нужную вам базу.

По остальным вариантам. Вы можете писать модули для подключения к ТСП-Серверу Ирбиса на любом языке. Штатные разработки пишутся разработчиками системы на Делфи, есть на форуме пользователи, которые написали библиотеку для подключения к серверу ирбиса на C#. Но вполне корректно можно работать и на PHP. Там сама идеология работы очень простая:


1. Соединились
2. Сформировали запись
3. Сохранили запись (среди прочих параметров передается MFN - это ирбисовский аналог id записи, если он равен нулю - то создается новая запись, не равно нулю - корректируется существующая)
4. Отконнектились


Вот и все. Все команды передаются в виде текстовых последовательностей, описанных в документации. Сразу скажу, в документации точно есть ошибки. Там в каких-то командах перепутана очередность подачи логина и пароля, и, если я не ошибаюсь, при передачи данных серверу между строками указываются разделители типа #30#31, а должны быть наоборот - #31#30. Но это все не так уж и сложно подобрать, или подсмотреть снифферов у реальных АРМов.

Re: Запись через http в бд Ирбиса
Пользователь: sio.ui@kemguki.ru (IP-адрес скрыт)
Дата: 04, March, 2016 09:50

Случайно нашёл, именно то, что нужно. Называется WebToIrbisServer. Получает запросы в HTTP и направляет их на сервер ирбис. Но теперь возник вопрос, как переписать запросы из формата TCP (по которому есть документация) в формат HTTP, который будет понимать WebToIrbisServer. Существует ли по нему какая нибудь документация?

Re: Запись через http в бд Ирбиса
Пользователь: Gena (IP-адрес скрыт)
Дата: 04, March, 2016 10:37

Этот модуль служит оберткой ТСР-пакетов протокола Ирбиса для передачи в нестабильных сетях. Вряд ли это то, что вам поможет

Re: Запись через http в бд Ирбиса
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 04, March, 2016 14:51

Цитата:
Получает запросы в HTTP и направляет их на сервер ирбис.
Мне кажется, что запросы в http не получает. АРМ-ы отправляют запросы по 80 порту, а WebToIrbisServer перенаправляет их к серверу. Посмотрите в сторону IRBIS-128.
Может, будет проще, если пользователей вводить в "обычную БД" (sql) и в автоматическом режиме делать импорт в БД читателей?

Re: Запись через http в бд Ирбиса
Пользователь: sio.ui@kemguki.ru (IP-адрес скрыт)
Дата: 04, March, 2016 16:57

Так мне это и нужно, обернуть TCP-запрос. Только нужно понять, как их оборачивать. Просто делать http-запросы проще, чем tcp, т.к. это более выского уровня протокол и его больше систем из коробки поддерживает. Собственно я выше и писал, что я уже подумывал о создании конвертера HTTP- Ирбис-TCP, а вот он, уже создан. Только нужно понять, как им пользоваться.

Цитата:
Мне кажется, что запросы в http не получает.
Первая строчка из темы про WebToIrbisServer:
Цитата:
Приложение WebToIrbisServer является средством обеспечения работы с ИРБИС TCP/IP сервером по протоколу HTTP.
Ирбис-128 у нас нет, и покупать мы его не собираемся.
Цитата:
Может, будет проще, если пользователей вводить в "обычную БД" (sql) и в автоматическом режиме делать импорт в БД читателей?
Если вы читали, именно это мне и нужно. Пользователи у меня уже в sql. Теперь расскажите мне, как же в автоматическом режиме делать импорт в БД читателей

Re: Запись через http в бд Ирбиса
Пользователь: amironov73 (IP-адрес скрыт)
Дата: 05, March, 2016 05:44

sio.ui@kemguki.ru написал(а):
-------------------------------------------------------
> Пользователи у меня уже в sql. Теперь расскажите
> мне, как же в автоматическом режиме делать импорт
> в БД читателей

С использованием ManagedClient64 на C# это будет выглядеть примерно так (в предположении, что информация о читателях извлекается из Microsoft SQL Server):

using System;
using System.Data.SqlClient;

using ManagedClient;

// Соединяемся с SQL Server
string sqlConnectionString = "Server=myServerAddress;"
    + "Database=myDataBase;"
    + "User Id=myUsername;"
    + "Password=myPassword;";
SqlConnection sqlConnection = new SqlConnection
    (
        sqlConnectionString
    );
sqlConnection.Open ();

// Подключаемся к серверу ИРБИС64
string irbisConnectionString = "host=192.168.1.1;"
    + "port=6666;"
    + "user=admin;" 
    + "password=secret;"
    + "db=RDR;";
ManagedClient64 irbisClient = new ManagedClient64 ();
irbisClient.ParseConnectionString 
    (
        irbisConnectionString
    );
irbisClient.Connect ();

// Формируем запрос к SQL Server
SqlCommand command = sqlConnection.CreateCommand ();
command.CommandText = "select * from reader_table";
SqlDataReader sqlReader = command.ExecuteReader ();

// Проходим по всем считанным из SQL записям
while (sqlReader.Read ())
{
    // Библиографическая запись, в которую
    // будут помещены сведения о читателе
    IrbisRecord irbisRecord = new IrbisRecord ();

    // Извлекаем поля из SQL: фамилия, имя и т. д.
    
    // Фамилия
    string surname = (string) sqlReader ["surname"];
    irbisRecord.AddField ("10", surname);
    
    // Имя
    string name = (string) sqlReader ["name"];
    irbisRecord.AddField ("11", name);

    // Отчество
    string patronym = (string) sqlReader ["patronym"];
    irbisRecord.AddField ("12", patronym);

    // Год рождения
    string year = (string) sqlReader ["year"];
    irbisRecord.AddField ("21", year);

    // Идентификатор читателя (например, номер билета)
    string ticket = (string) sqlReader ["ticket"];
    irbisRecord.AddField ("30", ticket);

    // Пол
    string gender = (string) sqlReader ["gender"];
    irbisRecord.AddField ("23", gender);

    // Категория
    string cathegory = (string) sqlReader ["cathegory"];
    irbisRecord.AddField ("50", cathegory);

    // E-mail
    string email = (string) sqlReader ["email"];
    irbisRecord.AddField ("32", email);

    // Дата записи - сегодня
    string recordDate = DateTime.Today.ToString ("yyyyMMdd");
    irbisRecord.AddField ("51", recordDate);

    // Отсылаем в ИРБИС
    irbisClient.WriteRecord ( irbisRecord, false, true );

    // Выводим в консоль:
    // Конвертирован читатель 123456 (Иванов Иван)
    Console.WriteLine 
        (
            "Конвертирован читатель {0} ({1} {2})",
            ticket,
            surname,
            name
        );
}

// Отключаемся от ИРБИСа и от SQL Server
irbisClient.Disconnect ();
sqlConnection.Close ();

Код весьма приблизительный и сильно упрощённый. Так, в нём отсутствует обработка ошибок и null-значений в полях SQL.

ManagedClient64 можно взять в NuGet: https://www.nuget.org/packages/ManagedClient/, предпочтительной платформой является .NET 4.0.



Редактировано 1 раз. Последний раз 05.03.2016 05:57 пользователем amironov73.

Re: Запись через http в бд Ирбиса
Пользователь: sio.ui@kemguki.ru (IP-адрес скрыт)
Дата: 10, March, 2016 05:18

amironov73, спасибо, но это не совсем то, что мне нужно. Я не могу просто так воспользоваться managedclient из php, oracle database xe, не уверен, что зацепится к 1с под linux.
В результате получается, если использовать managedclient, то придётся разрабатывать отдельный проект на каком-то из .net-языков, который будет отвечать только за перенос пользователей из одной бд в другую. А я не хочу плодить сущности и хочу реализовать это в рамках уже имеющихся систем b однотипно через http, так как все наши системы умеют работать по http.
К несчастью я не могу посмотреть исходники managedclient этого проекта, чтобы узнать, поддерживает ли он соединение через WebToIrbisServer и каким образом при этом формаируются запросы к серверу.

Re: Запись через http в бд Ирбиса
Пользователь: amironov73 (IP-адрес скрыт)
Дата: 10, March, 2016 07:31

sio.ui@kemguki.ru написал(а):
-------------------------------------------------------
> К несчастью я не могу посмотреть исходники
> managedclient этого проекта, чтобы узнать,
> поддерживает ли он соединение через
> WebToIrbisServer и каким образом при этом
> формаируются запросы к серверу.

Исходные тексты ManagedClient хранятся в GitHub: https://github.com/amironov73/ManagedClient.4

Возможности подключения к серверу через WebToIrbisServer в ManagedClient я не закладывал.

Re: Запись через http в бд Ирбиса
Пользователь: IAK (IP-адрес скрыт)
Дата: 14, April, 2016 13:28

товарищи, а можно про PHP поподробнее? как к этим функциям правильно обратиться из PHP?
ну, или ссылки на примеры



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.