Přeskočit na hlavní obsah

Kopie dokladu - API

Jakým způsobem zkopírovat doklad přes REST API rozhraní?

Autor: Petr Pech

Obdobně jako v aplikaci je možné záznam zkopírovat i přes REST API. Při importu lze namísto běžného vytvoření založit nový záznam kopií již existujícího záznamu. K tomu slouží atribut sourceId, ve kterém uvedete identifikátor kopírovaného záznamu.


Příklad

Kopie skladového pohybu, kde nově vytvořenému záznamu nastavíme jiné datum vystavení:

<winstrom version="1.0">
<skladovy-pohyb sourceId="1179">
<datVyst>2022-09-11</datVyst>
</skladovy-pohyb>
</winstrom>

Uvedené atributy (zde datVyst) se přiřadí nově vytvořenému záznamu, ostatní se převezmou z kopírovaného.

Kopírovat lze i podle kódu a totéž funguje ve formátu JSON:

<winstrom version="1.0">
<ucet sourceId="code:132001">
<id>code:132002</id>
<nazev>Zboží na hlavním skladě</nazev>
</ucet>
</winstrom>
{
"winstrom": {
"@version": "1.0",
"faktura-vydana": [{
"@sourceId": "123",
"firma": "code:JINY_ODBERATEL"
}]
}
}


Idempotence

Pokud je uveden identifikátor nového záznamu, je volání idempotentní. Opakované odeslání požadavku způsobí pouze běžnou aktualizaci již existujícího záznamu.

Pokud identifikátor není uveden nebo takový záznam dosud neexistuje, vytvoří se kopie záznamu odkazovaného atributem sourceId.

ℹ️ Jak to poznat v odpovědi: kopie vrátí ID nového záznamu, zatímco při opakovaném volání s již existujícím <id> dostanete zpět ID toho původního záznamu — nová kopie nevznikne.


Na co si dát pozor

  • Vytváření kopie záznamu se obvykle musí postarat o zajištění unikátnosti vlastností (např. pole Zkratka u číselníků), ale v některých případech je to již zajištěno automaticky (např. při kopírování dokladů).

  • Odkaz na neexistující sourceId skončí chybou 400 s kódem NOT-FOUND.

  • Než kopii pošlete naostro, ověřte si výsledek testovacím uložením (?dry-run=true) — v tagu <content /> uvidíte, co by se skutečně uložilo.


Související

Dostali jste odpověď na svou otázku?