Include KZLibrary ///

Projekt: KZIS ///

Author : M. Brousek ///

Created: 21.4.2010 ///

Description: Základní třída transakce KZIS ///

Každý uzavřený proces systému KZIS by měl být spouštěn v rámci transakce. /// Transakce celý proces ohraničuje, zaznamená okamžik a způsob jeho zahájení, /// jeho průběh a ukončení nebo zaznamená případnou nastalou chybu. /// U procesů, které manipulují s daty by mělo být z každého datového záznamu patrné, v rámci které /// transakce tento záznam vznikl nebo byl modifikován. V případě služeb by mělo být obdobně dokumentováno, /// v rámci které transakce byla služba volána a jaká data byla této službě předána na vstupu, nebo přebrána /// jako výsledek jejího volání. ///

Transakce KZIS není obdobou databázové transakce, cílem transakcí KZIS je evidence a /// zaznamenání průběhu jednotlivých procesů systému. Pro transakce KZIS tedy neplatí /// atomizace množiny provedených operací s možností odvolání (rollback), /// ani není definováno určení priority a způsobu provádění operací (isolation level) /// tak, jak je to u databázových transakcí obvyklé. ///

Třídu transakce, nebo třídy přímo související s transakčním systémem lze v případě potřeby doplnit /// o další atributy nebo entity. Namátkou např. sedování uživatelů, logování zpráv, trasování procesu atd. ///

///

/// Třída KZIS.Data.TS.MWTransaction slouží pouze k zaznamenávání dat transakcí. /// Vlastní operace s transakcemi by měly být vždy prováděny v rámci procesu (BP) prostřednictvím k tomu /// určené třídy operace (BO) KZIS.BO.TS.Transactions ///
Class KZIS.Data.TS.MWTransaction Extends %Persistent { /// Generované jednoznačné ID transakce Property TransactionID As %String; /// Druh transakce. ///

Druh transakce v podstatě zaznamenává proces, který je v rámci dané transakce prioritně spuštěn. /// Pro každý z rozhraní spustitelný proces je definována specifická třída druhu transakce s jedinečným /// kódem. Tento kód se zadává v požadavku metody pro zahájení transakce BO KZIS.BO.TS.Transactions, /// který na jeho základě vytvoří instanci příslušné třídy a přiřadí ji do tohoto atributu. ///

Viz též KZIS.Data.TS.TransactionKind Property Kind As KZIS.Data.TS.TransactionKind; /// Událost ///

Instance třídy události, která proces související s touto transakcí iniciovala. Instance /// události se zadává v požadavku metody pro zahájení transakce BO KZIS.BO.TS.Transactions. Property Event As KZIS.Data.TS.MWEvent; /// Akutální stav trasnakce ///

Aktuální stav transakce zaznamenávají pro danou instanci příslušné metody BO KZIS.BO.TS.Transactions. Property State As KZIS.Data.TS.TransactionState; /// Zaznamená zahájení transakce ///

Metoda je volána prostřednictvím metody StartTransaction třídy BO KZIS.BO.TS.Transactions. Method Start() { if '$ISOBJECT(..Event) { set ..Event = ##class(KZIS.Data.TS.Events.ekUnknown).MarkEvent() } if '$ISOBJECT(..Kind) { throw $$$KZISError("Start transaction error", "Unknown transaction kind") } set ..TransactionID = "KZIS_"_..%Id() set ..State = ##class(KZIS.Data.TS.States.tsStarted).Open() do ..%Save() } /// Zaznamená úspěšné dokončení transakce ///

Metoda je volána prostřednictvím metody Commit třídy BO KZIS.BO.TS.Transactions. Method Commit() { set ..State = ##class(KZIS.Data.TS.States.tsFinished).Open() do ..%Save() } /// Zaznamená úspěšné dokončení transakce ///

Metoda je volána prostřednictvím metody Error třídy BO KZIS.BO.TS.Transactions. Method Error() { set ..State = ##class(KZIS.Data.TS.States.tsError).Open() do ..%Save() } }