ヘッダーをスキップ
Oracle® WebCenter Content Site Studioテクニカル・リファレンス・ガイド
11gリリース1 (11.1.1)
B72417-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 カスタム要素

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

8.1 カスタム要素について

カスタム要素は、ユーザー定義のSite Studio要素です。Site Studio製品に含まれている他の要素に加え、カスタム要素によって、個々のビジネス・ニーズに合うようSite Studio製品を拡張する方法が提供されます。

コード上、カスタム要素は、基本的にはコントリビュータ・フォームのIFRAME内に存在する完全なHTMLタイプのファイル(htm、hcsp、jspなど)です。カスタム要素がSite Studio要素として正しく機能するためには、カスタム要素でAPIを使用して複数のコールバックを実装する必要があります。

8.2 要素API

カスタム要素がコントリビュータ・フォームで正しく機能するためには、カスタム要素でAPIを使用していくつかのコールバックを実装する必要があります。ElementAPIオブジェクトは、コントリビュータ・フォームとカスタム要素間の通信を支援するカスタム要素ページに明示的にロードされるJavaScriptオブジェクトです。ElementAPIにより、カスタム要素がコントリビュータ・フォームと通信するためのメソッドと、コントリビュータ・フォームがカスタム要素に通知を送信するためのコールバック・メカニズムが提供されます。

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

8.2.1 要素APIのロード

ElementAPIとそのサポート・ライブラリを使用する前に、ElementAPIをカスタム要素ページにロードする必要があります。ElementAPIのロード後、カスタム要素は、ページの初期化を継続し、カスタム要素がロードされたことをコントリビュータ・フォームに通知します。

<html>
<head>
   <title>Default Custom Element Form</title>
   <script type="text/javascript">
      function Initialize()
      {
    //===========================================================================
    // TODO: ElementAPI is loaded. Place Custom Element initialization code here.
    //===========================================================================

    // Let the Contributor Form know that this Custom Element is loaded and ready.
    ElementAPI.Ready();
     }

    // Load the ElementAPI and its supporting libraries - then call Initialize()
    // Parameter 1: The Custom Element's window object. This parameter uniquely
    //  identifies the Custom Element to the Contributor Form.
    // Parameter 2: A function pointer. This function will be executed after the
    // ElementAPI and its supporting libraries are loaded.
    try {
      window.top.WCM.InitializeCustomElement(window, Initialize);
      } catch(e) { }
   </script>
</head>
<body>
   <h3>Default Custom Element Form</h3>
</body>
</html>

8.2.2 要素API依存スクリプト

ElementAPIがカスタム要素ページにロードされる際に、ElementAPI依存スクリプトもロードされます。これらのスクリプトには、JavaScript WCMライブラリのほとんどが含まれており、カスタム要素の作成に使用することもできます。次のスクリプト・ファイルがカスタム要素にロードされます。

  • wcm.js

  • ./base/wcm.dhtml.js

  • ./base/wcm.get.js

  • ./base/wcm.http.js

  • ./base/wcm.popup.js

  • ./sitestudio/wcm.contentserver.popup.js

  • ./form/elements/wcm.elementapi.js

  • ./sitestudio/elements/wcm.sitestudio.elementapi.js

  • ./sitestudio/wcm.idc.js

  • ./form/elements/element/wcm.element.js

  • ./form/elements/custom/wcm.custom.js

他のカスタム・スクリプト同様、必要に応じてこれらを変更し、変更したスクリプトを/customディレクトリに配置できます。

8.3 コントリビュータ内のカスタム要素

コントリビュータ・フォームは、カスタム要素により実装された関数を実行することでカスタム要素と通信します。初期化プロセスの一部として、カスタム要素では、コントリビュータ・フォームにこれらの関数のポインタを渡して各関数を登録する必要があります。

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

8.3.1 コントリビュータ・フォームからカスタム要素への通信

