FlexiBee API - návratové hodnoty

Když už jsme zvládli založit nový záznam ve FlexiBee tak by bylo dobré zjistit co nám FlexiBee na tuto akci odpovídá. Proto se podíváme na návratové hodnoty.

FlexiBee na požadavek typu PUT nebo POST vrací strukturu, která informuje uživatele o změnách.

Pokud posíláme data na adresu XML vrátí nám FlexiBee strukturu v XML formátu.
<winstrom version="1.0">
  <success>true</success>
  <stats>
    <created>1</created>
    <updated>0</updated>
    <deleted>0</deleted>
    <skipped>0</skipped>
    <failed>0</failed>
  </stats>
  <results>
    <result>
      <id>804</id>
      <ref>/c/demo/adresar/804.xml</ref>
    </result>
  </results>
</winstrom>

Pokud ale zvolíme adresu JSON tak nám FlexiBee návratovou hodnotu také vrátí v tomto formátu.

{"winstrom":{"@version":"1.0","success":"true","stats":{"created":"1","updated":"0","deleted":"0","skipped":"0","failed":"0"},"results":[{"id":"805","ref":"/c/demo/adresar/805.json"}]}}
Tyto návratové hodnoty je možné zpracovat a zjistit z nich potřebné informace.

Návratová hodnota obsahuje pole:
1. success
Možné hodnoty jsou true a false. V případě, že se zápis podařil tak návratovou hodnotou je true. Pokud při zápisu došlo k chybě vrací FlexiBee hodnotu false.
2. stats
FlexiBee také vrací statistiky obsahující informace, kolik objektů bylo vytvořeno (created), změněno (updated), smazáno (deleted). Kolik objektů se bylo přeskočeno (skipped) a kolik objektů se nepodařilo vložit kvůli nějaké chybě (failed).
3. results
Tato kolekce obsahuje identifikátory objektů, které byly ve FlexiBee založeny a případné výpisy chyb u jednotlivých objektů.

<winstrom version="1.0">
  <success>false</success>
  <stats>
    <created>0</created>
    <updated>0</updated>
    <deleted>0</deleted>
    <skipped>0</skipped>
    <failed>1</failed>
  </stats>
  <results>
    <result>
      <errors>
        <error for="kod" code="INVALID">
          Zkratku 'CHARLIEB' již používá jiný záznam. [CHARLIEB]
        </error>
      </errors>
    </result>
  </results>
</winstrom>

Ukázka chybové XML návratové hodnoty.

{"winstrom":{"@version":"1.0","success":"false","stats":{"created":"0","updated":"0","deleted":"0","skipped":"0","failed":"1"},"results":[{"errors":[{"message":"Zkratku 'CHARLIEB' již používá jiný záznam. [CHARLIEB]","for":"kod","code":"INVALID"}]}]}}
Ukázka chybové JSON návratové hodnoty.

Vaše aplikace tedy hned pozná, co se ve FlexiBee odehrálo. Může zkontrolovat zda došlo k založení všech objektů a při případné chybě vypsat uživateli chybové hlášení a nechat ho data opravit.

REST API, FlexiBee API

-

Líbil se vám článek?

Nasdílejte ho svým přátelům na sociálních sítích.

Pinterest

Názory, připomínky a jiné komentáře

Dobrý den. Pokud metodou PUT vkládám (např. do faktura-prijata) nové záznamy hromadně, v návratové struktuře dostanu hromadně výsledky results: ID a REF. Není zde ale identifikátor, který by vázal výstup ke vstupní hodnotě. Proto jsem předpokládal, že funguje pořadí návratových hodnot tak, že n-tý result se váže k n-tému vstupu. Kontrolou ale zjišťuji, že minimálně u evidence FAKTURA-PRIJATA toto nefunguje. Návratové hodnoty jsou v jiném pořadí. Dokonce bývá u této evidence návratových hodnot jiný počet, než vstupních, přestože succes = true, skipped = 0, failed = 0.

Máte s tímto zkušenost? Přehlédl jsem něco, nebo byste mi doporučil vkládat do FlexiBee záznamy po jednom? Děkuji za radu.

Na to co FlexiBee vrací se nikdy nespoléhejte!!! Vždy používejte vlastní identifikátory (externí, code: atd.)

Dobrý den. Díky za odpověď. Probíral jsem to ještě s podporou FlexiBee. Říkali, že návratové hodnoty mají být v pořadí, ve kterém přišel request. Jiný počet návratovách hodnot jsem už pochopil - importuji totiž přijaté faktury včetně příloh a FlexiBee vrací result zvlášť pro fakturu a zvlášť pro přílohu.

Data jsem si opravil a budu sledovat, zda se zase něco neporouchá. Vy doporučujete používat vlastní identifikátory. S tím problém nemám, ale při potvrzení vytvoření nového záznamu FB nevrátí nic jiného, než své vnitřní ID záznamu a odkaz na záznam.

Pokud to jde používejte externí identifikátory. Ty Vám samozřejmě FlexiBee vracet nebude ale jste schopen si podle nich záznam dohledat. Jestli se jeho založení podařilo nebo ne.

Hlavně... pokud se potřebujete spoléhat na to, že vám FlexiBee vrátí identifikátory, tak nejspíš nevyužíváte jednu z největších výhod FlexiBee API a přiděláváte si problémy.

Vezmeme to na příkladu:
Zapisuji přes jeden request několik vydaných faktur.

Případ, kdy potřebuji znát identifikátory z FlexiBee je ten, že k FlexiBee API přistupuji jako k jiným API. Tzn. akce pro založení a změnu jsou jiné. Možnosti také. Ale to u FlexiBee API neplatí. FlexiBee samo dle identifikátoru určuje, zda již záznam existuje nebo ne. A zda ho tedy bude vytvářet nebo měnit.
FlexiBee Vám tedy na tento request vrátí několik identifikátorů. Vy si je přiřadíte ke svým objektům a při případné změně se pokusíte tohoto identifikátoru využít pro update (který je ale stejný jako insert).
Co ale stane pokud budou identifikátory v chybném pořadí. Update bude měnit úplně jiný záznam! A to je v účetnictví a nejenom tam celkem velký problém.
A co se bude dít, pokud vám záznam ve FlexiBee někdo smaže? S interním identifikátorem ho již nikdy nevytvoříte.

Kdežto pokud budete používat externí identifikátory (nebo např. identifikátor code:)? Vůbec vám nevadí, že záznam ve FlexiBee někdo smazal! Navíc pokud budete externí identifikátory generovat smysluplně, tak nemusíte mít ani ve své aplikaci sloupec navíc. A pokud budete potřebovat později záznam (fakturu) změnit, tak přece víte kterou...

A to je pro mě jasná volba!

Dobrý den, rozumím a děkuji

Vložit nový komentář

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.

Powered by CharlieBlog Engine v2.1 - Login