Přeskočit na hlavní obsah

Changes API

Changes API (sledování změn)

Autor: Petr Pech

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 také jde o základ pro funkci okamžitého upozorňování na změny (Web Hooks).

Licence ABRA Flexi musí mít aktivní REST API minimálně pro čtení. To mají všechny nové placené licence již standardně.

Zjištění stavu a zapnutí / vypnutí lze provést nejsnáze ve webovém rozhraní na adrese: /c/{firma}/changes/control

Případně lze zapnout PUT requestem na adresu /c/{firma}/changes/enable.xml a vypnout taktéž PUT requestem na adresu /c/{firma}/changes/disable.xml.

Kromě PUT lze použít také POST. Pokud nemáte aktivní REST API pro čtení nebo pro zápis, odpověď je 403 Forbidden.

Ukázka aktivace pomocí programu curl:

curl -k -L -u jmeno:heslo -X PUT https://localhost:5434/c/{firma}/changes/enable.xml -H Content-Length:0

Získání aktuální globální verze

Do jakéhokoliv XML (resp. JSON) exportu získaného přes REST API lze doplnit aktuální globání verzi přidáním parametru ?add-global-version=true. Odpověď bude vypadat 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 se nachází seznam všech změn od začátku jejich sledování.

Výpis vypadá 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>

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, pak 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:

?start=123

Od které verze se má vypisovat (včetně); defaultně od počátku sledování.

?limit=500

Kolik záznamů se má vypsat; defaultně 100, maximálně 1000.

?evidence=faktura-vydana

Pro které evidence se mají změny vypisovat; lze uvést vícekrát, není-li uvedeno, vypisují se všechny.

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"
    }
}

Zjištění stavu zapnutí Changes API

Uživatelsky lze zjistit stav zapnutí na adrese /c/{firma}/changes/control. Zde je také možné Changes API zapínat nebo vypínat.

Pokud potřebujete zjistit stav programově, tak použijte GET /c/firma/changes/status.xml. V případě odpovědi true je Changes API zapnuté. Pokud je odpovědí false nebo chyba (pokud není povolené REST API) je Changes API vypnuté.

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:

  1. Získat aktuální data včetně jejich verze (?add-global-version=true)

  2. Uložit data

  3. Zapamatovat si verzi (z atributu globalVersion)

Rozdílová synchronizace:

  1. Stáhnout změny od poslední zapamatované verze (?start=)

  2. Stáhnout změněná data a uložit je, případně smazat odstraněná data

  3. Zapamatovat si verzi (z elementu next, případně z atributu globalVersion)

  4. GOTO 1

ERROR: could not obtain lock on relation „????“

Pokud se vám zobrazí chyba ERROR: could not obtain lock on relation "????", nezoufejte. Kvůli výkonnosti nejsou v databázi funkce, které obsluhují Changes API vůbec přidané. V případě aktivace Changes API je do systému zaneseme. Proto je potřeba exkluzivně zamknout celou databázi.

Řešením tedy je se odhlásit z ABRA Flexi – jak z webového rozhraní tak klientské aplikace. Pak už to 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ář

adresar

Bankovní účet (adresář)

adresar-bankovni-ucet

Kontakt

kontakt

Místo určení

misto-urceni

PSČ

psc

Skupina firem

skupina-firem

Peněžní ústav

penezni-ustav

Stát

stat

Typ aktivity

typ-aktivity

Typ nákladu

typ-nakladu

Ceník a zboží

Agenda

Endpoint

Atribut

atribut

Cenová úroveň

cenova-uroven

Ceník

cenik

Dodavatel

dodavatel

Individuální ceník

individualni-cenik

Kusovník

kusovnik

Měrná jednotka

merna-jednotka

Odběratel

odberatel

Podobné zboží

podobne-zbozi

Poplatek

poplatek

Příslušenství

prislustenstvi

Sady a komplety

sady-a-komplety

Ceníková skupina

