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 okamihu dobre definovanú globálnu verziu. Čísla verzií nemusia nasledovať tesne po sebe — v rade môžu byť z technických dôvodov medzery — vždy je však číslo verzie unikátne a rastúce. Toho možno využiť na automatizovanú synchronizáciu externých systémov s ABRA Flexi a ide tiež o základ pre funkciu okamžitého upozorňovania na zmeny, teda Web Hooks.
⚠️ Licencia ABRA Flexi musí mať aktívne REST API minimálne pre čítanie. To majú všetky nové platené licencie už štandardne. Bez aktívneho REST API pre čítanie či zápis vracia volanie 403 Forbidden.
Zapnutie a vypnutie
Najjednoduchšie sa stav zistí a Changes API zapne alebo vypne vo webovom rozhraní na adrese /c/{firma}/changes/control. Programovo na to slúžia dve adresy, volané metódou PUT alebo POST:
PUT https://demo.flexibee.eu/c/demo/changes/enable.xml
PUT https://demo.flexibee.eu/c/demo/changes/disable.xml
Požiadavka nemá telo, preto k nej pridajte hlavičku Content-Length: 0.
🚨 Zapnutie aj vypnutie Changes API mení štruktúru databázy, a preto potrebuje exkluzívny zámok — pozri chybu s uzamknutím relácie nižšie. Nevykonávajte ich teda vtedy, keď vo firme niekto pracuje.
Zistenie stavu zapnutia
Ak potrebujete stav zistiť programovo, použite:
GET https://demo.flexibee.eu/c/demo/changes/status.xml
Ak je Changes API zapnuté, odpoveď obsahuje success s hodnotou true:
<?xml version="1.0" ?>
<winstrom version="1.0">
<success>true</success>
<message>Changelog is enabled.</message>
</winstrom>
Ak je odpoveďou false alebo chyba — čo nastane, ak nie je povolené REST API — je Changes API vypnuté.
Získanie aktuálnej globálnej verzie
Do akéhokoľvek XML či JSON exportu získaného cez REST API možno doplniť aktuálnu globálnu verziu pridaním parametra ?add-global-version=true. Odpoveď potom vyzerá 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 nájdete zoznam všetkých zmien od začiatku ich sledovania:
GET https://demo.flexibee.eu/c/demo/changes.xml
<?xml version="1.0"?>
<winstrom 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); defaultne od začiatku sledovania. |
| Koľko záznamov sa má vypísať; defaultne 100, maximálne 1000. |
| Pre ktoré evidencie sa majú zmeny vypisovať; možno uviesť viackrát, ak nie je uvedené, vypisujú sa všetky. |
⚠️ Vyššie limit než 1000 sa ticho zníži na 1000 a neznámy názov evidencie v parametri ?evidence= sa ticho ignoruje — výpis potom vráti zmeny všetkých evidencií. Názvy si preto overte v tabuľkách nižšie.
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"
}
}
Synchronizácia externých systémov s ABRA Flexi
Verziované zmeny možno ľahko využiť na efektívnu synchronizáciu externých systémov s ABRA Flexi — na rozdiel od dátumu poslednej zmeny. Postup je nasledujúci.
Počiatočné nahratie 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 zmazať odstránené dáta.
Zapamätať si verziu z elementu
next, prípadne z atribútuglobalVersion.Opakovať od kroku 1.
Chyba „could not obtain lock on relation"
Ak sa vám pri zapínaní alebo vypínaní Changes API zobrazí chyba ERROR: could not obtain lock on relation "????", nezúfajte. Kvôli výkonnosti nie sú funkcie, ktoré Changes API obsluhujú, v databáze vôbec pridané — zanesieme ich do systému až pri jeho aktivácii, a preto je potrebné exkluzívne zamknúť celú databázu.
Riešením je odhlásiť sa z ABRA Flexi, a to ako z webového rozhrania, tak z klientskej aplikácie. Potom už operácia prejde.
Ukážka chyby:
ERROR: could not obtain lock on relation "drady"
Kde: SQL statement "LOCK TABLE drady IN ACCESS EXCLUSIVE MODE NOWAIT"
Endpointy logované v Changes API
Adresár a kontakty
Agenda | Endpoint |
Adresár |
|
Bankový účet (adresár) |
|
Kontakt |
|
Miesto určenia |
|
PSČ |
|
Skupina firiem |
|
Peňažný ústav |
|
Štát |
|
Typ aktivity |
|
Typ nákladu |
|
Cenník a tovar
Agenda | Endpoint |
Atribút |
|
Cenová úroveň |
|
Cenník |
|
Dodávateľ |
|
Kusovník |
|
Merná jednotka |
|
Odberateľ |
|
Podobný tovar |
|
Poplatok |
|
Príslušenstvo |
|
Sady a kompletky |
|
Cenníková skupina |
|
Skupina tovaru |
|
Typ atribútu |
|
Skupina atribútov |
|
Stav cenníka |
|
Doklady — faktúry a pohľadávky
Agenda | Endpoint |
Faktúra prijatá |
|
Faktúra prijatá — položka |
|
Faktúra vydaná |
|
Faktúra vydaná — položka |
|
Predajka * |
|
Predajka — položka * |
|
Pohľadávka |
|
Pohľadávka — položka |
|
Záväzok |
|
Záväzok — položka |
|
Typ faktúry prijatej |
|
Typ faktúry vydanej |
|
Typ predajky * |
|
Typ pohľadávky |
|
Typ záväzku |
|
Doklady — banka, pokladňa, interné doklady
Agenda | Endpoint |
Banka * |
|
Banka — položka |
|
Vzájomný zápočet * |
|
Typ banky * |
|
Typ vzájomných zápočtov * |
|
Pokladničný pohyb |
|
Pokladničný pohyb — položka |
|
Typ pokladničného pohybu |
|
Interný doklad |
|
Interný doklad — položka |
|
Typ interného dokladu |
|
Doklady — obchodné
Agenda | Endpoint |
Ponuka prijatá |
|
Ponuka prijatá — položka |
|
Ponuka vydaná |
|
Ponuka vydaná — položka |
|
Objednávka prijatá |
|
Objednávka prijatá — položka |
|
Objednávka vydaná |
|
Objednávka vydaná — položka |
|
Dopyt prijatý |
|
Dopyt prijatý — položka |
|
Dopyt vydaný |
|
Dopyt vydaný — položka |
|
Typ ponuky prijatej |
|
Typ ponuky vydanej |
|
Typ objednávky prijatej |
|
Typ objednávky vydanej |
|
Typ dopytu prijatého |
|
Typ dopytu vydaného |
|
Stav obchodného dokladu |
|
Forma dopravy |
|
Forma úhrady |
|
Platba predajky |
|
Forma úhrady — zaúčtovanie |
|
Doklady — sklad
Agenda | Endpoint |
Skladový pohyb |
|
Skladový pohyb — položka |
|
Typ skladového pohybu |
|
Skladová karta |
|
Inventúra |
|
Inventúra — položka |
|
Rezervácia |
|
Mapovanie skladu |
|
Umiestnenie v sklade — miestnosť * |
|
Umiestnenie v sklade — regál * |
|
Umiestnenie v sklade — polica * |
|
Výrobné číslo |
|
Doklady — zmluvy
Agenda | Endpoint |
Zmluva * |
|
Dodávateľská zmluva * |
|
Zmluva — položka |
|
Typ zmluvy * |
|
Dodávateľský typ zmluvy * |
|
Stav zmluvy |
|
Príkazy na úhradu a číselníky platieb
Agenda | Endpoint |
Príkaz na úhradu |
|
Bankový účet |
|
Pokladňa |
|
Sklad |
|
Číslo balíka |
|
Konštantný symbol |
|
Formát elektronického bankovníctva |
|
Účtovníctvo
Agenda | Endpoint |
Účtovná osnova |
|
Účet |
|
Účtovné obdobie |
|
Obrat |
|
Riadok priznania DPH |
|
Sadzba DPH |
|
Členenie DPH |
|
Prenesenie DPH |
|
Činnosť |
|
Stredisko |
|
Zákazka |
|
Typ zákazky |
|
Stav zákazky |
|
Hodnotenie zákazky |
|
Predpis zaúčtovania |
|
Typ organizácie |
|
Kurzy
Agenda | Endpoint |
Kurz (všeobecný) * |
|
Kurz pre cenotvorbu * |
|
Intrastat — kurz * |
|
Mena |
|
Intrastat
Agenda | Endpoint |
Intrastat — dodacie podmienky |
|
Intrastat — druh dopravy |
|
Intrastat — merná jednotka |
|
Intrastat — kraj určenia |
|
Intrastat — kód nomenklatúry |
|
Intrastat — obchodná transakcia |
|
Intrastat — zvláštny pohyb |
|
Rady dokladov
Agenda | Endpoint |
Rada |
|
Rada — banka |
|
Rada — faktúry prijaté |
|
Rada — faktúry vydané |
|
Rada — interného dokladu |
|
Rada — ponuky prijaté |
|
Rada — ponuky vydané |
|
Rada — objednávky prijaté |
|
Rada — objednávky vydané |
|
Rada — pohľadávky |
|
Rada — pokladničného pohybu |
|
Rada — dopytu prijatého |
|
Rada — dopytu vydaného |
|
Rada — skladového pohybu |
|
Rada — záväzkov |
|
Ročná rada |
|
Nastavenia a systém
Agenda | Endpoint |
Nastavenie |
|
Parameter |
|
Príloha |
|
Report |
|
Rola |
|
Text |
|
Používateľ |
|
Zastupovanie |
|
Žurnál |
|
Filter |
|
Používateľský dotaz |
|
Používateľský dotaz — parameter |
|
Používateľský dotaz — vlastnosť |
|
Používateľská väzba |
|
Typ používateľskej väzby |
|
Právo viditeľnosti |
|
Certifikačná autorita |
|
Skupina štítkov |
|
Štítok |
|
Strom (koreň) |
|
Strom |
|
Strom — cenník |
|
Väzba |
|
