Ak je táto funkcia zapnutá, ABRA Flexi zaznamenáva všetky zmeny vykonané v databáze firmy do zoznamu zmien a umožňuje načítať zoznam zmien. Zmeny sú vzostupne číslované, takže spoločnosť má v každom okamihu presne definovanú globálnu verziu. (Čísla verzií nemusia na seba tesne nadväzovať; z technických dôvodov môžu byť v sérii medzery. Číslo verzie je však vždy jedinečné a vzostupné.) Túto funkciu možno použiť na automatizovanú synchronizáciu externých systémov s ABRA Flexi a je tiež základom pre funkciu okamžitého oznamovania zmien(Web Hooks).
Licencie ABRA Flexi musia mať aktívne rozhranie REST API minimálne na čítanie. Kontrolu stavu a povolenie/zakázanie možno najjednoduchšie vykonať vo webovom rozhraní na adrese /c/{firm}/changes/control
. Prípadne ho možno povoliť požiadavkou PUT
na /c/{firma}/changes/enable.xml
a zakázať požiadavkou PUT
na /c/{firma}/changes/disable.xml.
Okrem PUT
možno použiť aj POST
. Ak nemáte povolené rozhranie REST API na čítanie alebo zápis, odpoveď je 403 Forbidden
.
Príklad aktivácie pomocou curl:
curl -k -L -u name:password -X PUT https://localhost:5434/c/{firma}/changes/enable.xml -H Content-Length:0
Získanie aktuálnej globálnej verzie
Aktuálnu globálnu verziu môžete pridať do akéhokoľvek XML (alebo JSON) exportu získaného prostredníctvom REST API pridaním parametra ?add-global-version=true
. Odpoveď bude vyzerať takto:
<?xml version="1.0"?> <winstrom version="1.0" globalVersion="6"> ... </winstrom>
Získanie protokolov zmien
V súbore /c/company/changes.xml
sa nachádza zoznam všetkých zmien od začiatku sledovania. Výpis vyzerá takto:
<?xml version="1.0"?> <winstrom version="1.0" globalVersion="6"> <faktura-vydana in-version="3" operation="create" timestamp="2019-01-01 00:00:00.0"> <id>1</id> </faktura-vydana> <faktura-vydana-polozka in-version="4" operation="create" timestamp="2019-06-07 12:34:56.7"> <id>1</id> </faktura-vydana-polozka> <faktura-vydana in-version="5" operation="update" timestamp="2019-06-07 12:34:56.7"> <id>1</id> <id>kód:VF1-0001/2012</id> </faktura-vydana> <next>6</next> </winstrom>
Vždy sa
uvádza číselné ID objektu(
1
) a kód (
code:CODE
)
; ak mal objekt v čase operácie
nejaké externé ID,
uvádzajú sa aj tie
(<id>ext:...</id> ).
Atribúty každého prvku uvádzajú verziu, v ktorej sa operácia uskutočnila(in-version
), a aká to bola operácia(
operation; možné hodnoty sú create
, update
a delete
).
Atribút globalVersion
je vždy prítomný. Posledným prvkom vo výpise je vždy next
, ktorý označuje číslo verzie, s ktorým by tento výpis pokračoval, alebo none,
ak nie sú žiadne ďalšie zmeny.
Výpis je možné upraviť pomocou nasledujúcich parametrov:
| Od ktorej verzie sa má vypisovať (vrátane); predvolené nastavenie je od začiatku sledovania. |
| Koľko záznamov sa má vypísať; predvolené 100, maximálne 1000. |
| Pre ktoré záznamy vypisovať zmeny; možno zadať viackrát, ak nie je zadané, vypisujú sa všetky. |
Vo formáte JSON vyzerajú zmeny takto:
{ "winstrom": { "@globalVersion": "8", "changes": [ { "@evidence": "invoice-issued", "@in-version": "3", "@operation": "create", "@timestamp": "2019-01-01 00:00:00.0", "id": "1", "external-ids": [] }, { "@evidence": "faktura-vydana-polozka", "@in-version": "4", "@operation": "create", "@timestamp": "2019-06-07 12:34:56.7", "id": "1", "external-ids": [] }, { "@evidence": "faktura-vydana", "@in-version": "5", "@operation": "update", "@timestamp": "2019-06-07 12:34:56.7", "id": "1", "external-ids": [ "code:VF1-0001\/2012" ] } ], "next": "6" } }
Získanie stavu rozhrania API Zmeny
Používateľ môže skontrolovať stav zapnutia na adrese /c/{firma}/changes/control
. Tu je tiež možné zapnúť alebo vypnúť rozhranie Changes API.
Ak potrebujete zistiť stav programovo, použite GET /c/firm/changes/status.xml.
V prípade odpovede
true
je rozhranie Changes
API povolené
. Ak je odpoveď nepravdivá alebo chybová (ak rozhranie REST API nie je povolené), rozhranie Changes API je zakázané.
Synchronizácia externých systémov s ABRA Flexi
Verzované zmeny možno ľahko použiť na efektívnu synchronizáciu externých systémov s ABRA Flexi (na rozdiel od dátumu poslednej zmeny). Postup je nasledovný:
Počiatočné odosielanie údajov:
Získanie aktuálnych údajov vrátane ich verzie (
?add-global-version=true
)Uloženie údajov
Zapamätajte si verziu (z atribútu
globalVersion
)
Diferenciálna synchronizácia:
Stiahnutie zmien od poslednej zapamätanej verzie (
?start=
)
Stiahnutie zmenených údajov a ich uloženie alebo odstránenie odstránených údajov
Zapamätať si verziu (z
ďalšieho
prvku alebo atribútuglobalVersion
)GOTO 1
ERROR: nepodarilo sa získať uzamknutie vzťahu "????"
Ak sa zobrazí chyba ERROR: could not obtain lock on relation "????
", nezúfajte. Z výkonnostných dôvodov sa funkcie, ktoré obsluhujú rozhranie Changes API, do databázy vôbec nepridávajú. Ak je rozhranie API pre zmeny aktivované, pridáme ich do systému. Preto je potrebné výlučne uzamknúť celú databázu.
Riešením je preto odhlásenie z ABRA Flexi - z webového rozhrania aj z klientskej aplikácie. Potom to prejde.
Ukážka chyby:
ERROR: could not get lock on relation "drady" Kde: Príkaz SQL "LOCK TABLE drady IN ACCESS EXCLUSIVE MODE NOWAIT"