cenikova-skupina

Skupina zboží

skupina-zbozi

Typ atributu

typ-atributu

Skupina atributů

skupina-atributu

Stav ceníku

stav-ceniku

Doklady — faktury a pohledávky

Agenda

Endpoint

Faktura přijatá

faktura-prijata

Faktura přijatá — položka

faktura-prijata-polozka

Faktura vydaná

faktura-vydana

Faktura vydaná — položka

faktura-vydana-polozka

Prodejka *

prodejka

Prodejka — položka *

prodejka-polozka (viz faktura-vydana-polozka)

Pohledávka

pohledavka

Pohledávka — položka

pohledavka-polozka

Závazek

zavazek

Závazek — položka

zavazek-polozka

Typ faktury přijaté

typ-faktury-prijate

Typ faktury vydané

typ-faktury-vydane

Typ prodejky *

typ-prodejky

Typ pohledávky

typ-pohledavky

Typ závazku

typ-zavazku

Doklady — banka, pokladna, interní doklady

Agenda

Endpoint

Banka *

banka

Banka — položka

banka-polozka

Vzájemný zápočet *

vzajemny-zapocet

Typ banky *

typ-banka

Typ vzájemných zápočtů *

typ-vzajemnych-zapoctu

Pokladní pohyb

pokladni-pohyb

Pokladní pohyb — položka

pokladni-pohyb-polozka

Typ pokladního pohybu

typ-pokladni-pohyb

Interní doklad

interni-doklad

Interní doklad — položka

interni-doklad-polozka

Typ interního dokladu

typ-interniho-dokladu

Doklady — obchodní

Agenda

Endpoint

Nabídka přijatá

nabidka-prijata

Nabídka přijatá — položka

nabidka-prijata-polozka

Nabídka vydaná

nabidka-vydana

Nabídka vydaná — položka

nabidka-vydana-polozka

Objednávka přijatá

objednavka-prijata

Objednávka přijatá — položka

objednavka-prijata-polozka

Objednávka vydaná

objednavka-vydana

Objednávka vydaná — položka

objednavka-vydana-polozka

Poptávka přijatá

poptavka-prijata

Poptávka přijatá — položka

poptavka-prijata-polozka

Poptávka vydaná

poptavka-vydana

Poptávka vydaná — položka

poptavka-vydana-polozka

Typ nabídky přijaté

typ-nabidky-prijate

Typ nabídky vydané

typ-nabidky-vydane

Typ objednávky přijaté

typ-objednavky-prijate

Typ objednávky vydané

typ-objednavky-vydane

Typ poptávky přijaté

typ-poptavky-prijate

Typ poptávky vydané

typ-poptavky-vydane

Stav obchodního dokladu

stav-obchodniho-dokladu

Forma dopravy

forma-dopravy

Forma úhrady

forma-uhrady

Platba prodejky

prodejka-platba

Forma úhrady — zaúčtování

forma-uhrady-zauctovani

Doklady — sklad

Agenda

Endpoint

Skladový pohyb

skladovy-pohyb

Skladový pohyb — položka

skladovy-pohyb-polozka

Typ skladového pohybu

typ-skladovy-pohyb

Skladová karta

skladova-karta

Stav skladu k datu

stav-skladu-k-datu

Inventura

inventura

Inventura — položka

inventura-polozka

Rezervace

rezervace

Mapování skladu

mapovani-skladu

Umístění ve skladu — místnost *

umisteni-ve-skladu-mistnost

Umístění ve skladu — regál *

umisteni-ve-skladu-regal

Umístění ve skladu — police *

umisteni-ve-skladu-police

Výrobní číslo

vyrobni-cislo

Doklady — smlouvy

Agenda

Endpoint

Smlouva *

smlouva

Dodavatelská smlouva *

dodavatelska-smlouva

Smlouva — položka

smlouva-polozka

Typ smlouvy *

typ-smlouvy

