Wednesday 31 March 2010

Pozvánka na konferenci

Letošní Oracle ECM konference se bude konat 29.4.2010 v hotelu Hilton v Praze. Jakmile bude k dispozici link, na kterém se bude možné přihlásit, zveřejníme jej také zde na blogu.

Program na tento rok bude samozřejmě ovlivněn dozvuky loňského boomu způsobeného datovými schránkami a ostatními změnami v legislativě. Zaměříme se však také na téma Enterprise 2.0 a zejména pak na dopady změn na obchodní procesy (Business Process Management) - této problematice bude věnována celá vlastní sekce. Pro tento rok je zařazeno na program také množství prezentací našich partnerů pojednávajících o implementacích (nejen datových schránek) a zkušenostech díky nim nabytých.

Věříme proto, že jsme sestavili menu, které může být zajímavé pro kohokoliv, kdo se o danou problematiku zajímá.

Budeme se těšit na setkání na konferenci!

Wednesday 24 March 2010

Jemnější konfigurace pro formátové konverze a fulltextové indexování v UCM

UCM umožňuje provádět po vložení nového dokumentu automaticky některé operace. Mezi ty "dražší" (pokud jde o zatížení procesoru) jsou formátové konverze a indexování souboru pro fulltextové vyhledávání.

Obě operace je možné konfigurovat už ve standardní instalaci Content Serveru:
  • konverze se konfigurují v Configuration Manageru a základním dělícím kritériem je zde MIME type (resp. přesněji řečeno, jak nás upozornil jeden partner, přípona souboru)
  • indexování se konfiguruje přímo v základním konfiguračním souboru config.cfg
Toto nastavení je v některých případech bohužel příliš hrubé - např. neumožňuje definovat pro různé soubory MS Word užití různých konverzí. Ještě markantnější je to u fulltextového indexování - jsou indexovány všechny nebo žádné soubory (resp. v druhém případě se volba jmenuje metadata_only, tj. jsou indexována metadata). Toto může představovat určitý problém např. tehdy, je-li UCM využíváno jako úložiště nejrůznějších typů obsahu, tj. zejména těch, které je indexovat žádoucí a naopak těch, u kterých to nedává smysl, jako jsou naskenované image či multimediální obsah (zvukové záznamy, obrázky, videa).

Pro tyto účely vznikla standardní komponenta SelectivelyRefineAndIndex. Komponenta umožňuje dále zjemnit kritéria, přičemž na doplnění kritérií je možné využít jakoukoliv hodnotu v metadatech položky - viz příklad:

<@dynamichtml pre_search_index_file@>
<$if strEquals(dDocType, "ACCOUNTING") and strEquals(dFormat, "application/vnd.ms-excel")$>
<$doIndex=0$>
<$endif$>
<@end@>


Pro indexování je nastavitelný vlastně jen jediný parametr, doIndex, který má hodnotu 0, pokud se položka fulltextově indexovat nemá a pokud ano, má hodnotu 1. Dále se pak využívá ta metoda fulltextového indexování, která je nastavena globálně.

Pro konverze je pak možné upřesnit, jaká konverze se má přesně provést:
<@dynamichtml pre_submit_to_conversion@>
<$if strEquals(dDocType, "MARKETING")$>
<$dConversion="PASSTHRU"$>
<$elseif strEquals(dDocTitle, "Image")$>
<$dConversion="MultipageTiff"$>
<$endif$>
<@end@>

Wednesday 17 March 2010

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

V předchozích textech jsme uváděli, že měníme přímo zdrojové soubory na serveru. To je poměrně nesystémové řešení. Pokud bychom chtěli vše udělat korektně, musíme využít mechanismu komponent, tj. aplikace Component Wizard.
Fakticky se jedná o komponentu o třech zdrojích:
  • Definice service (v našem případě UPDATE_DOCINFO_BYFORM_FROMWORKFLOW)
  • Redefinice include std_doc_page_definitions
  • Redefinice template workflow_review_frames.htm
Nejprve vytvoříme prázdnou komponentu. Jako první do ní přidáme např. novou službu:


Tip: místo zaklikávání všech parametrů bývá rychlejší editovat přímo zdrojový soubor *.htm
Pozn. zde se definuje Load Order, což je pořadí, v jakém se zdroje aplikují (vyšší má přednost).

