Warning: Declaration of Suffusion_MM_Walker::start_el(&$output, $item, $depth, $args) should be compatible with Walker_Nav_Menu::start_el(&$output, $item, $depth = 0, $args = Array, $id = 0) in /DISK2/WWW/plsql.cz/www/wp-content/themes/suffusion/library/suffusion-walkers.php on line 39
Jan 272014
 
První díl - Workoutlog v APEXu – hezky od začátku #1 – úvod
Druhý díl - Workoutlog v APEXu – hezky od začátku #2 – návrh datové vrstvy(1)
Třetí díl - Workoutlog v APEXu – hezky od začátku #3 – návrh datové vrstvy(2)
Čtvrtý díl - Workoutlog v APEXu – hezky od začátku #4 – APEX workspace&user
Pátý díl - Workoutlog v APEXu – hezky od začátku #5 – APEX založení aplikace

 

Takže další pokračování aplikace jejíž cílem je logovat cvičení a také snad trošku cvičence hnát a štvát a v dobách opočinku ukazovat pěkné grafy. V minulém díle jsme založili aplikaci a ve schématu se kterým budem pracovat 13 tabulek. Dobré je si zkusit nalogovat se jako developer do Apexu a kliknout na SQL Workshop a zde by v sekci Recently Created Tables měly být vidět naše založené tabulky pro log a všechno je tedy vpořádku.

Nyní si nalogujem jako developer (localhost:8080/apex w:APEX_WORKOUT, u:APEX_DEVELOPER, p:Developer_0) a pokračujeme vy vytváření aplikace.  A pokud ještě nyní APEX nemáte rádi, tak nyní ukáže svou sílu, jak rychle lze vytvořit stránku ve které lze plně editovat databázová tabulka. Po nalogování Application Builder – a Application 666 a tlačítko edit:

A dále následuje stránka ve které lze editovat aplikaci. Konkrétně jsou zde především vidět jednotlivé stránky aplikace (html, formuláře, prostě stránky) . Stránky je možné zde upravovat, mazat, editovat a kliknutím na tlačítku  Run je přímo otevřít v prohlížeči. Vše krásně intuitivní, nyní by editace naší aplikace měla vypadat nějak takto:


Nejlogičtějším krokem je asi nyní udělat jednouchou stránku, která umožňuje zobrazit naši hlavní entitu – TBL_WORKOUT ve které budou záznamy o tom, kdy jsme cvičili. Aktuálně má naše aplikace vě stránky – číslo 1 (blank), kterou necháme a 101 jako stránka, která podporuje nalogování (tzn. výzva k zadání uživatele a hesla). Takže dnes přidáme dvě další stránky – jedna, která flat zobrazí data z tabulky TBL_WORKOUT a druhou, která tabulku umožní editovat. Teoreticky je možné obě stránky vygenerovat najednou, nicméně v rámci cvičení to zkusme sami ;) Takže hurá do toho!

Nejprve se, ale ještě vraťme do Oracle a SQL Developeru a založme tam PL/SQL funkci pod uživatelem APEX_WORKOUT, která bude vypadat něja takto:

create or replace function get_time_of_workout(p_start date, p_end date) return varchar2
as
ln_mins number;
begin
if (p_end<p_start) or p_start is null or p_end is null
then
return 'wtf';
else
ln_mins:=round((((p_end-p_start)*24)-floor((p_end-p_start)*24))*60);
return to_char(floor((p_end-p_start)*24))||'hod. '|| case when ln_mins=0 then null else ln_mins||'min.' end;
end if;
end;

Funkce vrací text, který řiká jaký je rozdíl mezi dvěma datumy. Protože nás určitě bude zajímat jak dlouho jsme cvičili. Má to trošku cvičný charakter, protože by se to dalo dát přímo do case selectu, kde by to bylo dokonce výkonější, ale v rámci cvičení to zkusme takto – příště třeba jinak ;) Dobře, máme nyní funkci, která nám v sexy formátu (2hod. 32min.) zobrazí jak dlouho jsme cvičili. A nyní opět k APEXu, jsme tedy na stránce Application Builder – Aplikace 666 se seznamem všech stránek, které v dané aplikaci jsou. Přidáme nyní tu, která bude zobrazovat čistě tabulku TBL_WORKOUT. A pro to je třeba udělat násedující:

Klikeneme na Create Page a nyní je třebas rozhodnout, jakou stránku chceme přidat – na výběr jsou grafy, mapy, prázdná stránka atd. Chceme zobrazit tabulku, což je v terminologii Oracle Report.


