Přeskočit na hlavní obsah

Inkrementální aktualizace

Částečné aktualizace záznamů v REST API

Autor: Petr Pech

ABRA Flexi umožňuje částečné aktualizace záznamů (změny hodnot). Při aktualizaci záznamů uveďte jen takové atributy, které chcete změnit. Pokud uvedete prázdný atribut, dojde ke smazání hodnoty atributu.

<?xml version="1.0"?>
<winstrom version="1.0">
<cenik id="123">
<nazevA>Nový název</nazevA> <!-- změněná hodnota -->
<ean/> <!-- smazaná hodnota -->
</cenik>
</winstrom>


Mazání položek

Většina záznamů může obsahovat položky (např. faktura). Tyto položky je možné přidávat a mazat. Pokud u položky není uveden identifikátor, je určující její pořadí.

⚠️ Doporučujeme i u položek uvádět externí identifikátor, protože na položku mohou být navázány další informace (např. z jakého skladu bylo zboží vydáno). Pokud dojde k řízení položek jen podle pořadí a dojde k vložení záznamu na začátek, hodnoty budou přepsány, ale navázané informace zůstanou u původních záznamů. Tento postup tedy není vhodný při aktualizacích.


Aktualizace všech položek

Pokud při aktualizaci položek není uveden identifikátor, dojde vždy k přidání záznamů. Pokud chcete seznam záznamů nahradit a smazat tak všechny položky, které nejsou při aktualizaci uvedeny, použijte atribut removeAll="true":

<?xml version="1.0"?>
<winstrom version="1.0">
<faktura-vydana id="123">
<polozkyFaktury removeAll="true">
<faktura-vydana-polozka>
<id>14</id>

</faktura-vydana-polozka>
</polozkyFaktury>
</faktura-vydana>
</winstrom>

V tomto případě platí, že všechny položky, které nejsou v seznamu uvedeny, budou smazány. Ty položky, které uvedeny jsou, budou aktualizovány/založeny.

Ten samý požadavek přepsaný do JSON formátu by vypadal takto:

{
"winstrom": {
"@version": "1.0",
"faktura-vydana": [
{
"id": "123",
"polozkyFaktury@removeAll": "true",
"polozkyFaktury": [{
"id": "14"
}]
}
]
}
}

💡 removeAll="true" je destruktivní — smaže i položky, o kterých nevíte. Vyzkoušejte si požadavek nejdřív s testovacím uložením (?dry-run=true) a v tagu <content /> zkontrolujte výsledný stav dokladu.


Na co si dát pozor

  • Pro přímé mazání vybraných položek lze použít atribut action="delete" — viz Provádění akcí.

  • Mezi položkami mohou existovat vnitřní závislosti, a tak při aktualizaci může dojít ke změně položky, která není explicitně modifikována.

  • Na podobném principu jako aktualizace položek funguje i aktualizace štítků.

Dostali jste odpověď na svou otázku?