Preskoči na glavno vsebino

Strom cenníka cez REST API

Ako vytvoriť cenníkový strom cez REST API

Avtor: Petr Pech

Strom ceníka je hierarchia kategórií, do ktorých sa zaraďujú položky ceníka. Cez REST API ho možno spravovať čítaním aj importom, tento návod ukazuje postup na jednoduchom príklade.

⚠️ Import do stromu ceníka je v stave NOT_DOCUMENTED — podporujeme ho, ale nie je súčasťou oficiálnej dokumentácie a neodporúčame sa naň spoliehať. Nie je plne implementovaný; uzol stromu je napríklad možné identifikovať iba číselným ID, nie kódom.


Evidencia stromu

Strom je popísaný tromi evidenciami:

Evidencia

Čo obsahuje

Jednotlivé uzly (vetvy) stromu tak, ako ich vidíte v aplikácii po zapnutí stromu — vrátane hladiny, poradia, nadradeného uzla a cesty.

Koreň stromu; štandardne jediný záznam STR_CEN — Strom ceníka.

Priradenie položiek ceníka do jednotlivých uzlov stromu.

Na obrázku je vidieť cestu do kategórie Solné mydlá a jej hladinu:

V API je ten istý strom zobrazený takto:

Element otec je predchádzajúci uzol (MYDLA), cesta a hladina zodpovedajú poradiu, ako ho vidíte v aplikácii — počíta sa do nich aj úvodný uzol Strom ceníka. Obe tieto vlastnosti sú iba na čítanie, Flexi ich počíta sama.


Tvorba stromu

Uzol sa zakladá s názvom (nazev), poradím (poradi) a stromom, do ktorého patrí (strom). Poradím určíte, na akej pozícii sa uzol vo svojej kategórii zobrazí; strom je koreň stromu a otec predchádzajúci uzol. Cesta a hladina sa 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 elementoch strom a otec možno uzol adresovať kódom (code:…) aj číselným ID. Uzly bez skratky — napríklad systémové Pripojené položky a Nepripojené položky — možno adresovať iba ID.


Priradenie položky ceníka do stromu

Priradenie sa importuje do evidencie strom-cenik. Položku ceníka (idZaznamu) môžete zadať ID aj kódom, uzol (uzel) však len číselným ID, ktoré zistíte dotazom 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 importe sa v uzle s ID 4 zobrazí priradená položka TELKREM ABC 500.

⚠️ Pozor na asymetriu čítania a zápisu: pri čítaní vracia API uzel ako kód (napríklad code:A-I), ale poslať takúto hodnotu späť nemožno — import ju odmietne s 400 a kódom neniKodNeboNemuzeBytID (Entita 'Uzol' neobsahuje kód alebo ho nemožno použiť ako ID). Použite hodnotu z uzel@ref, kde je číselné ID.

Neexistujúcu položku ceníka odmietne API s 400 a kódom formZaznamNenalezen.


Presun vetvy stromu

Na presun vetvy stačí pri existujúcom uzle zmeniť element otec na novú nadradenú kategóriu a poradi na požadovanú pozíciu — napríklad 99, aby sa zaradila na koniec.

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

Dôjde k presunu celej kategórie PANSKEKREMY vrátane podkategórií a priradených položiek do kategórie TELKREMY — nie k jej skopírovaniu. Hladina aj cesta sa prepočítajú samy.


Súvisiace

Ste s tem dobili odgovor na svoje vprašanje?