3 Idoc Scriptのカスタム・スクリプト言語の概要
この章の内容は次のとおりです。
3.1 Idocの命名規則
Idoc変数(構成変数または環境変数と呼ばれることもあります)は、Idocスクリプトおよび構成ファイルで使用できます。
一般に、変数が構成の一部である場合、変数は大文字で始まります。config.cfgファイルまたはintradoc.cfgファイルで指定した変数は通常、先頭が大文字になります。例については、『Oracle Fusion Middleware Oracle WebCenter Contentの構成リファレンス』のDefaultFilterInputFormatに関する項を参照してください。サービス・リクエスト内の多くのパラメータも大文字で始まります。
ページで定義され、std_page.htmなどのファイルで導出されて使用される変数は、小文字で始まります。例は、「Idoc Scriptの関数」の「executeService関数」を参照してください。変数は環境変数またはサービス変数から計算されて、プレゼンテーションに使用されます。
オブジェクトを定義するために変数を使用する場合、その変数は、定義しているオブジェクトのタイプを表す小文字で始まります。ワークフロー固有の変数の例については、「Idoc Scriptの関数と変数」の「wfSet()」を参照してください。また、すべての関数は小文字で始まり、多くは関数のタイプを表す接頭辞で始まります。たとえば、ほとんどの文字列操作関数はstrで始まります。あるいは、ResultSet関数はrsで始まります。
カスタム・メタデータ・フィールドではないデータベース列名はすべて、小文字のdで始まります。コンテンツ・サーバー・システムにより作成されたカスタム・メタデータのデータベース列名はすべて、小文字のxで始まります。
3.2 Idoc Scriptの構文
Idoc Scriptは、次の基本的な構文ルールに従います。
3.2.1 Idoc Scriptのタグ
Idoc Scriptのコマンドは、デリミタ<$で始まり、$>で終わります。次に例を示します。
<$dDocTitle$> <$if UseGuiWinLook and isTrue(UseGuiWinLook)$>
HCSPページまたはHCSFページでIdoc Scriptを使用している場合は、Idoc Scriptのタグに構文<!--$script‐‐>を使用する必要があります。
3.2.2 Idoc Scriptのコメント
Idoc Scriptコードでは、標準のHTMLコメントまたはIdoc Scriptのコメントが使用できます。Idoc Scriptのコメントは、デリミタ[[%で始まり、%]]で終わります。次に例を示します。
<!-- HTML Comment --> [[%My Comment%]]
HTMLコメントは、Idoc Scriptエンジンのプレーン・テキストとして解析されます。このエンジンは、Idoc Scriptの構成のみを検索します。生成されたページにコメントを表示する場合は、HTML/XMLコメント構文を使用します。それ以外の場合は、Idoc Scriptのコメント構文をお薦めします。
他のIdoc Scriptを生成するIdoc Scriptを作成していて、ソース・ページを読取り可能にするには、構成dynamichtmlと、Idoc Scriptリソース・ファイルにある文字列リソースなどのその他のリソース指定子をコメント・アウトするコメント構文が使用できます。次に例を示します。
[[% Commenting out resource includes <@dynamichtml myinclude@> <@end@> End comment %]]
3.3 Idoc Scriptの使用
Idoc Scriptには、6つの基本的な使用があります。
3.3.1 インクルード
インクルードは、コンテンツ・サーバーのWebページの作成に使用されるコードを定義します。インクルードは、リソース・ファイル内で一度定義されると、必要に応じて多数のテンプレート・ファイルによって参照されます。システムでは、インクルードを大いに活用しています。
インクルードを使用することによって、コンポーネント・アーキテクチャと動的サーバー・ページの使用によるインスタンスのカスタマイズが簡単になります。インクルードとカスタマイズの詳細は、「動的サーバー・ページのカスタム・インクルードを使用するIdocファイルの作成」を参照してください。
-
インクルードは、HTMリソース・ファイルに次のフォーマットを使用して定義されます。
<@dynamichtml name@> code <@end@> -
インクルードは、次のIdoc Scriptフォーマットを使用してHTMテンプレート・ファイルからコールされます。
<$include name$> -
インクルードには、Idocスクリプトおよび有効なHTMLコード(JavaScript、Javaアプレット、カスケード・スタイルシート、コメントなど)を含めることができます。
-
インクルードは、コール元と同じファイルで定義するか、別のファイルで定義することができます。
-
標準的なインクルードは、wcc_home_dir/shared/config/resources/std_page.htmファイル、
IdcHomeDir/resources/core/idoc/std_page.idocファイルで定義されます。 -
HDAファイルとCFGファイルはスクリプト対応ではないため、これらのタイプのファイルにインクルード文を使用することはサポートされていません。
インクルードはグローバルであり、システムのあらゆる部分で使用できます。HCSPファイルの動的スクリプト・ページでインクルードが使用できます。.idocファイルでは、グローバルではないローカライズされたインクルードを実行できます。HCSPファイルは、適切な構文を使用して、グローバルなインクルードまたはローカライズされたインクルードを両方ともコールできます。同じ名前が1つでも存在している場合、インクルードは既存のインクルードをオーバーライドできます。
詳細は、次の項を参照してください。
3.3.1.1 インクルードの例
最も一般的なインクルードの1つは、ボディ定義要素<@dynamichtml body_def>です。このインクルードは、ページの背景色、ハイパーリンクの色および背景イメージを設定します。次の例は、wcc_home_dir/shared/config/resources/std_page.htmIdcHomeDir/resources/core/idoc/std_page.idocにあるコードを示しています。
<@dynamichtml body_def@> <!--Background image defined as part of body tag---> <body <$if background_image$> background="<$HttpImagesRoot$><$background_image$>" <$elseif colorBackground$> bgcolor="<$colorBackground$>" <$endif$> <$if xpedioLook$> link="#663399" vlink="#CC9900" <$else$> link="#000000" vlink="#CE9A63" alink="#9C3000" <$endif$> marginwidth="0" marginheight="0" topmargin="0" leftmargin="0" > <@end@>
ほとんどの標準的なテンプレート・リソース・ファイル(IdcHomeDir/resources/core/templates/pne_home_page.htmなど)には、ページの最上部近くに次のIdoc Scriptコードが含まれています。
(たとえば、wcc_home_dir/shared/config/templates/pne_home_page.htm)
<$include body_def$>
コンテンツ・サーバー・システムは、このコードが含まれているテンプレート・ページを解決するときに<@dynamichtml body_def@>定義を検索し、プレースホルダ・コードを定義にあるコードに置換します。
3.3.1.2 superタグ
superタグは、既存インクルードの例外の定義に使用します。superタグは、既存のインクルードで開始し、指定したコードを使用してそれに追加するか、または変更するようにインクルードに指示します。
-
superタグでは、次の構文を使用します。<@dynamichtml my_resource@> <$include super.my_resource$> exception code <@end@>
-
superタグを使用して、標準的なインクルードまたはカスタム・インクルードを参照できます。superタグは、最後にロードされたインクルードを統合します。 -
superの後に定義されたリソース名は、superをインクルードしたインクルード名と一致している必要があります。前出の構文例では、my_resourceはインクルード名であるため、一致するコールはsuper.my_resourceとなります。 -
複数の
superタグを指定して、最後のバージョンよりも前にロードされたインクルードをコールすることができます。たとえば、標準のbody_defインクルードの例外を2つの異なるコンポーネントに設定するには、最後にロードされたコンポーネントに次の構文が使用できます。<$include super.super.body_def$>
注意:
1つのインクルードに複数の
superタグを使用する場合は、リソースのロード元とロード順序が判明していることを確認します。 -
superタグが特に役立つのは、大規模なインクルードに小規模なカスタマイズを行う場合や、ソフトウェアが次のバージョンになったときに変わる可能性の高い標準コードをカスタマイズする場合です。新規バージョンのコンテンツ・サーバー・ソフトウェアにアップグレードする場合、superタグによって、コンポーネントで最新バージョンのインクルードが使用され、インスタンスのカスタマイズに必要な特定のコードのみが確実に変更されます。
3.3.1.3 superタグの例
この例では、コンポーネントによって、my_resourceインクルードが次のように定義されます。
<@dynamichtml my_resource@> <$a = 1, b = 2$> <@end@>
後でロードされた別のコンポーネントでは、superタグを使用して、my_resourceインクルードが拡張されます。次の拡張を行うと、aには値1が割り当てられ、bには値3が割り当てられます。
<@dynamichtml my_resource@> <$include super.my_resource$> <!--Change "b" but not "a" --> <$b = 3$> <@end@>
3.3.2 変数
変数 では、変数の値を定義したり、置換したりすることができます。
以降の各項では、Idoc Scriptの変数の使用方法について説明します。
3.3.2.1 変数の作成
Idoc Script変数は、次のいずれかの方法で作成されます。
-
多くの変数は事前定義されています。
-
独自のカスタム変数を定義できます。
-
いくつかの変数値は、問合せとサービスを使用して生成する必要があります。一部の変数情報はデータベースから自動的に使用できないため、問合せとサービスを定義して依頼する必要があります。
Idoc Script変数のタイプの詳細は、「Oracle WebCenter ContentでのIdoc Scriptの変数と関数の使用」を参照してください。
3.3.2.2 変数の参照
テンプレートとその他のリソース・ファイルの変数を参照するには、次のIdoc Scriptタグを使用します。
<$variable_name$>
このような変数名を参照する場合、その変数が参照されたときに、生成されたページによってIdoc Scriptタグがその変数の値に置換されます。
3.3.2.3 変数の値
-
この構造を使用して、変数に値を割り当てることができます。
<$variable=value$>
たとえば、
<$i=0$>は0の値を変数iに割り当てます。 -
変数の値は、次の名前/値のペアのフォーマットを使用して、環境リソース(CFG)ファイルにも定義できます。
variable=value
たとえば、標準的な構成変数は
IntradocDir/config/config.cfgファイルに定義されます。ノート:
デフォルトでは、コードにより設定されたすべての構成変数値が
IntradocDir/config/config.cfgファイルにリストされるとはかぎりません。
3.3.2.4 カンマ区切り記号
Idoc Scriptは、変数の参照内の1つのスクリプト・ブロックでカンマによって区切られる複数の句をサポートしています。
たとえば、2つのseparate文、<$a=1$>および<$b=2$>のかわりに、<$a=1,b=2$>を使用できます。
3.3.2.5 条件における変数の参照
次の構造を使用して、変数の存在を評価できます。
<$if variable_name$>
変数が定義されていて空でない場合、この条件はTRUEとして評価されます。変数が定義されていないか、空(null)文字列として定義されている場合、それはFALSEとして評価されます。
このタイプの参照の標準的な使用法の例は、「条件の例」を参照してください。
3.3.2.6 変数の参照の検索順序
サービス・リクエストを遂行するために変数が参照される場合、次のデフォルトの順序によりデータ・バインダで最初に見つかる一致が代替値になります。
-
LocalData -
Active ResultSets -
Nonactive ResultSets -
Environment
たとえば、変数が環境に存在していて、それがアクティブResultSetのフィールド名でもある場合は、アクティブResultSetの現在行の値が使用されます。
3.3.2.7 標準変数
特別な評価ロジック(条件動的変数など)を持たない標準変数は、#activeキーワード接頭辞を使用することと同等です。
たとえば、タグ<$variable$>は<$#active.variable$>と同等です。ただし、#activeが明示的に表記されていなくて、変数が見つからない場合は、エラー・レポートがデバッグ出力に印刷されます。
#active修飾子は、変数の参照の検索順序に説明するように、変数の参照によってDataBinderが検索されることを意味するのに対し、#envでは環境のみから選択でき、#localは常にLocalDataを参照します。明示的に#activeを使用することと接頭辞を使用しないことの相違は、(1)修飾子を使用していなくて、(2) 変数の参照がDataBinderに見つからない場合のみエラーが報告されることです。
3.3.3 関数
Idoc Scriptには、多数のビルトイン・グローバル関数があります。関数は、文字列の比較、操作ルーチン、日付フォーマット化、ResultSetの操作といったアクションを実行します。いくつかの関数は、計算または比較の結果などの結果も返します。
関数名の後に情報をカッコで閉じることによって、情報が関数に渡されます。関数に渡される情報のピースをパラメータといいます。関数には、パラメータをとらないもの、パラメータを1つとるもの、複数のパラメータをとるものがあります。関数のなかには、その使用方法によってパラメータ数が異なるものもあります。
Idoc Script関数のリストは、「グローバル関数」を参照してください。
3.3.3.1 パーソナライズ関数
パーソナライズ関数は、ユーザー・トピック・ファイルとも呼ばれるパーソナライズ・ファイルで定義されたユーザー・プロパティを参照します。各ユーザーの「ユーザー・プロファイル」の設定、左ナビゲーション・バーのパーソナル・リンクおよびキュー情報のワークフローはすべてユーザー・トピック・ファイルで定義されます。ユーザー・トピック・ファイルはHDAファイルであり、WC_CONTENT_ORACLE_HOME/data/users/profiles/us/username/ディレクトリに置かれています。
次のグローバル関数は、ユーザー・トピック・ファイルを参照します。
たとえば、ユーザーの左ナビゲーション・バーにある「ポータル・デザイン」リンクは、pne_nav_userprofile_linksインクルード(WC_CONTENT_ORACLE_HOME/shared/config/resources/std_page.htmリソース・ファイル内にあります)の次のコードから生成されます。WC_CONTENT_ORACLE_HOME/data/users/profiles/us/username/pne_portal.hdaファイルのportalDesignLinkプロパティがTRUEである場合は、リンクが表示されます。
<$if utGetValue("pne_portal", "portalDesignLink") == 1$>
<$hasUserProfileLinks=1$>
<tr>
<td colspan=2 nowrap align="left">
<a class=pneLink href="<$HttpCgiPath$>?IdcService=GET_PORTAL_PAGE&Action=GetTemplatePage&Page=PNE_PORTAL_DESIGN_PAGE">
<$lc("wwPortalDesign")$></a>
<td>
</tr>
<$endif$>3.3.4 条件
条件では、if句と else句を評価して、アセンブルされたページにコードを含めたり、コードを除外することができます。
- 条件を評価するには、次のIdoc Scriptキーワードを使用します。
<$if condition$><$else$><$elseif condition$><$endif$>
- 条件句は、次の一般的な構造を使用します。
<$if conditionA$> <!--Code if conditionA is true--> <$elseif conditionB$> <!--Code if conditionB is true--> <$else$> <!--Code if neither conditionA nor conditionB is true--> <$endif$>
条件式には、任意のIdoc Scriptの関数または変数が使用できます。詳細は、「条件における変数の参照」を参照してください。
- ブール演算子を使用して条件句を組み合わせることができます。たとえば、
and演算子を次のように使用できます。<$if UseBellevueLook and isTrue(UseBellevueLook)$>
最初の式では変数の有無と、変数が空でないかどうかをテストし、2番目の式では変数の値が
1に評価されるか、あるいは、tまたはy(大/小文字を区別しません)で始まるかどうかをチェックします。2番目の句がない場合、変数が設定されていなかったり空の場合には、エラーが生成される可能性があります。等価表現は次のとおりです。<$if isTrue(#active.UseBellevueLook)$>
条件式がHTMLページにインクルード可能なResultSetの名前である場合、ResultSetに少なくとも1行がある場合に条件句はtrueを返します。これにより、ResultSetに行がある場合のみ、テンプレート・ページにResultSetの情報が表示されます。- 特別な計算をトリガーしない条件句は、接頭辞
#activeを使用して評価されます。値がnullでなく、空ではない文字列またはゼロ以外の整数である場合、結果はtrueになります。
3.3.4.1 条件の例
この例では、表セル<td>は変数xDepartmentの値に応じて定義されます。
<$if xDepartment$> <td><$xDepartment$></td> <$else$> <td>Department is not defined.</td> <$endif$> <$xDepartment=""$>
xDepartmentの値が定義された場合、xDepartmentの値が表セルに表示されます。xDepartmentの値が定義されていないか、空(null)文字列の場合、表セルの内容としてメッセージが書き込まれます。- コードの最後の行は、
xDepartment変数を空の文字列にリセットすることによってクリアします。
3.3.5 ループ
ループ構造により、同じコードを何回でも実行することができます。ループ処理は、Idoc Scriptでは次の2通りの方法で実行できます。
ループ構造から出て終了する場合の情報は、「ループの終了」を参照してください。
3.3.5.1 ResultSetのループ
ResultSetのループでは、問合せから返されるResultSetの行ごとに一連のコードが繰り返されます。ループされるResultSetの名前は、次の構文を使用して変数として指定されています。
<$loop ResultSet_name$>
code
<$endloop$>
-
<$loop$>タグと<$endloop$>タグ間のコードは、ResultSetの行ごとに1回繰り返されます。 -
ResultSetループの内側では、getValue()関数を使用してResultSetから値を取得できます。値の置換は、ループ内で現在アクセスしている行によって異なります。
-
ResultSetループの内側にいる場合は、そのResultSetがアクティブになり、変数および条件文を評価する際に他のResultSetよりも優先されます。
-
ResultSetループでは無限ループは使用できない(有限リスト)のに対し、
whileループでは無限ループを生じることができます。 -
<$loop$>タグを使用して、ResultSetをポイントする変数を繰り返しループすることはできません。かわりに、関数rsFirst()およびrsNext()を使用して、ResultSetを手動でループする必要があります。たとえば、次のコードを使用してResultSetを繰り返しループすることはできません。
<$name="SearchResults"$> <$loop name$> <!--output code--> <$endloop$>
かわりに、次のコードを使用する必要があります。
<$name="SearchResults"$> <$rsFirst(name)$> <$loopwhile getValue(name, "#isRowPresent")$> <!--output code--> <$rsNext(name)$> <$endloop$>
3.3.5.2 ResultSetのループの例
この例では、GET_SEARCH_RESULTSサービスによって生成されたSearchResultsというResultSetをループすることによって、検索結果表が作成されます。
<$QueryText="dDocType <matches> 'ADACCT'"$>
<$executeService("GET_SEARCH_RESULTS")$>
<table>
<tr>
<td>Title</td><td>Author</td>
</tr>
<$loop SearchResults$>
<tr>
<td><a href="<$SearchResults.URL$>"><$SearchResults.dDocTitle$></a></td>
<td><$SearchResults.dDocAuthor$></td>
</tr>
<$endloop$>
</table>3.3.5.3 Whileのループ
Whileのループにより、条件ループを作成できます。whileループの構文は、次のとおりです。
<$loopwhile condition$>
code
<$endloop$>
-
condition式の結果がtrueの場合は、タグ<$loopwhile$>および<$endloop$>間のコードが実行されます。 -
ループ内のすべてのコードが実行された後で、制御がループの先頭に戻り、そこで
condition式が再度評価されます。-
結果が
trueの場合は、コードが再度実行されます。 -
結果が
falseの場合、ループは終了します。
-
3.3.5.4 Whileのループの例
この例では、ループを通過するたびに、abcという変数が2ずつ増えていきます。6回目の通過で(この時、abcは10になります)、条件式はtrueではなくなるため、ループが終了します。
<$abc=0$> <$loopwhile abc<10$> <$abc=(abc+2)$> <$endloop$>
3.3.6 管理インタフェース
Idoc Scriptは、次に示す管理インタフェースのいくつかの領域で使用できます。
3.3.6.1 ワークフロー管理
「ワークフロー管理」ツールでは、Idoc Scriptを使用して次の項目の定義が行えます。
-
ステップ・イベント
-
ジャンプ・メッセージ
-
追加の終了条件
-
トークン
-
ジャンプのカスタム効果
たとえば、次のステップ入力スクリプトは、Secureセキュリティ・グループ内のドキュメントをワークフローの次のステップに送信します。
<$if dSecurityGroup like "Secure"$>
<$wfSet("wfJumpName", "New")$>
<$wfSet("wfJumpTargetStep", wfCurrentStep(1))$>
<$wfSet("wfJumpEntryNotifyOff", "0")$>
<$endif$>
詳細は、「ワークフロー」を参照してください。
3.3.6.2 Webレイアウト・エディタ
「Webレイアウト・エディタ」では、ページ・タイトル、ページ説明、URL説明、問合せ結果ページおよびコンテンツ問合せでIdoc Scriptが使用できます。次に例を示します。
-
問合せ結果ページの定義にIdoc Scriptタグを使用して、検索結果表の各行のコンテンツを指定できます。
-
検索結果で最大7日までのコンテンツ・アイテムをすべて返すように設定するには、検索問合せを次のように定義することもできます。
dInDate > '<$dateCurrent(-7)$>'
-
現在のユーザーに基づいて結果を返すレポートを定義するには、レポート問合せ式の一部を
User Name is <$UserName$>と定義することもできます。
詳細は、『Oracle Fusion Middleware Oracle WebCenter Contentの管理』の管理インタフェースに関する項を参照してください。
3.3.6.3 バッチ・ローダー
「バッチ・ローダー」では、マッピング・ファイルにIdoc Scriptを使用して、ファイル・レコード用にメタデータを決定する方法をバッチ・ローダー・ユーティリティに指示することができます。
3.3.6.4 アーカイバ
「アーカイバ」では、次の領域でIdoc Scriptが使用できます。
- 問合せ値のエクスポート。たとえば、作成後1年を経過したコンテンツをアーカイブする場合は、
「リリース日」の値として<$dateCurrent(-365)$>を使用します。 - 値マップの出力値。たとえば、インポートされたすべてのリビジョンの有効期限を1週間先に設定するには、
Output値として<dateCurrent(7)$>を使用することもできます。
3.3.6.5 システム・プロパティ
コンテンツ・サーバー・インスタンスの「一般構成」ページまたはOracle WebCenter Content: Inbound Refineryインスタンスの「ローカル構成」ページまたは「共有構成」ページで、システム・プロパティ・ユーティリティに値を設定する場合、実際には、Idoc Scriptの構成変数を設定することになります。詳細は、『Oracle Fusion Middleware Oracle WebCenter Contentの管理』を参照してください。
3.4 特殊なキーワード
次のキーワードは、Idoc Scriptでは特殊な意味を持ちます。
| キーワード | 例 | 説明 |
|---|---|---|
|
#active |
<$#active.variable$> |
次のデフォルトの順序で検索して、指定された変数の値をDataBinderから取得します。
変数が見つからない場合、エラー・レポートをデバッグ出力に送信しません。 |
|
#local |
<$#local.variable$> |
指定した変数の値をローカル・データから取得します。変数が見つからない場合、エラー・レポートをデバッグ出力に送信しません。 |
|
#env |
<$#env.variable$> |
指定した変数の値を環境設定から取得します。変数が見つからない場合、エラー・レポートをデバッグ出力に送信しません。 |
|
exec |
<$exec expression$> |
式を実行して、出力を抑制します(式をページに表示しません)。 旧バージョンのIdoc Scriptでは、execキーワードは変数の値を出力ファイルに表示しないようにするために必須でした。現行バージョンでは、execキーワードは式を出力ファイルに表示しないようにする場合のみ必要です。 |
|
include |
<$include ResourceName$> |
指定したリソースからコードをインクルードします。詳細は、「インクルード」を参照してください。 |
|
super |
<$include super.<include>$> |
既存バージョンのインクルード・コードから開始します。詳細は、「Superタグ」を参照してください。 |
3.4.1 キーワードと関数の比較
コンテンツ・サーバーのページでは、特殊なキーワードincludeとexec、および関数incとevalが広範に使用されます。この項では、これらのコマンドの違いについて説明し、その使用例を示します。
キーワードincludeとexecは定義済パラメータで動作するスタンドアロン・コマンドですが、パラメータとして変数を取ることはできません。関数incとevalも同様の目的で動作しますが、パラメータとして変数を取れるため、変数の値に応じてIdoc Scriptコードを動的に作成できます。
次の各項では、これらのキーワードと関数について詳しく説明します。
3.4.1.1 execキーワード
execキーワードは、Idoc Script式を実行し、出力を抑制します(式をページに表示しません)。これは主として、ページに何も書き込まずに変数を設定するために使用します。
旧バージョンのIdoc Scriptでは、execキーワードは変数の値を出力ファイルに表示しないようにするために必須でした。現行バージョンでは、execキーワードは式を出力ファイルに表示しないようにする場合のみ必要です。
たとえば、次の式を使用すると、出力値0または1が出力ファイルに表示されます。
<$rsFirst(name)$>
かわりに、式の前にexecキーワードを使用すると、出力が抑制されます。
<$exec rsFirst(name)$>
また、次のようにexecを使用して出力をrsNextから抑制することもできます。
<$exec rsNext(name)$>
『Idoc Scriptの関数および変数』のexecに関する項を参照してください。
3.4.1.2 eval関数
eval関数は、実際のIdoc Scriptのように式を評価します。
次の例では、oneという変数が文字列Company Nameに割り当てられ、twoという変数が、変数oneが含まれている文字列に割り当てられています。
<$one="Company Name"$> <$two="Welcome to <$one$>"$> <$one$><br> <$two$><br> <$eval(two)$>
ページの出力では、変数oneは文字列Company Nameを表し、変数twoは文字列Welcome to <$one$>を表し、関数eval(two)は文字列Welcome to Company Nameを表します。
評価する文字列は、Idoc Scriptのデリミタ<$ $>で囲む必要があります。そうしないと、Idoc Scriptとして評価されません。
また、この方法で動的に生成されたコンテンツが多すぎると、ページの表示が遅くなることもある点に留意してください。eval関数をページに頻繁に使用する場合は、コードをインクルードに入れて、inc関数をeval関数とともに使用するほうが効率的な場合があります。
『Idoc Scriptの関数および変数』のeval()に関する項を参照してください。
3.4.1.3 includeキーワード
includeキーワードは、コードのチャンクを現在のページに統合する標準的な手段です。includeはキーワードであるため、パラメータとして変数を取ることはできません。パラメータは既存のインクルードの名前である必要があります。
「Includes」、および『Idoc Scriptの関数および変数』のincludeに関する項を参照してください。
3.4.1.4 inc関数
inc関数は、パラメータとして変数を取れる点を除き、includeキーワードと同じ動作をします。この関数は、変数の現在の値に応じて使用するインクルードを動的に変更する際に、非常に役立ちます。
たとえば、カスタム・メタデータ・フィールドの全部ではなく、一部に対してIdoc Scriptを実行するとします。次のIdoc Scriptを実行することにより、フィールド名(specific_include_xCommentsなど)に基づいてインクルードを動的に作成することもできます。
<$loop DocMetaDefinition$> <$myInclude = "specific_include_" & dName$> <$exec inc(myInclude)$> <$endloop$>
inc関数によって指定されたインクルードの出力を抑制するexecキーワードの使用に留意してください。inc関数の前にexecを使用しない場合、指定されたインクルードの内側のHTMLはページに表示されます。
specific_include_xCommentsが存在しない場合は、出力が表示されないため、このコードによってエラーがスローされることはありません。
『Idoc Scriptの関数および変数』のinc()に関する項を参照してください。
3.5 演算子
3.5.1 比較演算子
次の比較演算子を使用して、2つのオペランドの値を比較し、比較結果に基づいて値trueまたはfalseを返します。これらの演算子は、Idoc Scriptで整数およびブール値の比較に使用できます。
Idoc ScriptをHCSPページまたはHCSFページで使用している場合は、特殊な比較演算子を使用する必要があります。詳細は、「比較演算子」を参照してください。
| 演算子 | 説明 | 例 |
|---|---|---|
| == | 等価 | <$if 2 == 3$>はfalseに評価されます。
|
| != | 非等価 | <$if 2 != 3$>はtrueに評価されます。
|
| < | より小さい | <$if 2 < 2$>はfalseに評価されます。
|
| <= | より小さいか等しい | <$if 2 <= 2$>はtrueに評価されます。
|
| > | より大きい | <$if 3 > 2$>はtrueに評価されます。
|
| >= | より大きいか等しい | <$if 3 >= 2$>はtrueに評価されます。
|
これらは数値演算子であり、文字列データに日付などの有効な数値の意味がある特殊な場合のみ、文字列での使用に役立ちます(日付は、標準の比較演算子で使用された場合にミリ秒に換算されます)。
- 文字列連結、文字列挿入、単純文字列比較の場合は、特殊文字列演算子を使用します。
- 高度な文字列演算を実行する場合は、strEquals()、strReplace()またはその他の文字列関連のグローバル関数を使用します。
3.5.2 特殊文字列演算子
文字列の連結および比較には、次の特殊文字列演算子を使用します。
| 演算子 | 説明 | 例 |
|---|---|---|
|
& |
文字列結合演算子は、文字列の連結を実行します。この演算子は、リソース・インクルード用にIdoc Scriptを生成するスクリプトの作成に使用します。 |
<$"<$include " & VariableInclude & "$>"$>これは、次のように評価されます <$include VariableName$> |
|
like |
文字列比較演算子は、2つの文字列を比較します。
|
|
|
| |
文字列挿入演算子は、論理OR関数を実行して複数のオプションを区切ります。 |
<$if "car" like "car|truck|van"$> |
たとえば、変数aに接頭辞carがあるかどうか、または部分文字列truckが含まれているかどうかを判別するには、次の式が使用できます。
<$if a like "car*|*truck*"$>
ノート:
高度な文字列演算を実行する場合は、strEquals()、strReplace()またはその他の文字列関連のグローバル関数を使用します。
like演算子は、次のワイルドカード記号を認識します。
| ワイルドカード | 説明 | 例 |
|---|---|---|
|
* |
0文字以上の文字に一致します。 |
|
|
? |
1文字のみに一致します。 |
|
3.5.3 数値演算子
算術演算の実行には、次の数値演算子を使用します。これらの演算子は、整数に評価する整数、または浮動小数に評価する浮動小数に対して使用します。
| 演算子 | 説明 | 例 |
|---|---|---|
|
+ |
加算演算子。 |
<$a=(b+2)$> |
|
- |
減算演算子。 |
<$a=(b-2)$> |
|
* |
乗算演算子。 |
<$a=(b*2)$> |
|
/ |
除算演算子。 |
<$a=(b/2)$> |
|
% |
係数演算子。2つの値を分割した後の剰余を示します。 |
<$a=(b%2)$> |
3.5.4 ブール演算子
論理評価の実行には、次のブール演算子を使用します。
| 演算子 | 説明 | 例 |
|---|---|---|
| and |
|
<$if 3>2 and 4>3$> これは、1に評価されます |
| or |
|
<$if 3>2 or 3>4$> これは、1に評価されます |
| not |
|
<$if not 3=4$> これは、1に評価されます |
ブール演算子は左から右へ評価します。第1オペランドの値のみで演算の結果を決定できる場合、第2オペランドは評価されません。
3.6 メタデータ・フィールド
この項の内容は次のとおりです。
3.6.1 メタデータ・フィールドのネーミング
各メタデータ・フィールドには、コードで使用される内部フィールド名が割り当てられています。さらに、多くのフィールドにはWebページに表示される説明キャプションがあります。
-
ユーザーに対してメタデータを表示する場合は、フィールドのキャプションを使用します。
-
ファイルをバッチ・ロードしたり、動的サーバー・ページ(.hcst、hcsp、.hcsfの各ページ)をスクリプトする場合は、内部フィールド名を使用します。
-
すべての内部メタデータ・フィールド名は、
dまたはxで始まります。-
事前定義済フィールド名またはコア・フィールド名は
dで始まります。たとえば、dDocAuthorとなります。 -
カスタム・フィールド名またはアドオン・フィールド名は
xで始まります。たとえば、xDepartmentとなります。
ノート:
Oracle提供のアドオン・コンポーネントと顧客が作成したカスタム・コンポーネントは、すべてxで始まります。
-
-
構成マネージャでカスタム・メタデータ・フィールドを作成すると、フィールド名の先頭に
xが自動的に追加されます。ノート:
内部メタデータ・フィールド名は常に大/小文字を区別します。
3.6.2 標準メタデータ・フィールド
この項では、コンテンツ・サーバー・システムでコンテンツ・アイテム別に格納される標準メタデータ・フィールドについて説明します。フィールドは次のようにグループ化されます。
3.6.2.1 共通メタデータ・フィールド
次のメタデータ・フィールドは、インタフェースのカスタマイズで最もよく使用されます。デフォルトでは、これらのフィールドはチェックイン・ページと検索ページに表示されます。
ノート:
アドオン・コンポーネントの多くについてはリストに記載していません。たとえば、FrameworkFoldersコンポーネントはコンテンツ・サーバーの多くの構成で有効ですが、FrameworkFoldersフィールドはリストに記載されていません。
コンテンツID (dDocName)をdIDと混同しないようにしてください。dIDは、コンテンツ・アイテムの特定のリビジョンを示す内部生成された整数です。
| 内部フィールド名 | 標準的なフィールド・キャプション | 説明 |
|---|---|---|
dDocAccount |
アカウント | セキュリティ・アカウント。 |
dDocAuthor |
作成者 | リビジョンをチェックインしたユーザー。 |
xComments |
コメント | 説明的なコメント。 |
dDocName |
コンテンツID | 一意のコンテンツ・アイテム識別子 |
dOutDate |
有効期限 | リビジョンが検索または表示に使用できなくなる日付。 |
dInDate |
リリース日 | リビジョンが検索および表示に使用可能になると予定されている日付(dCreateDateおよびdReleaseDateも参照のこと)。
|
dRevLabel |
リビジョン | リビジョンのラベル(dRevisionIDも参照のこと)。
|
dSecurityGroup |
セキュリティ・グループ | セキュリティ・グループ。 |
dDocTitle |
タイトル | 説明的なタイトル。 |
dDocType |
タイプ | コンテンツ・タイプ。 |
3.6.2.2 その他のフィールド
共通メタデータ・フィールドの値の他にも、次のメタデータがコンテンツ・アイテム用に格納されます。
| 内部フィールド名 | 標準的なフィールド・キャプション | 説明 |
|---|---|---|
|
|
チェックアウト者(コンテンツ情報ページ) |
リビジョンをチェックアウトしたユーザー。 |
|
|
なし |
リビジョンがチェックインされた日付。 |
|
|
フォーマット(コンテンツ情報ページ) |
プライマリ・ファイルと代替ファイルの形式。 |
|
|
なし |
一意のレンディション識別子。 |
|
|
なし |
プライマリ・ファイルのファイル拡張子。 |
|
|
なし |
プライマリ・ファイルのサイズ(バイト)。 |
|
|
なし |
使用されません。 |
|
|
フォーマット(チェックイン・ページ、Allow override format on checkinを有効化) |
プライマリ・ファイルの形式。 |
|
|
なし |
一意のリビジョン識別子。 |
|
|
なし |
インデクサ・サイクルのリビジョンの状態。使用される値は次のとおりです。
これらの値の特定の定義は、 |
|
|
なし |
リビジョンがチェックアウトされているかどうかを示します。
|
|
|
なし |
ファイルのタイプがプライマリか代替かを示します。
|
|
|
なし |
ファイルが
|
|
|
なし |
使用されません。 |
|
|
なし(コンテンツ情報ページ) |
索引付けまたは変換に関して成功または失敗の理由を示します。 |
|
|
ネイティブ・ファイルの取得(コンテンツ情報ページ) オリジナル・ファイル(リビジョン・チェックイン・ページ) |
ネイティブ・ファイルのオリジナル・ファイル名。 |
|
|
なし |
リビジョンの変換ステータス。使用される値は次のとおりです。
|
|
|
なし |
リビジョンがリリースされた日付。 |
|
|
なし |
リビジョンのリリース・ステータス。
|
|
|
なし |
ファイルがサムネイル・レンディションかどうかを示します。指定可能な値は次のとおりです。
|
|
|
なし |
使用されません。 |
|
|
なし |
コンテンツID ( |
|
|
なし |
|
|
|
ステータス(コンテンツ情報ページ) |
システムでのリビジョンの状態。指定可能な値は次のとおりです。
|
|
|
なし |
Web表示可能ファイルのファイル拡張子。 |
3.6.3 オプション・リスト
オプション・リストは、メタデータ・フィールドに選択可能な値のセットです。オプション・リストは(DBから動的に作成された)問合せから構成するか、ハードコード化してファイル・システムのコンテンツ・サーバー・ファイル(HDA)に格納できます。
次の各トピックで、オプション・リストの使用について説明します。
3.6.3.1 内部オプション・リスト
コンテンツ・サーバー・システムでは、デフォルトとして、次の内部オプション・リストを保持しています。
| メタデータ・フィールド | オプション・リスト |
|---|---|
|
作成者(dDocAuthor) |
docAuthors |
|
セキュリティ・グループ(dSecurityGroup) |
securityGroups |
|
タイプ(dDocType) |
docTypes |
|
アカウント(dDocAccount) |
docAccounts |
|
ロール(dRole) |
roles |
securityGroupsおよびdocAccountsの各オプション・リストは、現在のユーザーの権限に応じてフィルタ処理されます。
3.6.3.2 オプション・リストのスクリプト
次のIdoc Scriptの変数および関数は、オプション・リストの生成と有効化に使用します。
| 変数または関数 | 説明 |
|---|---|
|
メタデータ・フィールドのオプション・リストを生成します。 |
|
|
オプション・リストの名前を指定します。 |
|
|
メタデータ・フィールドにオプション・リストがあることを指定します。 |
|
|
オプション・リストのタイプ(厳密、コンボ、マルチまたはアクセス)を指定します。 |
|
|
fieldIsOptionList変数の値に設定します。この変数は条件文で使用されます。 |
|
|
標準的なオプション・リスト・フィールドを表示するIdoc Scriptを定義します。 |
|
|
オプション・リスト・フィールドの標準実装(defaultOptionListScript変数により定義)をオーバーライドします。 |
|
|
メタデータ・フィールドのオプション・リストに最後の値を事前設定できることを指定します。 |
|
|
オプション・リストの最初の値が空白であることを指定します。 |
|
|
オプション・リストの値が含まれているResultSetを指定します。 |
|
|
オプション・リストの値が含まれているResultSet列の名前を指定します。 |
|
|
オプション・リストの値を定義するインクルードを指定します。 |
3.6.3.3 オプション・リストの作成方法
オプション・リストの作成には、次のいずれかの方法が使用できます。
-
基本オプション・リストを生成するには、optList()関数を使用します。この関数は、
loadMetaOptionsListをコールするサービスとともに使用した場合のみ、出力を生成します。たとえば、このコードは、HTMLオプション・リストとして使用可能な作成者のリストを表示します。
<select name="dDocAuthors"> <$optList docAuthors$> </select>
-
オプション・リストをResultSetに変換して、そのResultSetをループするには、rsMakeFromList()関数を使用します。
たとえば、このコードは
docAuthorsオプション・リストからAuthorsというResultSetを作成し、そのResultSetをループしてHTMLオプション・リストを作成します。(列名はrsMakeFromListのパラメータとして指定されていないため、列名のデフォルトはrowになります。)<$rsMakeFromList("Authors","docAuthors")$> <select name="dDocAuthors"> <$loop Authors$> <option><$row$> <$endloop$> </select>このコード・サンプルは、
optList関数を使用して生成されたサンプルと同じです。通常は、リストのオプションを解析または評価する際にrsMakeFromList関数を使用します。 -
コードを作成することなくオプション・リストを作成するには、構成マネージャ・アプレットを使用します。
3.6.4 動的サーバー・ページのメタデータ参照
動的サーバー・ページでは、いくつかのメタデータ値が、ref:という接頭辞付きで格納されており、その値はページで利用できますが、ResultSetの値を置換するものではありません。(このため、動的サーバー・ページによるResultSetの汚染が防止されます。)
動的サーバー・ページで次のメタデータ値のいずれかを参照する場合は、 ref: 接頭辞を含める必要があります。
-
hasDocInfo -
dDocName -
dExtension -
dSecurityGroup -
isLatestRevision -
dDocType -
dID
たとえば、次の文では、ドキュメント・タイプがPageであるかどうかを判別します。
<$if strEquals(ref:dDocType,"Page"))$>
詳細は、「Webページの外観およびナビゲーションの変更」を参照してください。
3.7 結果をフォーマット化するためのインクルードのマージ
MergeIncludeを使用すると、テンプレート・ページ全体ではなくIdoc Scriptのインクルードに基づいて、コンテンツ・サーバーのリクエスト結果をフォーマット化することができます。
MergeIncludeは、IdcCommandX ActiveXモジュールによるASPページの統合によく使用される機能です。コンテンツ・サーバーのアーキテクチャは、Webインタフェースの最適化を図るために設計されていますが、基本的にモジュール式で、セキュアな、複数のインタフェースが組み込まれているサービス・ベースのアプリケーションです。GET_SEARCH_RESULTSなどのサービスは、渡されたQueryStringとユーザーのセキュリティ資格情報に基づいてレスポンス・データを生成します。このレスポンス・データは、HDAファイルの形式で内部表示されます。これが動作中であることを確認するには、単に検索を実行して、'IsJava=1'または'IsSoap=1' (XML形式のデータの場合)をURLに追加するだけです。これによって、レスポンスのデータが内部でどのように表示されるかを確認できます。
このHDA表示はWebベースのユーザーには特に便利ではないため、Idoc Scriptのインクルードとテンプレートを使用してレスポンスを読取り可能なHTMLページにフォーマット化しています。ユーザーは、テンプレートまたはいくつかのリソース・インクルードをコンポーネントとともに変更することにより、このHTMLの表示方法を変更できます。
ただし、検索結果のごく一部のみを取得したり(たとえば、コードの大半がIdoc ScriptではないASP、JSPまたはPHPの各ページに表示するため)、IFRAME要素またはDIV要素をポップアップさせて結果を表示したり、あるいは結果の表示方法を動的に変更したりするには、これらのパラメータをURLに追加するだけです。
MergeInclude=my_custom_include&IsJava=1
これにより、コンテンツ・サーバー・システムは、サービスで指定されたテンプレートに応じたレスポンスのフォーマット化をバイパスします。かわりに、レスポンスはmy_custom_includeのIdoc Scriptに基づいてフォーマット化されます。たとえば、検索を実行し、上記の行をURLに追加して、インクルードがコンポーネントに次のように表示されたとします。
<@dynamichtml my_custom_include@> <html> <table width=300> <tr> <td><b>Name</b></td> <td><b>Title (Author)</b></td> </tr> <$loop SearchResults$> <tr><td><a href="<$URL$>"><$dDocName$></a></td> <td><$dDocTitle$> (<$dDocAuthor$>)</td></tr> <$endloop$> </table> </html> <@end@>
これにより、必要のないイメージとフォーマットをすべて除いた検索結果ページが表示されます。その結果、必要なIdoc Scriptインクルードをすべて使用して、任意のコンテンツ・サーバー・レスポンスをフォーマット化することができます。理論上、Idoc Scriptインクルードには、必要なフォーマットを、種類を問わず(XML、WMLまたは単なるプレーン・テキスト)含めることができます。
たとえば、検索結果をExcelスプレッドシート形式で返す場合は、エントリのカンマ区切りリストを返すリソース・インクルードが作成できます。その後で、返されたファイルをハード・ドライブに保存し、Excelでファイルを開くことができます。もう1つの便利な方法として、IdcCommandXユーティリティまたはBatchLoaderでファイルとして読取り可能なレコード・セットにレスポンスをフォーマット化するリソース・インクルードを作成することもできます。このようなインクルードを検索結果とともに、またはWebレイアウト・エディタで作成されたアクティブ・レポートとともに使用して、データベースまたは検索索引に対する任意の問合せに固有のバッチ・ファイルを作成することもできます。
-
MergeInclude変数のキャッシュ方法は、通常のリソース・インクルードの場合と異なります。したがって、このリソース・インクルードを変更する場合は、コンテンツ・サーバー・インスタンスを再起動する必要があります。
docLoadResourceInclude()関数を実行してMergeIncludeの中から別のインクルードを動的にロードする場合は、この手順をバイパスしてもかまいません。 -
返されたデータのコンテンツ・タイプは'
text/plain'であり、MergeIncludeによって返されるデータの'text/html'ではありません。いくつかのクライアント(Internet Explorerおよび、Netscapeの多数のバージョン)では、レスポンスに有効なHTMLがある場合にプレーン・テキストをhtmlとして表示しますが、他のクライアントではこのように表示されない場合があります。問題が生じた場合は、リンクするときに手動でコンテンツ・タイプを設定する必要が生じることもあります。
3.8 有効範囲付きローカル変数
有効範囲付きローカル変数は特殊なローカル変数であり、メタデータがページに作成される方法をオーバーライドする場合に使用します。これらの変数をコロンで区切ることによって、特定のメタデータ・フィールドに有効範囲が設定されます。
たとえば、タイトルとコメントのフィールドを非表示にするには、次のフラグを設定します。
dDocTitle:isHidden=1 xComments:isHidden=1
これらのフラグを設定するには、URLのページに早い段階で設定するか、インクルードstd_doc_page_definitionsをオーバーライドします。
次に示すフラグはすべて、xFieldName:フィールドの表示に影響します。
-
xFieldName:groupHeader: このフィールドがグループで最初のフィールドである場合、これはコンテンツ・プロファイルに設定されます。グループ・ヘッダーに使用するHTMLとIdoc Scriptが含まれています。 -
xFieldName:hasOptionList: デフォルトのオプション・リストを使用するかわりに、カスタム・オプション・リストをフィールドに含めることができます。xFieldName:optionListName変数またはxFieldName:optionListScript変数とともに使用する必要があります。 -
xFieldName:include:カスタム・リソース・インクルードの名前にfieldIncludeの値を設定するために使用します。このリソースは、JavaScriptおよびHTMLを含むページ全体で使用されます。このフラグは、めったに使用しません。必要な場合は、カスタム・インクルードの作成のガイドとして、std_namevalue_fieldインクルード・ファイルを使用します。 -
xFieldName:isExcluded: フィールドをページから完全に除外する場合、trueに設定します。これはフィールドとして、または非表示の入力フィールドとして表示されません。このフィールドは、ページに完全に存在しなくなります。 -
xFieldName:isHidden: ページ上でフィールドを非表示にする場合、TRUEに設定します。フォーム・ポストのあるページでは、このフィールドは表示されたままです。ただし、非表示の入力フィールドとして存在しているだけです。xFieldNameまたはfieldValueが定義されていないかぎり、このフィールドの値は空白になります。そのため、変更不可能なデフォルト値でページを作成することができます。 -
xFieldName:isInfoOnly: フィールドの値のみを表示する場合、TRUEに設定します。これをxFieldName:isHiddenのかわりに使用すると、送信中のデフォルト値がユーザーに表示されます。 -
xFieldName:isRelocated: HTMLページでのフィールドの自動表示を停止する場合、TRUEに設定します。デフォルトでは、ページのすべてのフィールドには特定の順序が設定されています。順序を変更するには、このフラグを設定して、フィールドを手動で表示する必要があります。<!-- hide the comments field --> <$xComments:isRelocated = 1$> <$loop DocMetaDefinition$> <$strTrimWs(inc("std_meta_field_display"))$> <$endloop$> <!-- now turn off relocation, and display it --> <$xComments:isRelocated = ""$> <$fieldName="xComments", fieldCaption="Comments", fieldType="Memo"$> <$include std_display_field$> -
xFieldName:isRequired: このフィールドを必須フィールドにする場合、TRUEに設定します。このフラグは、JavaScriptの検証コードがページに作成される前に、std_doc_page_definitionsに設定する必要があります。 -
xFieldName:maxLength:fieldWidthと類似していますが、これはテキスト入力フィールドの最大長を設定します。これは通常はfieldWidthよりも大きくなります。ただし、データベースでのフィールド幅よりも小さい必要があります。 -
xFieldName:noSchema: フィールドに対してスキーマ・オプション・リストを無効にする場合、TRUEに設定します。カスタムの、動的な方法でオプション・リストを生成する場合は必須です。 -
xFieldName:optionListName: このフラグは、フィールドがオプション・リストである場合のみ設定可能です。値の表示に使用するオプション・リストをオーバーライドできます。<$xCountry:hasOptionList = 1$> <$xCountry:noSchema = 1$> <$xCountry:optionListName = "securityGroups"$> <$loop DocMetaDefinition$> <$strTrimWs(inc("std_meta_field_display"))$> <$endloop$> -
xFieldName:optionListScript:optionListNameと類似していますが、明示的に定義されたオプション・リストのかわりに、Idoc Scriptをレンダリングできる点が異なります。そのため、かわりにResultSetを使用してオプション・リストを作成できます。<$xCountry:hasOptionList = 1$> <$xCountry:noSchema = 1$> <$xCountry:optionListScript = "<$rsMakeFromList('GROUPS', 'securityGroups')$>" & "<select>\n" & "<$loop GROUPS$>" & " <option><$row$>" & "<$endloop$>\n" & "</select>"$> <$loop DocMetaDefinition$> <$strTrimWs(inc("std_meta_field_display"))$> <$endloop$> -
xFieldName:rowClass:std_nameentry_rowで使用します。このフィールドが含まれている表の行に対して、Cascading Style Sheetクラスが設定されます。<$xComments:rowClass="xuiPageTitleText"$> <$loop DocMetaDefinition$> <$strTrimWs(inc("std_meta_field_display"))$> <$endloop$> -
xFieldName:rowStyle:rowClassと同じですが、これはインライン・スタイルの作成に使用できます。たとえば、「コメント」フィールドをDHTMLとともに非表示にするには、次のコードを使用します。<$xComments:rowStyle="display:none"$> <$loop DocMetaDefinition$> <$strTrimWs(inc("std_meta_field_display"))$> <$endloop$>これは、ページを再ロードせずにフィールドを動的に非表示または表示する場合に役立ちます。