Dávkové operace a transakce

Dávkové operace (filtr místo výčtu ID)

Jedním elementem lze aktualizovat, nebo na něm vyvolat akci, u více záznamů najednou pomocí atributu filter na úrovni evidence — filtrovací jazyk je stejný jako u URL filtrů (viz Výpis, filtrování a dotazy):

<winstrom version="1.0">
  <cenik filter="dodavatel = 'code:FIRMA'">
    <stitky>VIP</stitky>
  </cenik>
</winstrom>

Přidá štítek VIP všem položkám ceníku od dodavatele FIRMA. Chová se, jako by místo jednoho elementu s filter bylo uvedeno tolik elementů, kolik záznamů podmínce vyhovuje — s tím rozdílem, že elementy id jsou u dávkových operací zcela ignorovány.

V JSON:

{
  "winstrom": {
    "faktura-vydana": {
      "@filter": "stitky='code:OVERENO'",
      "@action": "lock"
    }
  }
}

Tento příklad vyvolá akci lock nad všemi fakturami vydanými se štítkem OVERENO (viz Akce a zamykání).

Transakční zpracování

Ve výchozím stavu je celý import jednou databázovou transakcí — buď se uloží vše, nebo nic.

<winstrom version="1.0" atomic="false">
  <faktura-vydana><id>code:123</id>...</faktura-vydana>
  <faktura-vydana><id>code:456</id>...</faktura-vydana>
</winstrom>

Atributem atomic="false" se každý hlavní záznam importuje ve vlastní transakci (v příkladu výše proběhnou dvě transakce, jedna pro fakturu 123 a druhá pro 456; položky faktury jsou součástí stejné transakce jako faktura samotná).

Přínos: u velkých importů s mnoha záznamy transakce dlouho trvá a hodně dat se drží v paměti — obojí zhoršuje výkon. Pokud nevadí, že se uložení některého záznamu nezdaří (např. import se pravidelně opakuje, nebo lze problém ručně vyřešit), lze v režimu atomic="false" výrazně snížit paměťové (a u opravdu velkých importů i časové, kvůli garbage collectoru) nároky importu.