Zmeny API

Rozhranie API pre zmeny (sledovanie zmien)

Lenka Haringerová avatar
Written by Lenka Haringerová
Updated over a week ago

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&#xF3;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:

?start=123

Od ktorej verzie sa má vypisovať (vrátane); predvolené nastavenie je od začiatku sledovania.

?limit=500

Koľko záznamov sa má vypísať; predvolené 100, maximálne 1000.

?records=vydané faktúry

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:

  1. Získanie aktuálnych údajov vrátane ich verzie (?add-global-version=true)

  2. Uloženie údajov

  3. Zapamätajte si verziu (z atribútu globalVersion)

Diferenciálna synchronizácia:

  1. Stiahnutie zmien od poslednej zapamätanej verzie (?start= )

  2. Stiahnutie zmenených údajov a ich uloženie alebo odstránenie odstránených údajov

  3. Zapamätať si verziu (z ďalšieho prvku alebo atribútu globalVersion)

  4. 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"
Did this answer your question?