Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Zen アプリケーションの概念

Zen アプリケーションは、Zen のクライアントとサーバとの対話動作の結果生じるすべてのアクティビティを明確に定めています。このようなアクティビティには、Web ページの表示、データベースへのクエリの発行、ディスクへのデータの書き込みなどがあります。Zen アプリケーションを作成するときは、これらのアクティビティを指定する一連の Zen クラスを作成します。これらのクラスについては、ObjectScript 言語を使用します。必要に応じて、XML、HTML、SVG、JavaScript などの埋め込みスニペットも同時に使用できます。

Caché オブジェクトや ObjectScript プログラミング言語に精通していない場合は、他のドキュメントの関連する説明を完全に理解した後でこの章を読むことをお勧めします。"Caché オブジェクトの使用法" および "Caché ObjectScript の使用法" のドキュメントから着手すると効果的です。

このドキュメントの例では、ObjectScript を使用していますが、Caché Basic または Caché MVBasic をプログラミング言語として使用することもできます。"Caché Basic の使用法" または "Caché の MultiValue 機能の使用" を参照してください。

クライアントおよびサーバ

Zen はクライアント/サーバ Web テクノロジです。クライアントサーバは、さまざまな場面で広く使用されている用語です。このセクションでは、これらの用語が Zen ではどのような意味を持っているかについて説明します。

Zen および CSP

"Caché Server Pages (CSP) の使用法" のドキュメントでは、CSP アプリケーションでのクライアントとサーバの関係について説明しています。このトピックは、HTTP 要求の発行からブラウザでのページ表示までの間に発生するイベント・フローを要約しています。Zen アプリケーションおよび Zen ページは CSP ページなので、この情報はすべて Zen にも当てはまります。

Zen アプリケーションでは、以下の目的で CSP テクノロジが使用されています。

  • HTTP 要求をフィルタし、これに応答する。

  • セッションとセッションのライフサイクルを管理する。

  • ユーザ ID、認証、およびアクセス制御を管理する。

  • クライアントからサーバ・メソッドを呼び出すときに使用するハイパーイベント・メカニズムを提供する。

  • クライアントで安全にコードを実行するためにサーバからコードを呼び出す。

Important:

CSP セッション保持モードを使用すると、サーバ側 Zen ページ (%page) オブジェクトおよびサーバ側アプリケーション (%application) オブジェクトは複数のサーバ要求の間で保持されません

実行時の Zen ページ

Zen ページは、ブラウザからのハイパーテキスト転送プロトコル (HTTP ) 要求に自動的に応答し、完全なハイパーテキスト・マークアップ言語 (HTML) ドキュメントを提供してその要求に応えます。Zen ページは、拡張マークアップ言語 (XML) や Scalable Vector Graphics (SVG) コンテンツなどその他のタイプの要求も満たすことができます。XML や SVG に対する動作については後述しますが、この章で説明する HTML での動作によく似ています。