A klikneme na Next. Následuje výběr typu reportu. Necháme interaktivní ačkoliv pro tento účel by klidně stačil classický. Tedy Interactive repor a opět Next. A následuje zadání základních attributů nové stránky:

  • Page Number: 2 – generováno ze sekvence, měla by se vygenerovat 2 (první byla blank stránka)
  • Page Name: Master – TBL_WORKOUT. Při vývoji dávám název entity/tabulky, pak se přejmenuje
  • Region Template: Jak má stránka vypadat – css a barvičky, dávám Region Without Buttons and Titles
  • Region Name: REG_TBL_WORKOUT - název regionu – je to místo, kam se části/itemy stránek umístují
  • Breadscrum: do not use breadscrum on page – bez navigace, uděláme si sami ;)


A opět Next, zde se to ptá na navigační záložky – vůbec, vyberme Do not use tabs a zase Next. A nyní se to ptá na select z jakého se má report sestavit, tedy:

select id_workout,
workout_start,
workout_end,
get_time_of_workout(workout_start,workout_end) as cas_cviceni,
workout_day,
workout_type,
note,
'' edit,
'' see
from tbl_workout
order by id_workout desc;

Je to sice, hloupý select, ale některé věci stojí za pozornost. Konkrétně Doba_cviceni, která volá nově založenou funkci get_time_of_workout a jejíž výsledek se v reportu objeví jako další sloupec. A sloupce edit a see. Které v reportu vytvoří dva nové sloupce se kterými mam jistý záměr. Konkrétně kliknutím na edit půjde záznam zdeditovat (nová stránka).  A kliknutím na see uvidí uživatel přehled daného cvičení. Záznamy jsem seřadil podle id_workout, což by mělo odpovídat času, jak uživatel cvičil. Ono by to šlo i podle workout_start, ale přecejenom mé naplácané testovací záznamy pak zbytečně matou ;) Link to single row view:NO, nechcem možnost mít na celou stránku jeden záznam, kliknou na “Next” a pokračujem.


Nyní už zbývá jen povrdit sumář, potěšit se zelenou fajvkou a hláškou o úspěšnosti vytvoření stránky a nyní kliknout na zkoušku na Run Page. S tím, že po nalogování by měl být vidět nějaký takovýto výsledek:

Ok. Máme k dispozici Interaktivní report, který možňuje filtrovat, grupovat, stahovat data, řadit, ukládat nastavení, vyhledávat atd. Kdo nezná, tak doporučuji si to vyzkoušet proklikat před dalšími kroky ;) Je to fajn, ale je třeba pokračovat a konkrétně se zbavit vyhledávacího baru – asi nikdo nebude potřebovat – takže delete. Skočíme do editace stránky (přímo z otevřené stránky je dole odkaz nebo se proklikáme v Application Builderu) A pravým tlačítkem klikneme na REG_TBL_WORKOUT a vybereme Edit.

Otevře se stránka s nastavením reportu a bueme nastavovat. Vybereme záložku Report Attributes a najedeme na sekci Search Bar a zde ho odstraníme: Include Search Bar: NO. Nyní scrollneme nahoru zpět do sekce Column atributes a zde to trošku vylepšíme a zkrášlíme. Konkrétně přejmenujem hlavičku sloupců na něco hezčího:

To by mohlo stačit, takže modré tlačítko Apply Changes. Nyní jsme odstranili možnost vyhledávání, pojmenovali názvy sloupců a report už vypaá trošku k světu. Co chybí nejvíce nyní je možnost editace jednotlivých záznamů. Záznamy chci editovat tím způsobem, že kliknu u příslušeného řádku na sloupec/ikonku edit a hodí mi to na stránku s možností editací záznamu. Takže bude potřeba upravit sloupec edit a udělat z něj klikací link. Na což je relativně brzy, protože ještě nevíme kam linkovat. Tedy nejprve přirozeně uděláme stránku, kde je možné záznamy z TBL_WORKOUT editovat. Takže zpět do editace aplikace na seznam stránek a opět “Create Page”. Nyní máme opět na výběr typy stránek, ale tentorkát jdeme po editaci, takže Form.


A opět Next. A nyní je na nás rozhonout odkud bude form vygenerován a jak bude vlastně vypadat. Například, když vyberu naši nově založenou funkci (respektive by to měla být procka, aby to bylo správně) get_time_of_workout, tak pro mě Oracle vygeneruje form, který bude mít dva fieldy, pro každý parametr jeden. My chceme primárně editovat tabulku TBL_WORKOUT, takže From a table or View.