Dodavatelský typ smlouvy *

dodavatelsky-typ-smlouvy

Stav smlouvy

stav-smlouvy

Příkazy k úhradě a číselníky plateb

Agenda

Endpoint

Příkaz k úhradě

prikaz-k-uhrade

Bankovní účet

bankovni-ucet

Pokladna

pokladna

Sklad

sklad

Číslo balíku

cislo-baliku

Konstantní symbol

konst-symbol

Formát elektronického bankovnictví

format-elektronickeho-bankovnictvi

Účetnictví

Agenda

Endpoint

Daňová evidence

danova-evidence

Účetní deník

ucetni-denik

Účetní osnova

ucetni-osnova

Účet

ucet

Účetní období

ucetni-obdobi

Obrat

obrat

Podklady DPH

podklady-dph

Řádek přiznání DPH

radek-priznani-dph

Sazba DPH

sazba-dph

Členění DPH

cleneni-dph

Přenesení DPH

preneseni-dph

Činnost

cinnost

Středisko

stredisko

Zakázka

zakazka

Typ zakázky

typ-zakazky

Stav zakázky

stav-zakazky

Hodnocení zakázky

hodnoceni-zakazky

Předpis zaúčtování

predpis-zauctovani

Typ organizace

typ-organizace

Saldo k datu

saldo-k-datu

Kurzy

Agenda

Endpoint

Kurz (obecný) *

kurz

Kurz pro cenotvorbu *

kurz-pro-cenotvorbu

Intrastat — kurz *

intrastat-kurz

Měna

mena

Intrastat

Agenda

Endpoint

Intrastat — dodací podmínky

intrastat-dodaci-podminky

Intrastat — druh dopravy

intrastat-druh-dopravy

Intrastat — měrná jednotka

intrastat-merna-jednotka

Intrastat — kraj určení

intrastat-kraj-urceni

Intrastat — kód nomenklatury

intrastat-kod-nomenklatury

Intrastat — obchodní transakce

intrastat-obchodni-transakce

Intrastat — zvláštní pohyb

intrastat-zvlastni-pohyb

Řady dokladů

Agenda

Endpoint

Řada

rada

Řada — banka

rada-banka

Řada — faktury přijaté

rada-faktury-prijate

Řada — faktury vydané

rada-faktury-vydane

Řada — interního dokladu

rada-interniho-dokladu

Řada — nabídky přijaté

rada-nabidky-prijate

Řada — nabídky vydané

rada-nabidky-vydane

Řada — objednávky přijaté

rada-objednavky-prijate

Řada — objednávky vydané

rada-objednavky-vydane

Řada — pohledávky

rada-pohledavky

Řada — pokladního pohybu

rada-pokladni-pohyb

Řada — poptávky přijaté

rada-poptavky-prijate

Řada — poptávky vydané

rada-poptavky-vydane

Řada — skladového pohybu

rada-skladovy-pohyb

Řada — závazků

rada-zavazku

Roční řada

rocni-rada

Nastavení a systém

Agenda

Endpoint

Nastavení

nastaveni

Parametr

parametr

Příloha

priloha

Report

report

Role

role

Text

text

Uživatel

uzivatel

Zástupost

zastupnost

Žurnál

zurnal

Filtr

filtr

Uživatelský dotaz

uzivatelsky-dotaz

Uživatelský dotaz — parametr

uzivatelsky-dotaz-parametr

Uživatelský dotaz — vlastnost

uzivatelsky-dotaz-vlastnost

Uživatelská vazba

uzivatelska-vazba

Typ uživatelské vazby

typ-uzivatelske-vazby

Právo viditelnosti

pravo-viditelnosti

Certifikační autorita

certifikacni-autorita

Skupina štítků

skupina-stitku

Štítek

stitek

Strom (kořen)

strom-koren

Strom

strom

Strom — ceník

strom-cenik

Vazba

vazba

Dostali jste odpověď na svou otázku?