Файловый обмен

Материал из Wiki ГКБ
Перейти к навигации Перейти к поиску

Описание структуры и команд входящего файла

  1. Все входящие файлы архивируется в формате ZIP;
  2. Файлы должны иметь расширение ZIP;
  3. Имена файлов могут быть любыми на усмотрение страховой компании, но они не должны повторяться;
  4. Внутри входящего архивного файла могут быть несколько входящих командных файлов;
  5. Все даты передаются в ЕСБД в формате ДД.ММ.ГГГГ, разделитель целой и дробной части – «.»(точка), разделитель разрядов – отсутствует. Логические поля имеют варианты значения True, False
  6. Все ключевые поля (идентификаторы) имеют тип «число» размером 11 байт. Для обозначения вставки используется ключ меньше нуля. В ответе будет возвращено, какой отрицательный ключ был заменен реальным ключом ЕСБД.
  7. Команды входящих командных файлов
Имя команды Назначение
:GETTABLEDATA= запрос данных
:TABLE= передача данных для вставки/изменения/удаления записи из таблицы
:CHILDTABLE= обеспечивает единую транзакцию. Записи будут сохранены, только в случае если была сохранена запись из команды :TABLE
:DYNAMICCHILDTABLE= Аналогична команде :CHILDTABLE, только связь с :TABLE – динамическая


Описание структуры и команд файла-ответа

  1. На каждый непустой входящий файл, система формирует файл ответа, причем:
    Имя файла – имеет формат <Имя_входящего_файла>.ANS.ZIP;
    Файл заархивирован в формате ZIP;
    Внутри архивного файла-ответа содержатся файлы ответов на командные файлы содержавшиеся во входящем файле;
    Имена файлов ответов имеют формат <Имя_командного_файла>.ANS
  2. Команды файлов ответов:
Имя команды Назначение
:CRCERROR Ошибка контрольной суммы
:ERROR= Ошибка с описанием и указанием номера строки
:TABLE= Записи таблицы, сформированные по запросу :GETTABLEDATA
:CHANGEID Список выданных ключей

Принцип формирования файла

  1. Каждая команда начинается с новой строки без пробелов;
  2. Все команды, кроме табличных команд, пишутся в одну строку;
  3. Все ключевые поля (идентификаторы) имеют тип «число» размером 11 байт. Для обозначения вставки используется ключ меньше нуля. В ответе будет возвращено, какой отрицательный ключ был заменен реальным ключом ЕСБД.
  4. Табличные данные передаются в виде:
  • В строках, следующих за командой, перечисляется список имен полей, разделенных символом табуляции. После строки с именами полей указываются строки с данными, поля которых также разделяются символом табуляции. Конец блока определяется концом файла, либо строкой, содержащей следующую команду.
  • Пример:
:<ИМЯ_КОМАНДЫ><br>ПОЛЕ1<символ_табуляции>ПОЛЕ2<символ_табуляции>ПОЛЕ3<br>ЗНАЧЕНИЕ1<символ_табуляции>
ЗНАЧЕНИЕ2<символ_табуляции>ЗНАЧЕНИЕ3<br>ЗНАЧЕНИЕ1<символ_табуляции>ЗНАЧЕНИЕ2<символ_табуляции>ЗНАЧЕНИЕ3


Описание команд

Команда :GETTABLEDATA

Назначение: Запрос данных из ЕСБД

Синтаксис:

:GETTABLEDATA=<Имя_Таблицы>;CONDITION=<Условия>;COLUMNS=<Колонки>;

Команда пишется в одной строке. Конец командного блока определяется концом файла, либо строкой, содержащей следующую команду.

Имя таблицы Имя таблицы, из которой осуществляется выборка
Условия SQL условия, ограничивающие записи (алиас таблицы выборки, для подзапросов - tab99).
При работе с полями типа «Дата» используется преобразование TO_DATE(’01.01.2007’,’dd.mm.yyyy’)
Колонки колонки из таблицы, так же могут использоваться функции (алиас колонки при этом - обязателен)

Доступные функции:
GetDriverClass(aClientID NUMBER, aOnDate DATE) RETURN NUMBER – возвращает идентификатор класса «бонус-малус», где:
aClientID – идентификатор клиента ЕСБД;
aOnDate - дата на которую необходимо получить класс;
GetDriverClassText( aClientID NUMBER, aOnDate DATE) RETURN VARCHAR2 – возвращает название класса «бонус-малус», где:
aClientID – идентификатор клиента ЕСБД;
aOnDate - дата на которую необходимо получить класс;

Пример:

:GETTABLEDATA=CLIENTS;CONDITION=GetDriverClass(tab99.Client_ID,SYSDATE)<>5;
COLUMNS=CLIENT_ID,GetDriverClass(tab99.Client_ID,SYSDATE) AS CLASS


Команда: TABLE

Назначение: Вставка/редактирование/удаление данных. Данная команда используется во входящем файле – в качестве команды вставки/изменения данных таблицы, либо в файле ответа – в качестве результата команды.

Синтаксис:

:TABLE = <Имя_таблицы>
Поле1<символ_табуляции>Поле2<символ_табуляции>Поле3
Значение1<символ_табуляции>Значение2<символ_табуляции>Значение3
…
:CHILDTABLE=<Имя_дочерней_таблицы>
Поле1<символ_табуляции>Поле2<символ_табуляции>Поле3
Значение1<символ_табуляции>Значение2<символ_табуляции>Значение3

Конец командного блока определяется концом файла, либо строкой, содержащей следующую команду.

Имя таблицы Имя таблицы, в которую производится вставка/редактирование/удаление
Поле1, Поле2, Поле3 Имена полей, разделенные символом табуляции.

Существует так же служебное поле Sys_Is_Deleted_Row – типа логическое – При значении True – данная запись будет удалена из таблицы.

Значение1, Значение2, Значение3 Перечень значений строки. При удалении записи необходимо указать только значение поля ключа таблицы и заполнить значение поля Sys_Is_Deleted_Row в True
:CHILDTABLE= Необязательный блок CHILDTABLE, по структуре совпадает с блоком :TABLE и обеспечивает сохранение дочерней таблицы в одной транзакции с родительской, например:


:TABLE=POLICIES

CHILDTABLE=POLICIES_TF


CHILDTABLE=DRIVERS
(!)Все изменения проводимые командой :TABLE проводятся одной транзакцией, включая блок :CHILDTABLE. Для разделения транзакций, разбивайте блок :TABLE на несколько частей. Для вставки используйте отрицательные значения ключей.