ブラウザのウィンドウに Zen ページを表示する処理は次の手順で行われます。

  1. Web ブラウザは、特定の Zen ページを指定した HTTP 要求を送信します。Caché サーバはこの要求を受信し、自動的に Zen ページ・クラスに転送します。

  2. このページ・クラスは、その %OnBeforeCreatePage() コールバック・メソッドを呼び出します。このメソッドを使用すると、%CreatePage() の実行を開始する前に必要な任意の設定処理をアプリケーションから実行できます。

  3. このページ・クラスは、それ自身のインスタンスを Caché サーバ上に作成して、そのクラス・メソッド %CreatePage() を呼び出します。このメソッドは、コンポーネント・オブジェクトのセットを作成し、これらのオブジェクトをページ・オブジェクトの子として追加します。

    Zen ページ・クラスの XData Contents ブロック内で、そのページが XML 形式で記述されている場合は、このクラスをコンパイルするたびに %CreatePage() メソッドが自動的に生成されます。コンパイラでこのメソッドを生成するときは、XData Contents にある情報が使用されます。これは群を抜いて最も一般的なケースです。代わりに、プログラマは XData Contents ブロックを省略して、%CreatePage() を手動で実装することもできます。これにより、動的なページ・コンテンツを作成することが可能になります。

    ただし、ほとんどの Zen アプリケーション開発者は、XData Contents を使用してページの初期ドキュメント・オブジェクト・モデル (DOM) をセットアップしてから、%OnAfterCreatePage() でこのモデルに最後の仕上げを加えることを選択します。

  4. このページ・クラスは、その %OnAfterCreatePage() コールバック・メソッドを呼び出します。このメソッドでは、%CreatePage() により生成されたコンテンツを、アプリケーションから必要に応じて自由に修正できます。%OnAfterCreatePage() の実行が完了すると、いくつかの子コンポーネント・オブジェクトを持つページ・オブジェクトが 1 つメモリに残ります。

  5. ページ・オブジェクトは、ページ・クラスの %DrawHTML() メソッドを呼び出すことで、自身の DOM から HTML ドキュメントを構築します。すべての Zen ページとコンポーネント・オブジェクトは、オブジェクトを HTML としてレンダリングできる %DrawHTML() メソッドを備えています。Zen ページの場合、%DrawHTML() メソッドにより以下が提供されます。

    • ページのタイトル。

    • このページで必要な任意の HTML メタタグ。

    • ハイパーイベントのサポートに必要なコンテンツ (サーバに対するページ内コール・バックに使用するメカニズム)。

    • 必要な JavaScript またはカスケーディング・スタイル・シート (CSS) のインクルード・ファイルを使用するためのインクルード文。

    • このページで使用するクライアント・コンポーネント・クラスのセットを定義するために必要な JavaScript。

    • このページで使用するクライアント・コンポーネント・オブジェクトのセットを作成し、初期化するために必要な JavaScript。つまり、サーバ側ページ・オブジェクトのクライアント側バージョンを作成します。

    • コンポーネント・クラスにより定義された既定の CSS スタイル定義。

    • アプリケーション・クラスにより定義された CSS スタイル定義。

    • ページ・クラスにより定義された CSS スタイル定義。この順序により、アプリケーション設定は既定の設定をオーバーライドし、ページ設定はアプリケーション設定をオーバーライドできるようになります。したがって、この順序は重要です。

    • このページ上にある各コンポーネントの HTML コンテンツ。これは、ページ上のコンポーネントごとに %DrawHTML() メソッドを呼び出すことで取得します。

    %CreatePage() と同様に、ほとんどの場合、Zen プログラマは %DrawHTML() を無視できます。Caché は自動的にこれを生成し、呼び出します。%DrawHTML() に関して重要なことは、このメソッドが実行されるタイミングです。 %DrawHTML() は、ページがサーバから送出される前の最終ステップです。

    Zen プログラマは、%OnAfterCreatePage() メソッドの実行が終了する前に、このページに対するサーバ側の調整がすべて完了するように留意する必要があります。

  6. Caché サーバは HTML ドキュメントをクライアントに配信します。

  7. onloadHandler() というクライアント側メソッドがページ・クラス内で定義されている場合は、この時点でこのメソッドがクライアント側で実行されます。

  8. ブラウザに HTML ドキュメントが表示されます。

