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:
- ar
GET
pieprasījumu uz kādu no apakšresursiem new, edited, changed vai deleted nolasa datus; - izpilda
POST
pieprasījumu uz to pašu apakšresursu, fiksējot saņemtās vērtības; ja vēlas atkārtot pilnu sinhronizāciju, izpilda
DELETE
komandu sync resursam, kas dzēš visas resursam fiksētās vērtības.
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
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 new
, edited
, changed
, deleted
:
GET /rest/TNdmNomIzvSar/sync HTTP/1.1
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
- resurss darbam ar jauniem, nesinhronizētiem klasifikatora ierakstiem.edited
- darbam ar pēc pēdējās sinhronizācijas mainītiem klasifikatora ierakstiem.changed
- darbam ar jauniem un mainītiem ierakstiem. Šis resurss pēc būtības ir abu iepriekšējo resursu apvienojums.deleted
- darbam ar ierakstiem, kuri ir bijuši sinhronizēti, bet ir dzēsti no klasifikatora.
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.
GET /rest/TNdmPardSar/sync/new HTTP/1.1
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ē.
<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>
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
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>