Jako druhý vytvoříme zdroj obsahující redefinici includu std_doc_page_definitions. (v prvním dialogu vyberte volbu Resource – HTML Include/String)


Nakonec pak vytvořímě definici šablony. Zde se fakticky jedná o 2 soubory, *.HDA obsahující definici a *.HTM obsahující vlastní HTML kód. Opět nejprve vybereme volbu Template.

Samotný soubor (WORKFLOW_REVIEW_FRAMES.htm) je možné editovat běžnými editory.

V této fázi už máme připraveny všechny zdroje tak, aby se komponenta dala na daném serveru pouštět a vypínat. Pokud ji však ještě chceme přenášet na jiné servery, je vhodné ji zabalit do instalační podoby (*.zip). K tomu je nezbytný ještě jeden krok, a to je definice buildu:
V této podobě je možné komponentu distribuovat na jakýkoliv další server. Samozřejmě při aplikaci (instalaci a spuštění) je vždy dobré vyzkoušet, zda nedojde k poruše jiné custom komponenty (pokud by redefinovala stejnou šablonu, include či náhodou vytvářela stejnou službu).

Samozřejmě, po aplikaci nové komponenty nezapomeňte restartovat Content Server!

Wednesday 10 March 2010

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

Řešení v podobě, v jaké jsme jej minule zanechali, má bohužel nevýhodu, že při uložení změn v metadatech (klik na tlačítko Submit Update) dojde k přesměrování na Homepage (je sice možné kliknout na tlačítko Back v browseru a na zobrazené stránkce už budou nová metadata).

Pokud chceme změnit chování, je nejlépe prozkoumat zdrojový kód stránky. Na něm můžeme zjistit, že tlačítko volá funkci postCheckIn napsanou v javaskriptu. Javascript je generovaný opět pomocí zdrojů (hlavně nejrůznějších includes).

V tomto případě nakonec dojdeme k volání služby UPDATE_DOCINFO_BYFORM, přičemž za přesměrovování je zodpovědná samotná definice služby:

<td>UPDATE_DOCINFO_BYFORM</td>
<td>DocService
2
REDIRECT_TEMPLATE
null
documents<br>
!csUnableToUpdateInfo(dDocName)</td>
<td>3:doSubService:UPDATE_DOCINFO_SUB:12:null
3:prepareRedirect:IdcService=DOC_INFO&dID=<$dID$>&dDocName=<$url(dDocName)$><$if IsWorkflowInfo$>&IsWorkflowInfo=<$IsWorkflowInfo$> <$endif$>:0:null</td>


V tomto případě se nabízí možnost jednoduše si vytvořit vlastní verzi služby, v níž by proběhlo přesměrování zpět na stránku REVIEW_WORKFLOW_DOC:

<td>UPDATE_DOCINFO_BYFORM_FROMWORKFLOW</td>
<td>DocService
2
WORKFLOW_REVIEW_FRAMES
null
documents<br>
!csUnableToUpdateInfo(dDocName)</td>
<td>3:doSubService:UPDATE_DOCINFO_SUB:12:null</td>


Nakonec je pak třeba zajistit, aby při generování stránky byla užita vždy správná služba. Tuto definici najdeme opět ve std_page.htm, include std_doc_page_definitions (původní text <$idcService = "UPDATE_DOCINFO_BYFORM"$> nahradíme):

<$if IsWorkflow$>
<$idcService = "UPDATE_DOCINFO_BYFORM_FROMWORKFLOW"$>
<$else$>
<$idcService = "UPDATE_DOCINFO_BYFORM"$>
<$endif$>


Konfigurace řešení
Výše uvedené řešení, tj. zejména využití standardních formulářů, má ještě jednu výhodu: je poměrně jednoduché využít standardního mechanismu profiles, tj. specifikovat, která metadatová pole se budou kdy zobrazovat, zda budou povinná, zda budou mít defaultní hodnoty apod. Jedinou nevýhodou zůstane, že zatímco kroky workflow se definují ve Workflow Administratoru, profily se definují v Configuration Manageru a obě prostředí je třeba prolinkovat (např. přes jména kroků ve workflow, tj. užití logiky kolem <$dWfStepName$> v podmínce Rules užitých v profilu).
Při práci s profily pak ještě zjistíte, že některá metadata není možné v rámci workflows měnit (např. Security Group) a některá jiná je naopak nezbytné na stránce mít (Content ID, v readonly podobě).

(pokračování příště)

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ě)