上記のとおり、Zen アプリケーション開発フレームワークは、Zen ページをその初期表示前に操作するためのいくつかの機会を提供します。最もよく使用される機会は次のとおりです。

  • Zen ページ・クラス内の XData Contents ブロックでは、以下で説明されている構文が使用されます。

  • %OnAfterCreatePage() コールバック・メソッドはサーバ側で実行されるため、Caché Basic、ObjectScript、MVBASIC などのサーバ側言語で記述できます。Zen は、ページ・オブジェクトが最初に作成された後で、%OnAfterCreatePage() を呼び出します。%OnAfterCreatePage() 内の文を使用して、ページ上のコンポーネントを追加したり他の形で操作したりできますが、これらのすべての場合に任意のサーバ側言語を使用できます。コンポーネントをプログラムによって操作するために呼び出すことができるサーバ側メソッドの技術情報とリストは、"Zen アプリケーションの開発" の “Zen ページ” の章にある “サーバでのページ・コンテンツの動的な定義” セクションを参照してください。

  • ページがクライアント宛てに送られてからユーザに表示されるまでの間に、クライアント側メソッド onloadHandler() をオーバーライドすることでページを完成させる機会がもう一度あります。この JavaScript メソッドは、ページが表示される直前にクライアント側で実行されます。コンポーネントをプログラムによって操作するために呼び出すことができるクライアント側メソッドの技術情報とリストは、"Zen アプリケーションの開発" の “Zen ページ” の章にある “クライアントでのページ・コンテンツの動的な定義” セクションを参照してください。

Zen アプリケーション

Zen アプリケーションは以下の部分で構成されています。

アプリケーション・クラス

共通スタイル・シートなどアプリケーション全体にわたる動作を指定する %ZEN.applicationOpens in a new tab から派生したクラスです。このスタイル・シートは、クラス内に埋め込まれた XML ブロックとして定義されています。

ページ・クラス

Zen アプリケーションは 1 つ以上の Zen ページで構成されています。各ページは %ZEN.Component.pageOpens in a new tab から派生したクラスで、これは %CSP.PageOpens in a new tab%ZEN.Component.componentOpens in a new tab の両方のサブクラスです。

コンポーネント・クラス

すべてのページにコンポーネントがあります。コンポーネントは “外観と使用感“ を提供し、それが属するページとの対話機能を提供します。コンポーネントはすべて、%ZEN.Component.componentOpens in a new tab から派生します。これにはボタン、テーブル、リスト・ボックス、テキスト・フィールド、パネルなどがあります。ページに表示できるアイテムは基本的にすべてコンポーネントとなります。

ページやコンポーネントを持つ Zen アプリケーション
generated description: page object tree

このアーキテクチャは、以下のように機能します。

  • 1 つの Zen アプリケーションは複数のページ・クラスから構成されています。

  • 便宜上、Zen アプリケーションにはアプリケーション・クラスを定義しておくこともできます。

  • アプリケーション・クラスがあると、各ページではそれを識別できます。

  • Zen ページはすべて、ページ・オブジェクト 1 つと複数のコンポーネント・オブジェクトのセット 1 つで構成されています。

  • ページのコンポーネントのセットは、ページ・クラスに組み込まれた XML のブロックを使用して定義されます。

  • また、ページ・クラスは、ユーザ・アクションへの応答のようなその他の動作を提供するメソッドのセットも定義できます。これらのメソッドは、コードの記述に応じて、ブラウザ内またはサーバ上で実行できます。

  • クライアントがページ要求を送信すると、ページ・オブジェクトとそれを構成するすべてのコンポーネント・オブジェクトが Caché サーバでインスタンス化されます。これがオブジェクト・ツリーです。

  • このオブジェクト・ツリーは、ユーザ・コードを使用して、Caché サーバ上でさらに変更できます。

  • オブジェクト・ツリーは、クライアントのブラウザでページを表示するために必要な CSS (スタイル・シート)、JavaScript (クライアント・ロジック)、および HTML (レイアウト指示) をすべて生成します。また、ページで XML または SVG を生成することもできます。

  • クライアントのブラウザで、JavaScript オブジェクトのセットとして、同じオブジェクト・ツリーが自動的に作成されます。サーバで変更が行われると、クライアント側オブジェクト・ツリーは、サーバ側オブジェクト・ツリーと同じになります。

  • これにより、このオブジェクト・ツリーのプロパティやメソッドがクライアントで使用できます。

  • ユーザがページと対話を進めるに従って、クライアント・オブジェクト・ツリーのさまざまなメソッドを呼び出すイベントが起動します。このようなメソッドの中にはブラウザで実行されるものもありますが、データベースにアクセスするもののように、サーバから実行するように定義できるものもあります。

  • Zen は、セッションのコンテキスト、セキュリティ、クライアントとサーバ間での変更の同期など、ページからサーバに対する呼び出しをすべて自動的に管理します。

  • ユーザは、複数のクラス (事前に構築済みのものとユーザ定義されたものの両方) をより大きな機能単位にまとめることで、Zen アプリケーションを作成できます。つまり、コンポーネントをページにまとめ、ページをアプリケーションにまとめます。アプリケーション・クラスを指定すると、アプリケーション全体に対する規約として機能し、すべてのページに適用されます。