コントリビュータ・フォームは、カスタム要素により実装された関数を実行することでカスタム要素と通信します。初期化プロセスの一部として、カスタム要素では、コントリビュータ・フォームにこれらの関数のポインタを渡して各関数を登録する必要があります。

次に、コントリビュータ・フォームに登録できる関数を示します。これらの関数は、いずれもカスタム要素により実装する必要はありませんが、コントリビュータ・ユーザーからデータを収集して保存する場合は、いくつかの関数が必要になります。また、IsDirty()関数以外のすべての関数は、実行されると、タスク完了時の実行のためにコールバック関数のポインタを渡されます。これにより、実行時にカスタム要素で非同期タスクを実行する必要がある場合に、非同期通信を行うことができます。

関数 説明
CanCloseElement(callback); コントリビュータ・フォームは、コントリビュータが要素内の情報を更新したときにこのメソッドを実行します。関数の実装では、カスタム要素を安全に閉じることができるかどうかを評価する必要があります。たとえば、データが検証に合格しない場合、カスタム要素が閉じられないことを示す必要があります。
GetElementContent(callback); コントリビュータ・フォームは、コントリビュータが要素内の情報を更新したときにこのメソッドを実行します。関数の実装では、保存される文字列コンテンツを戻す必要があります。
Hide(callback); コントリビュータ・フォームは、カスタム要素の上にHTML要素をオーバーレイ表示するDHTMLタスクをフォームで実行するときに常にこのメソッドを実行します。たとえば、このメソッドは、「メタデータ」タブがアクティブ化され、コントリビュータ要素が隠れたときに実行されます。

このメソッドは、特にEphoxベースの要素向けに導入されています(Javaアプレットには常にtop z-indexが含まれるため)。他のすべての要素(HTMLベースの要素)では、このメソッドを無視できます。

Show(callback); コントリビュータ・フォームは、カスタム要素を再表示する(オーバーレイを削除する)DHTMLタスクをフォームで実行するときに常にこのメソッドを実行します。

このメソッドは、特にEphoxベースの要素向けに導入されています(Javaアプレットには常にtop z-indexが含まれるため)。他のすべての要素(HTMLベースの要素)では、このメソッドを無視できます。

IsDirty(); コントリビュータ・フォームは、フォーム・ポップアップが閉じられるときに常にこのメソッドを実行します。カスタム要素は、未保存の変更があるかどうかを評価して、保存していない変更がある場合はコントリビュータ・ユーザーに通知します。

次に、カスタム要素がコントリビュータ・フォームに関数を登録する方法を示すJavaScriptのコード例を示します。

function CanCloseElement(callback)
{
  // No data validation in this sample - just pass back a true value.
  callback({canClose: true});

  // Here is an example of passing a false value
  // callback({canClose: false, reason: 'Failed validation. Use only lowercase
  // letters.'};
}
 
function GetElementContent(callback)
{
  // Pass back some sample content for demo purposes.
  callback('This is my Custom Element Content.');
}
 
function Show(callback)
{
  // Just handle this notification by executing the callback.
  callback(); 
}
 
function Hide(callback)
{
  // Just handle this notification by executing the callback.
  callback(); 
}
 
function IsDirty()
{
  // This Custom Element is never dirty - so pass a false value.
  return {isDirty: false}; 
}
 
// Set callback methods for the Contributor Form to send notifications to this Element.
ElementAPI.SetCallback('CanCloseElement', CanCloseElement);
ElementAPI.SetCallback('GetElementContent', GetElementContent);
ElementAPI.SetCallback('Show', Show);
ElementAPI.SetCallback('Hide', Hide);
ElementAPI.SetCallback('IsDirty', IsDirty);

8.3.2 カスタム要素からコントリビュータ・フォームへの通信

カスタム要素では、ElementAPI JavaScriptオブジェクトを使用してコントリビュータ・フォームとの通信を開始します。次に、使用可能なElementAPIメソッドのリストを示します。