Nyní nás čeká zase wizard/průvodce, takže:

  • Table/View Owner: APEX_WORKOUT – jiné schéma by nemělo být ani dostupné
  • Table/View Name: TBL_WORKOUT – tabulka, kterou chceme umět editovat

A opět Next a dávám:

  • Page Number:3
  • Page Name: Form on TBL_WORKOUT (nechávám)
  • Region Title: REG_FORM_TBL_WORKOUT
  • Region Template: Reports Region
  • Breadcrum: - do not add breascrum on page -

A opět Next na výběr záložek/tabů:

  • Tab Options: Do not use tabs - zase bez tabů, pak si prolinkujem jak budem potřebovat

A opět Next na výběr primárního klíče:

  • Primary Key Type: Select Primary Key Columns(s) – Apex potřebuje vědět pole čeho má identifikovat záznamy, protože máme vlastní primární klíč (u každé tabulky první sloupec s prefixem ID_)
  • Primary Key Column 1: ID_WORKOUT


A pokračujeme dál průvocem – Next - nyní výběr odkud se vezme primární klíč pro sloupec ID_WORKOUT. Máme sekvenci, tedy Existing Sequence a vybereme sekvenci, která patří k této tabulce, tedy SEQ_ID_WORKOUT a opět Next na výběr sloupců, pro které budou pole a které bude možné editovat. Necháme tak jak je - tedy všechny. Zde stojí za upozornění, že chybí primární klíč, který takto editovat nelze,a opět Next. Chceme všechna tlačítka Create/Delete/Save takže necháme všude yes a zase Next.

Nyní máme určit cíl, kam má stránka uživatele hodit po té co stiskne tlačítko Sumbit či Cancel. Moc stránek tu nemáme, ale logicky zpět na ůvodní seznam cvičení, tedy stránku 2.

  • After Page Sumbit and Processing Branch to Page: 2
  • When Cancel Button Pressed Branch to this Page: 2

A následuje summarizace před vytvořením:

A pokud hébičky pracovali dobře, mělo by se nám objevit po kliknutí na Run Page něco takovéhleho:

Což je formulář, který umožní editovat/smazat/přidat záznam TBL_WORKOUT. Když pominu nehezké názvy u polí. Tak ke splnění toho, co jsem si zadal na začátku tohoto dílu, chybí jedna podstatná věc. Nexistuje prolink na záznam ze stránky 2 (s reportem cvičení) na možnost editace záznamu – stránky 3. Teoreticky můžu otevřít editaci záznamu přes tento link:

http://localhost:8080/apex/f?p=666:3:::NO::P3_ID_WORKOUT:1

Který řiká aplikace 666, stránka 3, žádné session id (dostanu nové), NO – Žádný debug, žádný request a hlavně P3_ID_WORKOUT=1. Kde P3_ID_WORKOUT je hidden element na html formu na zákadě, kterého Oracle fetchnul záznam s where ID_WORKOUT=1 z databáze.

Takže opět klikačka. Tentokrát je třeba dostat se na editaci stránky číslo 2 a následovat podobné, kroky jako v první části tohoto článku, tedy nejprve pravým a editace.


Vybereme záložku Report Attributes a sekci Column Attributes – tedy místo, kde už jsme jenou přejmenovávali názvy sloupců. Tentokrát ale rozklineme tužku/pastelku před sloupcem Edit:

Výborné! A nyní uděláme ze sloupce Edit klikací link odkazující na stránku číslo 3. Po kliknutí najdeme sekci Column Link a vyplníme jí takto:

  • Link:  text přípaně si vybrat nějakou ikonku [icon 4], která se hodí k editaci
  • Target: Page In Application – linkujeme v rámci aplikace
  • Page: 3 – cílová stránka
  • Item: P3_ID_WORKOUT – zkrytý primární klíč, kterému chceme předat honotu ze sloupce ID_WORKOUT

Hotovo! Hotovo! Nyní by tabulka s reportem mohla vypat nějak takto:

A po kliknutí na nové tlačítko by se měla otevřít stránka 3 s editovaným zkušebním záznamem:

Tak a to by mohlo být pro tento díl vše ;) Co příště ještě úplně nevím těch možností jak to vést je hodně. Ale pokusím se o něco kratšího, nějaké vylepšení nebo tak ;)

 Posted by at 13:45

  One Response to “Workoutlog v APEXu – hezky od začátku #6 – editace hlavní entity”

  1. [...] Workoutlog v APEXu – hezky od začátku #6 – editace hlavní entity [...]

 Leave a Reply

(required)

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>