==== Přehled obchodních pravidel ==== Obchodními pravidly se rozumí programové objekty, které zajišťují požadované chování formulářů v aplikacích ESO9 a jejichž voláním aplikační server zajišťuje konzistenci dat v aplikační databázi. Příkladem může být dotažení názvu a ceny zboží na složku dokladu po přenosu kódu zboží z číselníku.\\ \\ Tento dokument popisuje všechna obchodní pravidla dostupná v aplikačním serveru a pořadí jejich volání. Přehled je rozdělen podle akcí ve formuláři ESO9, které obchodní pravidla spouští. Většina uvedených obchodních pravidel může být tabulková (tj.do jejich parametrů vstupují pouze hodnoty aktuální tabulky) nebo pohledová (jejich parametry lze brát z celého datového řádku napříč všemi tabulkami v pohledu). Není-li řečeno jinak, volají se tabulková obchodní pravidla postupně nad všemi editačními tabulkami v pohledu. Obchodní pravidla jsou uváděna v pořadí, v jakém jsou aplikačním serverem volána, tzn.že datová pole, která má první obchodní pravidlo na výstupu a která změní hodnoty v datové větě, jsou použita v následujícím obchodním pravidle jako vstupní parametry atd. Navíc všechna obchodní pravidla volaná v rámci jedné akce běží v transakci, tzn.že např.pokud volání pohledového ValRecu při uložení nové věty skončí aplikační chybou, je celá transakce odrolována a to vč.uložení nové věty.\\ \\ === Typy obchodních pravidel === Každé obchodní pravidlo může být realizováno dvěma základními způsoby: * Jako stored procedura uložená v aplikační databázi na SQL Serveru - databázové obchodní pravidlo. Tento způsob je vhodný pro takové akce nad relačními daty, jejichž implementace je snazší v deklarativně orientovaném programovacím jazyce (T-SQL), než v imperativním (např.VB.NET, C#). * Jako DLL knihovna implementující definované rozhraní (interface) - programové obchodní pravidlo. Tento způsob je vhodný pro akce, jejichž řešení vyžaduje použití strukturovaných příkazů (podmínky, cykly), které se snáze implementují v některém z jazyků, jejichž kompilery podporují prostředí .NET Frameworku (VB.NET, C#).\\ \\ Z prostředí aplikačního serveru se nejprve volají obchodní pravidla realizovaná v SQL, potom pravidla realizovaná jako DLL knihovny. Následující popis je shodný pro oba způsoby, pouze konkrétní implementace programového obchodního pravidla jde za rámec tohoto dokumentu.\\ \\ Další možností automatické změny dat během jejich pořizování jsou uživatelské přepočty na typu dokladu. Ty jsou však, díky své jednoduchosti, vhodné pouze pro opravdu jednoduché úpravy.\\ === Vložení nové věty (INSERT) === == Tabulkový NewRec == * Syntaxe názvu: sp//JmenoTabulky//_NewRec * Vstupní parametry: hodnoty datového řádku tabulky JmenoTabulky, hodnoty z Where podmínky SQL dotazu, hodnoty z uživatelských parametrů (UP) * Výstupní recordset: sloupce tabulky //JmenoTabulky// == Pohledový NewRec == * Syntaxe názvu: sp//JmenoPohledu//_NewRec * Vstupní parametry: hodnoty datového řádku pohledu //JmenoPohledu//, hodnoty z Where podmínky SQL dotazu, hodnoty z UP * Výstupní recordset: sloupce pohledu //JmenoPohledu// == Tabulkový CalRec == * Syntaxe názvu: sp//JmenoTabulky//_CalRec * Vstupní a výstupní parametry: analogicky s předchozím obchodním pravidlem == Pohledový CalRec == * Syntaxe názvu: sp//JmenoPohledu//_CalRec * Vstupní a výstupní parametry: analogicky s předchozím obchodním pravidlem === Editace existující nebo nové věty (EDIT) === == Tabulkový FChange == * Syntaxe názvu: lze volit uživatelsky, obchodní pravidlo se vyhledává v tabulce //FChange//, klíčem pro nalezení je kombinace názvu tabulky, nad níž se FChange volá, názvu sloupce, jehož editaci vyvolání obchodního pravidla způsobila, a hodnoty parametru LookUp (viz níže) * Pokud je tabulka, nad níž se FChange volá, editační, bude hodnota parametru LookUp 0, jinak 1 * Vstupní parametry: hodnoty datového řádku tabulky //JmenoTabulky// * Výstupní recordset: sloupce tabulky //JmenoTabulky// == Pohledový FChange == * Syntaxe názvu: lze volit uživatelsky, obchodní pravidlo se vyhledává v tabulce //FChange//, klíčem pro nalezení je kombinace názvu pohledu, nad nímž se FChange volá, názvu sloupce, jehož editaci vyvolání obchodního pravidla způsobila, a hodnoty parametru LookUp (viz níže) * Pro pohledové FChange je hodnota parametru LookUp 1 * Vstupní parametry: hodnoty datového řádku pohledu //JmenoPohledu// * Výstupní recordset: sloupce pohledu //JmenoPohledu// == Tabulkový CalRec == * Viz. [[broverview#Tabulkový CalRec|tabulkový CalRec]] == Pohledový CalRec == * Viz. [[broverview#Pohledový CalRec|pohledový CalRec]] === Editace existující nebo nové věty (EDIT) - editace MF a MARK položek === == Pohledový FChange == * Viz. [[broverview#Pohledový FChange|pohledový FChange]] == Uživatelská RelationAction == * Syntaxe názvu: lze uživatelsky definovat parametrem RELATIONACTION ve formě nebo na hyperlinku * Volá se pouze v případě, že je cílová forma, ve které byla akce vyvolána, se zdrojovou formou ve vazbě MasterSlave nebo Parameters * Vstupní parametry: hodnoty položek ve zdrojové i cílové formě * Výstupní recordset: pouze hodnoty MF položek ve zdrojové formě === Uložení existující nebo nové věty (UPDATE) === == Pohledový BeforeInsert/BeforeUpdate == * Obě pravidla se od sebe liší pouze použitím při uložení nově pořízené datové věty nebo při uložení (po editaci) existující věty * Syntaxe názvu: sp//JmenoPohledu//_BeforeInsert, resp.sp//JmenoPohledu//_BeforeUpdate * Vstupní parametry: hodnoty datového řádku pohledu //JmenoPohledu//, hodnoty z Where podmínky SQL dotazu, hodnoty z uživatelských parametrů (UP) * Výstupní recordset: sloupce tabulky //JmenoPohledu// == Tabulkový BeforeInsert/BeforeUpdate == * Obě pravidla se od sebe liší pouze použitím při uložení nově pořízené datové věty nebo při uložení (po editaci) existující věty * Syntaxe názvu: sp//JmenoTabulky//_BeforeInsert, resp.sp//JmenoTabulky//_BeforeUpdate * Vstupní parametry: hodnoty datového řádku tabulky //JmenoTabulky//, hodnoty z Where podmínky SQL dotazu, hodnoty z uživatelských parametrů (UP) * Výstupní recordset: sloupce tabulky //JmenoTabulky// == Tabulkový ValRec == * Syntaxe názvu: sp//JmenoTabulky//_ValRec * Vstupní parametry: hodnoty datového řádku tabulky //JmenoTabulky//, hodnoty z Where podmínky SQL dotazu, hodnoty z uživatelských parametrů (UP) * Výstupní a výstupní parametry: viz.předchozí tabulková obchodní pravidla == Tabulkový AfterInsert/AfterUpdate == * Obě pravidla se od sebe liší pouze použitím při uložení nově pořízené datové věty nebo při uložení (po editaci) existující věty * Syntaxe názvu: sp//JmenoTabulky//_AfterInsert, resp.sp//JmenoTabulky//_AfterUpdate * Výstupní a výstupní parametry: viz.předchozí tabulková obchodní pravidla. V případě pravidla AfterInsert již vstupuje do parametrů ID nově pořízené věty. == Pohledový AfterInsert/AfterUpdate == * Obě pravidla se od sebe liší pouze použitím při uložení nově pořízené datové věty nebo při uložení (po editaci) existující věty * Syntaxe názvu: sp//JmenoPohledu//_AfterInsert, resp.sp//JmenoPohledu//_AfterUpdate * Výstupní a výstupní parametry: viz.předchozí pohledová obchodní pravidla. V případě pravidla AfterInsert již vstupuje do parametrů ID nově pořízené věty. == Pohledový ValRec == * Syntaxe názvu: sp//JmenoPohledu//_ValRec * Vstupní parametry: hodnoty datového řádku pohledu //JmenoPohledu//, hodnoty z Where podmínky SQL dotazu, hodnoty z uživatelských parametrů (UP) * Výstupní a výstupní parametry: viz.předchozí tabulková obchodní pravidla. Do parametrů obchodního pravidla již vstupuje ID nově pořízené věty. === Kopie existující věty (COPY) === == Tabulkový CopyRec == * Syntaxe názvu: sp//JmenoTabulky//_CopyRec * Vstupní parametry: hodnoty datového řádku pohledu //JmenoTabulky//, hodnoty z uživatelských parametrů (UP) == Pohledový CopyRec == * Syntaxe názvu: sp//JmenoPohledu//_CopyRec * Vstupní parametry: hodnoty datového řádku pohledu //JmenoPohledu//, hodnoty z uživatelských parametrů (UP) === Smazání existující věty (DELETE) === == Pohledový DelRec == * Syntaxe názvu: sp//JmenoPohledu//_DelRec * Vstupní a výstupní parametry: viz.předchozí pohledová obchodní pravidla == Tabulkový DelRec == * Syntaxe názvu: sp//JmenoTabulky//_DelRec * Vstupní a výstupní parametry: viz.předchozí tabulková obchodní pravidla == Tabulkový AfterDelete == * Syntaxe názvu: sp//JmenoTabulky//_AfterDelete * Vstupní a výstupní parametry: viz.předchozí tabulková obchodní pravidla == Pohledový AfterDelete == * Syntaxe názvu: sp//JmenoPohledu//_AfterDelete * Vstupní a výstupní parametry: viz.předchozí pohledová obchodní pravidla