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 0
Feb 242014
 

Link na předchozí díly. Pokračování z minula, kde jsme založili stránku s formulářem pro editaci TBL_CROSSFIT_WOD_LOV a TBL_CIRCLE_WORKOUT_DEF_SERIE. Ovšem z minulých dílů si bereme spoustu neřešených věcí, které chci pořešit nyní. Aktuálně největší pain jsou LOV a navázené entity. Tedy v tomto díle:

  • Pro pole “Is Default” je vhodné udělat číselník, ať to trošku vypadá – seznam s hodnotamy Ano/Ne
  • Pro pole “Crossfit Target Lov Id” číselník z tabulky tbl_crossfit_target_lov kam jsme v minulém díle nacpali data
  • Přejmenovat formulářové labely na něco rozumného
  • Vytvořit List of Values i pro podřaženou entitu TBL_CIRCLE_WORKOUT_DEF_SERIE

Task číslo 1. -  Pro pole Is Default je vhodné udělat číselník.

Po nalogování se dostaneme na editaci stránky Master Detail. U mě je to ID 14, ale pokud někdo následuje dostal pravděpodobně jiné číslo. Čísla stránek jdou za sebou, nicméně nějaké už jsem vytvořil a smáznul na zkoušku. Tedy Master Detail a editace fieldu P14_IS_DEFAULT.

Při editaci itemu hned v části Identification je na výběr typ. Záleží na typu a hodnotách, které chceme či nechceme umožnit. Zrovna pro binární hodnotu – je či není to defaulutní wod – je logicky na výběr spousta možností – od checkboxu, radio.. atd. Dokonce APEX pro hodnoty Yes/No nabízí vlastní typ. Vyberme Select List, je to příjemný interface a více použitelnější než checkbox či radio.

Dále v sekci Label jsem změnil nehezký text z “Is Default” na hezčejší “Oficiální WOD“. A ještě v sekci List of Values je třeba nadefinovat číselník. Je to velice podobné jako v Sieblu,  možnosti jsou dvě – statický a dynamický. Statický je pevný list hodnot, u kterého se předpokládá že se nebude měnit. Dynamický je napak takový, kde se čtou možnosti z uživatelských dat, tedy z tabulky. Pro toto pole jsou logické jen dvě hodnoty Yes/No, tedy statický. Do hodnoty List of values definition napíšeme :STATIC2:Ano;1,Ne;0. Static řiká, že jde o statické LOV, 2ka protože chceme aby byly v pořadí vytvoření (pak je bez dvojky – pořadí dle abecedy. Zde je to vcelku jedno). A po té se střídá zobrazená hodnota v listu – Ano s její hodnotou ve formuláří – 1. Každá další položka v listu je oddělena čárkou.

Task číslo 2. – Pro pole “Crossfit Target Lov Id” číselník z tabulky tbl_crossfit_target_lov

Z minula máme tabulku TBL_CROSSFIT_TARGET_LOV naplněnou nějakými daty. Z pohledu použití by toto měl být spíše statický list hodnot, ale v rámci cvičení jsem to navrhl jako tabulku a udělejme z toho tedy dynamické LOV. Po kliknutí na editování pole P14_CROSSFIT_TARGET_LOV_ID.

V části Identification opět vybereme Select List. V části Label jsem upravil pole Label na “Cíl cvičení“. A nyní to nejdůležitější – v části List of Values do pole List of Value Definitions:

select target_name, id_crossfit_target_lov from apex_workout.tbl_crossfit_target_lov order by target_name

Obyčejný select z databáze, jediné co je nutné si pamatovat je, že musí vracet dva sloupce s tím že první je textová hodnota zobrazovaná na stránce (target_name) a druhé je hodnota, která je skutečně ve formuláři a která jde do databáze (id_crossfit_target_lov – primární klíč). A ideáně ještě order by pro příjemnější zobrazení.

Task číslo 3. – Přejmenovat formulářové labely na něco rozumného

U každého z Itemů je fajn nastavit nějaký smysluplný label - edit na každém z itemů formuláře, sekce label, pole label. Udělejme něco takovéhleho:

  • P14_NAME – Jméno WODu
  • P14_IS_DEFAULT - Oficiální WOD
  • P14_CROSSFIT_TATGET_LOV_ID - Cíl cvičení
  • P14_PICTURE – Obrázek
  • P14_ROUNDS – Počet kol
  • P14_NOTE – Poznámka

Takže by to mohlo vypadat nějak takto:

Task číslo 4. -Vytvořit List of Values i pro podřaženou entitu TBL_CIRCLE_WORKOUT_DEF_SERIE

Na založení master záznamu WOD je to dostatečné. Ještě bohužel není možné založit k záznamu seznam kol cvičení, protože potřebují odkaz na záznam v tabulce TBL_TABATA_LOV nebo TBL_WORKOUT_LOV. Ve sloupci WORKOUT_OR_TABATA_LOV_ID může být odkaz do jedné nebo druhé tabulky (podobně to řeší Siebel), takže constraint který z mého modelu vygeneroval Oracle SQL Data Modeler nemá moc smysl:

