Описание способа вызоваLink to Описание способа вызова

Формат запроса: XML-документ с корневым элементом RK7Query, внутри которого

  • Либо один тег RK7CMD
  • Либо несколько тегов RK7Command
  • Либо несколько тегов RK7Command2

Предпочитаемый способ:

  • Во всех вновь создаваемых интеграциях следует использовать RK7Command2
  • Во всех существующих интеграциях следует оценить возможность перехода на использование RK7Command2
  • Это позволит:
    • Упростить анализ логов — запрос и ответ в одном файле, нет необходимости искать запрос и ответ отдельно
    • Упростить работу для систем, выполняющих несколько запросов: анализ ответа может строиться на данных ответа. Т. е. запросы GetRefData — обновить кеш справочников, запросы SaveOrder — в очередь обработки заказов.

RK7CMD: выполнение одиночной командыLink to 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: выполнение пакета командLink to 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: выполнение пакета команд (рекомендуемый)Link to RK7Command2: выполнение пакета команд (рекомендуемый)

  • Развитие RK7Command с целью сохранения информации об исходном запросе в ответе (в теге SourceCommand)

  • Плюсы
    • Позволяет в результирующем 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