この章では、Oracle WebCenter Content Serverのアクション・メニューの生成方法について説明します。
この章の内容は次のとおりです。
旧バージョンのコンテンツ・サーバーでは、コンポーネントの作者は、検索結果ページで使用される表のようなHTML表を作成して、HTMLコードをコピーおよび貼付けする必要がありました。表の中の情報はHTMLと混合しており、データと表示は区切られていませんでした。
同じ問題は、「アクション」メニューにも当てはまっていました。表およびメニューではデータと表示が緊密に結合していたため、CSS変更で行われた変更を除き、コンテンツ・サーバーのすべての表に対してグローバルな変更を実行することはできませんでした。表とメニュー両方の特定の面を、コンポーネントでターゲットにしたり変更することも困難でした。
ページの「アクション」メニューをカスタマイズするために、開発者は、次のインクルード・ファイルのいずれかをオーバーライドして、PageMenusData
ResultSetを変更することができます。これらのインクルードはすべて、DomainHome
/resources/core/resources/std_page.idoc
ファイルに定義されています。
custom_searchapi_result_menus_setup
custom_docinfo_menus_setup
custom_query_page_menus_setup
custom_audit_info_menus_setup
さらに、データのResultSetを設定し、そのデータを使用してページを表示する特定のリソース・インクルードをコールすることによって、検索結果ページで使用されるような表を作成できます。ResultSetは、「キュー内のワークフロー」ページや「検索結果」ページにあるような「アクション」メニューの作成にも使用できます。
「アクション」メニューとHTML表の表示フレームワークを使用すると、開発者は、システムの残り部分のルック・アンド・フィールと一致する迅速かつ柔軟なWebページを作成できます。また、コンポーネントの作者がこれらを使用すると、サーバー上の「ヘッドライン表示」表と「サムネイル表示」表のいずれか、またはすべて、さらに「アクション」メニューのいずれかに対して、拡張、追加およびオーバーライドを容易に行うことができます。
次の表示タイプごとに、検索結果ページには別々の表が使用されます。
ヘッドライン表示
サムネイル表示
{例 - ドキュメントを取得するためのコード}に示すように、どのような表の設定でも、最初の手順の1つは、表示するドキュメントを取得することです。
例11-1 ドキュメントを取得するためのコード
<$QueryText = "dDocAuthor <matches> `sysadmin`"$> <$executeService("GET_SEARCH_RESULTS")$>
次の例は、「ヘッドライン表示」表の作成方法を示しています。ここで説明する概念は、他の表タイプの作成にも使用されます。
{例 - 表の列を記述するためのResultSet}に示すように、このプロセスの最初の手順は、表の列を記述するResultSetを作成することです。
ColumnProperties
というResultSetが作成されます。表の各行は、作成する表の列に対応しています。各列には、いくつかの属性を関連付けることができます。より共通性の高い属性をいくつか、次に示します。
id
: これは必須の属性です。作成中の表の各列には、IDを関連付ける必要があります。このIDは、あらゆる行で何を表示するかを決定するために、後で使用されます。
width
: 列の幅。これは、100px
、15em
、auto
などのCSS幅宣言のいずれかにでき、これによってサイズが自動指定され、表のできるだけ多くの部分が埋められます。
headerLabel
: この列のヘッダーに表示するテキスト。
rowAlign
: コンテンツを左詰め、右詰め、中央揃えのいずれにするかを示すもの。
headerURL
: 列ヘッダーのテキストをURLにリンクするために使用されます。
{例 - ResultSetに表示するデータ}に示すように、次の手順は、表の各行にどのデータを表示するかを指定することです。
ColumnProperties
ResultSetには、技術的に表の各列に行がある一方、RowData
にある行は1つのみです。このResultSetに入力されるデータは、次の形式になります。
<$RowData.%COLUMN_ID% = "%IDOCSCRIPT%"$>
RowData
ResultSetの各列は、最終的な表に表示される実際の列を参照します。このResultSetの各列には、前に宣言されたColumnProperties
ResultSetで対応するIDがあります。このResultSetの各セルには、Idoc Scriptの式が割り当てられます。さらに、これがHTMLドキュメントに書き込まれるにつれて、各行の表示中に評価されます。
次に、表に各行を表示するために、リソース・インクルードを作成する必要があります。
<$include create_slim_table_row_include$>
このリソース・インクルードを呼び出すと、slim_table_row_include
リソース・インクルードが作成されます。RowData
ResultSetの解析と評価は、表の行ごとに行うのでなく、一度だけ行われます。
複数の行インクルードを設定するには(たとえば、アイテムのタイプごとに別々の行を表示する単一の表の場合)、次の手順を使用します。
RowData
ResultSetを削除して再作成します。
作成するリソース・インクルードの名前にrowIncludeName
を設定します。
create_slim_table_row_include
をもう一度インクルードします。
{例 - 表を表示するためのコード}は、表を表示するコードを示しています。
表の外観を検索結果ページの表のようにするには、スクリプトで次の値を設定します。
<$UseRowHighlighting = true$>
ヘッドライン表示表に、ある特殊なカスタマイズを行うと、コンポーネントの作者または管理者は誰でも、任意の列のデータの表示方法を簡単にオーバーライドできます。{例 - コンポーネント内でのカスタム・インクルード宣言}は、コンポーネント内から宣言できるカスタム・インクルードを示しています。
例11-2 表の列を記述するためのResultSet
<$exec rsCreateResultSet("ColumnProperties", "id,width,headerLabel,rowAlign")$> <$exec rsAppendNewRow("ColumnProperties")$> <$ColumnProperties.id = "dDocName"$> <$ColumnProperties.width = "150px"$> <$ColumnProperties.headerLabel = lc("wwDocNameTag")$> <$ColumnProperties.rowAlign = "center"$> <$exec rsAppendNewRow("ColumnProperties")$> <$ColumnProperties.id = "dDocTitle"$> <$ColumnProperties.width = "auto"$> <$ColumnProperties.headerLabel = lc("wwTitle")$> <$ColumnProperties.rowAlign = "left"$> <$exec rsAppendNewRow("ColumnProperties")$> <$ColumnProperties.id = "actions"$> <$ColumnProperties.width = "75px"$> <$ColumnProperties.headerLabel = lc("wwActions")$> <$ColumnProperties.rowAlign = "center"$>
例11-3 表を表示するためのコード
<$include slim_table_header$> <$loop SearchResults$> <$include slim_table_row_include$> <$endloop$> <$include slim_table_footer$>
例11-4 ResultSetに表示するデータ
<$exec rsCreateResultSet("RowData","dDocName,dDocTitle,actions")$> <$exec rsAppendNewRow("RowData")$> <$RowData.dDocName = "<$dDocName$>"$> <$RowData.dDocTitle = "<$dDocTitle$>"$> <$RowData.actions = "<$include doc_info_action_image$>"$>
例11-5 コンポーネント内でのカスタム・インクルード宣言
<@dynamichtml slim_table_title@> <b><$dDocTitle$></b> <@end@>
dDocTitle:slimTableCellInclude=slim_table_title
がIntradocDir
/config/config.cfg
ファイルに追加されるか、またはスクリプト内から設定された場合は、定義されたカスタム・インクルードを使用して、dDocTitleを列IDとする「ヘッドライン表示」表がすべて表示されます。これによって、これらの列ではRowData
が無効となります。
クラシック表示表の作成は、ヘッドライン表示表の作成とほとんど同じです。次の表に示すように、主要な相違点は異なる変数と異なるインクルード名に集中しています。
クラシック表示表 | ヘッドライン表示表 |
---|---|
classic_table_header |
slim_table_header |
classic_table_footer |
slim_table_footer |
create_classic_table_row_include |
create_slim_table_row_include |
classic_table_row_include |
slim_table_row_include |
「サムネイル表示」の表は、別のやり方で作成されます。ResultSet ColumnProperties
およびRowData
は構成されません。そのかわり、{例 - 「サムネイル表示」表のセルのコード}に示すように、列の数が設定され、各セルのペイントにはIdocスクリプトのインクルード名が使用されます。これは、他の方法に比べて、カスタマイズの容易さもデータドリブン性も劣っていますが、このタイプの表は、構造もずっと単純です。
例11-6 「サムネイル表示」表のセルのコード
<$numDamColumns = 4$> <$damCellIncludeName = "my_sample_dam_cell"$> <$include dam_table_header$> <$loop SearchResults$> <$include dam_table_item$> <$endloop$> <$include dam_table_footer$>
例11-7 行にアクション・メニューを組み込むためのコード
<$RowData.actions = "<$include action_popup_image$>" & " <$include doc_info_action_image$>"$>
例11-8 アクション・メニューを構成するデータ
<$exec rsCreateResultSet("PopupProps", "label,onClick,function,class,id,ifClause")$> <$exec rsAppendNewRow("PopupProps")$> <$PopupProps.label = lc("wwCheckOut")$> <$PopupProps.function = "<$HttpCgiPath$>?IdcService=CHECKOUT" & "&dID=<$dID$>&dDocName=<$url(dDocName)$>" & "&dDocTitle=<$url(dDocTitle)$>"$> <$PopupProps.class = "document"$> <$PopupProps.id = "checkout"$> <$exec rsAppendNewRow("PopupProps")$> <$PopupProps.label = lc("wwGetNativeFile")$> <$PopupProps.function = "<$HttpCgiPath$>?IdcService=GET_FILE" & "&dID=<$dID$>&dDocName=<$url(dDocName)$>" & "&allowInterrupt=1"$> <$PopupProps.ifClause = "showNativeFileLink"$> <$PopupProps.class = "document"$> <$PopupProps.id = "getNativeFile"$> <$exec rsAppendNewRow("PopupProps")$> <$PopupProps.label = lc("wwTest")$> <$PopupProps.function = "javascript:alert('<$js(dDocName)$>');"$> <$PopupProps.ifClause = "showTestAction"$> <$PopupProps.class = "debug"$> <$PopupProps.id = "alertDocName"$>
例11-9 「アクション」メニューを書き込むためのリソース
<$include create_action_popup_container_include$>
例11-10 表の各行でインクルードを呼び出すためのコード
<$exec rsCreateResultSet("PopupData", "actions")$> <$exec rsAppendNewRow("PopupData")$> <$PopupData.actions="<$include action_popup_container_include$>"$>
例11-11 「アクション」メニューでアイテムを非表示にするためのコード
<$disabledActionPopupClasses = "workflow,folders"$> <$disabledActionPopupIds = "getNativeFile,alertDocName"$>
これによって、適切な列にアクション・イメージが挿入されます。ただし、実際のメニューがHTMLページに書き込まれているわけではないので、それをクリックしても何も起りません。{例 - 「アクション」メニューを構成するデータ}は、このメニューの構成に使用するデータを作成するコードを示しています。
このコードでは、PopupProps
というResultSetが作成され、その各行は作成中のメニューのアクションに対応しています。各アクションには、いくつかの属性を関連付けることができます。より共通性の高い属性をいくつか、次に示します。
label
: アクションのラベルとして表示される文字列。
function
: このアクションに関連付けるURLまたはJavaScriptメソッド。
class
: このアクションの分類。これは、「検索」、「ドキュメント」、「ワークフロー」のように単純なもの、さらにはコンポーネントの名前にすることができます。アクションがグループに配置され、その同じグループ内の残りのアクションで有効か無効かを迅速に設定できます。
id
: 別の分類方法で、「class」よりずっと具体的です。この方法はアプリケーションに固有のもので、これを使用すると、特定のアクションがメニュー内に表示されないようにすることができます。
ifClause
: そのアクションをHTMLドキュメントに書き込もうとするたびに評価されるオプションの属性。この句がFALSE
に評価された場合、このアクションは表示されません。
isDisabled
: 1に設定された場合、このアクションは絶対に表示されません。
linkTarget
: このリンクでページを別のウィンドウに表示する場合に使用されます。この属性は、任意のアンカー・タグのターゲットを指します。
{例 - 「アクション」メニューを書き込むためのリソース}に示すように、このデータが設定されたら、この「アクション」メニューを書き込むIdocスクリプトのリソースの作成に使用できます。
このリソースは、create_slim_table_row_include
のように機能します。action_popup_container_include
というIdocスクリプトの新規リソースが作成されます。その名前を変更するために、スクリプトで<$actionPopupContainerIncludeName = new_include_name$>
と設定できます。
{例 - 表の各行でインクルードをコールするコード}は、ヘッドライン表示表の各行でこのインクルードが呼び出されるようにするコードを示しています。
このコードでは、RowData
ResultSetに類似したPopupData
ResultSetが作成されます。これは同じような構造になっており、ユーザーがアクション・イメージをクリックするまで非表示になっている「アクション」メニューのコンテナの出力先として使用されます。
ここで作成された表には「アクション」メニューがあり、これは、適切なイメージをクリックするたびに検索結果ページに通常表示されるものに似ています。
これらのアクションの編集は、PopupProps
ResultSetに行を追加するか、またはそのResultSetから行を削除したり、すでに存在している行を編集することによって行われます。このタイプのカスタマイズ以外にも、disabledActionPopupClasses
変数およびdisabledActionPopupIds
変数を設定することによって、アクションを非表示にすることができます。{例 - 「アクション」メニューでアイテムを非表示にするためのコード}に示すように、これらは、config/config.cfg
ファイルまたはIdocスクリプト自体で設定できます。
これらの変数を設定すると、workflow
とfolders
のいずれかをクラスとするアクション、またはgetNativeFile
とalertDocName
のいずれかをIDとするアクションが、常に非表示となります。これらの変数を使用すると、コンテンツ・サーバーの管理者およびコンポーネントの作者は、グローバルに、または特定のページで、特定のアクションを非表示にすることができます。
コンポーネントの作者は、Idocスクリプトのリソース・インクルードの数をオーバーライドして、グローバルに、またはターゲットを絞って、この領域の機能を変更できます。次に示すインクルードは、利用可能なリソース・インクルードのごく一部です。
custom_add_to_action_popup_data
custom_modify_action_popup_data
classic_table_row_pre_display
slim_table_row_pre_display
custom_row_pre_display
例11-12 行にアクション・メニューを組み込むためのコード
<$RowData.actions = "<$include action_popup_image$>" & " <$include doc_info_action_image$>"$>
例11-13 アクション・メニューを構成するデータ
<$exec rsCreateResultSet("PopupProps", "label,onClick,function,class,id,ifClause")$> <$exec rsAppendNewRow("PopupProps")$> <$PopupProps.label = lc("wwCheckOut")$> <$PopupProps.function = "<$HttpCgiPath$>?IdcService=CHECKOUT" & "&dID=<$dID$>&dDocName=<$url(dDocName)$>" & "&dDocTitle=<$url(dDocTitle)$>"$> <$PopupProps.class = "document"$> <$PopupProps.id = "checkout"$> <$exec rsAppendNewRow("PopupProps")$> <$PopupProps.label = lc("wwGetNativeFile")$> <$PopupProps.function = "<$HttpCgiPath$>?IdcService=GET_FILE" & "&dID=<$dID$>&dDocName=<$url(dDocName)$>" & "&allowInterrupt=1"$> <$PopupProps.ifClause = "showNativeFileLink"$> <$PopupProps.class = "document"$> <$PopupProps.id = "getNativeFile"$> <$exec rsAppendNewRow("PopupProps")$> <$PopupProps.label = lc("wwTest")$> <$PopupProps.function = "javascript:alert('<$js(dDocName)$>');"$> <$PopupProps.ifClause = "showTestAction"$> <$PopupProps.class = "debug"$> <$PopupProps.id = "alertDocName"$>
例11-14 「アクション」メニューを書き込むためのリソース
<$include create_action_popup_container_include$>
例11-15 「アクション」メニューでアイテムを非表示にするためのコード
<$disabledActionPopupClasses = "workflow,folders"$> <$disabledActionPopupIds = "getNativeFile,alertDocName"$>
例11-16 表の各行でインクルードを呼び出すためのコード
<$exec rsCreateResultSet("PopupData", "actions")$> <$exec rsAppendNewRow("PopupData")$> <$PopupData.actions="<$include action_popup_container_include$>"$>