Přeskočit na hlavní obsah

Strom ceníku přes REST API

Jak vytvořit strom ceníku přes REST API

Autor: Petr Pech

Strom ceníku je hierarchie kategorií, do kterých se zařazují ceníkové položky. Přes REST API jej lze čtením i importem spravovat, tento návod ukazuje postup na jednoduchém příkladu.

⚠️ Import do stromu ceníku je ve stavu NOT_DOCUMENTED — podporujeme jej, ale není součástí oficiální dokumentace a nedoporučujeme se na něj spoléhat. Není plně implementován; uzel stromu je například možné identifikovat pouze číselným ID, nikoli kódem.


Evidence stromu

Strom je popsán třemi evidencemi:

Evidence

Co obsahuje

Jednotlivé uzly (větve) stromu tak, jak je vidíte v aplikaci po zapnutí stromu — včetně hladiny, pořadí, nadřazeného uzlu a cesty.

Kořen stromu; standardně jediný záznam STR_CEN — Strom ceníku.

Přiřazení ceníkových položek do jednotlivých uzlů stromu.

Na obrázku je vidět cesta do kategorie Solná mýdla a její hladina:

V API je tentýž strom zobrazen takto:

Element otec je předchozí uzel (MYDLA), cesta a hladina odpovídají pořadí, jak je vidíte v aplikaci — počítá se do nich i úvodní uzel Strom ceníku. Obě tyto vlastnosti jsou pouze pro čtení, Flexi je počítá sama.


Tvorba stromu

Uzel se zakládá s názvem (nazev), pořadím (poradi) a stromem, do kterého patří (strom). Pořadím určíte, na jaké pozici se uzel ve své kategorii zobrazí; strom je kořen stromu a otec předcházející uzel. Cesta a hladina se dopočítají.

POST https://demo.flexibee.eu/c/demo/strom.xml
<winstrom version="1.0">
<strom>
<kod>TELKREM</kod>
<nazev>Tělové krémy</nazev>
<poradi>1</poradi>
<strom>code:STR_CEN</strom>
<otec>code:KREMY</otec>
</strom>
</winstrom>

ℹ️ V elementech strom a otec lze uzel adresovat kódem (code:…) i číselným ID. Uzly bez zkratky — například systémové Připojené položky a Nepřipojené položky — jde adresovat jen ID.


Přiřazení ceníkové položky do stromu

Přiřazení se importuje do evidence strom-cenik. Ceníkovou položku (idZaznamu) můžete zadat ID i kódem, uzel (uzel) však jen číselným ID, které zjistíte dotazem na /strom.xml.

POST https://demo.flexibee.eu/c/demo/strom-cenik.xml
<winstrom version="1.0">
<strom-cenik>
<!-- idZaznamu = ID nebo kód ceníkové položky,
kterou chcete do stromu přiřadit -->
<idZaznamu>code:TELKREM ABC 500</idZaznamu>

<!-- uzel = ID daného uzlu ve stromu,
které zjistíte dotazem na /strom.xml -->
<uzel>4</uzel>
</strom-cenik>
</winstrom>

Po importu se v uzlu s ID 4 zobrazí přiřazená položka TELKREM ABC 500.

⚠️ Pozor na asymetrii čtení a zápisu: při čtení vrací API uzel jako kód (například code:A-I), ale poslat takovou hodnotu zpět nelze — import ji odmítne s 400 a kódem neniKodNeboNemuzeBytID (Entita 'Uzel' neobsahuje kód nebo ho nelze použít jako ID). Použijte hodnotu z uzel@ref, kde je číselné ID.

Neexistující ceníkovou položku odmítne API s 400 a kódem formZaznamNenalezen.


Přesun větve stromu

Pro přesun větve stačí u existujícího uzlu změnit element otec na novou nadřazenou kategorii a poradi na požadovanou pozici — například 99, aby se zařadila na konec.

<winstrom version="1.0">
<strom>
<id>code:PANSKEKREMY</id>
<poradi>99</poradi>
<otec>code:TELKREMY</otec>
</strom>
</winstrom>

Dojde k přesunu celé kategorie PANSKEKREMY včetně podkategorií a přiřazených položek do kategorie TELKREMY — nikoli k jejímu zkopírování. Hladina i cesta se přepočítají samy.


Související

Dostali jste odpověď na svou otázku?