Ak je Changes API zapnuté, ABRA Flexi zaznamenáva všetky zmeny vykonané v databáze firmy do changelogu a umožňuje zoznam zmien spätne získať.
Zmeny sú vzostupne číslované, takže firma má v každom okamžiku dobre definovanú globálnu verziu.
Čísla verzií nemusia nasledovať tesne za sebou, v rade môžu byť z technických dôvodov medzery. Číslo verzie je však vždy unikátne a rastúce. To možno využiť na automatizovanú synchronizáciu externých systémov s ABRA Flexi a taktiež je to základ pre funkciu okamžitého upozorňovania na zmeny (Web Hooks).
Licencia ABRA Flexi musí mať aktívne REST API minimálne pre čítanie. To majú všetky nové platené licencie už štandardne.
Zistenie stavu a zapnutie / vypnutie možno vykonať najjednoduchšie vo webovom rozhraní na adrese: /c/{firma}/changes/control
Prípadne možno zapnúť PUT requestom na adresu /c/{firma}/changes/enable.xml a vypnúť taktiež PUT requestom na adresu /c/{firma}/changes/disable.xml.
Okrem PUT možno použiť aj POST. Ak nemáte aktívne REST API pre čítanie alebo pre zápis, odpoveď je 403 Forbidden.
Ukážka aktivácie pomocou programu curl:
curl -k -L -u jmeno:heslo -X PUT https://localhost:5434/c/{firma}/changes/enable.xml -H Content-Length:0
Získanie aktuálnej globálnej verzie
Do akéhokoľvek XML (resp. JSON) exportu získaného cez REST API možno doplniť aktuálnu globálnu verziu pridaním parametra ?add-global-version=true. Odpoveď bude vyzerať takto:
<?xml version="1.0"?><winstrom version="1.0" globalVersion="6">
...
</winstrom>
Získanie záznamov o zmenách
Na adrese /c/firma/changes.xml sa nachádza zoznam všetkých zmien od začiatku ich 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>code:VF1-0001/2012</id> </faktura-vydana> <next>6</next></winstrom>
Uvedené je vždy číselné ID objektu (<id>1</id>) a kód (<id>code:KÓD</id>); ak mal objekt v čase vykonávania operácie aj nejaké externé ID, sú uvedené aj tie (<id>ext:...</id>).
V atribútoch každého elementu je uvedené, v akej verzii k operácii došlo (in-version) a o akú operáciu išlo (operation; možné hodnoty sú create, update a delete).
Vždy je prítomný atribút globalVersion. Posledným elementom vo výpise je vždy next, ktorý udáva číslo verzie, ktorou by tento výpis pokračoval, prípadne none, ak žiadne ďalšie zmeny nie sú.
Výpis možno upraviť nasledujúcimi parametrami:
| Od ktorej verzie sa má vypisovať (vrátane); predvolene od začiatku sledovania. |
| Koľko záznamov sa má vypísať; predvolene 100, maximálne 1000. |
| Pre ktoré evidencie sa majú zmeny vypisovať; možno uviesť viackrát, ak nie je uvedené, vypisujú sa všetky. |
Vo formáte JSON vyzerajú zmeny takto:
{ "winstrom": { "@globalVersion": "8", "changes": [ { "@evidence": "faktura-vydana", "@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" }}
Zistenie stavu zapnutia Changes API
Používateľsky možno zistiť stav zapnutia na adrese /c/{firma}/changes/control. Tu je tiež možné Changes API zapínať alebo vypínať.
Ak potrebujete zistiť stav programovo, použite GET /c/firma/changes/status.xml. V prípade odpovede true je Changes API zapnuté. Ak je odpoveďou false alebo chyba (ak nie je povolené REST API), Changes API je vypnuté.
Synchronizácia externých systémov s ABRA Flexi
Verzované zmeny možno jednoducho využ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é načítanie dát:
Získať aktuálne dáta vrátane ich verzie (
?add-global-version=true)Uložiť dáta
Zapamätať si verziu (z atribútu
globalVersion)
Rozdielová synchronizácia:
Stiahnuť zmeny od poslednej zapamätanej verzie (
?start=)Stiahnuť zmenené dáta a uložiť ich, prípadne odstrániť vymazané dáta
Zapamätať si verziu (z elementu
next, prípadne z atribútuglobalVersion)GOTO 1
ERROR: could not obtain lock on relation „????"
Ak sa vám zobrazí chyba ERROR: could not obtain lock on relation "????", neprepadajte zúfalstvu. Z dôvodu výkonnosti nie sú v databáze funkcie, ktoré obsluhujú Changes API, vôbec pridané. V prípade aktivácie Changes API ich do systému zanesieme. Preto je potrebné exkluzívne zamknúť celú databázu.
Riešením je teda odhlásiť sa z ABRA Flexi – ako z webového rozhrania, tak z klientskej aplikácie. Potom to už prebehne bez problémov.
Ukážka chyby:
ERROR: could not obtain lock on relation "drady" Kde: SQL statement "LOCK TABLE drady IN ACCESS EXCLUSIVE MODE NOWAIT"