ALTER TABLE TBL_CIRCLE_WORKOUT_DEF_SERIE DROP CONSTRAINT FK_CIRCLE_WORKOUT_DEF_SERIE;

Tím jsme se zbavili nutnosti mít nějaké záznamy v tabulkách TBL_TABATA_LOV a TBL_WORKOUT_LOV, ovšem stejně se bez toho neobejdeme, takže nějaká seed data zase:

INSERT INTO TBL_TABATA_LOV(NAME,ATTRIBUTE_1V,NOTE) VALUES ('Kliky v zátěžové vestě','+9,5kg','Obyčejné kliky v zátěžové vestě'); INSERT INTO TBL_TABATA_LOV(NAME,ATTRIBUTE_1V,NOTE) VALUES ('Dřepy','','Dřepy'); INSERT INTO TBL_TABATA_LOV(NAME,ATTRIBUTE_1V,NOTE) VALUES ('Angličáci','','Angličáci s výskokem'); commit;

To by byla TABATA a ještě obyčejná cvičení:

INSERT INTO TBL_WORKOUT_LOV(WORKOUT_DESCRIPTION,WEIGHT,BODY_WEIGHT_RELATIVE,TARGET,TIME_REST,TIME_REST_DEGRESSION,NOTE) VALUES ('Dřepy',null,1,15,null,null,null); INSERT INTO TBL_WORKOUT_LOV(WORKOUT_DESCRIPTION,WEIGHT,BODY_WEIGHT_RELATIVE,TARGET,TIME_REST,TIME_REST_DEGRESSION,NOTE) VALUES ('Kliky',null,1,10,null,null,null); INSERT INTO TBL_WORKOUT_LOV(WORKOUT_DESCRIPTION,WEIGHT,BODY_WEIGHT_RELATIVE,TARGET,TIME_REST,TIME_REST_DEGRESSION,NOTE) VALUES ('Přítahy',null,1,5,null,null,null); commit;

Nyní zpět do APEXu a opět přidání dynamického listu. Tentokrát do editace detailu (tabulka TBL_CIRCLE_WORKOUT_DEF_SERIE). Týká se to pole WORKOUT_OR_TABATA_LOV_ID, které opět zeditujem:

V Column Attributes vybereme v Display As hodnotu  Select List (query based LOV).

A ještě je třebas v sekci List of Values naplácnout SQL Select do pole List of Values Definition:

select label,val from ( select workout_description ||' '|| case when weight is not null then 'Váha:'||weight else null end || case when target is not null then 'Počet:'||target else null end || case when time_rest is not null then 'Odpočinek:'||time_rest else null end ||' (WORKOUT)' as label, id_workout_lov as val,1 from TBL_WORKOUT_LOV union all select name || ' (TABATA)', id_tabata_lov,2 from TBL_TABATA_LOV order by 3,2)

Spojení unionem all hodnoty z tabulek TBL_WORKOUT_LOV a TBL_TABATA_LOV. Zbytek je tak nějak na krásu.

Pro dnešek předposlední krok. Ještě chybí jeden List of Values a to pro pole IS_TABATA_OR_WORKOUT_ID. Takže do editace itemu IS_TABATA_OR_WORKOUT_ID v sekci Column Attributes v poli Display As vybrat tentokrát Select List (static LOV) a v sekci List of Values opět upravit List of Values Definition na:

STATIC2:Cvik;0,TABATA;1

A  poslední krok – v editaci stránky kliknout praým na TBL_CIRCLE_WORKOUT_DEF_SERIE Detail a vybrat Edit Report Attributes. A upravit labely ke sloupcům:

  • ID_CIRCLE_ORDER – Pořadí
  • WORKOUT_OR_TABATA_LOV - Cvičení
  • IS_TABATA_OR_WORKOUT_ID - Cvičení nebo TABATA
  • ATTRIBUTE_1v - Volné pole (varchar2)
  • ATTRIBUTE_1n - Volné pole (number)
  • Note - Poznámka

Takže po úpravách by mohl formulář na vkládní WOD vypadat nějak takto:

Ve formuláři na obrázku je vyplněno cvičení se jménem Chelsea. Přesně podle definice na Crossfit.com. Pro nyní je to vše, pro příště se nabízí dva logické kroky – report se definovanými WODy – tedy report nad tabulkou TBL_CROSSFIT_WOD_LOV a ideálně i výpis s definicí. A druhá věc, která je aktuálně chybí je možnost editace entit (TBL_TABATA_LOV a TBL_WORKOUT_LOV), kterou jsem v tomto článku dočasně obešel přímými inserty do databáze.

 Posted by at 00:54

 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>