プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebCenter Contentでの開発
12c (12.2.1.2.0)
E82756-01
目次へ移動
目次

前
前へ
次
次へ

7 動的サーバー・ページの作成

この章では、動的サーバー・ページを作成してWebページの外観およびナビゲーションを変更するために必要なビルディング・ブロックの使用方法について説明します。

この章の内容は次のとおりです。

7.1 動的サーバー・ページについて

動的サーバー・ページとは、Oracle WebCenter Content Serverにチェックインされ、Webページを動的に生成するために使用されるファイルのことです。動的サーバー・ページは通常、Webページのルック・アンド・フィールおよびナビゲーションを変更するために使用されます。たとえば、動的サーバー・ページは、次のタスクを実行するために使用できます。

  • HTMLフォームを実装する
  • Webサイト全体で一貫性のあるルック・アンド・フィールを維持する

動的サーバー・ページには、次のようなファイル形式があります。

  • IDOC: 独自のスクリプト言語です。
  • HCST: Hypertext Content Server Template。IdcHomeDir/resources/core/templatesディレクトリに格納されているコンテンツ・サーバーの標準的なテンプレートに似ています。
  • HCSP: Hypertext Content Server Page。HTMLに対応したバージョンのHCSTページで、通常はパブリッシュ済のコンテンツに使用されます。
  • HCSF: Hypertext Content Server Form。HCSPページおよびHCSTページに似ていますが、Webブラウザから記入して送信することのできるHTMLフォーム・フィールドが含まれています。

動的サーバー・ページを使用すると、コンテンツ・サーバーでは、コンテンツ・サーバーにチェックインしたカスタム・テンプレート(HCST、HCSP、HCSFいずれかのファイル)を使用して、Webページが動的にアセンブルされます。このテンプレートでは、同じくコンテンツ・サーバーにチェックインしたテキスト・ファイル(IDOCファイル)からHTMLインクルードが呼び出されます。

Webページのルック・アンド・フィールおよびナビゲーションを変更するには、HCS*テンプレート・ページまたはIDOCファイル、あるいはその両方を変更して、改定後のファイルを新たなリビジョンとしてチェックインします。変更内容がすぐにわかります。

コンテンツ・サーバーとともに動的サーバー・ページを使用すると、次のメリットが得られます。

  • カスタマイズの導入とテストを迅速かつ容易に行うことができます。動的サーバー・ページのリビジョンをチェックインするだけで変更内容が即座に実装され、コンテンツ・サーバーを再起動する必要はありません。
  • Webページでは、標準的なHTMLにはない機能を利用できます。たとえば、CGIスクリプトなしで、HTMLフォームをコンテンツ・サーバーに直接送信できます。また、Idocスクリプトを使用すると、コンテンツ・サーバーに関する環境および状態の情報を直接操作できます。
  • コンポーネント・ファイルをインストールしたり常時監視する必要はありません。ファイルが大量にあったり、システムが高度にカスタマイズされている場合は、コンポーネントの維持とトラブルシューティングが難しくなることが考えられます。動的サーバー・ページのほうが、カスタマイズのすべてを含んだコンテンツ・アイテムを少しチェックインするだけなので、操作しやすくなります。
  • カスタマイズを個々のページに適用できます。動的サーバー・ページを使用すると、グローバルではなく単一のページにカスタマイズを適用できるため、コンテンツ・サーバーのページの標準的なコーディングに手を入れなくてすみます。

動的サーバー・ページを使用するかどうかを判断する際には、次の制約事項を頭に入れてください。

  • 動的サーバー・ページは、コンテンツ・サーバーのコアな機能の変更には使用できません。動的サーバー・ページは、Web設計とフォーム・ページのカスタマイズに最も役立ちます。
  • 動的サーバー・ページを頻繁に改定すると、廃止されるコンテンツ・アイテムが大量に発生する場合があります。本番インスタンスにデプロイする前に、開発システムでできるだけ多くの作業を済ませてください。また、古くなったページを定期的に削除することをお薦めします。

図7-1は、動的サーバー・ページを生成および使用するプロセスを示しています。

図7-1 動的サーバー・ページのプロセス

図7-1の説明が続きます
「図7-1 動的サーバー・ページのプロセス」の説明

7.1.1 ページ・タイプ

動的サーバー・ページには次の4つのタイプがあり、ファイル名の4文字の拡張子によってコンテンツ・サーバーで識別されます。

7.1.1.1 IDOCファイル

IDOCファイルは、HCST、HCSP、HCSFの各ページによって呼び出されるHTMLインクルードを含むテキスト・ファイルです。

詳細は、「コンテンツ・サーバーのコンポーネントの開始」を参照してください。

7.1.1.2 HCSTファイル

Hypertext Content Server Template (HCST)ファイルは、コンテンツ・サーバーの標準的なテンプレート・ページに似たテンプレート・ページであり、Webページをアセンブルする際にフレームワークとして使用されます。

  • HCSTページが使用される代表的なケースは、ページのコンテンツ自体が動的な場合、または、検索ページ、検索結果ページ、カスタム・チェックイン・ページなどでコンテンツ・サーバー機能が必要とされる場合です。

  • このタイプのページは、動的にアセンブルされたコードでほとんどが構成されているため、HCSTファイルはコンテンツ・サーバー内で索引が付けられません。

7.1.1.3 HCSPファイル

Hypertext Content Server Page (HCSP)ファイルはパブリッシュ済のWebページであり、実際のWebサイトのコンテンツを表示します。

  • HCSPファイルは一般的に、HCSTページをテンプレートとして使用するか、HCSFページによってコンテンツ・サーバーでフォームを送信することによって作成されます。

  • このタイプのページは、Web表示可能なコンテンツが含まれているため、HCSPファイルはコンテンツ・サーバー内で索引が付けられます。

7.1.1.4 HCSFファイル

Hypertext Content Server Form (HCSF)ファイルは、HCSPファイルに似ていますが、Webブラウザから記入して送信することのできるHTMLフォーム・フィールドが含まれている点が違います。

  • ユーザーがHCSFページからフォームを記入して送信すると、HCSFページのXML要素によってメタデータが定義された別のコンテンツ・アイテムとして、HCSPファイルがチェックインされます。

  • このタイプのページは、Web表示可能なコンテンツが含まれているため、HCSFファイルはコンテンツ・サーバー内で索引が付けられます。

    HCSFページの詳細は、「HCSFファイル」を参照してください。

7.2 Webページの外観およびナビゲーションの変更

動的サーバー・ページは、カスタム・コンポーネントとは異なる形でコンテンツ・サーバーに実装されていますが、WebCenter Contentコンポーネントのアーキテクチャ概念、特にコンテンツ・サーバーのテンプレートおよびHTMLインクルードに精通している必要があります。詳細は、コンテンツ・サーバーのコンポーネントのスタート・ガイドを参照してください。

動的サーバー・ページとともにコンテンツ・サーバーのインスタンスをカスタマイズするには、次の基本手順を実行します。

  1. カスタム・インクルードを含むIDOCファイルを作成します。
  2. IDOCファイルをコンテンツ・サーバーにチェックインします。
  3. IDOCファイルを参照するHCSTファイル、HCSPファイルまたはHCSFファイルを作成します。
  4. HCS*ファイルをコンテンツ・サーバーにチェックインします。
  5. コンテンツ・サーバーで検索するか、またはパブリッシュされたWebページからリンクすることによって、WebブラウザでHCS*ファイルを表示します。