プログラミングの詳細は、"Zen アプリケーションの開発" の “Zen アプリケーション” の章を参照してください。

実行時にクライアントとサーバで同期される Zen ページ
generated description: both object trees

Zen ページ

Zen ページ・クラスを構成するものは次のとおりです。

  • コンテンツ定義 — ページ・クラス内に埋め込まれた XML ブロック。これは、ページを構成するコンポーネントのセットとこれらのコンポーネントの設定を定義します。ページのコンテンツはプログラムを使用して定義することもできますが、ほとんどの場合、XML ブロックを使用するほうが便利です。

  • スタイルのオーバーライド — ページ・クラス内に埋め込まれた XML ブロック。このページにあるコンポーネントの CSS スタイルに対して、ページ固有に適用するオーバーライドを定義します。

  • イベント処理メソッド — 通常、ページ・クラスには、ユーザとコンポーネントの対話など、ページと関連するイベントを処理するためのメソッドが多数指定されています。このようなメソッドの中には、サーバ上で実行されるものもあれば、クライアント上で実行されるものもあります。詳細は後述します。

プログラミングの詳細は、"Zen アプリケーションの開発" の “Zen ページ” の章を参照してください。

Zen ページの外観と使用感の定義
generated description: page contents

Zen コンポーネント

Zen コンポーネント・クラスは、ページの動作とレイアウトを定義します。すべての Zen コンポーネントには、次の特性があります。

  • 実行時の状態と動作を決めるプロパティとメソッドのセットを定義します。

  • HTML が存在する場合、最初の HTML をどのように描画するかを定義します。クライアント側の動的な HTML を使用して、コンポーネント自体を描画するだけのコンポーネントを定義することもできます。

  • コンポーネントをページにどのように表示するかを指定した標準 CSS スタイル・シートを定義します。事前に構築済みのコンポーネントを修正しなくても、アプリケーションでこれらのスタイルを選択的にオーバーライドできます。

  • コンポーネントの外観や動作を調整する設定を定義します。Zen コンポーネント・クラスでは、所定の設定が正式に公開されます。したがって、Zen ページを設計しながら、容易にこれらの設定値を動的に変更できます。

  • 新しいコンポーネント・クラスを既存のクラスから派生させることができます。Zen で作成したクライアント JavaScript クラスには自動的に元のクラスが継承されます。

  • 新しいコンポーネントは、ページの XML コンテンツ定義で自動的に使用できます。

ネイティブ HTML コントロール用の単純なラッパから、機能満載のカレンダー・コントロールやグリッド・コントロールまで、コンポーネント・クラスにはさまざまな複雑さを持つものがあります。コンポーネントには、以下の専用のタイプがあります。

  • コントロールはデータを表示し、ユーザ入力を可能にします。テキスト・コントロールやボタン・コントロールなどがあります。

  • グループは、コンポーネントのセットで構成されます。グループ、タブ・グループ、メニュー、フォームなどがあります。

  • ペインには、クエリから取得したテーブルなど、さまざまな情報が表示されます。

  • その他のコンポーネントは、単にページ上にデータを表示します。

詳細は、次の章 “Zen コンポーネントの概念” を参照してください。

FeedbackOpens in a new tab