V minulém díle jste se naučili, jak použít komponentu Interactive Grid pro zadávání dat jako v Excelu. Dnes se podíváme na to, jak ho vytvořit hned z několika tabulek. Grid přitom zůstane stejně snadno editovatelný, jako ten jednoduchý, ale na pozadí bude updatovat jednotlivé tabulky, ze kterých se skládá.
Jako příklad použiji novou tabulku se zaměstnanci, ke které připojím novou tabulku s platy. Všeobecně je jednodušší držet si tato data v jedné tabulce, ale v našem případě mám tabulku s platy odděleně, protože vývojáři do ní běžně nemají mít přístup. Personalista, oproti vývojářům, potřebuje upravovat v naší aplikaci obě tabulky zároveň. Tuhle situaci vyřešíme akcí, která zasáhne do obou tabulek.
Nejdříve je potřeba založit tabulky. Scripty pro tabulky si spustíte v APEXu.
Tabulky máme připravené. Teď si vytvoříme novou stranu a na ní interaktivní grid.
Do gridu napíšete kód select s join obou tabulek tak, abychom obsáhli všechny sloupce.
Teď přichází trochu složitější část. Nejdříve je nutné si nastavit grid jako editovatelný a po té určím primární klíč.
Grid sám vygeneroval ID t1000, které se ale nehodí, protože naše sloupce id jsou number. Vytvoříme si proto sekvenci, kterou použijeme ve scriptu pro ukládání.
Dále se vrátíte zpět na editaci gridu. Zde si rovnou můžete vyzkoušet, co se stane, když si uložíte záznam.
Jak se dalo očekávat, tak automatická akce při uložení neprošla. Je to z toho důvodu, že grid neobsahuje jen jednu tabulku s primárním klíčem, ale dvě.
Musíme přepsat proces, který volá create, update a delete pro náš grid, na custom akce. Základem takového procesu je script níže.
V následujícím procesu jasně rozliším, co se má stát se všemi řádky. Takhle bude vypadat script pro moje tabulky.
Nyní tento script zaměníme za automatický proces gridu. Sloupec ID je potřeba nastavit na typ hidden. Dále přidáte dynamickou akci na save interaktivního gridu pro refresh záznamů.
Pojďme si report vyzkoušet.
Jak můžete vidět, jednotlivá pole jsou zbytečně velká (jsou typu text area) a překáží při vyplňování. Toto vyřešíme změněním pole na text field.
Gratuluji, právě jste vytvořili interaktivní grid s custom create, update a delete row funkcí.
Na straně 11, v aplikaci zaměstnanci, si ho můžete vyzkoušet.