Klasifikatoru sinhronizācija

Sinhronizēšanas loģika

Horizon klasifikatoru sinhronizācijas mehānisms ārējām sistēmām piedāvā iespēju saņemt informāciju par Horizon dokumentu un objektu kartīšu izmaiņu faktu konkrēta pielietojuma kontekstā.
Sinhronizācijas resursi ir izveidoti sarakstu resursiem pēc šablona rest/resource/sync un darbojas pēc šādas shēmas: 

(warning) Sinhronizētās vērtības fiksējas katrai ārējai saskarnei atsevišķi. Noklusēti sistēma visus pieprasījumus attiecina uz kopējo saskarni "Vispārējā integrācija", bet ir iespējams Horizon sistēmā izveidot savu saskarnes aprakstu un autentifikācijas galvenē norādīt pielietojuma identifikatoru

Pirmais kāda resursa sinhronizācijas pieprasījums sākotnējo datu iegūšanai vienmēr jāizpilda new vai changed apakšresursam. Pieprasījumā var norādīt datu atlases nosacījumus, atbildē iekļaujamās datu kolonnas un datu apjomu.

Katru reizi pēc datu saņemšanas par ierakstiem, kuru turpmākajām izmaiņām vēlas sekot, jāizpilda POST pieprasījums, tā saturā norādot šo ierakstu keyfield un COUNTER lauku vērtības.

Nākamie apakšresursa new izsaukumi dos ierakstus, par kuriem POST nav izpildīts, apakšresursa edited izsaukumi dos ierakstus, par kuriem POST ir  izpildīts un dati pēc tā ir laboti, bet apakšresursa deleted atbildē būs to ierakstu keyfield vērtības, kuri pēc POST saņemšanas ir dzēsti.

Apakšresursā changed vienā atbildē ir apvienoti jaunie un labotie ieraksti, kas atbilst atsevišķiem new un edited izsaukumiem. 

Informāciju, vai klasifikatora saraksta resursam sinhronizācijas loģika ir pielietojama, var uzzināt, izpildot šim resursam GET pieprasījumu. Ja sinhronizācija ir iespējama, atbildes sadaļā <link> būs norādīts resurss sync.

Lūgums ņemt vērā

Neskatoties uz to, ka sync funkcija ir pievienota visiem saraksta resursiem, tā strādās tikai objekta pamatsarakstam.
(Entītei atbilstošo kolekciju (saraksta) resurss iespējams atrast entītes resursa pamatinformācijas lapā meklējot saiti ar atribūtu rel="collection".)

sync resurss

GET /rest/... klienti, nomeklatūras
Atbilde
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/xml; charset=UTF-8
Content-Length: 1594

<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <description>Nomenklatūras</description>
   <keyfield>N.PK_NOM</keyfield>
   <codefield>N.KODS</codefield>
   <counterfield>N.COUNTER</counterfield>
   <link>
      <href>/rest/TNdmNomIzvSar/query</href>
      <description>Veikt datu atlasi</description>
   </link>
 
. . . . .

   <link>
      <href>/rest/TNdmNomIzvSar/sync</href>
      <description>Sinhronizācija</description>
   </link>
</resource>

Resurss sync, savukārt, satur apakšresursus neweditedchangeddeleted:

GET /rest/TNdmNomIzvSar/sync HTTP/1.1
Atbilde
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/xml; charset=UTF-8
Content-Length: 638
 
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <description>Sinhronizācija</description>
   <link>
      <href>/rest/TNdmNomIzvSar/sync/new</href>
      <description>Atlasīt jaunos ierakstus</description>
   </link>
   <link>
      <href>/rest/TNdmNomIzvSar/sync/edited</href>
      <description>Atlasīt mainītos ierakstus</description>
   </link>
   <link>
      <href>/rest/TNdmNomIzvSar/sync/changed</href>
      <description>Atlasīt jaunos un mainītos ierakstus</description>
   </link>
   <link>
      <href>/rest/TNdmNomIzvSar/sync/deleted</href>
      <description>Atlasīt dzēstos ierakstus</description>
   </link>
</resource>

Atbildē redzams, ka sync resurss satur četrus apakšresursus:

new, edited un changed apakšresursi

API darbam ar new, edited un changed apakšresursiem ir tāds pats, kā attiecīgās kolekcijas query resursam - tiek atbalstīta filtrēšana, kritēriji, metadati, kārtošana, kolonnu iekļaušana. Atgrieztie dati ir tādā pašā formātā, ka kolekcijām.

Lai atzīmētu  ierakstus  kā apstrādātus, jāveic POST pieprasījums atpakaļ uz to pašu resursu, no kura ir tikuši izgūti dati,  norādot to datu sarakstu, kuri ir tikuši saņemti.

Gan GET, gan POST pieprasījuma satura formāts ir identisks kolekcijas query resursa GET pieprasījuma atbildes formātam.

