Je-li Changes API zapnuté, ABRA Flexi zaznamenává všechny změny provedené v databázi firmy do changelogu a umožňuje seznam změn zpětně získat.
Změny jsou vzestupně číslované, takže firma má v každém okamžiku dobře definovanou globální verzi. Čísla verzí nemusí následovat těsně po sobě — v řadě mohou být z technických důvodů mezery — vždy je však číslo verze unikátní a rostoucí. Toho lze využít k automatizované synchronizaci externích systémů s ABRA Flexi a jde také o základ pro funkci okamžitého upozorňování na změny, tedy Web Hooks.
⚠️ Licence ABRA Flexi musí mít aktivní REST API minimálně pro čtení. To mají všechny nové placené licence již standardně. Bez aktivního REST API pro čtení či zápis vrací volání 403 Forbidden.
Zapnutí a vypnutí
Nejsnáze se stav zjistí a Changes API zapne či vypne ve webovém rozhraní na adrese /c/{firma}/changes/control. Programově k tomu slouží dvě adresy, volané metodou PUT nebo POST:
PUT https://demo.flexibee.eu/c/demo/changes/enable.xml
PUT https://demo.flexibee.eu/c/demo/changes/disable.xml
Požadavek nemá tělo, proto k němu přidejte hlavičku Content-Length: 0.
🚨 Zapnutí i vypnutí Changes API mění strukturu databáze, a proto potřebuje exkluzivní zámek — viz chybu s uzamčením relace níže. Neprovádějte je tedy, když v firmě někdo pracuje.
Zjištění stavu zapnutí
Potřebujete-li stav zjistit programově, použijte:
GET https://demo.flexibee.eu/c/demo/changes/status.xml
Je-li Changes API zapnuté, odpověď obsahuje success s hodnotou true:
<?xml version="1.0" ?>
<winstrom version="1.0">
<success>true</success>
<message>Changelog is enabled.</message>
</winstrom>
Pokud je odpovědí false nebo chyba — což nastane, není-li povolené REST API — je Changes API vypnuté.
Získání aktuální globální verze
Do jakéhokoliv XML či JSON exportu získaného přes REST API lze doplnit aktuální globální verzi přidáním parametru ?add-global-version=true. Odpověď pak vypadá takto:
<?xml version="1.0"?>
<winstrom version="1.0" globalVersion="6">
...
</winstrom>
Získání záznamů o změnách
Na adrese /c/{firma}/changes.xml najdete seznam všech změn od začátku jejich sledování:
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>
Uvedeno je vždy číselné ID objektu (<id>1</id>) a kód (<id>code:KÓD</id>); pokud měl objekt v době provádění operace i nějaká externí ID, jsou uvedena i ta (<id>ext:...</id>).
V atributech každého elementu je uvedeno, v jaké verzi k operaci došlo (in-version) a o jakou operaci šlo (operation; možné hodnoty jsou create, update a delete). Vždy je přítomen atribut globalVersion. Posledním elementem ve výpisu je vždy next, který udává číslo verze, kterou by tento výpis pokračoval, případně none, pokud žádné další změny nejsou.
Výpis lze upravit následujícími parametry:
| Od které verze se má vypisovat (včetně); defaultně od počátku sledování. |
| Kolik záznamů se má vypsat; defaultně 100, maximálně 1000. |
| Pro které evidence se mají změny vypisovat; lze uvést vícekrát, není-li uvedeno, vypisují se všechny. |
⚠️ Vyšší limit než 1000 se tiše sníží na 1000 a neznámý název evidence v parametru ?evidence= se tiše ignoruje — výpis pak vrátí změny všech evidencí. Názvy si proto ověřte v tabulkách níže.
Ve formátu JSON vypadají změny 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"
}
}
Synchronizace externích systémů s ABRA Flexi
Verzované změny lze snadno využít k efektivní synchronizaci externích systémů s ABRA Flexi — na rozdíl od data poslední změny. Postup je následující.
Počáteční nahrání dat
Získat aktuální data včetně jejich verze (
?add-global-version=true).Uložit data.
Zapamatovat si verzi z atributu
globalVersion.
Rozdílová synchronizace
Stáhnout změny od poslední zapamatované verze (
?start=).Stáhnout změněná data a uložit je, případně smazat odstraněná data.
Zapamatovat si verzi z elementu
next, případně z atributuglobalVersion.Opakovat od kroku 1.
Chyba „could not obtain lock on relation"
Zobrazí-li se vám při zapínání nebo vypínání Changes API chyba ERROR: could not obtain lock on relation "????", nezoufejte. Kvůli výkonnosti nejsou funkce, které Changes API obsluhují, v databázi vůbec přidané — zaneseme je do systému teprve při jeho aktivaci, a proto je potřeba exkluzivně zamknout celou databázi.
Řešením je odhlásit se z ABRA Flexi, a to jak z webového rozhraní, tak z klientské aplikace. Pak už operace projde.
Ukázka 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ář a kontakty
Agenda | Endpoint |
Adresář |
|
Bankovní účet (adresář) |
|
Kontakt |
|
Místo určení |
|
PSČ |
|
Skupina firem |
|
Peněžní ústav |
|
Stát |
|
Typ aktivity |
|
Typ nákladu |
|
Ceník a zboží
Agenda | Endpoint |
Atribut |
|
Cenová úroveň |
|
Ceník |
|
Dodavatel |
|
Kusovník |
|
Měrná jednotka |
|
Odběratel |
|
Podobné zboží |
|
Poplatek |
|
Příslušenství |
|
Sady a komplety |
|
Ceníková skupina |
|
Skupina zboží |
|
Typ atributu |
|
Skupina atributů |
|
Stav ceníku |
|
Doklady — faktury a pohledávky
Agenda | Endpoint |
Faktura přijatá |
|
Faktura přijatá — položka |
|
Faktura vydaná |
|
Faktura vydaná — položka |
|
Prodejka * |
|
Prodejka — položka * |
|
Pohledávka |
|
Pohledávka — položka |
|
Závazek |
|
Závazek — položka |
|
Typ faktury přijaté |
|
Typ faktury vydané |
|
Typ prodejky * |
|
Typ pohledávky |
|
Typ závazku |
|
Doklady — banka, pokladna, interní doklady
Agenda | Endpoint |
Banka * |
|
Banka — položka |
|
Vzájemný zápočet * |
|
Typ banky * |
|
Typ vzájemných zápočtů * |
|
Pokladní pohyb |
|
Pokladní pohyb — položka |
|
Typ pokladního pohybu |
|
Interní doklad |
|
Interní doklad — položka |
|
Typ interního dokladu |
|
Doklady — obchodní
Agenda | Endpoint |
Nabídka přijatá |
|
Nabídka přijatá — položka |
|
Nabídka vydaná |
|
Nabídka vydaná — položka |
|
Objednávka přijatá |
|
Objednávka přijatá — položka |
|
Objednávka vydaná |
|
Objednávka vydaná — položka |
|
Poptávka přijatá |
|
Poptávka přijatá — položka |
|
Poptávka vydaná |
|
Poptávka vydaná — položka |
|
Typ nabídky přijaté |
|
Typ nabídky vydané |
|
Typ objednávky přijaté |
|
Typ objednávky vydané |
|
Typ poptávky přijaté |
|
Typ poptávky vydané |
|
Stav obchodního dokladu |
|
Forma dopravy |
|
Forma úhrady |
|
Platba prodejky |
|
Forma úhrady — zaúčtování |
|
Doklady — sklad
Agenda | Endpoint |
Skladový pohyb |
|
Skladový pohyb — položka |
|
Typ skladového pohybu |
|
Skladová karta |
|
Inventura |
|
Inventura — položka |
|
Rezervace |
|
Mapování skladu |
|
Umístění ve skladu — místnost * |
|
Umístění ve skladu — regál * |
|
Umístění ve skladu — police * |
|
Výrobní číslo |
|
Doklady — smlouvy
Agenda | Endpoint |
Smlouva * |
|
Dodavatelská smlouva * |
|
Smlouva — položka |
|
Typ smlouvy * |
|
Dodavatelský typ smlouvy * |
|
Stav smlouvy |
|
Příkazy k úhradě a číselníky plateb
Agenda | Endpoint |
Příkaz k úhradě |
|
Bankovní účet |
|
Pokladna |
|
Sklad |
|
Číslo balíku |
|
Konstantní symbol |
|
Formát elektronického bankovnictví |
|
Účetnictví
Agenda | Endpoint |
Účetní osnova |
|
Účet |
|
Účetní období |
|
Obrat |
|
Řádek přiznání DPH |
|
Sazba DPH |
|
Členění DPH |
|
Přenesení DPH |
|
Činnost |
|
Středisko |
|
Zakázka |
|
Typ zakázky |
|
Stav zakázky |
|
Hodnocení zakázky |
|
Předpis zaúčtování |
|
Typ organizace |
|
Kurzy
Agenda | Endpoint |
Kurz (obecný) * |
|
Kurz pro cenotvorbu * |
|
Intrastat — kurz * |
|
Měna |
|
Intrastat
Agenda | Endpoint |
Intrastat — dodací podmínky |
|
Intrastat — druh dopravy |
|
Intrastat — měrná jednotka |
|
Intrastat — kraj určení |
|
Intrastat — kód nomenklatury |
|
Intrastat — obchodní transakce |
|
Intrastat — zvláštní pohyb |
|
Řady dokladů
Agenda | Endpoint |
Řada |
|
Řada — banka |
|
Řada — faktury přijaté |
|
Řada — faktury vydané |
|
Řada — interního dokladu |
|
Řada — nabídky přijaté |
|
Řada — nabídky vydané |
|
Řada — objednávky přijaté |
|
Řada — objednávky vydané |
|
Řada — pohledávky |
|
Řada — pokladního pohybu |
|
Řada — poptávky přijaté |
|
Řada — poptávky vydané |
|
Řada — skladového pohybu |
|
Řada — závazků |
|
Roční řada |
|
Nastavení a systém
Agenda | Endpoint |
Nastavení |
|
Parametr |
|
Příloha |
|
Report |
|
Role |
|
Text |
|
Uživatel |
|
Zástupost |
|
Žurnál |
|
Filtr |
|
Uživatelský dotaz |
|
Uživatelský dotaz — parametr |
|
Uživatelský dotaz — vlastnost |
|
Uživatelská vazba |
|
Typ uživatelské vazby |
|
Právo viditelnosti |
|
Certifikační autorita |
|
Skupina štítků |
|
Štítek |
|
Strom (kořen) |
|
Strom |
|
Strom — ceník |
|
Vazba |
|