関数 説明
ElementAPI.GetDefaultData(); データ・ファイルに格納されたデフォルト・コンテンツを取得します。
ElementAPI.SetHostHeight(height); IFRAMEを格納する要素の高さを設定します。
ElementAPI.SetRequiredIndicator(isRequired); コントリビュータ・フォーム・ユーザー・インタフェースで「Required」グラフィック・インジケータを切り替えます。
ElementAPI.GetSite(options); Webサイトの選択選択ユーザー・インタフェースを表示します。
ElementAPI.GetSection(options); Webサイト・セクションの選択選択ユーザー・インタフェースを表示します。
ElementAPI.GetColor(options); 「色」選択ユーザー・インタフェースを表示します。
ElementAPI.GetFont(options); フォントの取得選択ユーザー・インタフェースを表示します。
ElementAPI.GetSearchResults(options); Oracle Content Serverの検索結果の取得ページを表示します。
ElementAPI.GetQueryText(options); 問合せテキストの取得ユーザー・インタフェースを表示します。
ElementAPI.CaptureQuery(options); Oracle Content Serverの「問合せの取得」ページを表示します。
ElementAPI.GetHyperlink(options); ハイパーリンク・ウィザード・ユーザー・インタフェースを表示します。
ElementAPI.FocusForm(options); 親ウィンドウにフォーカスし、要素ウィンドウを隠蔽します。

8.4 レガシー・カスタム要素の互換性

リリース10gR3 (10.1.3.3.2)以前のSite Studioで作成されたカスタム要素フォームはすべて、Site Studio 11gR1と互換性がなく、手動でアップグレード(再作成)する必要があります。下位互換性が維持されていない主な理由は、以前のSite StudioがInternet Explorerの独自仕様のwindow.external機能に依存しているためです。Site Studioリリース10gR3以前に使用されていたカスタム要素のwindow.external機能はコードの実行時にブロックされ、クロスブラウザおよびクロスプラットフォームのDHTMLソリューションで簡単に複製されません。

下位互換性をなくしたことによるメリットは、現在のカスタム要素がより一層柔軟になり、(クロスブラウザおよびクロスプラットフォーム・ソリューションであることに加え)コントリビュータ・アプリケーション・アーキテクチャに緊密に統合されることです。

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

8.4.1 レガシー・カスタム要素フォームの検出

10gR3 (10.1.3.3.2)以前のSite Studioを使用して作成されたカスタム要素フォーム(レガシー・カスタム要素フォーム)は、SSValidateCustomElementsフラグをtrueに設定してコントリビュータ・アプリケーションにロードされると、検出されます。コントリビュータ・フォームの当該する場所にエラー・メッセージが表示されます。

コントリビュータ・アプリケーションは、これを行うために、まずカスタム要素フォームをダウンロードし、ソース・コードを解析して、カスタム要素フォームが新しいコントリビュータ・アプリケーションと互換性があるかどうかを確認します。

レガシー・カスタム要素フォームを検出する機能とオーバーヘッドは、本番インストールでは必要ないため、この機能はデフォルトではオフです。レガシー・カスタム要素フォームの検出機能を有効にするには、次の行をOracle Content Serverのconfig.cfgファイルに追加して、サーバーを再起動します。

SSValidateCustomElements=true

8.4.2 レガシー・カスタム要素のアップグレード

10gR3 (10.1.3.3.2)以前のSite Studioを使用して作成されたカスタム要素フォームは、Site Studio 11gR1と互換性がありません。手動でアップグレードし、再作成する必要があります。下位互換性が維持されていない主な理由は、以前のSite StudioがInternet Explorerの独自仕様のwindow.external機能に依存している(レガシー・コントリビュータ・アプリケーションに使用されているActiveXコントロールによる)ためです。Site Studio 10gR3 (10.1.3.3.3)以上(10gR4および11gR1を含む)で使用されているブラウザに依存しないJavaScriptベースのコントリビュータ・アプリケーションの結果、この機能はSite Studioから削除されました。