Nesinhronizētu atbildīgo izgūšana
GET /rest/TNdmPardSar/sync/new HTTP/1.1
Atbilde
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/xml; charset=UTF-8

<resource>
   <description>Atlasīt jaunos ierakstus</description>
   <title>Atbildīgie</title>
   <collection xsi:schemaLocation="TNdmPardSar.xsd /rest/TNdmPardSar/TNdmPardSar.xsd TNdmPard.xsd /rest/TNdmPard/TNdmPard.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="TNdmPardSar.xsd" xmlns:TNdmPard="TNdmPard.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <metadata>
         <page>
            <count>8</count>
            <limited>false</limited>
         </page>
         <column>
            <name>M.PK_PARD</name>
            <description>PK_PARD</description>
            <prefix/>
            <width>0</width>
            <columntype>key</columntype>
            <format/>
            <type>TNdmPard:TNdmPardForeignKeyStructure</type>
         </column>
         <column>
            <name>M.COUNTER</name>
            <description>COUNTER</description>
            <prefix/>
            <width>0</width>
            <columntype>counter</columntype>
            <format/>
            <type>xsd:integer</type>
         </column>
      </metadata>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/1</href>
            </PK_PARD>
            <COUNTER>2</COUNTER>
         </M>
      </row>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/3</href>
            </PK_PARD>
            <COUNTER>1</COUNTER>
         </M>
      </row>
  .............. 
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/13</href>
            </PK_PARD>
            <COUNTER>0</COUNTER>
         </M>
      </row>
   </collection>
</resource>

Atbildes metadatos laukā <page> <count>8</count> tiek norādīts izgūto jauno (vēl nesinhronizēto) ierakstu skaits


Atgriezto ierakstu apstrādes atzīmēšanai, veicot POST pieprasījumu,  var izmantot to pašu GET pieprasījuma atbildes saturu. Svarīgi ir, lai POST pieprasījuma saturā tiktu iekļauti attiecīgo ierakstu keyfield un COUNTER lauku vērtības. Metadatus var neiekļaut atbildē.

POST dati uz sync/new
<resource>
   <collection>
     <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/1</href>
            </PK_PARD>
            <COUNTER>2</COUNTER>
         </M>
      </row>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/3</href>
            </PK_PARD>
            <COUNTER>1</COUNTER>
         </M>
      </row>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/6</href>
            </PK_PARD>
            <COUNTER>0</COUNTER>
         </M>
      </row>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/8</href>
            </PK_PARD>
            <COUNTER>0</COUNTER>
         </M>
      </row>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/9</href>
            </PK_PARD>
            <COUNTER>0</COUNTER>
         </M>
      </row>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/10</href>
            </PK_PARD>
            <COUNTER>0</COUNTER>
         </M>
      </row>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/12</href>
            </PK_PARD>
            <COUNTER>0</COUNTER>
         </M>
      </row>
      <row>
         <M>
            <PK_PARD>
               <href>/rest/TNdmPard/13</href>
            </PK_PARD>
            <COUNTER>0</COUNTER>
         </M>
      </row>
   </collection>
</resource>
Veiksmīga atbilde uz POST /sync/new
HTTP/1.1 200 OK

<result>
   <message>Apstrādāti 8 sinhronizācijas ieraksti</message>
   <count>8</count>
</result>

deleted apakšresurss

API deleted resursam neatbalsta standarta kolekciju query resursa iespējas. Tiek atbalstīts vienīgi parametrs hierarchy. Atgrieztajos datos vienmēr būs iekļautas tikai divas kolonas: attiecīgās kolekcijas primārās atslēgas lauks (keyfield) un COUNTER:

GET /rest/TNdmNomIzvSar/sync/deleted HTTP/1.1
Atbilde
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: application/xml; charset=UTF-8

 
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <description>Atlasīt dzēstos ierakstus</description>
   <title>Nomenklatūras</title>
   <collection xsi:schemaLocation="TNdmNomIzvSar.xsd TNdmNomIzvSar.xsd" xmlns="TNdmNomIzvSar.xsd">
      <metadata>
         <column>
            <name>N.PK_NOM</name>
            <description>Nomenklatūra</description>
            <prefix>Nom</prefix>
            <width>15</width>
            <format/>
            <type>TNdmNom:TNdmNomForeignKeyStructure</type>
         </column>
         <column>
            <name>N.COUNTER</name>
            <description>COUNTER</description>
            <prefix>Nom</prefix>
            <width>15</width>
            <format/>
            <type>xsd:integer</type>
         </column>
      </metadata>
      <row>
         <N>
            <PK_NOM>
               <href>/rest/TNdmNom/9555104</href>
            </PK_NOM>
            <COUNTER>101</COUNTER>
         </N>
      </row>
   </collection>
</resource>