7.2.1 構文

異なるタイプの動的サーバー・ページは、解釈も表示も異なっているため、ファイル内のIdocスクリプトは、異なるコーディングを行う必要があります。次の表は、それらの違いをまとめたものです。

ファイル・タイプ .idoc .hcst .hcsp .hcsf

全文索引作成

いいえ

いいえ

はい

はい

Idoc Scriptの式

<$ … $>

<$ … $>

<!--$ … -->

[!--$ … --]

<!--$ … -->

[!--$ … --]

比較演算子

記号(==)

記号(==)

特殊演算子(eq)

特殊演算子(eq)

特殊文字

記号(&)

記号(&)

エスケープ・シーケンス(&amp;)

エスケープ・シーケンス(&amp;)

メタデータの参照

必須

必須

必須

必須

注意:

Idocスクリプトでは、標準的なHTMLインクルードのコーディングを使用します。詳細は、「HTMLインクルード」を参照してください。

HCSTでは、コンテンツ・サーバーの標準的なテンプレートのコーディングを使用します。詳細は、「テンプレート・ページとレポート・ページ」を参照してください。

HCSPとHCSFでは特殊なコーディングが使用され、ページを静的にも動的にもレンダリングでき、全文索引を作成できます。

7.2.1.1 Idoc Scriptの式

HCSPページとHCSFページでは、Idocスクリプトの式は一般的に、HTMLコメント・タグ間に配置されます。ページが静的に表示されるときには、このように配置することによって、Webブラウザでページ・コンテンツを表示でき、コンテンツの書式設定に使用されている動的コードがあっても無視されます。またこれによって、全文索引作成エンジンが、これらのページのコンテンツの索引を正常に作成できます。

次に、いくつかの例を示します。

  • IDOCファイルまたはHCSTファイル: <$include MyIdocExpression$>

  • HCSPファイルまたはHCSFファイル: <!--$include MyIdocExpression-->

状況によっては、HTMLコメントの開始と終了を制御することもできます。HCSPファイルとHCSFファイルでは、この操作を行うには、次の例に示すように、Idoc Scriptの式の後にある終了タグで、ダッシュ(-)を他の文字に置換します。

Example - Pound Sign Delimiter for HTML Comment in HCSP or HCSF File
<!--$a="ab"##> HTML comment remains open
<a href="<!--$myUrlAsVariable##>">MyUrl</a> Static view does not see this
<!--$dummy=""--> <!—Ended the comment area-->.

