Wednesday 3 March 2010

Modifikace UCM: komponenty (html resources), 1. část

Jeden z našich partnerů se na nás obrátil s otázkou, zda je možné v rámci workflow aktualizovat i metadata. Možné to samozřejmě je, ale defaultní funkcionalita je poněkud uživatelsky nepřívětivá. Postup by totiž byl asi takovýto:
1. Na stránce REVIEW_WORKFLOW_DOC (na obrázku) je nutné kliknout na link Content Information,

2. čímž se dostaname na standardní stránku náhledu na metadata,
3. odkud je možné vyvolat formulář Update,
4. na němž je možné pomocí metody Post (tlačítka Submit Update) uložit změny.
5. Předchozí akce navíc vrátí uživatele na Homepage, takže znovu musí otevřít stránku REVIEW_WORKFLOW_DOC.

Z výše uvedeného je zřejmé, že toto není varianta, kterou je možné doporučovat klientovi, který v rámci workflows chce například doplňovat metadata. Přesto má výše uvedené smysl – dává návod, co je třeba udělat; s tím rozdílem, že v rámci jedné stránky. Tento postup už vede na modifikaci UCM, a to s využitím poměrně jednoduché technologie html resources.

Identifikace zdrojové šablony stránky
Prvním úkolem je nalezení zdroje, v tomto případě HTML šablony, který je třeba modifikovat.
1. REVIEW_WORKFLOW_DOC v URL stránky je služba. Její šablonu tedy najdeme v popisu služeb. Pokud se nejedná o službu dodávánou či modifikovanou nějakou komponentou, najdeme příslušný popis v souboru std_services.htm resp. workflow.htm v adresáři .../shared/config/resources/ (Pozor! I standardní služby je možno předefinovat pomocí komponent (takovým příkladem je komponenta CS10gR3CoreUpdate, která aktualizuje téměř všechny standardní zdroje). V tom případě hledejte službu v adresáři .../custom/. Je možné použít fulltext search na jméno služby v souborech *.htm)
2. Daná služba je definována ve workflow.htm, odkud (přes informaci obsaženou v .../shared/config/templates/templates.hda či v jiném podobném souboru) nakonec najdeme, že stránka je definována v souboru workflow_review_frames.htm (I zde platí, že musíme najít aktuální soubor!!! Zde je možné použít prosté vyhledávání na jméno souboru – dá se předpokládat, že soubory v .../custom/ budou mít vyšší prioritu (loadOrder).)

Úprava stránky
Nejprve je třeba rozhodnout, kam budeme přidávat nový obsah. Rychlým náhledem na strukturu šablony zjistíme, že stránka je postavena jako několik HTML tabulek (<table> … </table>), z nichž ta nejdůležitější obsahuje jeden řádek a dva sloupce (nalevo jsou instrukce a tlačítka, napravo náhled na obsah). Nakonec se jako nejsnažší (levá strana je příliš úzká a obsahuje logiku, aby se tato část nedala příliš roztáhnout na úkor náhledu) ukázalo přidat do tabulky třetí sloupec.
Nyní je otázka, co do daného místa přidat. Jak bylo uvedeno, inspiraci je možné najít na formuláři Update, ze kterého postupně dojdeme k update_docinfo.htm
Prostým překopírováním do stránky však zjistíme, že se v daném prostoru objeví CELÁ stránka z UCM, včetně navigace. Jednoduchým testem zjistíme, že za přidání tohoto obsahu je zodpovědný include checkin_page_content.
Nalezneme tedy příslušný include v std_page.htm a překopírujeme jej na místo. Nakonec je poměrně snadné zjistit, že stačí odstranit jen jednu řádku a ze stránky zmizí navigace. Podobným způsobem odstraníme nepotřebná tlačítka.

Výsledný kód nakonec vypadá takto:

<!-- Modify START -->
<td>
<div>
<$include std_update_html_head_declarations$>
<$include checkin_body_def$>

<$include std_checkin_form_start$>
<table border=0 cellpadding=2 cellspacing=0 summary="">
<tr>
<$include std_checkin_page_caption$>
<$include std_extra_checkin_page_def$>
<$include std_document_checkin_fields$>
</tr>
<tr>
<$exec inc("compute_std_button_checkin_label")$>
<td align=center colspan=2>
<$include std_compute_addpreviewbutton_toplevel$>
<$if addPreviewButton$>
<input type=button name=Preview value="<$lc("wwPreview")$>" onClick="postPreview(this.form)">
<$endif$>
<$include custom_add_checkin_controls$>
<input type=button name=javaSubmit value="<$checkinButtonLabel$>" onClick="postCheckInStandard(this.form)">

</td>
</tr>
</table>
<$include std_checkin_form_end$>
<$include std_checkin_clbra$>
<$include std_page_end$>
</div>
</td>
<!-- Modify END -->

A výsledná stránka pak například takto:
(pokračování příště)

No comments:

Post a Comment