Способы выполнения команд
Описание способа вызова
Формат запроса: XML-документ с корневым элементом RK7Query, внутри которого
- Либо один тег RK7CMD
- Либо несколько тегов RK7Command
- Либо несколько тегов RK7Command2
Предпочитаемый способ:
- Во всех вновь создаваемых интеграциях следует использовать RK7Command2
- Во всех существующих интеграциях следует оценить возможность перехода на использование RK7Command2
- Это позволит:
- Упростить анализ логов — запрос и ответ в одном файле, нет необходимости искать запрос и ответ отдельно
- Упростить работу для систем, выполняющих несколько запросов: анализ ответа может строиться на данных ответа. Т. е. запросы GetRefData — обновить кеш справочников, запросы SaveOrder — в очередь обработки заказов.
RK7CMD: выполнение одиночной команды
- Исторически первый вариант вызова команд в XML Интерфейсе r_keeper 7
- Минусы (на момент реализации)
- Не позволяет выполнить несколько команд одним пакетом
- Пример:
Запрос
<?xml version="1.0" encoding="utf-8"?> <RK7Query> <RK7CMD CMD="GetSystemInfo"/> </RK7Query>XMLОтвет
<?xml version="1.0" encoding="utf-8"?> <RK7QueryResult ServerVersion="7.6.5.92" XmlVersion="246" NetName="OA-01-REPS-000" Status="Ok" CMD="GetSystemInfo" ErrorText="" DateTime="2020-02-12T20:28:51" WorkTime="0" Processed="1"> <SystemInfo SystemTime="3790700931046" ReqSysVer="2" NetName="OA-01-REPS-000" ProcessID="4788"/> </RK7QueryResult>XML
RK7Command: выполнение пакета команд
Развитие RK7CMD с целью выполнения нескольких запросов
- Плюсы
- Позволяет выполнить несколько команд одним пакетом
- Минусы (на момент реализации)
- Документ ответа не содержит исходного запроса: затруднен анализ логов и анализ на стороне сторонних систем
- Пример:
Запрос
<?xml version="1.0" encoding="utf-8"?> <RK7Query> <RK7Command CMD="GetSystemInfo"/> <RK7Command CMD="GetRefData" RefName="EventList"/> </RK7Query>XMLОтвет
<?xml version="1.0" encoding="utf-8"?> <RK7QueryResult ServerVersion="7.6.5.92" XmlVersion="246" NetName="OA-01-REPS-000" Status="Ok" Processed="2"> <CommandResult CMD="GetSystemInfo" Status="Ok" ErrorText="" DateTime="2020-02-12T20:39:02" WorkTime="0"> <SystemInfo SystemTime="3790701542539" ReqSysVer="2" NetName="OA-01-REPS-000" ProcessID="4788"/> </CommandResult> <CommandResult CMD="GetRefData" Status="Ok" ErrorText="" DateTime="2020-02-12T20:39:02" WorkTime="16"> <RK7Reference DataVersion="3" Name="EVENTLIST"> <Items> <Item Ident="1000282" GUIDString="{8F611272-83CD-43B3-8AFF-B58C47956083}" Code="1" Name="Импорт цены SH5"/> </Items> </RK7Reference> </CommandResult> </RK7QueryResult>XML
RK7Command2: выполнение пакета команд (рекомендуемый)
Развитие RK7Command с целью сохранения информации об исходном запросе в ответе (в теге SourceCommand)
- Плюсы
- Позволяет в результирующем XML получить исходный текст запроса, это
- Упрощает анализ логов — запрос и ответ в одном месте
- Упрощает разбор на стороне внешней системы
- Позволяет в результирующем XML получить исходный текст запроса, это
- Минусы (на момент реализации)
- Увеличивается трафик, решения
- HTTP: Использовать GZIP
- RK7XML.DLL: Сжимает самостоятельно
- Увеличивается время разбора XML, решения
- Исследовать увеличение: если оно критично, НЕ использовать этот вариант
- В случае не совсем корректного кода разбора XML потребуется адаптация кода
- Например, если ноды выбирались по номерам/спискам дочерних объектов
- Увеличивается трафик, решения
- Пример:
Запрос
<?xml version="1.0" encoding="utf-8"?> <RK7Query> <RK7Command2 CMD="GetSystemInfo"/> <RK7Command2 CMD="GetRefData" RefName="EventList"/> </RK7Query>XMLОтвет
<?xml version="1.0" encoding="utf-8"?> <RK7QueryResult ServerVersion="7.6.5.92" XmlVersion="246" NetName="OA-01-REPS-000" Status="Ok" Processed="2"> <CommandResult CMD="GetSystemInfo" Status="Ok" ErrorText="" DateTime="2020-02-12T20:43:58" WorkTime="0"> <SourceCommand> <RK7Command2 CMD="GetSystemInfo"/> </SourceCommand> <SystemInfo SystemTime="3790701838355" ReqSysVer="2" NetName="OA-01-REPS-000" ProcessID="4788"/> </CommandResult> <CommandResult CMD="GetRefData" Status="Ok" ErrorText="" DateTime="2020-02-12T20:43:58" WorkTime="15"> <SourceCommand> <RK7Command2 CMD="GetRefData" RefName="EventList"/> </SourceCommand> <RK7Reference DataVersion="3" Name="EVENTLIST"> <Items> <Item Ident="1000282" GUIDString="{8F611272-83CD-43B3-8AFF-B58C47956083}" Code="1" Name="Импорт цены SH5"/> </Items> </RK7Reference> </CommandResult> </RK7QueryResult>XML