{例 - HCSPファイルまたはHCSFファイルでのHTMLコメントの大カッコによるデリミタ}では、ダッシュ(-)がシャープ記号(#)に置換されています。

HCSPファイルとHCSFファイルでの別のオプションとしては、{例 - HCSTファイルでのdocLoadResourceIncludes関数コール}に示すように、標準的なHTMLコメントの開始タグおよび終了タグ(< >)を大カッコ([])に置換します。このように置換すると、XHTMLパーサーでは、静的に表示されたときにすべてのスクリプトを適切に識別できます。

例7-1 HCSPファイルまたはHCSFファイルでのHTMLコメントの大カッコによるデリミタ

<!--$a="ab"--] HTML comment remains open
<a href="[!--$myUrlAsVariable--]">MyUrl</a> Static view does not see this
[!--$dummy=""--> <!—Ended the comment area-->.

7.2.1.2 比較演算子

HCSPページとHCSFページでは、(==などの)標準的な比較演算子は、HTMLパーサーにとっては特殊な意味があるため使用できません。動的サーバー・ページでは、次の比較演算子を使用します。

IDOCファイルまたはHCSTファイル HCSPファイルまたはHCSFファイル 説明
== eq 等価かどうかをテストします。
!= ne 非等価かどうかをテストします。
< lt より小さいかどうかをテストします。
> gt より大きいかどうかをテストします。
<= le 以下かどうかをテストします。
>= ge 以上かどうかをテストします。

たとえば、次のコードは、変数countの値が10より大きいかどうかを評価します。

IDOCファイルまたはHCSTファイル HCSPファイルまたはHCSFファイル
<$if count > 10$>
    <$"Count is greater than"$>
<$endif$>
<!--$if count gt 10-->
    <!--$"Count is greater than"-->
<!--$endif-->

7.2.1.3 特殊文字

HCSPページとHCSFページでは、アンパサンド(&)などの特殊文字は、HTMLパーサーにとっては特殊な意味があるため使用できません。HTMLまたはXMLの標準的なエスケープ・フォーマット(&amp;&#038;など)を使用する必要があります。

注意:

HCSPページまたはHCSFページからdocLoadResourceIncludes関数をコールするときには、エスケープ文字&amp;を使用することが特に重要です。詳細は、「docLoadResourceIncludes関数」を参照してください。

次の例に示すように、Idocスクリプトでは、先頭にバックスラッシュ文字を置くことによって、文字列に引用符を含めることができますが、HCSPページまたはHCSFページでは、引用符はHTMLのエスケープ文字で表す必要があります。

  • IDOCファイルまたはHCSTファイル: "Enter \"None\" in this field."

  • HCSPファイルまたはHCSFファイル: "Enter &quot;None&quot; in this field."

HCSTページでは、\nを使用して行送りが挿入されます。HCSPページでは、行送りをファイルに直接挿入するか、または行送りの数値ASCII番号を使用してXML内にエンコードします。

注意:

&文字列の結合演算子をjoinという単語に置換できるようになりました。たとえば、[!--$a join b--]と記述できます。それまでは、[!--$a & b--]と記述していました。要素の属性内のXMLパーサーでは、最初のものは受け入れられますが、2番目のものは受け入れられません。

7.2.1.4 メタデータの参照

動的サーバー・ページでは、いくつかのメタデータ値が、ref:という接頭辞付きで格納されており、その値はページで利用できますが、ResultSetの値を置換するものではありません。(このため、動的サーバー・ページによるResultSetの汚染が防止されます。)

動的サーバー・ページで次のメタデータ値のいずれかを参照する場合は、 ref: 接頭辞を含める必要があります。

  • hasDocInfo

  • dDocName

  • dExtension

  • dSecurityGroup

  • isLatestRevision

  • dDocType

たとえば、次の文では、ドキュメント・タイプがPageであるかどうかを判別します。

<$if strEquals(ref:dDocType,"Page"))$>

7.2.2 Idoc Scriptの関数

動的サーバー・ページでは、Idocスクリプトの次の2つの特殊関数が必要です。

7.2.2.1 docLoadResourceIncludes関数

IDOCファイルでHTMLインクルードを使用できるようにするには、次の例に示すように、HCS*ファイルでdocLoadResourceIncludes関数をコールする必要があります。この関数では、現在のページのアセンブルに使用できるように、指定されたIDOCファイルからすべてのインクルードがロードされます。{例 - HCSTファイルでのdocLoadResourceIncludes関数コール}に、HCSTファイルからこの関数をコールするフォーマットを示します。

Example - docLoadResourceIncludes Function Call in HCST File
<$docLoadResourceIncludes("dDocName=system_std_page&RevisionSelectionMethod=Latest")$>

{例 - HCSPファイルまたはHCSFファイルでのdocLoadResourceIncludes関数コール}に、HCSPファイルまたはHCSFファイルからこの関数をコールするフォーマットを示します。

Example - docLoadResourceIncludes Function Call in HCSP or HCSF file
<!--$docLoadResourceIncludes("dDocName=system_std_page&amp;RevisionSelectionMethod=Latest")-->
7.2.2.1.1 docLoadResourceIncludes関数をコールするための要件
  • 指定されたコンテンツ・アイテムのネイティブ・ファイルでは、拡張子が.idocになっている必要があります。

  • docLoadResourceIncludesコールは、HCS*ファイル内で最初のインクルードの前に配置する必要があります。この関数は、ページのHEADセクション内に配置することをお薦めします。

  • HCS*ページからdocLoadResourceIncludes関数をコールするときには、正しいアンパサンド文字を使用する必要があります。詳細は、「特殊文字」を参照してください。

7.2.2.1.2 パラメータ

どのIDOCファイルを呼び出すかを指定するには、docLoadResourceIncludes関数で次のパラメータを使用します。

  • dDocNamedIDのいずれかを定義する必要があります。両方のパラメータをいっしょに使用することはやめてください。

  • dDocNameを定義する場合は、RevisionSelectionMethodLatestまたはLatestReleasedに定義する必要があります。

  • dIDを定義する場合は、RevisionSelectionMethodを定義しないでください。あるいは、RevisionSelectionMethodSpecificに定義します。

    パラメータ 説明

    dDocName

    IDOCファイルのコンテンツIDを指定します。

    このパラメータは、コンテンツIDの値がわかっているときには常に存在している必要があります。エラー・メッセージは、フォームなど、他の機能と同様に、これが存在しているという想定に基づいています。

    dID

    IDOCファイルの特定のリビジョンの一意のID番号を指定します。

    RevisionSelectionMethod

    このIDOCファイルのいずれのリビジョンを使用するかを指定します。

    • Latest: 最後にチェックインされたリビジョンのドキュメントが使用されます(ワークフロー内のリビジョンを含みます)。

    • LatestReleased: 最後にリリースされたリビジョンのドキュメントが使用されます。

    • Specific: dIDを使用した場合にのみ使用します。

    Rendition

    このIDOCファイルのいずれのレンディションを使用するかを指定します。

    • Primary: プライマリ(ネイティブ)ファイル。これは、Renditionの値が指定されていない場合に有効となるデフォルト値です。

    • Web: Web表示可能ファイル。

    • Alternate: 代替ファイル。

7.2.2.2 executeService関数

executeService関数は、動的サーバー・ページ内からコンテンツ・サーバーのサービスを実行します。次に例を示します。

HCSTファイル: <$executeService("GET_SEARCH_RESULTS")$>

HCSPファイルまたはHCSFファイル: <!--$executeService("GET_SEARCH_RESULTS")-->

  • executeService関数でコールできるサービスは、パラメータ入力が必要でないという意味で、「スクリプト可能」である必要があります。

  • スクリプト可能なサービスのアクセス・レベルは32以上です。詳細は、環境へのWebCenter Contentの統合のスタート・ガイドを参照してください。

  • コンテンツ・サーバーの標準的なサービスについては、IdcHomeDir/resources/core/tables/std_services.htmファイルを参照してください。

  • executeService関数の詳細は、『Oracle Fusion Middleware Oracle WebCenter Content構成リファレンス』を参照してください。

  • サービスの詳細は、『環境へのWebCenter Contentの統合のスタート・ガイド』を参照してください。

    注意:

    サービスの使用は控えめにしてください。ページ上でサービス・コールが多すぎると、パフォーマンスが影響を受けたり、スケーラビリティが制限される場合があります。

7.2.3 開発に関する推奨事項

動的サーバー・ページの開発を支援するための次の推奨事項には、一般的なガイドラインとHCSFのガイドラインが含まれています。

7.2.3.1 一般的なガイドライン

次の推奨事項は、すべてのタイプの動的サーバー・ページの開発に当てはまります。

  • テンプレートは、できるだけ簡略でコードのないものにします。テンプレートはHTMLインクルードのみにして、コードと条件はすべてIDOCファイルに入れるようにします。これが特に役立つのはHCSFページで、そこでは、送信されたフォームも、IDOCファイルに対する変更に反映されます。

  • Oracle WebCenter Content Serverのインスタンスをカスタマイズする場合は常に、開発作業を本番システムから切り離してください。動的サーバー・ページを頻繁に改定すると、廃止されるコンテンツ・アイテムが大量に発生する場合があることを頭に入れてください。本番インスタンスにデプロイする前に、開発システムでできるだけ多くの作業を済ませてください。また、古くなったページを定期的に削除することをお薦めします。

  • 動的サーバー・ページを使用してWebサイトを開発するときには、開発プロセスとコントリビューション・プロセスを、所有の観点で考えます。

    • 構造(サイトの設計とナビゲーションを含む)は、Webマスターが所有しています。動的サーバー・ページを使用するときには、構造は、IDOCファイルに定義されているインクルードに含まれており、そのインクルードとともに制御されます。

    • コンテンツ、すなわちWebページの実際のテキストは、コントリビュータが所有しています。動的サーバー・ページを使用するときには、コンテンツは主として、IDOCファイル内のインクルードを利用するHCSPファイルに含まれています。

  • 一貫性のある命名規則を使用します。たとえば、「システム」レベルのインクルードの場合は、IDOCファイルにsystem_std_pageという名前を付け、そのファイル内の各インクルードに、system_を接頭辞とする名前を付けることができます。こうすると、インクルードを見つけやすくなります。

  • 動的サーバー・ページのタイプごとにコンテンツ・タイプを作成することをお薦めします(HCSF_templatessubmitted_formsなど)。

  • 優れたコーディング手法に従って、動的サーバー・ページに常にコメントを入れて、カスタマイズの記録を残してください。

7.2.3.2 HCSFガイドライン

次の推奨事項は、HCSFページの開発にのみ当てはまります。

  • フォームを設計する際には、テンプレートがどのように使用されるかを検討してください。

    • このテンプレートは、フォームを送信するユーザーのロールに応じて変わるか

    • 送信されたコンテンツは、重要なワークフローに入るか

    • どのようなデフォルトのメタデータ値を設定するか

    • 複数のライン入力に対するResultSetがフォームに含まれるか

  • フォームのパラメータがWebブラウザからWebサーバーに渡され、コンテンツ・サーバーを通じてフィルタリングされてWebブラウザに戻されるときに、そのパラメータが表示されるようにするには、次のようにして、インクルード・コードのmethod属性をPOSTからGETに変更します。

    <form name="<$formName$>" method="GET" action="<$HttpCgiPath$>">
    
  • DataScriptというフォーム・フィールドを、送信されているフォームに追加した場合、その値に対するIdocスクリプトがあれば、コンテンツ・サーバーがフォームを処理するときにそのスクリプトを評価します。

7.2.4 HCSFページ

コンテンツ・サーバーのテンプレートおよびHTMLフォームに対する標準的な書式設定ルールを遵守することに加えて、HCSFページでは、コンテンツ・サーバーによる処理を可能とする特殊なセクションとタグがいくつか必要です。これらの特殊セクションは、通常のHCSFファイルでは次の順序で表示されます。

  1. ロード・セクション

  2. データ・セクション

  3. フォーム・セクション

完全なHCSFページの例は、「HCSFファイル」を参照してください。

7.2.4.1 ロード・セクション

HCSFページの先頭にあるロード・セクションでは、ファイルをHTMLファイルとして宣言し、IDOCファイルをロードして、ページに関する他の情報をロードします。{例 - HCSFページのロード・セクション}は、一般的なロード・セクションを示しています。

ロード・セクションには、次の3つのアイテムがあります。

Example - Load Section for an HCSF Page
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<!--$docLoadResourceIncludes("dDocName=my_idoc_page&amp;RevisionSelectionMethod=Latest")-->
<meta NAME="idctype" CONTENT="form; version=1.0">
<!--$defaultPageTitle="Department News Form"-->
<!--$include std_html_head_declarations-->
</head>
7.2.4.1.1 HTML宣言

HTML宣言では、次の構文でファイルをHTMLファイルとして指定しています。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
7.2.4.1.2 docLoadResourceIncludes関数

docLoadResourceIncludes関数では、現在のページのアセンブルに使用できるように、指定されたIDOCファイルからすべてのインクルードがロードされます。詳細は、「docLoadResourceIncludes関数」を参照してください。

7.2.4.1.3 meta要素

meta要素は特別な種類のページを識別します。

  • この要素は必要ではありません。

  • meta要素は、HTMLファイルのHEADセクションの内側に配置する必要があります。

  • metaタグには次の構文を使用します。

    <meta NAME="idctype" CONTENT="form; version=1.0">
7.2.4.1.4 変数とインクルード

HCSFページのHEADセクションには、必要に応じて、変数定義とHTMLインクルードが含まれる場合があります。HEADセクションの中で、デフォルトのページ・タイトルを定義し、std_html_head_declarationsコードをロードする行を、{例 - HCSFページのHEADセクションにおける変数定義とインクルード}に示します。

Example - Variable Definition and Include in the HEAD Section for an HCSF Page
!--$defaultPageTitle="Department News Form"-->
<!--$include std_html_head_declarations-->

7.2.4.2 データ・セクション

HCSFページのデータ・セクションには、フォームの処理に使用されるルールおよびメタデータ情報が含まれます。データ・セクション内の情報とページの表示との間には、次のように緊密な関係があります。

  • HCSFページがユーザーに配信された時点で、データ・セクション内の情報がDataBinderオブジェクトに解析され、フォーム・セクションにマージされます。

  • フォームが送信された時点で、データ・セクション内の情報がリクエストとマージされ、データ・セクションに再び書き出されます。詳細は、「データ・バインダ」および「HDAファイル内の要素」を参照してください。

7.2.4.2.1 データ・セクションの構造

{例 - HCSFページのデータ・セクション}に示すように、データ・セクションは、Idoc Scriptのタグidcbegindataidcenddataの間に配置されたXML要素で構成されます。

データ・セクションには次のルールが適用されます。

  • データ・セクションは、HTMLファイルの、フォーム・セクションの先頭より前にある<BODY>セクションの内側に配置する必要があります。

  • Idocスクリプトの変数定義とインクルードは、データ・セクションの中ではなく、前後に配置します。

  • データ・セクションで使用されるXML要素のタイプは、次の2つです。

  • データ・セクションでは、次のタイプの書式設定を使用することもできます。

Example - Data Section for an HCSF Page
<!--$idcbegindata-->
<idcformrules isFormFinished="0"/>
<model_number content="html">AB-123</model_number>
<revision>12</revision>
…
<!--$idcenddata-->
7.2.4.2.2 idcformrules要素

idcformrules要素では、データ・セクションにおけるコンテンツ・サーバーのルールを定義します。この要素では、isFormFinishedresultsetsのいずれか1つの属性が必要です。

  • IsFormFinished属性: isFormFinished属性は、フォームを再送信できるかどうかを示します。

    • フォームを再送信可能と指定する場合は、次の属性値を使用します。

      <idcformrules isFormFinished="0"/>
      
    • フォームを再送信不可能と指定する場合は、次の属性値を使用します。

      <idcformrules isFormFinished="1"/>
      

      このコードでは、読取り専用のフォームになります。

  • resultsets属性: resultsets属性は、データ・セクション内のいずれのXML要素がResultSetと解釈されるかを示します。

    • この属性では、1つ以上のXMLタグ名をカンマで区切って指定します。次に例を示します。

      <idcformrules resultsets="volume,chapter">
      
    • ユーザーへのHCSFページの配信中に、コアのコンテンツ・サーバーがresultsets属性を読み取り、必要に応じて、指定した名前を持つ空のResultSetをDataBinderオブジェクトに配置して、マージに利用できるようにします。

      データ・セクションにおけるResultSetの書式設定の詳細は、「ResultSet」を参照してください

7.2.4.2.3 メタデータ要素

メタデータ要素では、ブラウザにフォームを表示するときにフォーム・フィールドに表示されるメタデータ値を指定します。次に例を示します。

<model_number>AB-123</model_number>

各メタデータ要素には、その要素にどのタイプのコンテンツが含まれるかを示すcontent属性を割り当てることができます。次に例を示します。

<model_number content="html">AB-123</model_number>
  • content属性の値としては、htmltextのいずれかが可能です。textは、この要素のコンテンツを、厳密にテキストと解釈することを示します。htmlは、この要素のコンテンツをHTMLと解釈することを示します。

  • メタデータ要素にcontent属性が指定されていない場合は、デフォルトでhtmlが設定されます。

7.2.4.2.4 ネストされる要素

データ・セクション内でネストされたXML要素(ノードともいう)を使用できます。{例 - データ・セクション内でネストされたXMLタグ}は、<chapter>要素内でネストされた<section>要素を示しています。

Example - Nested XML Tags in a Data Section
<chapter title="Chapter 1">
This is the beginning of the chapter.
<section title="First Section">
This is the first section of the chapter.
</section>
</chapter>
7.2.4.2.5 XML要素の参照

ネストされたXML要素を参照するには、ルートレベルの要素から始め、要素レベルの間に感嘆符(!)を使用します。次に例を示します。

chapter!section

任意の要素の属性を参照するには、タグ名の後ろにコロン(:)を使用します。次に例を示します。

chapter!section:title
  • データ・セクション内の要素を参照する場合は、次の文のいずれかが真の場合にのみ、フォームの送信時に要素の値を元のデータ・セクションにマージできます。

    • root要素がすでに、データ領域で参照されています。

    • root要素が、ExtraRootNodesフォーム要素内で参照されています。

    • タグの接頭辞部分が、resultsetsフォーム要素内のResultSetとして参照されています。

  • デフォルト値は、タグ・パスに:default接尾辞を適用することによって指定できます。デフォルトの要素には、後で評価できるように、Idoc Scriptが含まれている場合もあります。{例 - メタデータのデフォルト値の指定}に、dDocTitleのデフォルト値を指定するためのフォーマットを示します。

    Example - Specification of a Default Metadata Value
    <input type=hidden name="dDocTitle:default" value="<$'MyTitle ' & dateCurrent()$>">0
7.2.4.2.6 フォーム要素
  • ExtraRootNodesフォーム要素を使用すると、フォームのデータ・セクション内のタグを指定するのではなく、Idocスクリプトの変数を作成してそれにタグ名を付加することによってタグを追加できます。フォームの最後で、ExtraRootNodesの値に文字列の値を代入して、元のデータ・セクションにマージできます。

  • resultsetsフォーム要素を使用すると、データ・セクション内のResultSetを指定するのではなく、ResultSetとしてタグを追加できます。

  • ExtraRootNodesフォーム要素とResultSetフォーム要素では、カンマで区切られたタグのリストを使用します。

idcformrules resultsets属性にmychapters!chapter要素がまだ定義されていない場合に、有効なResultSetとしてそれを追加するフォーム要素を、{例 - ResultSetに要素を追加するフォーム要素}に示します。また、必要に応じて、ルート要素mychaptersも追加されます。

Example - Form Elements That Add Elements to a ResultSet
<input type=hidden name="resultsets" value="mychapters!chapter">
<input type=hidden name="ExtraRootNodes" value="mychapters">
7.2.4.2.7 ResultSet

次のように、HCSFページのデータ・セクション内のXML要素を使用して、ResultSetを定義できます。

  • idcformrules要素のresultsets属性を使用して、ResultSetを指定する必要があります。

  • 要素名は完全修飾されている必要があり、ルート・ノードからの参照のフルパスを使用する必要があります。

  • ResultSetの列は、要素コンテンツおよび要素属性です。

ResultSetでのXML要素の繰返しとネストに対する制限については、{例 - ResultSetのために繰り返された要素}と{例 - RuleSetのために繰り返されたネスト済要素}を参照してください。

{例 - HCSFページのデータ・セクションにおけるResultSetを定義するためのXML要素}は、volumechapterという2つのResultSetを定義するXML要素を示しています。

Example - XML Elements for Defining ResultSets in the Data Section for an HCSF Page
<idcformrules resultsets="volume,chapter">
<volume title="First Volume">
    Volume content here
</volume>
<chapter title="First Chapter">
    Chapter content here
</chapter>
Example - XML Elements for Defining ResultSets in the Data Section for an HCSF Page
@ResultSet volume
2
volume
volume:title
Volume content here
First Volume
@end
@ResultSet chapter
2
chapter
chapter:title
Chapter content here
First Chapter
@end

このコードでは、それぞれ2つの列を持つ2つのResultSetに評価されます。{例 - XML要素で定義されたResultSet}は、これらのResultSetを示しています。

データ・セクションでは、ResultSetに対して繰り返された要素を使用できます。繰り返された要素は通常、コードをループ処理してResultSetを作成する場合に役立ちます。

繰り返された要素は、ResultSetの一部でないかぎり許可されません。

{例 - ResultSetのために繰り返された要素}は、chapter ResultSetのためにchapter要素がどのように繰り返されるかを示しています。

Example - Repeated Elements for a ResultSet
<idcformrules resultsets="chapter">
<chapter title="First Chapter">
    Some content here
</chapter>
<chapter title="Second Chapter">
    More content here
</chapter>

このコードでは、2つの列と2つの行を持つResultSetに評価されます。{例 - 繰り返された要素で作成されたResultSet}は、このResultSetを示しています。

Example - ResultSet Created with Repeated Elements
@ResultSet chapter
2
chapter
chapter:title
Some content here
First Chapter
More content here
Second Chapter
@end

ResultSetにはネストされた要素があってかまいませんが、{例 - ResultSetのために繰り返されたネスト済要素}に示すように、ネストされた要素を親要素内で繰り返すことはできません。この例に示したコードでは、最初の<chapter>要素内で<section>要素を追加しようとしても許可されません。

Example - Repeated Nested Elements for a ResultSet
<idcformrules resultsets="chapter">
<chapter title="First Chapter">
    Some content here
    <section title="First Section of First Chapter">
    Section content
    </section>
</chapter>
<chapter title="Second Chapter">
    More content here
</chapter>

{例 - 繰り返されたネスト済要素で作成されたResultSet}に示すように、このコードでは、4つの列と4つの行を持ち、最後の2つのセルが空白のResultSetに評価されます。

Example - ResultSet Created with Repeated Nested Elements 
@ResultSet chapter
4
chapter
chapter:title
chapter!section
chapter!section:title
Some content here
First Chapter
Section Content
First Section of First Chapter
More content here
Second Chapter

@end

ResultSetを編集するためのガイドライン

ResultSetの編集には、次のガイドラインが適用されます。

  • ResultSet内の特定の行を更新するには、リクエスト・パラメータでResultSetの行番号を指定する必要があります。シャープ記号(#)がコンテンツ・サーバーによって使用され、特定の行を示します。#文字を使用して行を指定しない場合は、行が付加されます。まだ存在していない行番号を指定した場合は、十分な空の行が追加されて、編集対象となる行が提供されます。

    {例 - ResultSetでの行の編集}は、ResultSetの最初の行(行0)を更新する方法を示しています。

    Example - Editing a Row in a ResultSet
    <input type="text" name="comment#0"
        value="new comment">
    <input type="text" name="comment!title#0"
        value="new title"
    
  • 感嘆符(!)を使用して、ResultSetに新規の行を挿入します。

    たとえば、comment ResultSetに作成者とタイトルのフィールドを挿入するには、入力フィールドにcomment!authorcomment!titleという名前を付けることができます。これらのフィールドがResultSetにまだない場合は、フォームの送信時に追加されます。

  • ResultSetから行を削除するには、{例 - ResultSetからの最初の行の削除}に示すように、すべてのフィールド値を空にして、空白となるようにします。

    Example - Deleting the First Row from a ResultSet 
    <input type="hidden" name="comment#0" value="">
    <input type="hidden" name="comment!title#0" value="">
    <input type="hidden" name="comment!date#0" value="">
    <input type="hidden" name="comment!author#0" value="">
    

    ResultSetから行を削除するための別の方法としては、DeleteRowsフォーム要素を、ResultSet名と行番号のカンマで区切られたペアのリストに設定します。たとえば、comment ResultSetから行2を削除し、book ResultSetから行5を削除するには、DeleteRowsフォーム要素を次のコンマで区切られたペアに設定します。

    comment:2,book:5

7.2.4.3 フォーム・セクション

フォーム・セクションには、HTMLフォーム要素の表示など、ページに必要な機能のためのコードが含まれます。アセンブルされたWebページのフォーマットを制御するために、HTML表内に、フォーム・プロパティ、フォーム・フィールドおよびフォーム・ボタンが配置されます。

コードの例は、「フォームの共通コード」を参照してください。

7.2.4.3.1 フォームの先頭

{例 - フォーム・セクションを開始するためのIdoc Script}に示すように、フォーム・セクションの先頭は、2行のIdoc Scriptです。

Example - Idoc Script to Begin Form Section
<!--$formName="HTMLForm"-->
<!--$include std_html_form_submit_start-->

std_page.idocリソース・ファイルのstd_html_form_submit_startインクルードには、POSTメソッドを使用して標準的なHTMLフォームを作成し、IdcServiceの値をSUBMIT_HTML_FORMに設定して、dID変数を現在のHCSFページの値に設定するためのコードが含まれます。{例 - HCSFページの標準的なHTMLフォーム}は、このコードを示しています。

Example - Standard HTML Form for an HCSF Page
<form name="<$formName$>" method="POST"action="<$HttpCgiPath$>">7
<input type=hidden name="IdcService"value="SUBMIT_HTML_FORM">
<input type=hidden name="dID" value="<$SourceID$>">
7.2.4.3.2 フォーム・プロパティ

フォーム表は通常、プロパティの定義で始まります。この定義とは、フォーム・フィールドとしてフォームを作成し、そのフィールドを編集可能にして、フィールド・キャプション領域のサイズを設定するものです。{例 - フォーム表のフィールド・プロパティ定義}は、これらのプロパティ定義を示しています。

Example - Field Property Definitions for a Form Table
<!--$isFormSubmit=1,isEditMode=1-->
<!--$captionFieldWidth=200, captionEntryWidth=80-->
7.2.4.3.3 フォーム・フィールド

{例 - フォーム上に入力フィールドを作成するためのコード}に示すように、それぞれの入力フィールドを作成するには通常、数行のコードが使用されます。

Example - Code to Create an Input Field on a Form
<!--$eval("<$product_name:maxLength=250$>")-->
<!--$fieldName="model", fieldCaption="Model Number"-->
<!--$include std_display_field-->

注意:

表示が適切に行われるようにするために、追加のコードが必要となるフィールドもあります。たとえば、テキスト領域のサイズを増やすために、標準的なstd_memo_entryインクルードのオーバーライドが必要になる場合があります。そのためには、次のように、IDOCファイルにカスタム・インクルードを定義します。

<@dynamicalhtml std_memo_entry@>
<textarea name="<$fieldName$>" rows=15 cols=50 wrap=virtual><$fieldValue$></textarea>
<@end@>
  • DataScript: DataScriptというフォーム・フィールドを、送信されているフォームに追加した場合、その値に対するIdocスクリプトがあれば、コンテンツ・サーバーがフォームを処理するときにそのスクリプトを評価します。

    (HCSPフォーム内のデータ・アイランドから生成された)表が2つあり、1つの表の中にあるエントリがもう1つの表の中のエントリを参照しています。最初の表の行を更新するときに、2番目の表の特定の列および行の値を変更することが目標です。この値変更を行うために、{例 - 表の行を更新するときの、別の表のフィールド値の変更}に示すように、Idocスクリプトを使用し、JavaScriptを記述してDataScriptの値を設定できます。

    Example - Changing a Field Value in a Table When You Update a Row in Another Table
    modifyRowAndColumn(row, column, value) 
    { 
    document.myform.DataScript = "<$setValue('#local', 'table2!'"+ column + "#'"+ row + 
    "','" + value + "')$>"; 
    } 
    

    次に、更新フォームの送信中に、column = "myColumn"row="1"value = "Test"とした関数をコールすると、送信前のDataScript値は次のようになります。

    DataScript.value = <$setValue('#local', 'table2!myColumn#1', 'Test')$> 
    

    フォームが送信された後、表table2の行1の列table2!myColumnが更新されて、値Testが反映されます。

    DataScriptを使用すると、データ・アイランドにある他のエントリを、その名前を参照するHTMLフォーム・フィールドを実際に作成しなくても、自由に編集できると言うこともできます。

7.2.4.3.4 フォームのボタン

フォームの送信ボタンとリセット・ボタンを作成するには通常、2行のコードが使用されます。{例 - フォームの送信ボタンとリセット・ボタンを作成するためのコード}は、これらの行を示しています。

Example - Code for Creating Form Submission and Reset Buttons
<input type=submit name=Submit value=" Submit ">
<input type=reset name=Reset value="Reset">
7.2.4.3.5 フォームの末尾

フォーム要素とデフォルト値がすべて定義された後、</form>タグでフォームを終了する必要があります。

7.3 動的サーバー・ページ用のカスタム・インクルードを含むIDOCファイルの作成

動的サーバー・ページが相互に連携することによって、コンテンツ・サーバーの動作を変更することができます。動的サーバー・ページを作成できるようにするには、参照するページ用のカスタム・インクルードを含むIDOCファイルを作成しておく必要があります。

動的サーバー・ページ用のカスタム・インクルードを含むIDOCファイルを作成する手順は次のとおりです。

  1. {例 - カスタム・インクルード}に示すフォーマットで、カスタム・インクルードを含むIDOCファイルを作成します。

    この例では、最初のインクルードはHelloWorldと名付けられ、2番目のインクルードでは、HTMLコードを1行定義しています。

  2. 拡張子を.idocとしてこのファイルを保存します(例、helloworld.idoc)。
  3. このIDOCファイルをコンテンツ・サーバーにチェックインします。このとき、helloworldのように、別のファイルから参照できるコンテンツIDを指定します。

例7-2 カスタム・インクルード

<@dynamichtml HelloWorld@>
<H1>Hello World/<H1>
<@end@>

このIDOCファイルは、参照元のいずれのHCS*ページでも利用可能です。

7.4 HCSTページの作成

HCSTファイルでIDOCファイルを参照することによって、HCST動的サーバー・ページを作成できます。

HCSTページを作成する手順は次のとおりです。

  1. {例 - カスタム・インクルードを参照するHCSTファイル}に示すHCSTファイルのような、IDOCファイル内のインクルードを参照するHCSTファイルを作成します。

    この例では、<HEAD>タグの後の行によってhelloworld.idocファイルがロードされ、IDOCファイル内のインクルードがこのHCSTページで利用可能となります。<BODY>タグの後の2番目の行によって、helloworld.idocファイルのHelloWorldインクルードのコードが表示されます。Idocスクリプトの標準的なタグ<$...$>が使用されていることに注意してください。

  2. 拡張子を.hcstとしてこのファイルを保存します(例: helloworld.hcst)。
  3. HCSTファイルをコンテンツ・サーバーにチェックインします。

例7-3 カスタム・インクルードを参照するHCSTファイル

<HTML>
<HEAD>
<$docLoadResourceIncludes("dDocName=helloworld&RevisionSelectionMethod=LatestReleased")$>
</HEAD>
<BODY>
You should see it:
<$include HelloWorld$>
</BODY>
</HTML>

7.5 HCSPページの作成

HCSPファイルでIDOCファイルを参照することによって、HCSP動的サーバー・ページを作成できます。

HCSPページを作成する手順は次のとおりです。:

  1. {例 - カスタム・インクルードを参照するHCSPファイル}に示すHCSPファイルのような、IDOCファイル内のインクルードを参照するHCSPファイルを作成します。

    この例では、<HEAD>タグの後の行によってhelloworld.idocファイルがロードされ、IDOCファイル内のインクルードがこのHCSPページで利用可能となります。<BODY>タグの後の2番目の行によって、helloworld.idocファイルのHelloWorldインクルードのコードが表示されます。HTMLコメント・タグ<!--...-->が使用されていることに注意してください。

  2. 拡張子を.hcspとしてこのファイルを保存します(例: helloworld.hcsp)。
  3. HCSPファイルをコンテンツ・サーバーにチェックインします。

例7-4 カスタム・インクルードを参照するHCSPファイル

<HTML>
<HEAD>
<!--$docLoadResourceIncludes("dDocName=helloworld&amp;RevisionSelectionMethod=LatestReleased")-->
</HEAD>
<BODY>
You should see it:

<!--$include HelloWorld-->
</BODY>
</HTML>

7.6 HCSFページの作成

一般的なHCSFページとそれに関連付けられたIDOCファイルを{例 - HCSFファイル内の製品の説明フォーム}に示します。この例では、ユーザーが記入して送信し、コンテンツ・アイテムとして製品の説明を入力できるフォームを作成します。

HCSFページを作成する手順は次のとおりです。

  1. {例 - CSFファイル内の製品の説明フォーム}に示すように、form_std_pageというIDOCファイルを参照するHCSFファイルを作成します。

    この例では、htmlタグの後の行によって、form_std_pageをコンテンツIDとするIDOCファイルがロードされ、IDOCファイル内のインクルードがこのHCSFページで利用可能となります。

    form_std_page IDOCファイルに定義されている、metaタグの後の2つのインクルードによって、Webページの先頭にコードが生成されます。

    idcformrulesタグのisFormFinished属性によって、フォームが未完成であることがコンテンツ・サーバーに伝えられるため、フィールドを編集してフォームを送信できます。

    タグごとにcontentプロパティを設定する必要はなく、デフォルトでhtmlが設定されます。

    idcbegindataタグとidcenddataタグによってXMLタグ付き領域が定義され、それによって、フォームのルールおよび初期メタデータが指定されます。

    XMLタグの各セットのテキストが、フォーム上の対応するフィールドに入力されます。

    form_std_page IDOCファイルに定義されている、この例の最後のインクルードによって、Webページの末尾にコードが生成されます。

  2. product_form.hcsfとしてこのファイルを保存します。
  3. HCSFファイルをコンテンツ・サーバーにチェックインします。
  4. {例 - カスタム・インクルードを含むIDOCファイル}に示すように、カスタム・インクルードを含むIDOCファイルを作成します。

    この例では、form_head_sectionインクルードによって、ページ・タイトルと、(std_page.htmリソース・ファイル内のstd_html_head_declarationsインクルードを参照する)HTMLの標準的なheadセクションのコードが定義されます。

    form_pre_xml_sectionインクルードによって、ページが静的に表示できるようになり、(std_page.htmリソース・ファイル内のbody_defインクルードを参照する)コンテンツ・サーバーの標準的なWebページのコードが定義されます。

    form_post_xml_sectionインクルードでは、フォーム・フィールドが定義されます。std_page.htmリソース・ファイルに定義されている、std_page_beginインクルードとstd_headerインクルードによって、コンテンツ・サーバーの標準的なWebページのコードが定義されます。これらのインクルードの後の2行によって、フォーム名と、(std_page.htmファイル内のstd_htm_form_submit_startインクルードを参照する)HTMLの標準的なフォームのコードが定義されます。

    tableタグの後の条件では、これが送信済の編集可能なフォームまたはページであるかが、ファイル名の拡張子に基づいて判別されます。これが編集可能なページ(isHcsf=1)の場合は、次の条件によって、フィールドをフォーム・フィールドとして作成して編集可能にする変数が設定されます。条件の後の行では、フィールド・キャプションの表セルの幅が150ピクセルに設定され、入力フィールドの表セルの幅が200ピクセルに設定されています。

    eval関数では、テキスト・フィールドの最大長が250文字に設定されています。

    fieldNameタグでは、フィールドの名前、キャプションおよびタイプが定義されます。fieldTypeが定義されていない場合は、デフォルトでTextが設定されます。

    これが送信済のフォーム(isHcsp=1)の場合は、if isHcsp条件によって、フォーム・フィールドを読取り専用にする変数に設定されます。

    std_page.htmリソース・ファイルに定義されているstd_display_fieldインクルードによって、フォーム・フィールドを作成するコードが定義されます。

    これが編集可能なフォーム(isHcsf=1)の場合は、if isHcsf条件によって、「送信」ボタンと「リセット」ボタンが作成されます。

    if isHcsf条件の後の行では、ドキュメント・タイトル(dDocTitle)が自動的に生成されます。

    std_page.htmリソース・ファイルに定義されているstd_page_endインクルードによって、Webページの末尾にコードが生成されます。

  5. form_std_page.idocとしてこのファイルを保存します。
  6. このIDOCファイルをコンテンツ・サーバーにチェックインします。このとき、コンテンツIDをform_std_pageに指定します。(これは、HCSFページによって参照される名前です。)
  7. コンテンツ・サーバーでHCSFコンテンツ・アイテムを検索します。
  8. フォームを表示するためのリンクをクリックして、WebブラウザにHCSFページを作成します。フォームは、図7-2のサンプルのようになります。

    図7-2 Webブラウザに表示するHCSFページを作成するためのフォーム

    図7-2の説明が続きます
    「図7-2 Webブラウザに表示するHCSFページを作成するためのフォーム」の説明
  9. サンプルの値をいくつか使用してフォームに記入し、「送信」をクリックします。

    HCSPページとしてコンテンツ・アイテムが作成されます。

  10. コンテンツ・サーバーでHCSPページを検索します。
  11. WebブラウザにHCSPページを表示するためのリンクをクリックします。図7-3は、ページがどのように表示されるかを示しています。

例7-5 HCSFファイル内の製品の説明フォーム

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<!--$docLoadResourceIncludes("dDocName=form_std_page&amp;
      RevisionSelectionMethod=Latest")-->

<head>
<meta NAME="idctype' CONTENT="form; version=1.0">

<!--$include form_head_section-->

</head>

<!--$include form_pre_xml_section-->

<!--$idcbegindata-->
      <idcformrules isFormFinished="0"/>
      <product_name content="html">

      </product_name?
      <model_number content="html">
            SC-
      </model_number>
      <summary_description>
            Enter a summary here.
      </summary_description>
      <full_description>
             Enter a full description here.
      </full_description>
      <author>
      <division>
            Household Products
      </division>
      <revision>

      </revision>
<!--$idcenddata-->

<!--$include form_post_xml_section-->

</body>
</html>

例7-6 カスタム・インクルードを含むIDOCファイル

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<body>

<@dynamichtml form_head_section@>
<!--standard includes for a standard hcsp page-->
<$defaultPageTitle="Product Description Form"$>
$include std_html_head_declarations$>
<@end@>

<@dynamichtml form_pre_xml_section@>
<!--This code is here for static viewing.-->
<$if 0$>
      <body>
<$endif$>

<$include body_def$>
<@end@>

<@dynamichtml form_post_xml_section@>

<$include std_page_begin$>
<$include std_header$>

<$formName="HTMLForm"$>
<$include std_html_form_submit_start$>

<table>

<$if strEquals(ref:dExtension,"hcsf"))$>
      <$isHcsf=1$>
<$else$>
      <$isHcsp=1$>
<$endif$>

<$if isHcsf$>
      <$isFormSubmit=1,isEditMode=1$>
<$endif$>

<$captionFieldWidth=150, captionEntryWidth=200$>

<$eval("<$product_name:maxLength=250$>")$>
<$fieldName="product_name", fieldCaption="Product Name"$>
<$if isHcsp$><isInfoOnly=1$><$endif$>
<$include std_display_field$>

<$eval("<$model_number:maxLngth=250$>")$>
<$fieldName="model_number", fieldCaption="Model Number"$>
<$if isHcsp$><$isInfoOnly=1$><$endif$>
<$include std_display_field$>

<$fieldName="summary_description",
      fieldCaption="Summary Description",
      fieldType="Memo"$>
<$if isHcsp$><$isInfoOnly=1$><$endif$>
<$include std_display_field$>

<fieldName="full_descripton",
      fieldCaption="Full Description",
      fieldType="Memo"$>
<$if isHcsp$><$isInfoOnly=1$><$endif$>
<$include std_display_field$>

<$eval("<$author:maxLength=250$>")$>
<$fieldName="author", fieldCaption="Author"$>
<$if isHcsp$><$isInfoOnly=1$><$endif$>
<$include std_display_field$>

<$eval("<$division:maxLength=250$>")$>
<$fieldName="division", fieldCaption="Division"$>
<$if isHcsp$><$isInfoOnly=1$><$endif$>
<$include std_display_field$>

<$eval("<$revision:maxLength=250$>")$>
<$fieldName="revision", fieldCaption="Revision"$>
<$if isHcsp$><$isInfoOnly=1$><$endif$>
<$include std_display_field$>

<tr>
      <td colspand=2><hr></td>
</tr>
<tr>align=center>
      <td colspan=2>
      <$if isHcsf$>
            <input type=submit name=Submit value=" Submit ">
            <input type=reset name=Reset Value="Reset">
      <$endif$>
            <input type=hidden name="dDocTitle:default" 
            value="<$"Product Description  " & dateCurrent()$>">
      </td>
</tr>
</table>
</form>
<$include std_page_end$>

<@end@>

</body>
</html>

7.6.1 フォームの共通コード

HCSFページおよび関連付けられているIDOCファイルで広く使用されている機能は次のとおりです。

  • ファイル情報の取得
  • ファイル拡張子の参照
  • フォーム情報の定義
  • フォーム・フィールドの定義
  • 非表示フィールドの定義
  • フォームの送信

7.6.1.1 ファイル情報の取得

DOC_INFO_SIMPLEサービスを実行すると、特定のファイルのメタデータがページで利用可能になります。{例 - メタデータを取得するためのIdoc Script}は、このサービスを実行するためのIdoc Scriptを示しています。

例7-7 メタデータを取得するためのIdoc Script

<$dID=SourceID$>
<$executeService("DOC_INFO_SIMPLE")$>

7.6.1.2 ファイル拡張子の参照

{例 - ファイル拡張子を参照するための文}に示すように、フォームのif文でファイル拡張子を参照して、フォームが送信済(.hcspファイル)か未送信(.hcsfファイル)かを判別できます。

例7-8 ファイル拡張子を参照するための文

<$if (strEquals(ref:dExtension,"hcsf"))$>
    <$isHcsf=1$>
<$else$>
    <$isHcsp=1$>
<$endif$>

ref:接頭辞の詳細は、「メタデータの参照」を参照してください。

7.6.1.3 フォーム情報の定義

{例 - HTMLフォームの名前と標準的なインクルード}に示すように、2行のコードによって、フォーム名と、HTMLフォームを開始するための標準的なインクルードが定義されます。

例7-9 HTMLフォームの名前と標準的なインクルード

<$formName="HTMLForm"$>
<$include std_html_form_submit_start$>

{例 - フォーム・プロパティ}は、フォーム・プロパティを定義するための一般的なコードを示しています。

例7-10 フォーム・プロパティ

<table border=0 width=100%>
<$isEditMode=1,isFormSubmit=1$>
<$captionFieldWidth="25%", captionEntryWidth="75%"$>

7.6.1.4 フォーム・フィールドの定義

{例 - フォーム・フィールドを表示するための標準的なIdocスクリプト}に示すように、フォーム・フィールドを表示するには、標準的なIdocスクリプト変数とstd_display_fieldインクルードを使用します。

フィールドが正しく表示されるようにするために、追加のコードが必要となるフィールドもあります。たとえば、メモの標準的なテキスト領域は縦が3行、横が40列ですが、テキスト領域のサイズを増やすために、標準的なインクルードを無効にすることが必要になる場合があります。{例 - メモ・フィールドの標準的なインクルード}は、標準的なstd_memo_entryインクルードを示しています。

指定したサイズ(この場合は、縦が15行、横が50列)にテキスト領域を増やすために、カスタムstd_memo_entryインクルードを使用する方法を、{例 - メモ・フィールドのカスタム・インクルード}に示します。

例7-11 フォーム・フィールドを表示するための標準的なIdocスクリプト

<$fieldName="news_author",fieldDefault=dUser,fieldCaption="Author",isRequired=1,requiredMsg = "Please specify the author."$>
<$include std_display_field$>

例7-12 メモ・フィールドの標準的なインクルード

<@dynamichtml std_memo_entry@>
    <textarea name="<$fieldName$>" rows=3 cols=40 wrap=virtual> <$fieldValue$></textarea>
<@end@>

例7-13 メモ・フィールドのカスタム・インクルード

<@dynamichtml std_memo_entry@>
    <textarea name=<$fieldName$> rows=15 cols=50 wrap=virtual><$fieldValue$></textarea>
<@end@>

7.6.1.5 非表示フィールドの定義

コントリビュータが変更できない非表示フィールドを定義することによって、送信されたフォーム(HCSP)のメタデータを指定できます。たとえば、次のコードでは、送信された各フォームにドキュメント・タイプNews_Formsが割り当てられます。

<input type=hidden name="dDocType" value="News_Forms">

次のコードでは、送信されたフォームのセキュリティ・グループが指定されます。

<input type=hidden name="dSecurityGroup" value="Public">

7.6.1.6 フォームの送信

フォームの送信時に、Java関数をコールして追加の検証または処理を実行することもできます。次に例を示します。

<input type=button name=Submit value="Save" onClick="postCheckIn(this.form)">

7.7 HCST、HCSP、HCSFの各ページのWebブラウザでの表示の確認

HCST、HCSP、HCSFいずれかのファイルを保存した後で、Webブラウザでのページ表示を確認できます

  1. コンテンツ・サーバーでhelloworldコンテンツ・アイテムを検索します。
  2. WebブラウザにHCSTファイルとHCSPファイルを表示します。両方とも、図7-4の例のようになります。

    図7-4 Webブラウザに表示されるHelloWorldコンテンツ・アイテム

    図7-4の説明が続きます
    「図7-4 Webブラウザに表示されるHelloWorldコンテンツ・アイテム」の説明