ãªããã¤ã³ã¿ã¼ããã ã¢ããªã±ã¼ã·ã§ã³ - Magic Software Enterprises
ãªããã¤ã³ã¿ã¼ããã ã¢ããªã±ã¼ã·ã§ã³ - Magic Software Enterprises
ãªããã¤ã³ã¿ã¼ããã ã¢ããªã±ã¼ã·ã§ã³ - Magic Software Enterprises
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
リッチインターネット<br />
アプリケーションの<br />
チュートリアル<br />
<strong>Magic</strong> xpa
本 マニュアルに 記 載 の 内 容 は、 将 来 予 告 なしに 変 更 することがあります。これらの 情 報 について MSE(<strong>Magic</strong> <strong>Software</strong> <strong>Enterprises</strong> Ltd.)およ<br />
び MSJ(<strong>Magic</strong> <strong>Software</strong> Japan K.K.)は、いかなる 責 任 も 負 いません。<br />
本 マニュアルの 内 容 につきましては、 万 全 を 期 して 作 成 していますが、 万 一 誤 りや 不 正 確 な 記 述 があったとしても、MSE および MSJ はい<br />
かなる 責 任 、 債 務 も 負 いません。<br />
MSE および MSJ は、この 製 品 の 商 業 価 値 や 特 定 の 用 途 に 対 する 適 合 性 の 保 証 を 含 め、この 製 品 に 関 する 明 示 的 、あるいは 黙 示 的 な 保 証 は<br />
一 切 していません。<br />
本 マニュアルに 記 載 のソフトウェアは、 製 品 の 使 用 許 諾 契 約 書 に 記 載 の 条 件 に 同 意 をされたライセンス 所 有 者 に 対 してのみ 供 給 されるもの<br />
です。 同 ライセンスの 許 可 する 条 件 のもとでのみ、 使 用 または 複 製 することが 許 されます。<br />
当 該 ライセンスが 特 に 許 可 している 場 合 を 除 いては、いかなる 媒 体 へも 複 製 することはできません。ライセンス 所 有 者 自 身 の 個 人 使 用 目 的<br />
で 行 う 場 合 を 除 き、MSE または MSJ の 書 面 による 事 前 の 許 可 なしでは、いかなる 条 件 下 でも、 本 マニュアルのいかなる 部 分 も、 電 子 的 、<br />
機 械 的 、 撮 影 、 録 音 、その 他 のいかなる 手 段 によっても、コピー、 検 索 システムへの 記 憶 、 電 送 を 行 うことはできません。<br />
サードパーティ 各 社 商 標 の 引 用 は、MSE および MSJ の 製 品 に 対 するコンパチビリティに 関 しての 情 報 提 供 のみを 目 的 としてなされるもの<br />
です。<br />
本 マニュアルにおいて、 説 明 のためにサンプルとして 引 用 されている 会 社 名 、 製 品 名 、 住 所 、 人 物 は、 特 に 断 り 書 きのないかぎり、すべて<br />
架 空 のものであり、 実 在 のものについて 言 及 するものではありません。<br />
<strong>Magic</strong> は <strong>Magic</strong> <strong>Software</strong> Japan K.K. の 登 録 商 標 です。<br />
<strong>Magic</strong> xpa は <strong>Magic</strong> <strong>Software</strong> <strong>Enterprises</strong> Ltd. のイスラエルその 他 の 国 での 商 標 または 登 録 商 標 です。<br />
<strong>Magic</strong> xpa Enterprise Studio、<strong>Magic</strong> xpa Enterprise Client、<strong>Magic</strong> xpa Enterprise Server および <strong>Magic</strong> xpa RIA Server は <strong>Magic</strong><br />
<strong>Software</strong> Japan K.K. の 商 標 です。<br />
一 般 に、 会 社 名 、 製 品 名 は 各 社 の 商 標 または 登 録 商 標 です。<br />
MSE および MSJ は、 本 製 品 の 使 用 またはその 使 用 によってもたらされる 結 果 に 関 する 保 証 や 告 知 は 一 切 していません。この 製 品 のもたら<br />
す 結 果 およびパフォーマンスに 関 する 危 険 性 は、すべてユーザが 責 任 を 負 うものとします。<br />
この 製 品 を 使 用 した 結 果 、または 使 用 不 可 能 な 結 果 生 じた 間 接 的 、 偶 発 的 、 副 次 的 な 損 害 ( 営 利 損 失 、 業 務 中 断 、 業 務 情 報 の 損 失 などの 損<br />
害 も 含 む)に 関 し、 事 前 に 損 害 の 可 能 性 が 勧 告 されていた 場 合 であっても、MSE および MSJ、その 管 理 者 、 役 員 、 従 業 員 、 代 理 人 は、い<br />
かなる 場 合 にも 一 切 責 任 を 負 いません。<br />
Copyright 2014 <strong>Magic</strong> <strong>Software</strong> <strong>Enterprises</strong> Ltd.and <strong>Magic</strong> <strong>Software</strong> Japan K.K. All rights reserved.<br />
2014 年 3 月 31 日
インタラクティブなリッチクライアントの 開 発 と 実 行<br />
1 概 要<br />
リッチクライアントとは 何 でしょうか? .....................................................................................................................1<br />
何 故 リッチクライアントを 使 用 するのでしょうか? .................................................................................................1<br />
2 リッチクライアントタスクの 作 成<br />
リッチクライアントでの Hellow World ........................................................................................................................3<br />
プログラムの 実 行 .............................................................................................................................................................4<br />
既 存 の 知 識 を 利 用 する ....................................................................................................................................................................4<br />
リッチクライアントの 照 会 リスト .................................................................................................................................4<br />
色 とフォントの 使 用 .........................................................................................................................................................5<br />
3 パフォーマンスについて<br />
基 本 的 な 構 成 要 素 .............................................................................................................................................................6<br />
データ 項 目 ........................................................................................................................................................................................7<br />
関 数 ....................................................................................................................................................................................................7<br />
ユーザ 定 義 関 数 ................................................................................................................................................................................7<br />
式 ........................................................................................................................................................................................................7<br />
データビュー .....................................................................................................................................................................8<br />
範 囲 と 位 置 付 式 ................................................................................................................................................................................8<br />
[ 代 入 ] 特 性 ......................................................................................................................................................................................9<br />
[リンク]コマンド ..........................................................................................................................................................................9<br />
タスクフローの 追 跡 .........................................................................................................................................................10<br />
フォームとコントロール .................................................................................................................................................10<br />
コントロールによる 他 の 問 題 ........................................................................................................................................................11<br />
ロジックユニット .............................................................................................................................................................11<br />
項 目 変 更 ...........................................................................................................................................................................................13<br />
混 在 ...................................................................................................................................................................................................14<br />
不 明 ....................................................................................................................................................................................................15<br />
ロジックユニット 内 の 処 理 コマンド .............................................................................................................................15<br />
イベント 実 行 ....................................................................................................................................................................................16<br />
[コール] 処 理 コマンド ..................................................................................................................................................................17<br />
リッチクライアントタスクの 設 定 .................................................................................................................................24<br />
4 複 数 のタスクで 動 作<br />
ウィンドウタイプ ............................................................................................................................................................................27<br />
他 のプログラムを 呼 び 出 す .............................................................................................................................................27<br />
呼 び 出 されたタスクの 初 期 化 ........................................................................................................................................................27<br />
バッチタスクの 呼 び 出 し ................................................................................................................................................................27<br />
コンテキスト 管 理 ............................................................................................................................................................................27<br />
コンテキスト 非 稼 働 タイムアウト ................................................................................................................................................28<br />
非 インタラクティブタスク .............................................................................................................................................29<br />
サブフォーム .....................................................................................................................................................................29<br />
サブフォームの 初 期 設 定 ................................................................................................................................................................29<br />
サブフォームの 再 表 示 ....................................................................................................................................................................29<br />
[タブサイクル] 特 性 ......................................................................................................................................................................30<br />
[ 出 力 先 ] 特 性 ..................................................................................................................................................................................30<br />
サブフォームの 終 了 ........................................................................................................................................................................31<br />
フレーム .............................................................................................................................................................................31<br />
フォームタイプ ................................................................................................................................................................................32<br />
フレームの 接 続 先 ............................................................................................................................................................................32<br />
フレーム 名 ........................................................................................................................................................................................33<br />
プログラムの 呼 び 出 し ....................................................................................................................................................................33<br />
トランザクション .............................................................................................................................................................33<br />
トランザクション 開 始 ....................................................................................................................................................................34<br />
トランザクションモード ................................................................................................................................................................34<br />
なし ....................................................................................................................................................................................................34<br />
i
インタラクティブなリッチクライアントの 開 発 と 実 行<br />
新 規 の 遅 延 トランザクション ........................................................................................................................................................34<br />
有 効 な 遅 延 トランザクション 内 ....................................................................................................................................................35<br />
オンラインとリッチクライアントでのトランザクションモードの 比 較 ................................................................................35<br />
5 リッチクライアントでの MDI<br />
6 ブラウザコントロール<br />
他 のアプリケーションへのアクセス .............................................................................................................................37<br />
[ブラウザ]コントロール ...............................................................................................................................................37<br />
ブラウザコントロール 特 性 .............................................................................................................................................38<br />
ブラウザコントロールイベント .....................................................................................................................................38<br />
ブラウザコントロール 関 数 .............................................................................................................................................38<br />
PDF の 表 示 ........................................................................................................................................................................39<br />
7 アプリケーションのモニタ<br />
デバッガ .............................................................................................................................................................................41<br />
サーバ 同 期 ........................................................................................................................................................................................41<br />
クライアントの 異 常 終 了 .................................................................................................................................................41<br />
ネットワーク 情 報 の 表 示 .................................................................................................................................................42<br />
8 実 行 環 境<br />
実 行 の 準 備 .........................................................................................................................................................................43<br />
リッチクライアントモジュール ....................................................................................................................................................43<br />
モジュール ........................................................................................................................................................................................44<br />
リッチクライアントの 必 要 条 件 .....................................................................................................................................45<br />
ClickOnce ...........................................................................................................................................................................................45<br />
.NET マニフェストファイル ..........................................................................................................................................................45<br />
<strong>Magic</strong> xpa のリッチクライアントインタフェースビルダ ..........................................................................................................45<br />
マニフェストファイルの 保 護 ........................................................................................................................................................46<br />
ユーザ 認 証 .........................................................................................................................................................................47<br />
アプリケーションの 起 動 時 に 環 境 変 数 を 取 得 する ....................................................................................................................47<br />
アプリケーションにパラメータを 渡 す ........................................................................................................................................47<br />
9 オフラインアプリケーションの 開 発<br />
10 モバイル 用 の RIA アプリケーションの 開 発<br />
ii
リッチインターネットアプリケーションのチュートリアル<br />
第 1 章 概 要<br />
<strong>Magic</strong> の 最 初 のリリースから 今 日 まで、この 開 発 ツールは、 常 に 高 い 生 産 的 と 保 守 性 を 提 供 していました。これを 実 現 している<br />
理 由 のうちの 1 つは、 製 品 の 設 計 (「1 つのコードを 複 数 の 方 法 で 利 用 する」パラダイム)に 組 み 入 れられます。この 方 法 は、モ<br />
デルの 動 作 で 確 認 することができます。そこでは、1 つのモデルを 作 成 することで、 多 くの 異 なる 種 類 のデータソースとプログ<br />
ラムの 作 成 時 に 使 用 することができます。データソースの 動 作 で 確 認 することもできます。データソースが 動 作 する 方 法 でそれ<br />
を 参 照 することもできます。それが ISAM や SQL、メモリテーブルまたは XML であるかどうかに 関 わらず、データソースはプ<br />
ログラムによって 同 じ 方 法 で 使 用 することができます。<br />
開 発 者 は、コードの 再 利 用 がどのよう 行 われているかを 詳 細 を 知 ることなくこの 機 能 をりようすることができます。そしてより<br />
短 い 期 間 に 学 習 することができます。プログラムコードは、OS や DBMS のどちらにも 依 存 していないため、プログラムはこの<br />
どちらに 対 して 異 なるバージョンに 対 応 させることができます。<br />
Web 向 けの 開 発 は、 常 にプログラミング 言 語 ( 例 えば、よく 利 用 される JavaScript など)の 習 得 が 必 要 となり、さらに Web ペー<br />
ジの 設 計 に 関 する 知 識 も 必 要 となります。<strong>Magic</strong> では、すべて 同 じスタジオで 行 われ、アプリケーションのフロントエンドは、<br />
他 のクライアント / サーバ 用 アプリケーションと 同 じ 方 法 で 設 計 することができます。<br />
開 発 者 が 今 まで 使 用 していたのと 同 じ 生 産 的 な 開 発 ツールを 使 用 して、Web 向 用 の 技 術 にアクセスすることができます。<br />
リッチクライアント・プログラミングは、 通 常 の <strong>Magic</strong> xpa のオンライン・プログラミングとよく 似 ています。そして、どれほ<br />
ど 簡 単 にこの 新 技 術 を 使 用 できるか 分 かると 思 います。<br />
それでは、 始 めましょう!<br />
リッチクライアントとは 何 でしょうか?<br />
アプリケーションをリッチクライアントにすることで、 共 通 のインターネットネットワークを 使 用 して 世 界 中 でアクセスするこ<br />
とができる、Web アプリケーションになります。<br />
<strong>Magic</strong> xpa はインターネット 対 応 のインタラクティブなアプリケーションを 迅 速 に 開 発 することができます。テーブルをもとに<br />
簡 単 に 開 発 する 機 能 を 使 用 することで、アプリケーションの 実 行 環 境 やコンポーネント、およびロジックを 簡 単 に 定 義 すること<br />
ができます。Java や JavaScript などのようなリッチクライアントのプログラミングに 関 する 知 識 もあまり 必 要 としません。<strong>Magic</strong><br />
xpa のリッチクライアント 開 発 機 能 では、 以 下 のことが 可 能 になります。<br />
• 容 易 なフォーム 設 計 ……<strong>Magic</strong> xpa Enterprise Studio 上 でリッチクライアントタスクのフォームを 設 計 することが 可 能<br />
な、 統 合 された[フォーム]エディタを 提 供 しています。 外 部 ツールは 必 要 ありません。<br />
• クライアント / サーバ 間 のロジックの 切 り 分 けの 自 動 化 …… <strong>Magic</strong> xpa は 定 義 内 容 に 基 づいて、ロジックがサーバまた<br />
はクライアントのどちらで 実 行 されるかを 自 動 的 に 決 定 します。<br />
• ローカルなクライアント OS 環 境 との 対 話 機 能 …… リッチクライアントを 使 用 することで、ローカルな 環 境 変 数 の 読 み<br />
込 みやローカルコマンドの 実 行 などローカル PC との 対 話 処 理 を 行 うことができます。<br />
何 故 リッチクライアントを 使 用 するのでしょうか?<br />
リッチクライアントの 実 行 機 能 には 以 下 のような 便 利 な 機 能 があります。<br />
• シンクライアント …… リッチクライアントを 使 用 することで、クライアント 側 に 専 用 のソフトウェアをインストールす<br />
る 必 要 がなくなります。サーバでクライアントで 必 要 なすべてのデータ、ロジック、およびフロー 管 理 モジュールを 提<br />
供 します。アプリケーションのすべてのソフトウェア 要 素 はサーバ 側 に 存 在 します。これにより、 管 理 や 保 守 が 容 易 と<br />
なり、 経 費 が 削 減 され 拡 張 性 が 向 上 します。<br />
• ブラウザを 使 用 しない …… リッチクライアントプログラムはインターネット 環 境 で 実 行 しますが Web ブラウザを 必 要<br />
としません( 最 初 の 起 動 時 のみ、InternetExploler または FireFox が 必 要 です)。<br />
• OS のネイティブなルック & フィール …… リッチクライアントは、.NET ベースで 作 成 されており、クライアント OS に<br />
基 づいたルック & フィールで 動 作 します。<br />
• 複 雑 なプログラム…… リッチクライアント・プログラムは、 標 準 的 なインターネット 上 のブラウザ・プログラムより 複<br />
雑 なものにすることができます。<strong>Magic</strong> xpa のオンライン・プログラムとほとんど 同 じように 動 作 します。<br />
• プラットホームに 依 存 しない …… リッチクライアントは、.NET フレームワーク 上 で 動 作 します。これは、1 つの OS ま<br />
たはバージョンに 依 存 しないことを 意 味 します。<br />
• 堅 固 …… リッチクライアント・プログラムは、 高 いボリューム・トランザクションと 高 いリクエスト 量 を 処 理 すること<br />
ができます。<br />
1
リッチインターネットアプリケーションのチュートリアル<br />
• コンテキスト 管 理 …… <strong>Magic</strong> xpa エンジンは、コンテキスト 管 理 機 能 を 各 ユーザに 提 供 するため、 各 ユーザに 対 して 独<br />
立 したセッションを 維 持 します。これは、<strong>Magic</strong> xpa のオンライン 環 境 と 同 じように 動 作 します。<br />
何 よりも、 大 きな 学 習 曲 線 を 必 要 とせずこの 機 能 を 得 ることができます。たとえ、 背 後 で 異 なる 機 能 を 実 現 していても、リッチ<br />
クライアント・プログラムは、 通 常 の <strong>Magic</strong> xpa のオンライン・プログラムと 同 じように 動 作 するように 設 計 されています。<br />
2
リッチインターネットアプリケーションのチュートリアル<br />
第 2 章 リッチクライアントタスクの 作 成<br />
リッチクライアント・タスクの 作 成 は、 非 常 に 簡 単 です。リッチクライアントの 特 性 のため、いくつかの 変 更 点 がありますが、<br />
基 本 的 には、<strong>Magic</strong> xpa のオンラインプログラムで 使 用 する 場 合 と 同 じ 方 法 になります。<br />
非 常 に 単 純 なリッチクライアント・タスクを 作 成 して、それがどのように 動 作 するかを 確 認 してみましょう。それから、より 複<br />
雑 なプログラムへ 進 めることで、 今 までとの 違 いを 学 ぶことができます。<br />
リッチクライアントでの Hellow World<br />
古 典 的 な 単 純 なプログラム(Hellow World )から 始 めましょ<br />
う。<br />
新 しいプログラムを 作 成 してください<br />
次 に、[タスクタイプ] 特 性 で「リッチクライアント」を 選<br />
択 します。<br />
これによって、プログラムはリッチクライアント・プログラ<br />
ムとして 実 行 されます。<br />
少 なくとも 一 つのデータ 項 目 を 定 義 します。<br />
これはリッチクライアント・タスクになるため、メイン<br />
フォームのデフォルトはリッチクライアント 表 示 になりま<br />
す。<br />
これは、リッチクライアント・プログラムで 使 用 される<br />
フォームのタイプです。<br />
次 に、[コントロール/ 項 目 ]パレットからテキストとデー<br />
タ 項 目 をドラッグして、オンラインタスクと 同 じように<br />
フォームを 作 成 してください。<br />
次 に、オンラインタスクと 同 じようにこのプログラムを 実 行<br />
します。<br />
3
リッチインターネットアプリケーションのチュートリアル<br />
プログラムの 実 行<br />
実 行 すると、 図 のようなウィンドウが 表 示 されます。これを 見 て 以 下 のことに 気 づくと 思 います。<br />
最 初 に、「Hellow World!」プログラムは、それ 自 身 が 独 立 したウインドウを 持 っています。MDI の 要 素 として 表 示 されません。<br />
これはスタンドアロンの .NET プログラムで、<strong>Magic</strong> xpa の 実 行 エンジンによって 直 接 実 行 している 訳 ではありません。 現 在 、あ<br />
なたの PC 上 で 実 行 していますが、インターネット 経 由 で 世 界 中 のどこからでも 実 行 させることができます。<br />
しかし、それは Web ブラウザのウインドウで 動 作 している 訳 ではありません。プログラムは、HTML で 記 述 されてはいません。<br />
これは .NET で 記 述 されています。そして、 実 行 するプラットホームに 対 応 した 標 準 的 なユーザインタフェースを 利 用 している<br />
ことを 意 味 します。Hello World プログラムは、.NET フレームワークをサポートする 様 々なプラットホーム 上 で 実 行 させること<br />
ができます。<br />
これは 非 常 に 異 なる 実 行 環 境 です。そして、これを 正 しく 動 作 させるために 必 要 なことががいくつかあります。しかし、プログ<br />
ラミングのほとんどは、 既 にご 存 知 の <strong>Magic</strong> xpa のプログラミングになります。<br />
既 存 の 知 識 を 利 用 する<br />
開 発 の 観 点 から、リッチクライアントの 利 点 は、プログラムがオンライン・タスクに 似 ていることです。 新 しいパラダイムを 学<br />
ぶ 必 要 はなく、すでにある 技 術 が 非 常 に 役 に 立 ちます。<br />
リッチクライアントの 照 会 リスト<br />
次 に、もう 少 し 難 しくいリッチクライアント・プログラムを 作 成 してみましょう。このセクションでは、レコード 表 示 するため<br />
の、ラインモードのプログラムを 作 成 します。<br />
Ctrl+G を 押 下 して APG を 実 行 し、[オプション]で「リッチクライアント」を 選 択 します。<br />
これで、プログラムを 実 行 すると、 全 ての 顧 客 リストが 表 示 されます。これは、リッチクライアントの .NET 環 境 で 動 作 します。<br />
4
リッチインターネットアプリケーションのチュートリアル<br />
タスクフローはどのように 動 作 するのでしょうか<br />
このタスクが 動 作 する 場 合 、 何 が 起 きているかを 確 認 してみましょう。<br />
実 際 は、「 顧 客 リスト」のクライアントプログラムはあなたのサーバ PC ではなく、どこか 別 の 場 所 で 実 行 するということを 心<br />
にとめておいてください。それは、プログラムが 直 接 データベースにアクセスしないことを 意 味 します。また、 必 ずしも、Windows<br />
環 境 で 実 行 している 訳 ではありません。しかし、リモートデスクトップのような「スクリーンスクラッパー」でもありません。<br />
その 代 わりに、いくつかの 処 理 はクライアント 環 境 で 実 行 されて、サーバ 環 境 も 実 行 されます。これが 全 て 自 動 的 に 実 行 される<br />
ため、 必 要 に 応 じてプログラムを 最 適 化 することができるように、 何 が 行 われているかを 知 っておくことが 重 要 です。<br />
実 行 箇 所<br />
説 明<br />
処 理 設 定 サーバ 新 規 のコンテキストこのタスクに 対 応 して 作 成 されます。<br />
タスク 前 サーバ クライアント・タスクが 実 行 される 前 に、サーバ 側 の <strong>Magic</strong> xpa エンジ<br />
ンがデータベーステーブルをオープンし、 変 数 項 目 を 初 期 化 し、 範 囲 値<br />
と 位 置 付 値 が 使 用 できるようにし、 最 初 のデータビューを 作 成 します。<br />
クライアント・タスクは、まだ 開 始 されていません。 全 ての 処 理 コマン<br />
ドはサーバで 実 行 されます。<br />
ユーザ 操 作 クライアント/サーバ ユーザがタスクにアクセスする 間 、 処 理 を 実 行 して、データを 表 示 する<br />
ために、.NET エンジンは 送 信 されたローカル XML を 使 用 して 動 作 し<br />
ています。<br />
しかし、 必 要 に 応 じて、いくつかの 処 理 はサーバでも 実 行 されます。<br />
ユーザが 操 作 中 に、[レコード 前 ]と[レコード 後 ]は、オンライン・<br />
タスクで 使 用 される 場 合 と 同 じ 基 準 で 実 行 されます。<br />
レコード 群 がタスク 初 期 化 中 に 送 られるため、クライアントはサーバか<br />
ら 毎 回 レコードを 取 得 する 必 要 はありません。<br />
タスク 後 クライアント/サーバ リッチクライアント・タスクは、すでに 終 了 しています。 定 義 された 処<br />
理 内 容 に 従 って、クライアントかサーバで 処 理 が 実 行 されます。[タス<br />
ク 後 ]が 終 了 した 後 、そこで、タスクをクローズするためサーバへのア<br />
クセスが 行 われます。<br />
いくつかのロジックユニットの 扱 いについては、 第 3 章 「パフォーマンスについて」で 説 明 します。<br />
色 とフォントの 使 用<br />
<strong>Magic</strong> xpa で 通 常 に 行 うように、 色 とフォントを 使 用 することができます。 色 とフォントは、クライアント・プログラムに 渡 さ<br />
れます。<br />
このプログラムが 指 定 したフォントにアクセスされない 場 合 、OS が 表 示 するデフォルトフォントを 使 用 します。<br />
異 なる OS 間 で 汎 用 的 に 使 用 される(または、 少 なくとも 将 来 的 にサポートされる)フォントを 選 ぶことによって、このような<br />
問 題 を 回 避 することができます。<br />
5
リッチインターネットアプリケーションのチュートリアル<br />
第 3 章 パフォーマンスについて<br />
リッチクライアントのパラダイムでは、 処 理 はサーバとクライアントで 分 担 されます。クライアント/サーバ 間 の 通 信 は、 圧 縮<br />
された XML データでやり 取 りされます。この 通 信 バスはボトルネックとなる 場 合 があり、これによってプログラムのパフォー<br />
マンスに 影 響 を 及 ぼすことになります。このため、 効 率 的 なプログラムを 作 成 するには、やり 取 りする 通 信 量 を 最 小 にする 必 要<br />
があります。<br />
たとえば、DBMS アクセスはサーバ 側 で 発 生 しますが、ユーザ 操 作 はクライアント 側 で 発 生 します。 理 想 的 には、 一 旦 データが<br />
クライアントに 送 信 された 場 合 、レコードがコミットされる 準 備 ができるまで、ユーザはサーバーにアクセスすることなく<br />
フィールドからフィールドにタブ 移 動 できるようにすることできます。しかし、[コントロール 後 ]で 評 価 される 条 件 内 で<br />
DBExist() 関 数 が 使 用 されている 場 合 、ユーザによるタブ 移 動 が 行 われる 度 に、サーバへのアクセスが 発 生 します。これによっ<br />
てユーザ 操 作 が 遅 くなります。<br />
ただし、 何 ができて、 何 ができないか、または 何 が 効 率 的 かを 覚 えておく 必 要 はありません。このようなことを 明 らかにするた<br />
めの <strong>Magic</strong> xpa では 明 示 することができるます。このセクションでは、それらのツールの 使 用 方 法 について 説 明 しています。<br />
ノート<br />
ログが 使 用 されると、 各 リクエスト 毎 にログが 書 き 込 まれるため、 多 くのリクエスト(バッチ 処 理 のような)<br />
を 実 行 すると、パフォーマンスが 遅 くなるかもしれません。<br />
以 下 の 内 容 で 説 明 しています。<br />
• フォームとコントロール<br />
• データビュー …… データビューは、タスクが 開 始 される 前 に 確 立 されます。そして、これはデータ 項 目 を 処 理 する 方 法<br />
に 影 響 を 及 ぼすことができます。<br />
• 関 数 …… 各 関 数 は、クライアント 側 またはサーバ 側 、ニュートラルに 分 かれます。<br />
• 式 …… データビューと 関 数 の 実 行 箇 所 は、 式 の 実 行 箇 所 に 影 響 します。<br />
• ロジックユニット …… ロジックユニットが 実 行 される 場 所 は、それがどこから 呼 び 出 されるか、または 使 用 される 処 理<br />
コマンドや 式 に 依 存 します。<br />
基 本 的 な 構 成 要 素<br />
<strong>Magic</strong> xpa のタスクは、3 つの 基 本 的 なセクションで 構 築 されています。リッチクライアントタスクでは:<br />
• データビューは、サーバ 上 で 構 築 されます。<br />
• フォームは、ユーザ 操 作 で 利 用 されます。<br />
• ロジックユニットによって、サーバ 側 で 実 行 されたり、クライアントで 実 行 されたり、 混 在 して 実 行 したりします。<br />
これらについて 順 に 説 明 していきます。<br />
しかし、データ 項 目 や 関 数 、ユーザ 関 数 、 式 は、これらのセクションの 全 てで 使 用 されています。<br />
• データ 項 目 は、データビューで 宣 言 されます。 通 常 、これらはニュートラルですが、サーバ 側 で 処 理 されるものもあり<br />
ます。<br />
• 関 数 は、<strong>Magic</strong> xpa に 組 み 込 まれているもので、これらの 機 能 によってクライアント 側 かサーバ 側 、またはニュートラル<br />
になります。<br />
• ユーザ 関 数 は 開 発 者 によって 作 成 されます。 実 行 する 場 所 は、 使 用 する 処 理 コマンドと 変 数 に 依 存 します。<br />
• 式 は、 上 記 の 項 目 を 使 用 して 構 築 されます。タスク 特 性 や、 範 囲 、 代 入 、 条 件 、コントロールとフォームで 使 用 される<br />
ため、これらは 特 に 重 要 です。<br />
このセクションでは、これらの 基 本 的 な 構 築 ブロックについて 説 明 しています。<br />
6
リッチインターネットアプリケーションのチュートリアル<br />
データ 項 目<br />
データ 項 目 は、[データビュー]エディタで 定 義 されます。これらは 通 常 ニュートラルです。データビューはサーバ 上 で 構 築 さ<br />
れますが、ユーザ 操 作 によって 値 は 変 更 されます。トランザクションがクローズされると、これらの 変 更 内 容 はクライアントで<br />
保 存 され、 適 切 な 時 間 が 経 過 すると 保 存 のために 送 り 返 されます。<br />
しかし、データ 項 目 によっては、クライアントで 変 更 される 度 に、サーバアクセスがすぐに 必 要 となります。このようなデータ<br />
項 目 は、サーバ 側 項 目 と 呼 ばれています。 上 の 画 像 で 示 すように、これらのデータ 項 目 には、 上 図 のように 番 号 カラムで「S」<br />
が 表 示 され、 色 分 けされます。<br />
データ 項 目 がリンクの 範 囲 / 位 置 付 で 使 用 されている 場 合 、このようなことが 発 生 します。 変 項 目 の 値 が 変 更 される 度 に、 再 リ<br />
ンクが 実 行 されます。このため、サーバへのアクセスが 発 生 します。 上 記 の 例 では、Customers のレコードに 対 するリンクで 使<br />
用 される Customer Code があります。この Customer Code が 式 で 使 用 される 場 合 、その 式 はサーバ 側 で 実 行 されます。<br />
リッチクライアント・プログラムで、データ・ビューにたくさんの 内 容 を 含 む BLOB 項 目 が 定 義 されている 場 合 、BLOB はサー<br />
バとクライアントの 間 で( 他 の 全 ての 変 数 と 同 じように) 渡 されます。これによってプログラムが 遅 くなるかもしれません。<br />
BLOB データを 使 用 しない 場 合 は、データビューに BLOB 項 目 を 定 義 しないことを 推 奨 します。または、それらがサーバ 側 で 使<br />
用 されるのであれば、これらを 処 理 する 新 しいバッチタスクを 作 成 しなければなりません。<br />
関 数<br />
まず、 関 数 を 見 てみましょう。これらは 式 で 使 用 され<br />
る 最 も 小 さな 構 成 要 素 です。そして、 式 がどちらで 実<br />
行 されるかは 使 用 される 関 数 (とデータ 項 目 )に 依 存<br />
します。 各 関 数 はクライアント 側 かサーバ 側 または、<br />
ニュートラルになります。<br />
関 数 の 一 覧 は、<strong>Magic</strong> xpa のリファレンスヘルプで 参<br />
照 することができます。しかし、 関 数 を 選 択 する 際 、<br />
関 数 一 覧 の 左 下 で 実 行 される 場 所 を 確 認 することがで<br />
きます。<br />
ここには、 以 下 のように 表 示 されます。<br />
• サーバ<br />
• クライアント<br />
• クライアント & サーバ(すなわちニュートラル)<br />
ユーザ 定 義 関 数<br />
開 発 者 に 定 義 される 関 数 は、 使 用 される 場 所 と 関 数 内 に 含 まれる 処 理 によって 評 価 されます。 関 数 がそれを 使 用 する 式 と 同 じタ<br />
スク 内 で 定 義 されている 場 合 は、 式 は 関 数 と 同 じ 場 所 で 実 行 されます。<br />
関 数 がメインプログラムまたはコンポーネントで 定 義 されている 場 合 、それを 使 用 する 式 は、 実 行 場 所 が 未 定 として 設 定 されま<br />
す。<br />
ユーザ 定 義 関 数 には、クライアント 側 とサーバ 側 の 両 方 の 処 理 コマンドを 含 めることはできません。<br />
式<br />
式 は、 一 つ 以 上 の 関 数 とデータ 項 目 で 構 成 されています。 式 の 実 行 場 所 は、 関 数 とデータ 項 目 の 実 行 場 所 に 依 存 します。<br />
7
リッチインターネットアプリケーションのチュートリアル<br />
式 はクライアント 側 で 実 行 されるか、サーバ 側 か、ニュートラルかまたは 混 在 かで 分 類 されます。<br />
• クライアント 側 の 式 は、クライアントでのみ 実 行 できます。<br />
• サーバ 側 の 式 は、サーバ 上 でのみ 実 行 できます。<br />
• しかし、ニュートラルな 式 は、どちらでも 実 行 することができます。これらは、 処 理 コマンドがサーバで 実 行 される 場<br />
合 は、サーバ 側 で 処 理 され、 処 理 コマンドがクライアントで 実 行 される 場 合 は、クライアント 側 で 処 理 されます。<br />
• 混 在 式 は、サーバ 側 とクライアント 側 の 要 因 が 含 まれています。<br />
どのような 式 が 使 用 されているかを 把 握 しておくことが 重 要 です。 式 は、タスク 内 の 多 くの 異 なる 場 所 で 使 用 されています。 式<br />
がサーバ 側 の 式 でクライアントで 評 価 される 場 所 で 使 用 されている 場 合 、 処 理 を 実 行 しようとすると、クライアントが 停 止 さ<br />
れ、リクエストはサーバ 側 に 送 り 返 されます。 場 合 によっては、 構 文 チェッカーによってエラーが 表 示 されます。 動 作 する 場 合<br />
もありますが、 遅 くなります。<br />
式 は、 実 行 される 場 所 に 応 じて 番 号 カラムにマークが 表 示 されま<br />
す。<br />
• S = サーバ 側<br />
• C = クライアント 側<br />
• M = 混 在<br />
• 空 白 = ニュートラル<br />
式 は、 処 理 コマンドや 特 性 、 代 入 値 で 使 用 されるため、 知 っておく 必 要 があります。 式 が 実 行 される 場 所 に 合 った 使 い 方 がさ<br />
れるように 確 認 してください。<br />
データビュー<br />
データビューは、サーバ 上 で 構 成 されます。 使 用 される 実 際 のレコードとフィールドは、クライアントに 送 信 される XML に 含<br />
まれます。<br />
しかし、 例 えば、リッチクライアントのデータビューに 影 響 を 及 ぼす 設 定 として 以 下 のものがあります。<br />
• データ 項 目<br />
• 範 囲 と 位 置 付<br />
•[ 代 入 ] 特 性<br />
•[リンク]コマンド<br />
範 囲 と 位 置 付 式<br />
範 囲 と 位 置 付 式 は( 代 入 式 と 同 じように)、クライアントで 評 価 されたり、サーバ 側 で 評 価 されたりします。したがって、 範 囲<br />
と 位 置 付 で 使 用 される 式 は、ニュートラルである 必 要 があります。<br />
たとえば、この 例 では、 範 囲 で MarkedTextGet() 関 数 を 使 用 しています。サーバ 側 の 特 性 でクライアント 側 関 数 を 使 用 している<br />
ので、この 場 合 は 構 文 エラーになります。<br />
8
リッチインターネットアプリケーションのチュートリアル<br />
この 問 題 を 解 決 するには、 適 当 な 関 数 を 使 用 して 変 数 項 目 を 更 新 する 親 タスクを 作 成 します。 次 に、 直 接 その 変 数 を 参 照 するよ<br />
うにするか、 範 囲 に 使 用 されるパラメータとして 渡 すことができます。<br />
[ 代 入 ] 特 性<br />
クライアント 側 の 式 を[ 代 入 ] 特 性 で 使 用 することはできません。[ 代 入 ] 特 性 にクライアント 側 の 式 を 使 用 する 必 要 がある 場<br />
合 、[レコード 前 ]でこの 式 を 使 用 して 更 新 した 項 目 を 定 義 するようにしてください。<br />
ノート<br />
( 例 えば:タスクが 登 録 モードの 場 合 の 実 項 目 の[ 代 入 ] 特 性 のように )[ 代 入 ] 特 性 が 実 行 された 場 合 に、 常<br />
にサーバへのアクセスが 発 生 するようであれば、サーバ 側 の 式 を 使 用 することは 可 能 ですが 推 奨 しません。<br />
たとえば、この 例 では、3 つの 変 数 項 目 が 定 義 あり[ 代 入 ] 特 性 が 定 義 されています。<br />
• 最 初 の 変 数 はニュートラルな 式 を 使 用 しています。このため、 左 側 にマークが 表 示 されていません。これは、 正 しい 使<br />
い 方 です。<br />
• 2 番 目 の[ 代 入 ] 特 性 には Menu() 関 数 が 使 用 されています。これはクライアント 側 の 式 になります。この 場 合 、 構 文 エ<br />
ラーになります。<br />
• 3 番 目 の[ 代 入 ] 式 には CallProg() 関 数 が 使 用 されています。これはサーバ 側 の 式 になります。この 場 合 も、 構 文 チェッ<br />
クで 警 告 が 表 示 されます。<br />
[ 代 入 ] 特 性 にクライアント 側 またはサーバ 側 の 式 を 使 用 する 必 要 がある 場 合 、 変 数 項 目 を 使 用 する 必 要 があります。<br />
• サーバ 側 の 式 については、サーバへの 余 分 なアクセスを 避 けるために[タスク 前 ]で 変 数 を 更 新 をすることを 推 奨 します。<br />
• クライアント 側 の 式 については、[レコード 前 ]で 更 新 してください。<br />
新 しく 作 成 されたレコードの 初 期 値 を 設 定 する 場 合 は、[レコード 前 ]で 更 新 しなければなりません。その 際 、[ 条 件 ] 特 性 で<br />
Stat(0,'C'MODE) を 設 定 してください。<br />
[リンク]コマンド<br />
[リンク]コマンドは 手 続 き 的 なコマンドではありませんが、サーバ 側 のコマンドです。これは、リンクが 再 計 算 されるたびに、<br />
リッチクライアントが 新 しいリンクを 実 行 するためにサーバにアクセスすることを 意 味 します。<br />
ノート<br />
[リンク]コマンドによる 再 計 算 によって、リッチクライアント・モジュールは、サーバエンジンを 呼 び 出 し、<br />
新 しいレコードを 取 得 します。これは、[リンク]コマンドを 多 用 するとサーバ 側 へのアクセス 負 荷 が 高 くなる<br />
場 合 があることを 意 味 します。したがって、[リンク]コマンドの 使 用 を 制 限 することを 推 奨 します。 代 わりに<br />
なります。<br />
代 わりに[リンク 結 合 ]コマンドを 使 用 することもできます。この 場 合 、コマンドはメインソースに 定 義 され<br />
たデータベースからデータを 取 得 されて、データのかたまりとして、リッチクライアント・モジュールに 送 ら<br />
れます。<br />
9
リッチインターネットアプリケーションのチュートリアル<br />
タスクフローの 追 跡<br />
以 上 のように、リッチクライアントの 処 理 コマンドは、ややシームレスになっています。ロジックが 実 行 している 箇 所 について<br />
は、ユーザの 立 場 からは 簡 単 には 説 明 できません。<br />
しかし、 開 発 者 としては、プログラムを 最 適 化 することができるように、これを 知 っておく 必 要 があります。<br />
普 通 のオンライン・プログラミングで 使 用 する 場 合 とほぼ 同 じような 処 理 コマンドと 関 数 を 使 用 することができます。 大 部 分 の<br />
ロジックは、クライアントで 実 行 されます。しかし、 一 部 はサーバで 実 行 されるものもあります。<br />
クライアントで 何 が 実 行 しているかを 確 認 するには<br />
ロジックユニットの 左 側 には、1 文 字 のコードが 表 示 されます。このコードは、 処 理 がどこで 実 行 するかについて 示 しています。<br />
• S = サーバ<br />
• C = クライアント<br />
• M = 混 在<br />
• U= 不 明<br />
• E= エラー<br />
• 空 白 = ニュートラル<br />
ノート<br />
コマンド 行 が 実 行 される 場 所 を 視 覚 的 に 表 示 するために 色 分 けされます。サーバで 実 行 される 行 は、 開 発 基 本<br />
色 の #10 で 表 示 され、デフォルトではピンクになっています。ニュートラルな 行 は、 現 在 実 行 している 場 所 で<br />
そのまま 実 行 されるため、 直 前 の 行 と 同 じ 色 になります。<br />
処 理 コマンドの 実 行 条 件 が False に 設 定 されている 場 合 は、 実 行 されないため、 実 際 のフローは 異 なるかもしれ<br />
ません。<br />
フォームとコントロール<br />
フォームとコントロールは、ユーザとの 対 話 用 で、クライアント 側 の 式 を 使 用 します。<br />
ここでの 問 題 は、[コントロール 特 性 ]に 関 係 します。たとえば、コントロールが 表 示 されるかどうか、あるいは、 使 用 可 能 か<br />
どうかを 制 御 したり、コントロールのフォントや 色 を 変 更 する 特 性 があります。これらの 特 性 を 式 を 使 用 して 設 定 する 場 合 、 式<br />
は 絶 えず 再 評 価 されます。<br />
サーバ 側 の 式 が 特 性 のどれか 1 つでも 使 用 されると、コントロールが 評 価 されたたびに、サーバへのアクセスが 発 生 してしまい<br />
ます。したがって、コントロールにサーバ 側 の 式 を 使 用 することができません。このような 場 合 、 構 文 エラーが 発 生 します。<br />
サーバ 側 の 式 は、"S" が 表 示 されます。<br />
10
リッチインターネットアプリケーションのチュートリアル<br />
サーバ 側 の 式 を 使 用 する<br />
たとえば、この 例 では、CallProg() はサーバ 側 の 関 数<br />
のため、クライアント 側 のコントロールの 特 性 では 使<br />
用 できません。この 場 合 、 構 文 エラーが 発 生 します。<br />
この 問 題 を 解 決 するには、 式 の 値 を 保 持 するために 変 数 項 目 を 使 用 して、[タスク 前 ]でそれを 更 新 するようにしてください。<br />
[タスク 前 ]はサーバで 実 行 されるため、この 処 理 コマンドによってサーバへの 追 加 されたアクセスは 発 生 しません。<br />
コントロールによる 他 の 問 題<br />
サブフォーム<br />
サブフォームを 使 用 している 場 合 、フォームに 関 する 別 の 問 題 があります。サブフォームを 使 用 すると、 第 4 章 「 複 数 のタスク<br />
で 動 作 」で 説 明 しているように、サブフォームは 特 定 の 規 則 に 従 って 再 表 示 されます。<br />
[テーブル]コントロール<br />
表 データがある 場 合 、テーブルの 全 ての 行 がタスク 開 始 前 に 読 み 込 まれるように、タスクの[ビュー 事 前 読 込 ] 特 性 を 使 用 する<br />
ことができます。ユーザがテーブルを 表 示 している 場 合 、この 設 定 によってサーバへのアクセス 回 数 が 最 小 になります。この 機<br />
能 の 利 便 性 は、テーブルのサイズに 依 存 します。テーブルが 大 きすぎると、 最 初 の 読 み 込 み 時 間 が 大 きく、 不 便 になるかもしれ<br />
ません。<br />
[ツリー]コントロール<br />
タスクが 開 始 される 前 に、サーバからツリーのすべてのレコードを 取 得 するために、[ツリー]コントロールの[ノード 事 前 読<br />
込 ] 特 性 を 使 用 することができます。これによって、サーバへのアクセスを 最 小 にすることができます。しかし[テーブル]コ<br />
ントロールと 同 様 に、データセットが 大 き 過 ぎる 場 合 、 最 初 の 読 み 込 み 時 間 が、より 速 いツリー 操 作 の 利 便 性 を 上 回 るかもしれ<br />
ません。<br />
ロジックユニット<br />
すでにお 分 かりのように、ロジックユニットの 多 くは、どこで 実 行 されるかは、 処 理 コマンドに 依 存 します。しかし、ロジック<br />
ユニットのいくつかは、 実 行 場 所 が 固 定 されています。<br />
11
リッチインターネットアプリケーションのチュートリアル<br />
タスク 前 - サーバ<br />
タスクの 初 期 設 定 を 行 う 時 に、[タスク 前 ]が 実 行 されます。ここは、 純 粋 なサーバ 側 のロジックユニットです。そして、クラ<br />
イアント 側 の 処 理 コマンドは、 実 行 されません。<br />
クライアント・タスクが 開 始 される 前 に、サーバ 側 の <strong>Magic</strong> xpa エンジンは、データベーステーブルをオープンし、 変 数 項 目 を<br />
初 期 化 して、 範 囲 と 位 置 付 値 を 使 用 して、 最 初 のデータビューを 作 成 します。<br />
クライアント・タスクは、まだ 開 始 されていません。 処 理 コマンドは、サーバで 実 行 されます。<br />
クライアント 側 のプログラムとデータビューのデータは、 小 さく、 暗 号 化 された XML データにパッケージ 化 されます。そして、<br />
それはクライアント 側 にインターネット 経 由 で 送 られます。<br />
[タスク 前 ](タスクの 初 期 化 段 階 )の 実 行 が、ほとんどがサーバ 側 での 実 行 されることを 知 っておいてください。これは、 初 期<br />
化 段 階 では、リッチクライアントを 呼 び 出 す[コール] 処 理 コマンドが 以 下 のルールに 従 っていることを 意 味 しています。<br />
すべての[コール] 処 理 コマンドは 指 定 された 時 間 に 実 行 されます、しかし、 呼 び 出 されたタスクのウィンドウは[タスク 前 ]<br />
の 完 了 後 にクライアント 側 で 開 きます。 他 の 処 理 コマンドが 実 行 されたあとに、すべての[コール] 処 理 コマンドが 実 行 される<br />
ことを 意 味 します。<br />
クライアント 側 の 処 理 コマンドを 使 用 する<br />
「タスク 前 ]は、 常 にサーバ 側 で 実 行 されるため、ここでクライアント 側 の 関 数 を 使 用 することができません。この 例 では、[タ<br />
スク 前 ]でクライアント 側 の 関 数 (CtrlGoTo())を 使 用 しています。これは、 利 用 できません。<br />
この 問 題 に 対 応 するには、サーバ 側 のロジックユニットで、[ウェイト] 特 性 を「No」に 設 定 した[イベント 実 行 ] 処 理 コマン<br />
ドを 使 用 することです。この 場 合 、サーバ 側 のロジックユニットは、サーバで 実 行 されます。しかし、イベントそのものはクラ<br />
イアントで 実 行 されます。<br />
[タスク 前 ]で 実 行 箇 所 不 明 のイベント<br />
[タスク 前 ]で[イベント 実 行 ] 処 理 コマンドを 使 用 するには 注 意 する 必 要 があります。イベントが 発 行 された 場 合 、 構 文 チェッ<br />
カーはイベントがどこで 処 理 されるかを 必 ずしも 把 握 できません。「[タスク 前 ]で 実 行 箇 所 不 明 のイベント」(ページ 12)でこ<br />
の 問 題 に 対 応 しています。<br />
[タスク 後 ]<br />
タスクが 終 了 する 際 、[タスク 後 ]ロジックユニットが 実 行 されます。これは、 定 義 された 処 理 コマンドによってサーバ 側 かク<br />
ライアント 側 で 実 行 されます。<br />
タスクの 呼 び 出 しはすでに 終 了 しているため、[タスク 後 ]から 呼 び 出 された 非 モーダルのフォームで 定 義 されたリッチクライ<br />
アント・タスクは 表 示 されません。[タスク 後 ]ロジックユニットから 呼 び 出 されたリッチクライアントタスクは、サーバ 側 で<br />
実 行 され、すぐに 終 了 します。つまり、タスクの[タスク 前 ]と[タスク 後 ]のロジックユニットは、サーバ 側 で 自 動 的 に 実 行<br />
されます。<br />
しかし、 呼 ばれたタスクが 並 行 起 動 の 場 合 、この 制 限 はありません。<br />
12
リッチインターネットアプリケーションのチュートリアル<br />
項 目 変 更<br />
ユーザがレコードを 参 照 する 度 に、[ 項 目 変 更 ]ロジックユニットが 実 行 されます。ロジックユニットはニュートラルです。し<br />
かし、この 中 にはサーバ 側 の 処 理 コマンドを 使 用 しないことを 推 奨 します。これによって、データ 項 目 が 変 更 されるたびに、<br />
サーバにアクセスされることを 回 避 できます。<br />
項 目 変 更 には、2 つの 段 階 があります。 再 計 算 とコントロールの 変 更 です。このため、サーバへのアクセスが 行 われると、この<br />
例 のように、アクセスが 2 回 発 生 します。したがって、クライアント 側 またはニュートラルな 処 理 コマンドだけを 使 用 するよう<br />
にしなければなりません。<br />
コントロールとレコードレベル<br />
[コントロール 前 / 後 ]と[レコード 前 / 後 ]は、オンライン・プログラムと 同 じ 規 則 に 従 って 動 作 します。ユーザがレコード<br />
の 操 作 をしている 場 合 、[コントロール 前 / 後 ]と[レコード 前 / 後 ]はコントロールとレコードの 間 でユーザが 操 作 する 度 に<br />
実 行 されます。この 種 の 操 作 は、クライアント 側 で 実 行 され、サーバ 側 での 操 作 を 必 要 としません。<br />
したがって、[ 項 目 変 更 ]ロジックユニットのように、これらのロジックユニットは、クライアント 側 またはニュートラルな 処<br />
理 コマンドのみを 定 義 するようにしてください。この 例 では、[レコード 前 ]と[コントロール 前 ]でサーバ 側 の 処 理 コマンド<br />
が 定 義 されています。これらは、できれば、[タスク 前 ]に 移 動 してください。<br />
エラーレベル<br />
対 応 する DBMS エラーが 発 生 した 場 合 、エラーレベルのロジックユニットが 実 行 されます。このロジックユニットは、サーバ<br />
で 実 行 されます。<br />
確 認 ダイアログボックスを 表 示 するロールバックオプションは、リッチクライアントでは 実 行 されません。これは、ロールバッ<br />
ク 関 数 の 最 初 のパラメータが 無 視 されることを 意 味 します。また、エラーイベントのメッセージ 特 性 も、 無 視 されます。<br />
このため、ユーザにエラーを 表 示 させたい 場 合 は、 非 同 期 イベント(ウェイト =No)を 使 用 してください。[エラー]ロジック<br />
ユニットの 終 了 後 、イベントが 実 行 される 要 因 となります。<br />
エラー 処 理 の 詳 細 については、<strong>Magic</strong> xpa のリファレンスヘルプのエラー 処 理 のセクションを 参 照 してください。<br />
システムとユーザイベント<br />
システムイベントとユーザイベントに 対 するイベントロジックユニットがどこで 実 行 されるかは、 定 義 された 処 理 コマンドに 依<br />
存 します。 簡 単 な 例 を 見 てみましょう。<br />
13
リッチインターネットアプリケーションのチュートリアル<br />
ニュートラル 側<br />
どちらからでも 実 行 することができます。このようなロジックユニットは、ニュートラルとして 扱 われます。 呼 び 出 された 場 所<br />
で 実 行 され、 相 手 側 と 通 信 する 必 要 がありません。[イベント]ロジックユニットの 行 番 号 にはコードは 表 示 されません。[ 項 目<br />
更 新 ] 処 理 コマンドも、ニュートラルとして 扱 われます。これは、どちらからでも 実 行 することができます。<br />
クライアント 側<br />
次 に、[エラー] 処 理 コマンドが 追 加 されると、[イベント]ロジックユニットはクライアント 側 で 実 行 されるようになり、「C」<br />
というコードが 表 示 されます。エンドユーザーにメッセージを 表 示 する 必 要 があるため、[エラー] 処 理 コマンドはクライアン<br />
トでのみ 実 行 することができるからです。[ 項 目 更 新 ] 処 理 コマンドはニュートラルで、 呼 び 出 された 場 所 で 実 行 されます。[エ<br />
ラー] 処 理 コマンドを 実 行 する 必 要 がある 場 合 、(すなわち、[エラー] 処 理 コマンドの 実 行 条 件 が True と 評 価 された 場 合 )、[エ<br />
ラー] 処 理 コマンドはクライアントで 実 行 されます。<br />
代 わりに、バッチタスクへの 呼 び 出 しが 追 加 されると、[イベント]ロジックユニットはサーバ 側 となり、「S」というコードが<br />
表 示 されます。これは、バッチタスクが 常 にサーバで 実 行 されるからです。<br />
混 在<br />
しかし、2 つの 処 理 が 混 在 している 場 合 はどうなるでしょうか?<br />
クライアント 側 とサーバ 側 の 両 方 の 処 理 コマンドが 使 用 された 場 合 、イベントは 混 在 しているものとして 扱 われ、「M」という<br />
コードが 表 示 されます。クライアントとサーバ 間 の 通 信 によってタスクの 動 作 が 遅 くなる 可 能 性 があるため、 処 理 コマンドを 混<br />
在 して 使 用 することはできるだけ 避 けてください。<br />
14
リッチインターネットアプリケーションのチュートリアル<br />
不 明<br />
処 理 コマンドによっては、どちらで 実 行 されるか 判 らないものもあります。 例 えば、[イベント 実 行 ] 処 理 コマンドは、このタ<br />
スクでは、 親 タスクか、メインプログラム、または、コンポーネントで 実 行 されるかもしれません<br />
ロジックユニット 内 の 処 理 コマンド<br />
各 処 理 コマンドは、サーバ 側 かクライアント 側 、またはニュートラルか 不 明 として 扱 われます。ニュートラルな 処 理 コマンド<br />
は、サーバかクライアントのどちらかで 実 行 されます。<br />
処 理 コマンド 実 行 場 所<br />
エラー クライアント 常 にクライアントで 実 行<br />
コール バッチ サーバ 常 にサーバで 実 行<br />
[ 出 力 先 ] 特 性 を 使 用 クライアントへの 即 時 アクセスが、 現 在 サブフォーム<br />
上 で 実 行 しているタスクを 閉 じるためにある 場 合 、 混<br />
在 と 扱 われます。<br />
[ウィンドウタイプ]が<br />
「モーダル」<br />
混 在<br />
クライアントとサーバで 部 分 的 に 実 行 します。これは<br />
タスクを 読 み 込 まむためにサーバにアクセスして、そ<br />
れを 開 始 するためにクライアントに 制 御 が 移 ります。<br />
そして、 呼 び 出 しタスクは 停 止 します。<br />
[ウィンドウタイプ]が<br />
「 非 モーダル」<br />
サーバ<br />
タスクを 読 み 込 むためにサーバにアクセスします。 次<br />
に、 呼 び 出 されたタスクの 実 行 を 待 つことなく、 処 理<br />
が 継 続 します。<br />
外 部 コール UDP サーバ 処 理 の 一 部 はサーバ 側 で 実 行 されます。<br />
Web サービス サーバ 処 理 の 一 部 はサーバ 側 で 実 行 されます。<br />
OS コマンド 状 況 依 存 [ 実 行 ] 特 性 に 依 存 します。<br />
COM なし サポートしていません。<br />
アクション 状 況 依 存 評 価 される 処 理 に 依 存 します。<br />
ブロック 状 況 依 存 ブロック 式 に 依 存 します。<br />
項 目 更 新 状 況 依 存 更 新 されるデータ 項 目 と 項 目 で 使 用 される 式 に 依 存 し<br />
ます。<br />
イベント 実 行 状 況 依 存 発 行 されるイベントに 対 応 するロジックユニットに 依<br />
存 します。<br />
フォーム なし サポートしていません。<br />
サーバ 側 でで 帳 票 出 力 処 理 を 実 行 して、 結 果 をクライ<br />
アントに 表 示 することができます。<br />
「PDF を 表 示 する」を 参 照 してください。<br />
処 理 コマンドは、それらの 特 性 ( 例 えば、 条 件 )で 使 用 される 式 にも 影 響 します。<br />
15
リッチインターネットアプリケーションのチュートリアル<br />
イベント 実 行<br />
ニュートラル<br />
通 常 、<strong>Magic</strong> xpa は、[イベント 実 行 ] 処 理 コマンドがどこで 処 理 されるかを 見 分 けることができます。たとえば、この 例 では、<br />
イベントはこのタスク 内 で 処 理 されます。F12 を 押 下 した 場 合 のロジックユニットはニュートラルで、[ 伝 播 ] 特 性 を「No」 設<br />
定 すると、[イベント 実 行 ] 処 理 コマンドもニュートラルになります。<br />
サーバ 側<br />
しかし、F12 を 押 下 することで 実 行 されるロジックユニットがサーバ 側 である 場 合 、[イベント 実 行 ] 処 理 コマンドはサーバ 側<br />
で 実 行 されます。この 場 合 、F11 に 対 するロジックユニットもサーバ 側 になります。<br />
不 明<br />
この 例 では、F12 に 対 応 するイベントロジックユニットは、タスク 内 に 存 在 していません。スタジオは、[イベント 実 行 ] 処 理<br />
コマンドが 実 行 時 にどちらで 処 理 されるかを 判 断 できないため、 不 明 として 扱 われます。これは、 以 下 のような 場 合 において 発<br />
生 します。<br />
• イベントのロジックユニットが、 異 なるタスクに 定 義 されている 場 合 。 実 行 時 にどのタスクがイベントを 処 理 するかは<br />
開 発 時 には 判 断 できません。このような 場 合 、 主 に 実 行 時 のタスクツリーに 依 存 します。<br />
• 現 在 のタスクのイベントに 対 するロジックユニットは、[ 伝 播 ] 特 性 が「Yes」に 設 定 されている 場 合 。 実 行 中 は、タス<br />
クがイベントをどこで 処 理 するかは、 開 発 時 には、 判 断 できません。この 場 合 も、 主 に 実 行 時 のタスクツリーに 依 存 し<br />
ます。<br />
[イベント 実 行 ] 処 理 コマンドでのメモ:<br />
• [イベント 実 行 ] 処 理 コマンドの[ウェイト] 特 性 が「No」に 設 定 されている 場 合 、サーバ 側 の 処 理 コマン<br />
ドの 定 義 行 内 の 一 部 でないならば、 全 てのイベントの 処 理 の 後 で 実 行 されるため、(どちらの 側 にも 即 時 に<br />
アクセスが 発 生 しないため)それはニュートラルとして 扱 われます。<br />
• サーバ 側 の 処 理 の 行 内 に[イベント 実 行 ] 処 理 コマンドが 含 まれている 場 合 、 実 行 時 にエラーが 発 生 する 場<br />
合 があります。<br />
16
リッチインターネットアプリケーションのチュートリアル<br />
[タスク 前 ]の[イベント 実 行 ] 処 理 コマンド<br />
[タスク 前 ]は、サーバ 側 で 常 に 実 行 されます。<br />
[タスク 前 ]でクライアント 側 の 処 理 コマンドを 入 力 すると、エラーが 発 生 します。<br />
サーバ 側 のロジックユニットには、クライアント 側 の 処 理 コマンドを 含 めることができません。[タスク 前 ]の 後 でこの 処 理 を<br />
実 行 するために、[ウェイト] 特 性 を「No」に 設 定 することができます。<br />
[タスク 前 ]に 不 明 の 処 理 コマンドが 定 義 されている 場 合 、 警 告 が 発 生 します。<br />
不 明 の 処 理 コマンドがサーバ 側 のロジックユニットに 定 義 されていて、 実 行 時 にクライアント 側 で 評 価 されたる 場 合 、エラーが<br />
発 生 する 点 に 注 意 してください。<br />
その 際 、 不 明 の 処 理 コマンドが 本 当 はサーバ 側 であることを 確 認 するかどうかは、 開 発 者 に 依 存 します。<br />
しかし、[イベント 実 行 ] 処 理 コマンドの[ウェイト] 特 性 を「No」に 設 定 することで 問 題 は 解 決 します。サーバ 側 のイベント<br />
がサーバで 発 生 した 後 、クライアント 側 のイベントはクライアントで 発 生 します。<br />
[コール] 処 理 コマンド<br />
リッチクライアント・タスクは、オンライン・プログラムと 同 じような 方 法 で、 別 のリッチクライアント・タスクを 呼 び 出 すこ<br />
とができます。その 際 、[コール] 処 理 コマンドを 使 用 して、パラメータを 渡 すことができます。 呼 び 出 されたプログラムは、<br />
サブフォームまたはフレームセット 内 に 表 示 したり、 個 別 のウインドウを 表 示 して 実 行 したり、モーダルウィンドウを 表 示 して<br />
実 行 したり、 並 行 に 実 行 されることもできます。<br />
別 のリッチクライアント・タスクを 呼 び 出 す<br />
リッチクライアント・タスクが 別 のリッチクライアントタスクを 呼 び 出 すとき、 混 在 処 理 として 扱 われます。サーバはタスクを<br />
パッケージ 化 する 必 要 があります。そして、クライアントで 実 行 する 必 要 があります。<br />
バッチタスク<br />
バッチタスクは、サーバ 側 で 処 理 されます。このため 例 えば、 複 雑 な 帳 票 を 作 成 したい 場 合 、 帳 票 出 力 用 のバッチタスクはサー<br />
バ 側 で 実 行 されます。 最 終 結 果 としての 帳 票 は、バッチタスクが 終 了 した 後 、クライアントで 表 示 させることができます。<br />
17
リッチインターネットアプリケーションのチュートリアル<br />
バッチタスクへの 呼 び 出 しは、 常 に 同 期 型 です。これは、クライアントはバッチタスクが 完 了 するまでの 待 つことを 意 味 してい<br />
ます。リッチクライアントからバッチタスクを 呼 び 出 す 場 合 は、 開 始 と 停 止 を 行 うためのダイアログはサポートされません。<br />
[タスク 前 ]の[コール] 処 理 コマンド<br />
[タスク 前 ]からリッチクライアント・プログラムを 呼 び 出 そうとすると、エラーが 発 生 します。[タスク 前 ]では、クライアン<br />
ト 側 のプログラムを 呼 び 出 すことができません。<br />
しかし、「クライアント 側 の 処 理 コマンドを 使 用 する」(ページ 12)で 説 明 しているように、クライアント 上 でタスクが 開 始 さ<br />
れた 時 点 で 実 行 されるプログラムを 呼 び 出 すようにするには、[イベント 実 行 ] 処 理 コマンドの[ウェイト] 特 性 を「No」に 設<br />
定 して 使 用 することで 可 能 になります。<br />
[コール OS] 処 理 コマンド<br />
[コール OS] 処 理 コマンドは、 興 味 深 い 処 理 コマンドです。これは、OS のネイティブなコマンドを 呼 び 出 します。1 つの PC 上<br />
で 実 行 している 場 合 は、 明 確 に 理 解 できるはずです。しかし、リッチクライアント 環 境 では、どの 様 な 意 味 を 持 つのでしょう<br />
か。 実 際 は、クライアント、またはサーバ 上 で OS コマンドを 実 行 したいかもしれません。<br />
どのような 環 境 でコマンドを 処 理 するかを 指 定 することは、 開 発 者 に 依 存 します。<br />
サーバ 側 で 呼 び 出 す<br />
ここでは、 簡 単 な OS コマンドとして、 現 在 のディレクトリを 表 示 し、それを 一 時 的 なファイルにリダイレクトする 例 を 示 して<br />
います。ここでの 問 題 は、サーバ PC、または、クライアント PC のどちらのディレクトリを 表 示 するのでしょうか? これは、<br />
[ 実 行 ] 特 性 を 設 定 することで 開 発 者 によって 制 御 できます。ここでは、サーバ 側 に 設 定 されています。これによって、この 処<br />
理 コマンドはサーバ 側 の 処 理 コマンドとなります。<br />
クライアント 側 で 呼 び 出 す<br />
ここでは、 同 じ 処 理 コマンドが 定 義 されていますが、[ 実 行 ] 特 性 は「クライアント」と 設 定 されています。これによって、 処<br />
理 コマンドはクライアント 側 で 実 行 されます。このコマンドが 実 行 された 場 合 、クライアント 側 のディレクトリが 表 示 されます。<br />
18
リッチインターネットアプリケーションのチュートリアル<br />
[コール OS] 処 理 コマンドの 用 途<br />
クライアントまたはサーバ 上 で 実 行 している OS に 対 応 した[コール OS] 処 理 コマンドを 使 用 することができます。<br />
上 記 の 例 では、 同 じコマンドは 実 行 されます。<br />
dir > C: \Temp\Dir.txt<br />
しかし、1 つのインスタンスでは、サーバ 側 のディレクトリが 表 示 され、 別 のインスタンスでは、クライアント 側 のディレクト<br />
リが 表 示 されます。<br />
OS にアクセスする <strong>Magic</strong> xpa の 関 数 もあります。このため、[コール OS] 処 理 コマンドで OS に 直 接 アクセスすることは 一 般 的<br />
に 必 要 ではありません。たとえば、OS の 環 境 変 数 の 値 を 取 得 したい 場 合 は、OSEnvGet() 関 数 を 使 用 することができます。<br />
OSEnvGet() 関 数 は、サーバ 環 境 変 数 を 取 得 します。この 関 数 のクライアント 版 (ClientOSEnvGet)は、クライアント 側 の 環 境 変<br />
数 を 取 得 できます。 別 の 関 数 ペアとして、ファイル 情 報 ( 例 えば、FileInfo() と ClientFileInfo() にアクセスするものもあります。<br />
[ブロック] 処 理 コマンド<br />
[ブロック] 処 理 コマンドは、 条 件 式 の 内 容 に 基 づいてクライアント 側 またはサーバ 側 で 実 行 されます。<br />
[ブロック] 処 理 コマンドの 最 適 化<br />
[ブロック IF] 処 理 コマンドが 定 義 されている 場 合 、クライアント 側 とサーバ 側 をグループ 化 するようにしてください。True が<br />
設 定 された 行 が 見 つかるまで、モジュールは 各 条 件 を 評 価 します。そして、True の 条 件 が 見 つからない 場 合 、この 例 のようにな<br />
ります。<br />
• #1. クライアント 側 で 実 行 されます。<br />
• #4. サーバ 側 で 実 行 されます。<br />
• #6. クライアント 側 で 実 行 されます。<br />
• #8. サーバ 側 で 実 行 されます。<br />
• #10. クライアントに 戻 ります。<br />
19
リッチインターネットアプリケーションのチュートリアル<br />
次 に、 行 を 入 れ 替 えることで、 以 下 のように 変 更 することができます。<br />
• #1 と #4 は、クライアント 側 で 実 行 されます。<br />
• #6 と #8 は、サーバ 側 で 実 行 されます。<br />
• #10 で、クライアントに 戻 ります。<br />
GetLang() 関 数 の 値 を 保 持 するために 変 数 を 使 用 して、これをさらに 最 適 化 することで、 二 度 も 実 行 する 必 要 がなくなります。<br />
GetLang() が[タスク 前 ]で 実 行 させるようにすることで、ブロック 内 の 比 較 処 理 はクライアント 側 になります、バッチタスク<br />
が 呼 び 出 されるまで、サーバへのアクセスは 必 要 なくなります。<br />
ブロック Loop<br />
上 図 のように 同 じループ 処 理 内 にサーバとクライアントの 両 方 の 処 理 が 混 在 して 定 義 すると、クライアントとサーバ 間 でのやり<br />
取 りが 頻 繁 に 行 われるため、あまり 良 いことではありません。<br />
[エラー] 処 理 コマンド<br />
[エラー] 処 理 コマンドは、クライアント 側 の 処 理 コマンドです。ダイアログボックスや、ステータスバーにメッセージを 表 示<br />
するために 使 用 することができます。<br />
[ 表 示 ] 特 性 を「ライン」に 設 定 してメッセージを 表 示 させた 場 合 、SDI ウィンドウのステータスバーに 表 示 されます。SDI ウ<br />
インドウを 使 用 していない 場 合 、メッセージは 表 示 されません。[ 表 示 ] 特 性 を「ボックス」に 設 定 した 場 合 、 普 通 のオンライ<br />
ン・プログラムと 同 じようにメッセージボックスが 表 示 されます。<br />
[エラー] 処 理 コマンドはクライアント 側 で 実 行 されるため、[タスク 前 ] 使 用 することはできません。<br />
[ 項 目 更 新 ] 処 理 コマンド<br />
[ 項 目 更 新 ] 処 理 コマンドはニュートラルです。 実 行 される 場 所 は、 使 用 されている 式 と 更 新 されているデータ 項 目 に 依 存 します。<br />
[ 項 目 更 新 ] 処 理 コマンドの 実 行 場 所 は、 以 下 内 容 に 依 存 します。<br />
• ロジックユニットが 実 行 される 場 所<br />
• 更 新 式 で 使 用 される 関 数 とデータ 項 目<br />
• 更 新 されるデータ 項 目 の 処 理 場 所<br />
20
リッチインターネットアプリケーションのチュートリアル<br />
[アクション] 処 理 コマンド<br />
[アクション] 処 理 コマンドが 実 行 される 場 所 は、どのような 式 が 実 行 されるかに 依 存 します。 式 は、 複 数 の 関 数 とデータ 項 目<br />
から 構 成 される 場 合 があります。 各 々がクライアント 側 であったりサーバ 側 、ニュートラルになります。<br />
ニュートラル<br />
ここでは、AddDate() 関 数 が 式 で 使 用 されています。この 関 数 は。ニュートラルです。このため、[アクション] 処 理 コマンドも<br />
ニュートラルになります。<br />
サーバ 側<br />
しかし、FileDelete() 関 数 が 使 用 されると、 処 理 コマンドはサーバ 側 になります。FileDelete() は、サーバ 側 の 関 数 です。<br />
クライアント 側<br />
また、ClientFileDelete() 関 数 はクライアント 側 です。このため、[アクション] 処 理 コマンドはクライアント 側 になります。<br />
エラー<br />
クライアントとサーバ 側 の 関 数 またはデータ 項 目 を 結 合 する 式 を 作 成 することもできます。この 例 の 場 合 、[アクション] 処 理<br />
コマンドによって 評 価 される 式 はエラーとして 扱 われ、「E」というコードが 表 示 されています。これは、 混 在 した 式 として 使 用<br />
しているからです(「M」というコードが 表 示 されます)。 混 在 式 には、サーバで 実 行 される 関 数 (FileExist)とクライアントで<br />
実 行 される 関 数 (ClientOSEnvGet)が 含 まれています。<br />
21
リッチインターネットアプリケーションのチュートリアル<br />
混 在 した 処 理<br />
混 在 した 処 理 は、サーバ 側 の 処 理 コマンドまたは 式 が、クライアント 側 の 処 理 コマンドと 一 緒 に 使 用 されているものです。<br />
このようなことが 発 生 する 要 因 には、 以 下 のものがあります。<br />
• クライアント 側 の 処 理 コマンド([エラー] 処 理 コマンドのような)が、 処 理 コマンドの 特 性 ( 条 件 )の 一 部 にサーバ 側<br />
の 関 数 を 使 用 している 場 合 ( 上 記 の F10 の[イベント]ロジックユニットを 参 照 )。<br />
• サーバ 側 の 処 理 コマンドが、 特 性 ( 例 えば 条 件 )の 一 部 にクライアント 側 の 関 数 を 使 用 している 場 合 ( 上 記 の F11 の[イ<br />
ベント]ロジックユニットを 参 照 )。<br />
• 混 在 した 式 。 一 つの 式 に、クライアント 側 とサーバ 側 の 関 数 を 使 用 している 場 合 ( 上 記 の F12 の[イベント]ロジック<br />
ユニットを 参 照 )<br />
これらの 場 合 、 構 文 チェッカーによってエラーが 発 生 します。<br />
この 種 のロジックを 実 装 するには、 複 数 の 処 理 コマンドを 使 用 して、 変 数 項 目 に 式 の 結 果 を 保 存 する 必 要 があります。 変 数 項 目<br />
は、 同 じ 場 所 での 処 理 が 連 続 するように 最 も 有 効 な 場 所 で 更 新 する 必 要 があります。<br />
この 例 では、 変 数 項 目 (v. 週 末 )を 使 用 しています。そして、[タスク 前 ]で CallProg() 関 数 を 使 用 して 更 新 しています。この 処<br />
理 は、F10 の[イベント]ロジックユニット 内 で 使 用 されています。この 場 合 、クライアント 側 になります。<br />
もう 一 つの 変 数 項 目 (v. クライアントのレポート)は、[レコード 前 ]で 更 新 されます。これは、F11 の[イベント]ロジック<br />
ユニット 内 で 使 用 されています。この 場 合 、サーバ 側 になります。<br />
22
リッチインターネットアプリケーションのチュートリアル<br />
類 似 したロジックは、F12 の[イベント]ロジックユニット 内 で 使 用 される 混 在 式 でも 使 用 されています。 元 の 式 は 混 在 してお<br />
り、「M」というコードが 表 示 されます。<br />
修 正 した 式 は、ClientFileExist() 関 数 の 結 果 を[レコード 前 ](クライアント 側 で 処 理 される 場 所 であればどこでも 結 構 です)で<br />
変 数 項 目 に 格 納 します。これによって、 式 はサーバ 側 となるため 動 作 します。<br />
ノート<br />
使 用 したい 関 数 がクライアント 側 かサーバ 側 、または 混 在 かが 分 からない 場 合 は、 関 数 一 覧 を 表 示 してくださ<br />
い。 関 数 一 覧 の 左 下 に 表 示 されます。<br />
グループ 処 理<br />
混 在 した[イベント]ロジックユニットがある 場 合 、できる 限 りサーバ 側 の 処 理 コマンドとクライアント 側 の 処 理 コマンドをま<br />
とめることが 最 良 です。これによって、ネットワーク 上 のトラフィックが 低 減 されます。<br />
リッチクライアントでの 処 理 の 並 び 方 は 以 下 の 通 りです。<br />
1. クライアント 側 を 開 始 (イベントが 発 行 された 時 、セッションが 開 始 された 場 所 )<br />
2. GetLang() 関 数 で 変 数 項 目 更 を 更 新 (サーバ)<br />
3. 警 告 を 表 示 (クライアントに 戻 ります)<br />
4. プログラムの 呼 び 出 (サーバ)<br />
5. プログラムの 表 示 (クライアントに 戻 ります)<br />
この 場 合 、クライアントとサーバ 間 の 処 理 が 4 回 切 り 替 わります。<br />
処 理 行 の 順 序 を 変 更 することで、この 切 り 替 えを 2 回 に 変 更 することができます。<br />
1. 同 じようにクライアントを 開 始 します。クライアント 上 で 警 告 を 表 示 します。<br />
2. サーバで GetLang() 関 数 を 実 行 します。サーバ 上 でプログラムを 呼 び 出 します。<br />
3. プログラムを 表 示 するためクライアントに 戻 ります。<br />
当 然 ですが、 可 能 な 最 適 化 の 順 序 は、プログラムのロジックに 依 存 します。<br />
23
リッチインターネットアプリケーションのチュートリアル<br />
リッチクライアントタスクの 設 定<br />
ほとんどのリッチクライアントタスクの 設 定 は、オンラインタスクと 同 じように 行 うことができます。ただし、リッチクライア<br />
ントタスクには 関 係 ない 設 定 もあります。また、リッチクライアントタスクにだけ 関 係 する 設 定 もあります。ここでは、これら<br />
の 設 定 のいくつかについて 説 明 します。<br />
メインフォーム:<br />
通 常 のオンラインタスクと 同 様 に、 複 数 のフォームを<br />
定 義 し、[メインフォーム] 特 性 を 使 用 して 実 行 時 に<br />
表 示 されるフォーム 番 号 を 式 で 指 定 することができま<br />
す。<br />
アイコンファイル 名 :<br />
通 常 のオンラインタスクと 同 様 に、リッチクライアン<br />
ト・タスクで 表 示 されるアイコンを 定 義 することがで<br />
きます。アイコンファイルが 定 義 されない 場 合 は、メ<br />
インプログラムの[タスク 特 性 ]で 定 義 されるアイコ<br />
ンが 表 示 されます。<br />
トランザクションモード:<br />
リッチクライアントタスクは、「W= 有 効 な 遅 延 トラ<br />
ンザクション」( 上 位 タスクでオープンされているト<br />
ランザクションを 利 用 する 場 合 )または「N= 新 規 の<br />
トランザクション」(トランザクションが 既 にオープ<br />
ンされていても、 別 のトランザクションを 新 規 にオー<br />
プンしたい 場 合 )、および「N= なし」のみ 設 定 できま<br />
す。<br />
「トランザクション」のセクションで 詳 細 に 説 明 しま<br />
す。<br />
ビュー 事 前 読 込 :<br />
この 特 性 は、 事 前 にデータビュー 全 体 を 取 得 するかど<br />
うかを 定 義 します。 値 が「True」に 設 定 されると、<br />
サーバはタスクの 初 期 設 定 中 にデータベースからすべ<br />
ての 関 連 するレコードを 取 得 します。これは 小 さな<br />
テーブルに 対 しては、 非 常 に 便 利 です。この 特 性 を<br />
「True」に 設 定 した 場 合 、[チャンクサイズ] 特 性 の 値<br />
をデータベースから 取 得 されたすべてのレコードを 保<br />
持 する 上 で 十 分 なサイズに 設 定 することを 推 奨 しま<br />
す。<br />
24
リッチインターネットアプリケーションのチュートリアル<br />
チャンクサイズ:<br />
[チャンクサイズ( 式 )] 特 性 は、 追 加 レコードとして<br />
クライアントに 渡 されるレコード 数 を 定 義 します。<br />
例 えば、この 特 性 が「100」に 設 定 された 場 合 、アプ<br />
リケーションサーバでタスクが 起 動 されると、 最 初 の<br />
100 レコードがクライアントに 渡 されます。これに<br />
よって、エンドユーザはローカル 上 で 最 初 の 100 のレ<br />
コードを 参 照 することができるようになります。エン<br />
ドユーザが、レコードの 与 えられた 範 囲 を 越 えてスク<br />
ロールしようとすると、クライアントはサーバに 通 知<br />
し、 追 加 の 100 レコードを 受 け 取 ります。<br />
レコードの 集 まりは、レコードのローカルキャッシュ<br />
としてクライアントに 蓄 積 されます。エンドユーザが<br />
テーブルの 最 後 や 先 頭 に 移 動 すると、ローカルキャッ<br />
シュは 消 去 され、キャッシュはレコードの 1 回 分 の<br />
チャンク 数 のレコード 群 を 格 納 します。<br />
ノート<br />
チャンクサイズが 大 きすぎると、パフォーマンスが 低 下 する 可 能 性 があります。データが 転 送 される 度 に、 多<br />
くのデータがサーバからクライアントに 渡 ります。<br />
他 方 、レコード 長 が 大 きい 場 合 (たとえば、 大 きな BLOB 型 項 目 が 含 まれている 場 合 など)は、チャンクサイ<br />
ズを 小 さくした 方 が 良 い 場 合 もあります。<br />
クライアント 関 数<br />
クライアント 側 のファイルやフォルダへのアクセス<br />
リッチクライアントタスクでは、クライアント 側 にアクセスするための 専 用 の 関 数 を 使 用 することができます。<br />
関 数 には、 以 下 のものがあります。<br />
• ClientBlb2File<br />
• ClientDirDlg<br />
• ClientFile2Blb<br />
• ClientFileCopy<br />
• ClientFileDelete<br />
• ClientFileExist<br />
• ClientFileInfo<br />
• ClientFileListGet<br />
• ClientFileRename<br />
• ClientFileSize<br />
• ClientFileOpenDlg<br />
• ClientFileSaveDlg<br />
• ClientFileToServer<br />
ローカルマシンの 環 境 変 数 の 取 得<br />
クライアントマシンの 一 時 ディレクトリのような 環 境 情 報 を 取 得 する 必 要 があるかもしれません。 以 下 の 関 数 を 使 用 すること<br />
で、このようなことが 可 能 になります。<br />
25
リッチインターネットアプリケーションのチュートリアル<br />
• ClientGetUniqueMachineID<br />
• ClientOSEnvGet<br />
セッション 情 報 を 取 得<br />
現 在 のセッションに 関 する 情 報 を 取 得 する 場 合 、 以 下 の 関 数 を 使 用 することができます。<br />
• ClientSessionStatisticsGet<br />
26
リッチインターネットアプリケーションのチュートリアル<br />
第 4 章 複 数 のタスクで 動 作<br />
[コール] 処 理 コマンドを 使 用 してリッチクライアント・タスクから、 別 のプログラムを 呼 び 出 すことができます。 呼 び 出 すプ<br />
ログラムは、リッチクライアントかバッチ・タスクである 必 要 があります。<br />
オンライン・プログラミングで 使 用 するような 形 式 でプログラムを 呼 び 出 すことができます。<br />
• 選 択 プログラム …… オンラインアプリケーションと 同 じように 使 用 することができます。<br />
• モーダルウィンドウ …… そのウィンドウが 閉 じるまで 別 のウインドウにアクセスできなくなります。<br />
• 並 行 タスク …… 呼 び 出 したタスクと 独 立 して 実 行 することができます。<br />
サブフォームやフレームを 使 用 してプログラムを 暗 黙 的 に 呼 び 出 すこともできます。サブフォームまたはフレームは、[ 出 力 先 ]<br />
特 性 を 使 用 することで 実 行 時 に、 異 なるプログラムを 表 示 させることもできます。<br />
ウィンドウタイプ<br />
実 行 時 に 異 なる 方 法 で 実 行 するタスクを 設 定 することができます。たとえば、サブフォームで 実 行 するタスクを 定 義 したり、ス<br />
タンドアロンで 実 行 するタスクを 定 義 することができます。このうちのほとんどが、サブフォームでも 動 作 するため、 自 動 的 に<br />
行 われます。<br />
しかし、 異 なる[ウィンドウタイプ] 特 性 を 使 用 して 実 行 するタスクが 必 要 な 場 合 、そのタスクのために 2 つの 異 なるフォーム<br />
を 準 備 する 必 要 があります。そして、どのフォームを 表 示 するかを[メインフォーム] 特 性 で 指 定 します。<br />
他 のプログラムを 呼 び 出 す<br />
呼 び 出 されたタスクの 初 期 化<br />
[タスク 前 ]は、サーバ 側 で 常 に 実 行 されます。したがって、リッチクライアント・タスクまたはプログラムを 呼 び 出 す 場 合 、<br />
サーバへのアクセスが 行 われる 間 、クライアントの 現 在 の 処 理 は 休 止 しなければなりません。 呼 び 出 されたタスクの[タスク<br />
前 ]はサーバ 側 で 実 行 されます。そして、ウインドウはクライアントで 表 示 されます。<br />
バッチタスクの 呼 び 出 し<br />
リッチクライアントからバッチタスクを 呼 び 出 すことができます。バッチタスクが 終 了 するまでリッチクライアントの 処 理 は 休<br />
止 します。<br />
バッチタスクは 常 にサーバで 実 行 されます。たとえば、OS ファイルを 使 用 する 場 合 、 気 をつけておいてください。 入 出 力 ファ<br />
イルは、サーバ PC 上 のファイルにアクセスします。 場 合 は、この 処 理 のための 関 数 があります。<br />
リッチクライアントからバッチタスクを 呼 び 出 した 場 合 は、 開 始 / 終 了 のダイアログボックスはサポートされません。<br />
コンテキスト 管 理<br />
リッチクライアントタスクを 新 規 に 実 行 した 場 合 、 自 のコンテキストで 動 作 します。コンテキストは、タスクが 実 行 する 瞬 間 か<br />
ら 終 了 する 瞬 間 までタスクの 状 態 を 記 録 します。 各 コンテキストには、 個 別 にユニークなコンテキスト ID が 割 り 当 てられます。<br />
並 行 タスクを 開 始 すると、 新 しいコンテキスト ID を 持 ったコンテキストは 作 成 されます。 並 行 タスクの 子 タスクは、( 子 タスク<br />
も 並 行 実 行 の 設 定 がされていない 限 り、 設 定 されている 場 合 は、さらにもう 一 つの 新 しいコンテキストが 割 り 当 てられます) 同<br />
じコンテキストで 開 きます。<br />
各 コンテキストは、 他 のコンテキストとは 独 立 しています。タスクツリーやデータベース・カーソル、SetParam() 関 数 によって<br />
設 定 されるデータ、データ 操 作 ステートメントのすべては、コンテキストごとに 個 別 に 追 跡 されます。<br />
<strong>Magic</strong> xpa は、 各 コンテキストの 動 作 を 追 跡 します。サーバは、 各 クライアントのリクエストを 属 しているコンテキストをもと<br />
に 識 別 します。どのタスクまたはサブタスクが 開 いているか、データベースカーソルとデータ 操 作 ステートメントに 関 する 情 報<br />
は、コンテキストごとに 全 て 維 持 されます。<br />
ノート<br />
27
リッチインターネットアプリケーションのチュートリアル<br />
一 旦 、コンテキストが <strong>Magic</strong> xpa エンジンで 作 成 されると、クライアントからのすべてのリクエストは 常 に 同 じ<br />
エンジンに 送 られます。<br />
外 部 HTTP ロードバランサーを 使 用 した 場 合 、クライアントとサーバ 間 の 粘 着 性 (つまり、 各 クライアントか<br />
ら 最 初 のリクエストが 作 成 された Web サーバへのダイレクトリクエストへのロードバランサー 機 能 )を 確 実 に<br />
する 必 要 がります。。これをサポートするために、 各 RIA リクエストには、MgxpaRIAglobalUniqueSessionID と<br />
いう 名 前 のヘッダが 含 まれます。このヘッダは、 特 定 のエンドユーザセッションの 各 HTTP リクエストに 同 じ<br />
ユニークな 値 を 保 持 します。ヘッダには、 各 クライアント・インスタンスに 対 する 異 なるユニークな 値 が 含 ま<br />
れています。 外 部 HTTP ロードバランサーは、 粘 着 性 をサポートするために、このヘッダを 使 用 することがで<br />
きます。<br />
コンテキスト 非 稼 働 タイムアウト<br />
サーバ 側 で 保 持 されるコンテキスト 情 報 は、メモリリソースを 必 要 とします。たくさんのシステムリソースを 使 用 する 可 能 性 が<br />
あるコンテキストを 保 持 する 場 合 、サーバの 負 荷 を 軽 減 するためコンテキストにタイムアウトを 設 定 することができます。<br />
[コンテキスト 非 稼 働 タイムアウト]の 設 定 は、[オプション \ 設 定 \ 動 作 環 境 \ アプリケーションサーバ]にあります。この 設<br />
定 は、クライアントが 非 稼 働 状 態 をチェックする 時 間 間 隔 を 指 定 します。「コンテキスト 非 稼 働 」とは、リッチクライアントタ<br />
スクの 実 行 中 にクライアント / サーバ 間 のアクセスがない 状 態 を 意 味 します。<br />
[コンテキスト 非 稼 働 タイムアウト]は、1/10 秒 単 位 で 設 定 します。デフォルト 値 は 36000(1 時 間 )です。<br />
コンテキストがタイムアウトに 到 達 すると、コンテキストはサーバから 削 除 されます。このタイムアウトを 設 定 することで、 放<br />
棄 されたコンテキストがサーバ 上 に 蓄 積 されることを 防 止 することができます。<br />
リッチクライアントタスクが 開 発 モードで 実 行 された 場 合 、[コンテキスト 非 稼 働 タイムアウト]は 無 制 限 になります。<br />
並 行 処 理<br />
リッチクライアントタスクの 並 行 動 作 は、オンラインタスクとは 異 なります。リッチクライアントタスクは、その 親 タスクとそ<br />
の 実 行 時 のタスクツリー 内 の 他 のすべてのタスクと 並 行 して 実 行 されます。この 例 では、タスク 1 はタスク 2 を 呼 び 出 していま<br />
す。さらにタスク 3 を 呼 び 出 しています。しかし、 一 旦 すべてのタスクが 開 いた 場 合 、ユーザは 自 由 に 3 つのウインドウの 間 を<br />
クリックすることができます。<br />
しかし、 非 リッチクライアントのオンラインプログラムの 場 合 、サブフォームを 使 用 するか、[ウィンドウ 消 去 ] 特 性 を「No」<br />
に 指 定 しない 限 り、タスク 2 をクリックするとタスク 3 は 自 動 的 に 停 止 します。この 点 については、ウインドウの 動 作 をよりオ<br />
ンラインプログラムのようにしたいならば、モーダルに 設 定 することで 実 現 できます。これによって、 上 位 のタスクで 変 更 処 理<br />
を 行 う 場 合 、まず 下 位 のタスクを 終 了 させることが 必 要 になります。<br />
リッチクライアントと 非 リッチクライアントの 両 方 のタスクツリーでは、 最 上 位 のタスクを 閉 じると、 全 てのツリーを 閉 じま<br />
す。この 例 では、タスク 1 を 閉 じると、タスク 2 とタスク 3 も 閉 じます。3 つの 全 てのタスクを 完 全 に 独 立 させたい 場 合 は、[ 並<br />
行 実 行 ] 特 性 を「Yes」にしてください。しかし、この 場 合 は、 管 理 する 新 規 コンテキストが 作 成 されるため、この 機 能 は、 必<br />
要 な 時 だけ 使 用 してください。<br />
28
リッチインターネットアプリケーションのチュートリアル<br />
非 インタラクティブタスク<br />
バッチタスクはサーバ 上 で 実 行 されるため、リッチクライアントタスクを 呼 び 出 すことはできません。しかし、(インタラクティ<br />
ブなタスクを 呼 び 出 すという 目 的 で) 時 々クライアント 側 でバッチ 処 理 を 実 行 させたいという 必 要 性 が 発 生 します。これは、[タ<br />
スク 特 性 ] 内 の[インタラクティブ] 特 性 のチェックを 外 すことで 実 現 できます。<br />
非 インタラクティブなリッチクライアントタスクは、ユーザの 入 力 処 理 を 待 たずに 自 動 的 にレコードを 処 理 し、メインソースの<br />
すべてのレコード 処 理 を 終 了 するか、[タスク 終 了 ] 特 性 の 条 件 を 満 たした 場 合 にタスクが 終 了 されるという 点 を 除 いて、イン<br />
タラクティブなリッチクライアントタスクと 同 じように 動 作 します。<br />
サブフォーム<br />
サブフォームは 2 つのタスクをマージすることができます。このため、 複 数 のタスクを 同 フォーム 上 で 実 行 させることができま<br />
す。これは、 受 注 入 力 処 理 のように、テーブルを 表 示 するために 使 用 されます。<br />
サブフォームを 追 加 する 方 法 は、オンラインタスクの 場 合 とほぼ 同 じです。サブフォームで 使 用 されるタスクは、リッチクライ<br />
アントタスクでなければなりません。<br />
サブフォームの 初 期 設 定<br />
親 タスクが 開 始 されると、 親 タスクの[タスク 前 ]と[レコード 前 ]が 実 行 されます。<br />
次 に、サブフォームの[タスク 前 ]が 実 行 されます。そして、[レコード 前 ]は 最 初 のレコードの 処 理 が 実 行 されます。<br />
サブフォームの 再 表 示<br />
リッチクライアントのサブフォームは、オンラインタスクと 同 じ 規 則 で 再 表 示 されます。[ 自 動 再 表 示 ] 特 性 が「Yes」に 設 定 さ<br />
れ、パラメータが 渡 されると、サブフォームはパラメータの 値 が 変 更 される 度 に 自 動 的 に 再 表 示 されます。[サブフォーム 再 表<br />
示 ]イベントは、サブフォームを 再 表 示 するために 使 用 することができます。<br />
しかし、サブフォームを 再 表 示 しても[タスク 前 ]は 実 行 されません。[レコード 前 ]は、レコードが 再 度 読 み 込 まれることで<br />
実 行 されます。<br />
[ 非 表 示 の 再 表 示 ] 特 性<br />
サブフォームには、[ 非 表 示 の 再 表 示 ] 特 性 があります。これは、サブフォームの 初 期 化 と 再 表 示 のタイミングを 制 御 します。<br />
この 特 性 が「Yes」に 設 定 されると、サブフォームが 表 示 されているか 否 かに 関 わらず、 動 作 に 違 いはありません。これは、 以<br />
下 のこと 意 味 しています:<br />
• サブフォームタスクの 初 期 設 定 は、データビューの 最 初 のレコードの[レコード 前 ]の 後 で 実 行 されます。<br />
• サブフォームの 再 表 示 は、[ 自 動 再 表 示 ] 特 性 や[サブフォーム 再 表 示 ]イベントによって 行 われます。<br />
29
リッチインターネットアプリケーションのチュートリアル<br />
この 特 性 が「No」に 設 定 されている 場 合 、サブフォームが 表 示 されていない 時 は、サブフォームタスクの 初 期 設 定 と 再 表 示 の<br />
み 実 行 されます。これは、 以 下 のこと 意 味 しています:<br />
• 各 サブフォームタスクを 実 行 する 前 に、その 可 視 性 がチェックされ、 表 示 されていない 場 合 、サブフォームタスクは 実<br />
行 されず、 遅 延 されます。 一 旦 クライアントがサブフォームの 表 示 を 要 求 すると、サーバ 側 を 呼 び 出 し、サブフォーム<br />
タスクは 初 めて 表 示 されます。<br />
• サブフォームの[タスク 前 ]の 実 行 は、サブフォームが 表 示 されるまで 遅 延 されます。<br />
• サブフォームの[ 可 視 ] 特 性 の 式 がクライアント 側 で 実 行 される 場 合 、タスクが 読 み 込 まれた 時 点 でサブフォームが 表<br />
示 されます。<br />
• サブフォームの 再 表 示 を 実 行 する 前 に、サブフォームの 可 視 状 態 がチェックされ、 表 示 されていない 場 合 、サブフォー<br />
ムのデータは 再 表 示 されません。そして、 表 示 されるようになると、<strong>Magic</strong> xpa はサーバにアクセスし、サブフォームの<br />
データを 再 表 示 します。<br />
[タブサイクル] 特 性<br />
サブフォームタスクには、[タブサイクル]があります。これは、サブフォームの 最 後 のパーク 可 能 なコントロールから TAB<br />
キーを 押 下 した 場 合 の 動 作 を 定 義 します。<br />
サブフォーム / フレームでの 連 続 するタスクの 動 作 は、そのタスク 内 の 特 性 で 決 定 され、 親 タスクでは 定 義 しません。<br />
[ 出 力 先 ] 特 性<br />
サブフォームは、 実 行 時 に 異 なるプログラムを 表 示 させることができます。<br />
これは、[コール] 処 理 コマンドの[ 出 力 先 ]<br />
特 性 を 使 用 することで 実 現 できます。<br />
プログラムがサブフォームで 実 行 するように<br />
呼 び 出 される 場 合 、プログラムは[ 出 力 先 ]<br />
特 性 で 設 定 された 名 前 で 指 定 されたサブ<br />
フォーム 上 で 実 行 されます。 別 のプログラム<br />
を 同 じサブフォーム 上 で 実 行 するように 呼 び<br />
出 された 場 合 、 最 初 のプログラムが 閉 じ、 呼<br />
び 出 されたプログラムが 実 行 されます。<br />
[ 出 力 先 ] 特 性 は、サブフォームまたはフレー<br />
ムで 使 用 することができます。この 特 性 は、<br />
[コントロール 名 ]または[フレーム 名 ]を 参<br />
照 します。<br />
混 在 処 理 のタスクを 呼 び 出 す 場 合 は、 注 意 が 必 要 です。サブタスクが 呼 び 出 される 場 合 は 常 に、サーバへのアクセスが 発 生 しま<br />
す。この 例 のように[ 項 目 変 更 ]ロジックユニットを 使 用 した 場 合 、 呼 び 出 し 処 理 の 効 率 が 悪 くなる 旨 の 警 告 が 発 生 します。<br />
30
リッチインターネットアプリケーションのチュートリアル<br />
フレームを 使 用 した 場 合 もこの 技 術 を 使 用 するができます。<br />
サブフォームの 終 了<br />
リッチクライアントでサブフォーム 関 する 違 いは、サブフォームが 終 了 すると 親 タスクも 終 了 するということです。[ 終 了 ]イ<br />
ベントが 発 行 されたり、ユーザがサブフォーム 内 で ESC キーを 押 下 すると、 親 タスクも 終 了 します。これは、フレームの 場 合<br />
も 同 じです。ユーザが 下 位 タスクで ESC キーを 押 下 してもタスクが 終 了 しないようにするには、ESC キーに 対 する[イベント]<br />
ロジックユニット 作 成 し、[ 伝 播 ] 特 性 を「No」に 設 定 することで 実 現 できます。<br />
フレーム<br />
より 洗 練 されたフォームを 作 成 するために、リッチクライアントのフレームセットを 使 用 することができます。これを 使 用 する<br />
ことでタスクを 複 数 のセクションに 分 けることができます。そして、それぞれが 異 なるプログラムを 表 示 します。 各 フレームに<br />
表 示 されるプログラムは、リッチクライアントのプログラムまたはサブタスクでなければなりません。<br />
フレームは、サブフォームと 同 じように 動 作 します。しかし、フレームでは、ユーザが 仕 切 りバーをドラッグすることによっ<br />
て、 簡 単 に 各 セクションの 大 きさを 変 更 することができます。<br />
フレームはネストすることができ、さらにサブフォームやタブと 併 用 することで、より 複 雑 なユーザインタフェースを 作 成 する<br />
ことができます。この 例 では、 左 側 のフレームでユーザーや 受 注 情 報 、 製 品 情 報 が 表 示 されるようにようにしています。 選 択 品<br />
内 容 が 右 側 のフレームに 表 示 されます。<br />
31
リッチインターネットアプリケーションのチュートリアル<br />
フォームタイプ<br />
リッチクライアント 用 のフレームを 作 成 するには、 最<br />
初 にフォームの[インタフェースタイプ]で「リッチ<br />
クライアントフレーム」を 選 択 する 必 要 があります。<br />
次 に、フォームを 開 くと[フレーム]パレットが 表 示<br />
されます。パレットをクリックすることで 使 用 したい<br />
フォーマットを 選 択 することができます。ここでは、<br />
2 つの 垂 直 フレームを 持 つフレームセットを 使 用 しま<br />
す。<br />
これらのフレームは、ネストさせることもできます。<br />
このため、 実 行 時 には 6 種 類 以 上 の 組 み 合 わせで 表 示<br />
させることができます。<br />
フレームの 接 続 先<br />
各 フレームは、プログラムまたは、サブタスクやフォームに<br />
接 続 することができます。これはサブフォームの 場 合 と 同 じ<br />
ように 動 作 させることができます。[パラメータ]や[ 自 動<br />
再 表 示 ]の 特 性 を 使 用 することもできます。<br />
現 在 のタスクからデータを 表 示 させたい 場 合 、「フォーム」<br />
のタイプを 使 用 します。この 場 合 は、サブタスクを 呼 び 出 し<br />
ません。<br />
各 フレームで 何 を 表 示 させるかを 選 択 する 必 要 があります。 実 行 時 にフレームに 表 示 させる 内 容 を 変 更 させたい 場 合 、 何 も 表 示<br />
させないダミーのタスクを 作 成 して、フォームから 呼 び 出 すようにしてください。<br />
32
リッチインターネットアプリケーションのチュートリアル<br />
フレーム 名<br />
各 フレームは、フレーム 名 を 定 義 することができます。これは、 特 定 のフレームでプログラムを 表 示 するために 使 用 されます。<br />
この 例 では、2 つのフレームがあります。 左 上 はメニューリストを 表 示 します。これは、フレーム 内 に 常 に 表 示 される 唯 一 のプ<br />
ログラムです。 右 側 には、 何 も 表 示 されないダミープログラムを 呼 び 出 します。 実 行 時 には、メニューリストから 呼 び 出 されプ<br />
ログラムをもとに、このフレームを 表 示 します。<br />
プログラムの 呼 び 出 し<br />
次 に、プログラムを 呼 び 出 すとき、どのフレームに 表 示 させるかを 指 定 します。ここでは、「ユーザー 表 示 」というプログラム<br />
を「 右 側 」という 名 前 のフレームで 表 示 させるようにします。<br />
トランザクション<br />
リッチクライアント・プログラムは、 遅 延 トランザクションを 使 用 します。DBMS はサーバ 上 にあるのため、 物 理 トランザク<br />
ションを 使 用 することができません。<br />
<strong>Magic</strong> xpa は、 遅 延 トランザクションにデータの 変 更 内 容 を 保 存 し、トランザクションが 終 了 した 時 点 でコミットします。トラ<br />
ンザクションがロールバックされると、 保 持 されたトランザクションは 廃 棄 されます。リッチクライアントのこの 動 作 は、オン<br />
ラインプログラムの 場 合 と 同 じです。<br />
しかし、リッチクライアントでトランザクションが 処 理 される 方 法 にはいくつかの 違 いがあります。このセクションでは、 類 似<br />
点 と 違 いについて 説 明 しています。<br />
33
リッチインターネットアプリケーションのチュートリアル<br />
トランザクション 開 始<br />
レコードを 更 新 しているか、 新 規 レコードを 作 成 しているか、レコードを 削 除 しているかどうかにかかわらず、リッチクライア<br />
ントモジュールはデータのどのような 修 正 も 処 理 します。すべてのデータ 操 作 ステートメントは、リッチクライアントモジュー<br />
ルによって 維 持 され、[トランザクション 開 始 ]の 設 定 に 基 づいてサーバーに 送 られます。<br />
• レコード 前 の 前 …… 変 更 内 容 は、レコードレベルのトランザクション 内 のレコードを 終 了 した 後 にコミットされます。<br />
• タスク 前 の 前 …… 変 更 内 容 は、タスクレベルのトランザクション 内 でタスクを 閉 じた 後 にコミットされます。<br />
トランザクションモード<br />
リッチクライアントで 使 用 することができるトランザクションモードは 以 下 の 通 りです。<br />
• なし<br />
• 新 規 の 遅 延 トランザクション<br />
• 有 効 な 遅 延 トランザクション 内<br />
なし<br />
[トランザクションモード]が「なし」の 場 合 、トランザクションがオープンされません。<br />
子 タスク 内 のトランザクションをまとめて、ラッピングされたトランザクションがオープンされることを 防 止 するために、デー<br />
タの 保 存 処 理 が 行 われないタスク 上 でのみ 使 用 してください。メインのバックグラウンド 画 面 やバックグラウンドフレームを 作<br />
成 する 場 合 、この 設 定 が 必 要 です。<br />
新 規 の 遅 延 トランザクション<br />
[トランザクションモード]が「 新 規 の 遅 延 トランザクション」に 設 定 された 場 合 、トランザクションが 親 タスクで 開 始 される<br />
か 否 かに 関 わらず、 新 しいトランザクションが 開 始 されます。 親 のトランザクション 内 で 発 生 した 内 容 に 関 係 なく、 子 のトラン<br />
ザクションは 子 タスクレベルでコミットされます。<br />
もし、トランザクションが 開 始 されると:<br />
• 新 しい 遅 延 トランザクションが 開 始 されます。<br />
• トランザクションが 閉 じた 後 ( 呼 び 出 し 側 のトランザクションに 関 係 なく)、このトランザクションの 変 更 内 容 がコミッ<br />
トされます。<br />
• このトランザクションがまだ 開 いていても、 呼 び 出 し 側 のトランザクションを 閉 じることができます。 呼 び 出 し 側 のト<br />
ランザクションを 閉 じても、このトランザクションは 影 響 しません。<br />
• 新 しいトランザクションは、 独 自 のトランザクションキャッシュを 持 っています。トランザクションキャッシュは 共 有<br />
できません。そして、このトランザクションで 行 われる 変 更 内 容 は、 他 のトランザクションで 参 照 することはできません。<br />
34
リッチインターネットアプリケーションのチュートリアル<br />
有 効 な 遅 延 トランザクション 内<br />
[トランザクションモード]が「 有 効 な 遅 延 トランザクション 内 」の 場 合 、このトランザクションは 親 のトランザクションの 要<br />
素 となります。<br />
• トランザクションがすでに 開 始 される 場 合 、タスクはそのトランザクションの 要 素 です。<br />
• トランザクションが 開 始 されていない 場 合 、 新 しい 遅 延 トランザクションが 開 始 されます。<br />
親 タスクのトランザクションがロールバックされると、 子 トランザクションもロールバックされます。<br />
1 つの 親 タスクが 子 タスクで 複 数 のトランザクションを 開 いていることになるため、 注 意 して 使 用 してください。もし、 一 度 に<br />
タスクレベルでロールバックする 正 当 な 理 由 がない 限 り、 新 規 の 遅 延 トランザクションは、より 安 全 です。<br />
オンラインとリッチクライアントでのトランザクションモードの 比 較<br />
リッチクライアント オンライン 比 較<br />
なし 物 理 /なし トランザクションはオープンしません。<br />
新 規 遅 延 遅 延 親 レベルでは、 新 規 の 遅 延 トランザクションと 遅 延 トランザクション<br />
は、 同 じように 動 作 します。 両 方 とも、 新 しいトランザクションを 開 き<br />
ます。<br />
ネスト 遅 延<br />
子 タスクレベルでは、オンラインタスクでのネストされた 遅 延 トランザ<br />
クションは、リッチクライアントでの 新 規 の 遅 延 トランザクションと 同<br />
じように 動 作 します。<br />
遅 延 内 遅 延 内 オンラインとリッチクライアントでは、 同 じように 動 作 します。 現 在 の<br />
タスクのトランザクションは、 親 のトランザクションの 要 素 になりま<br />
す。<br />
物 理<br />
物 理 トランザクションモードは、リッチクライアントにはありません。<br />
トランザクションが 閉 じると、 遅 延 トランザクションは 物 理 的 なデータ<br />
ベースにコミットされます。<br />
35
リッチインターネットアプリケーションのチュートリアル<br />
第 5 章 リッチクライアントでの MDI<br />
以 下 のようにすることで、リッチクライアントアプリケーションで MDI 環 境 を 使 用 することができます。<br />
1. メインプログラムに、フォームを 追 加 します。<br />
2.[クラス]を「0」、[インターフェースタイプ]を「リッチクライアント 表 示 形 式 」に 設 定 します。<br />
3. [フォーム 特 性 ]で、[プルダウンメニュー] 特 性 にリッチクライアント 専 用 のプルダウンメニューを 設 定 します。<br />
MDI の 背 景 色 や 背 景 イメージ、またはグラデーションスタイルを 指 定 することもできます。<br />
4.[プロジェクトの 実 行 タイプ] 特 性 を「リッチクライアント」に 設 定 します。<br />
5. プログラムを MDI 内 に 表 示 させたい 場 合 は、[ウィンドウタイプ]を「MDI 調 整 」か「MDI 子 ウィンドウ」に 設 定 し<br />
ます。<br />
アプリケーションをテストするためにプログラム 上 で F7 を 押 下 するか、Ctrl+F7 を 押 下 してプロジェクトを 実 行 した 場 合 も、<br />
MDI 環 境 で 動 作 します。<br />
ノート<br />
MDI 環 境 をメインプログラムに 定 義 すると、リッチクライアント・アプリケーションを 公 開 する 際 に、 開 始 プ<br />
ログラム 名 を 指 定 する 必 要 が 無 くなります。<br />
36
リッチインターネットアプリケーションのチュートリアル<br />
第 6 章 ブラウザコントロール<br />
他 のアプリケーションへのアクセス<br />
リッチクライアント 環 境 で 動 作 する 場 合 、データはサーバに<br />
あり、クライアントで 表 示 されます。しかし、 異 なるアプリ<br />
ケーションを 使 用 しているクライアントにデータを 表 示 する<br />
必 要 があるかもしれません。<br />
たとえば、PDF や Excel のスプレッドシートで 帳 票 を 表 示 さ<br />
せたい 場 合 があるかもしれません。<br />
[ブラウザ]コントロール<br />
これを 処 理 する 1 つの 方 法 が、[ブラウザ]コントロールの<br />
使 用 です。このコントロールは、Microsoft の Internet Explorer<br />
のように 動 作 します。<br />
ヒント<br />
ブラウザー 内 容 がコントロールのサイズより 大 き 過 ぎる 場 合 や、スクロールバーを 表 示 させたくない 場 合 、 以<br />
下 のスタイルを 使 用 することができます。<br />
body { margin:<br />
0px;<br />
overflow:hidden }<br />
37
リッチインターネットアプリケーションのチュートリアル<br />
ブラウザコントロール 特 性<br />
[ブラウザ]コントロールには、 簡 単 な 特 性 があります。そのほとんどは、 他 のコントロールと 同 じように 使 用 します。[デー<br />
タ] 特 性 は、Web ブラウザで 開 く Web サイトやファイルの URL を 格 納 する 文 字 型 項 目 を 指 定 します。<br />
ブラウザコントロールイベント<br />
[ブラウザ]コントロールは、「ブラウザステータス テキスト 変 更 」という 内 部 イベントを 発 行 させることができます。<br />
[ブラウザ]コントロールによって 表 示 されているアプリケーションのステータスバー 内 のテキストが 変 更 されると、コントロー<br />
ルはこのイベントを 発 行 します。このイベントは、<strong>Magic</strong> xpa 内 で 処 理 することができます。<br />
このイベントに 対 するハンドラは 1 つのパラメータ(ステータスバーの 現 在 のテキスト)を 受 け 取 ることができます。<br />
ノート<br />
[ブラウザステータス テキスト 変 更 ]イベントによって、リッチクライアントモジュールはブラウザから 情 報<br />
を 受 け 取 ることができます。<br />
JavaScript を 使 用 してステータスバーの 値 を 変 更 することができ、それを 行 うことで、ブラウザ 側 で 表 示 する<br />
データをリッチクライアントに 返 すことでができます。<br />
ブラウザコントロール 関 数<br />
リッチクライアントでは、コントロールに 表 示 させる 内 容 を 制 御 するための 関 数 を 使 用 することができます。<br />
• BrowserSetContent …… コントロールに 表 示 させる 内 容 を 設 定 することができます。この 関 数 は、パラメータで 指 定 され<br />
た 値 を 使 用 してコントロールを 更 新 するもので、URL によって 参 照 する 内 容 をもとにコントロールを 更 新 する 方 法 とは<br />
異 なります。<br />
• BrowserGetContent …… コントロールに 表 示 されている 内 容 を 取 得 します。この 関 数 は、BrowserSetContent 関 数 とともに<br />
使 用 され、 内 容 を 取 得 し、テキストを 処 理 し、コントロールに 戻 すことができます。<br />
• BrowserScriptExecute …… [ブラウザ]コントロールに 表 示 されるファイルに 定 義 されている VB Script や JavaScript の 関<br />
数 を 実 行 します。<br />
38
リッチインターネットアプリケーションのチュートリアル<br />
PDF の 表 示<br />
帳 票 を 作 成 する 場 合 に、この[ブラウザ]コントロールを 使 用 することができます。エンドユーザは、 帳 票 をクライアント 側 に<br />
表 示 させたいはずです。しかし、<strong>Magic</strong> xpa のプリンタの 設 定 は、サーバ 側 のプリンタにしかアクセスできません。<br />
クライアント 側 で 帳 票 を 表 示 させるためのソシューションは、[ブラウザ]コントロールを 使 用 し、PDF ファイルを 表 示 するた<br />
めにこれを 拡 張 することです。このためには、 以 下 の 処 理 が 必 要 です。<br />
サーバ 上 にファイルが 作 成 されるディレクトリを 作 成 しま<br />
す。( 例 :D:\Pdf)<br />
このディレクトリを 参 照 する Web サーバのエイリアス( 例 :<br />
pdf)を 作 成 します。<br />
これで、サーバ 上 の PDF に Web ブラウザでアクセスするこ<br />
とができます。<br />
帳 票 作 成 のバッチタスク 内 で、PDF を 作 成 するための 処 理 を 組 み 込 みます。Adobe Acrobat などのサードパーティ 製 の PDF<br />
出 力 ツールを 使 用 して GUI 印 刷 出 力 の 内 容 を PDF に 変 換 するようにします。ファイル 名 は「d:\Pdf\report.pdf」と 設 定 し<br />
ます。<br />
PDF 出 力 ツールは、 指 定 したフォルダ 内 に 自 動 的 に PDF を 出 力 し、 出 力 結 果 を 表 示 しないように 指 定 できる 機 能 が 必 要 で<br />
す。ファイル 名 は、[ 入 出 力 ファイル]テーブルの[ 名 前 ]カラムに 論 理 名 で 指 定 することで 動 的 に 指 定 できます。<br />
ファイルを 表 示 させるリッチクライアントタスク 内 で、[ブ<br />
ラウザ]コントロールを 定 義 します。<br />
コントロールには、 以 下 の URL を 参 照 するように 指 定 しま<br />
す。http://localhost/pdf/report.pdf<br />
PDF ファイルの 作 成 タスクと 表 示 タスクを 順 番 に 実 行 します。<br />
39
リッチインターネットアプリケーションのチュートリアル<br />
ノート<br />
PDF の 表 示 タスク 内 から 作 成 タスクを 実 行 しても、フォーム 内 の[ブラウザ]コントロールは 再 表 示 されませ<br />
ん。ファイルの 作 成 後 に 表 示 タスクを 起 動 するようにタスクの 構 成 を 工 夫 してください。<br />
40
リッチインターネットアプリケーションのチュートリアル<br />
第 7 章 アプリケーションのモニタ<br />
堅 牢 で 複 雑 なリッチクライアント・プログラムを 開 発 することができます。 複 雑 なロジックや 未 知 の 問 題 を 理 解 する 必 要 がある<br />
場 合 、<strong>Magic</strong> xpa には、 作 業 を 支 援 するツールが 組 み 込 まれています。<br />
デバッガ<br />
<strong>Magic</strong> xpa には、 強 力 なデバッガとロギングシステムがあります。プログラムが 何 をしているかを 把 握 することができ、ブレイ<br />
クポイントを 使 用 して 必 要 に 応 じてプログラムをで 停 止 させることができるため、リッチクライアントの 動 作 を 理 解 する 上 で 役<br />
に 立 ちます。デバッガについての 詳 細 は、『マスタリング <strong>Magic</strong> xpa』を 参 照 してください。<br />
リッチクライアントでデバッガーを 使 用 する 場 合 は、[ロギング] 設 定 の[クライアント 動 作 ]を「Yes」に 設 定 してください。<br />
この 設 定 を 行 わない 場 合 、サーバの 動 作 のみ 参 照 できます。<br />
アプリケーションが 配 備 された 後 は、リモート 環 境 でデバッガを 実 行 させることもできます。<br />
サーバ 同 期<br />
サーバ 側 のロギングを 行 うだけの 場 合 は、サーバ 側 の 処 理 コマンドがそのまま 出 力 されます。しかし、クライアント 側 の 内 容 を<br />
ロギングする 場 合 は、アクティビティモニタで 参 照 するために 処 理 内 容 をサーバに 転 送 する 必 要 があります。<br />
各 クライアントのコンテキストは、キャッシュメモリ 内 の 自 身 の 処 理 内 容 を 記 録 します。リッチクライアントモジュールは、 以<br />
下 の 場 合 、サーバ 側 に 対 しクライアントの 処 理 内 容 を 消 去 させます。<br />
• サーバに 対 する 次 のリッチクライアントモジュールのアクセスが 発 生 した 場 合<br />
• ロジックユニットが 終 了 した 場 合 。 例 えば、[レコード 前 ]が 終 了 した 場 合 、リッチクライアントモジュールはサーバ 側<br />
に 対 し 処 理 内 容 を 消 去 させます。<br />
重 要<br />
アプリケーションのデバッグを 行 うとパフォーマンスが 低 下 します。<br />
デバッグ 機 能 を 止 めたい 場 合 は、[デバッグ]メニューの[デバッグモード]をクリックしてください。<br />
クライアントの 異 常 終 了<br />
クライアントが 異 常 終 了 する 場 合 が 時 々あります。このような 場 合 は、 最 後 の 処 理 内 容 が 記 録 されない 可 能 性 があります。 障 害<br />
が 発 生 した 直 前 にどのような 処 理 が 実 行 されたか 理 解 する 必 要 があります。これらの 処 理 は、サーバ 上 には 格 納 されないため、<br />
アクティビティモニターでは 参 照 できません。<br />
クライアント 側 の 異 常 終 了 をデバッグするには:<br />
1. HTML ファイルの "LogClientSequenceForActivityMonitor" フラグを「Yes」に 設 定 します。HTML ファイルは、リッチク<br />
ライアントインタフェースビルダで 作 成 されます。フラグが「Yes」に 設 定 されると、クライアントの 動 作 がクライア<br />
ント 側 のローカルログファイルとして 書 き 込 まれます。このログファイルは、サーバにまだ 送 信 されなかったすべての<br />
情 報 が 含 まれています。ログファイルは、 各 イベントの 実 行 後 、またはアプリケーションの 終 了 時 に 後 削 除 されます。<br />
41
リッチインターネットアプリケーションのチュートリアル<br />
2. もう 一 度 アプリケーションを 起 動 します。<strong>Magic</strong> xpa は、 既 存 のログファイルをスキャンします。 異 常 終 了 時 にログ<br />
ファイルが 見 つかると、これらをサーバに 送 信 します(そして、アクティビティモニターに 表 示 します)。<br />
3. 異 常 終 了 が 発 生 すると、 他 の 全 ての 並 行 処 理 も 終 了 します(これらのログファイルは、 通 常 削 除 されます)。<br />
4. アプリケーションを 再 開 してください。クライアントの 最 後 の 処 理 内 容 が 記 録 されたログファイルがサーバに 送 信 され<br />
ます(そして、アクティビティモニターに 表 示 されます)。<br />
5. アクティビティモニターは、クライアントログによって 更 新 されます。これで、 問 題 の 発 生 箇 所 を 確 認 することができ<br />
ます。<br />
ノート<br />
アクティビティモニターの 行 は、サーバ 処 理 がピンクで、クライアント 処 理 が 白 で 色 分 けされます。<br />
ネットワーク 情 報 の 表 示<br />
[リッチクライアント 形 式 ]フォームでは、ステータスバーでネットワーク 状 態 を 表 示 することができます。ネットワーク 情 報<br />
は、ステータスバーの 右 の 表 示 領 域 上 でマウスポインタをホバーリングさせることで 表 示 されます。プログラムが <strong>Magic</strong> xpa<br />
Enterprise Studio から 実 行 された 場 合 、この 機 能 は 常 に 有 効 になります。プログラムが 実 行 エンジンで 実 行 する 場 合 は、アプリ<br />
ケーションの 起 動 に 使 用 される HTML ファイルの DisplayStatisticInformation パラメータを 以 下 のように 修 正 することで 有 効 にな<br />
ります。<br />
42
リッチインターネットアプリケーションのチュートリアル<br />
第 8 章 実 行 環 境<br />
今 まで 説 明 してきたよう、リッチクライアント・アプリケーションを 作 成 して、テストするためには .NET についての 知 識 は 余<br />
り 必 要 ではありません。しかし、アプリケーションをインストールしようとする 場 合 、 実 行 環 境 に 精 通 していることが 役 に 立 ち<br />
ます。<br />
リッチクライアントアプリケーションを 実 行 させる 場 合 、 外 部 に 公 開 する 必 要 のあるアプリケーションの 要 素 があると 同 時 に、<br />
公 開 したくない 要 素 もあります。 従 って、<strong>Magic</strong> リッチクライアントアプリケーションに 対 して 安 全 な 環 境 を 構 築 する 上 で、ア<br />
プリケーションの 要 素 は 以 下 の 二 つに 分 類 することができます。<br />
• 内 部 向 けのリソースファイル……これらは、ECF、 基 本 色 定 義 、フォント 定 義 、ユーザ 定 義 、などの <strong>Magic</strong> エンジンが<br />
アクセスするためだけに 必 要 なローカルファイルです。 内 部 ファイルは、Web サーバによってアクセス 可 能 にしないで、<br />
プロジェクトフォルダ 内 のような ECF が 置 かれているフォルダ 付 近 に 配 置 してください。<br />
• 外 部 向 けのリソースファイル……これらは、HTML やマニフェスト、PDF などのクライアント 側 でアクセスする 必 要 が<br />
あるファイルです。 外 部 ファイルは、Web サーバを 経 由 してアクセススすることが 可 能 であり、Web サーバのエイリア<br />
スや、リッチクライアントインタフェースビルダによって 作 成 されるアプリケーションの 公 開 エイリアスを 使 用 して 公<br />
開 されます。<br />
実 行 の 準 備<br />
リッチクライアントの 実 行 モジュールが .NET Framework の 環 境 で 実 行 できるように、リッチクライアントアプリケーションを<br />
デプロイする 必 要 があります。<br />
リッチクライアントの 実 行 環 境 は、インターネット 環 境 で 実 行 されることを 意 図 しているため、 使 用 されているテクノロジを 理<br />
解 しておくことを 推 奨 します。<br />
リッチクライアントモジュール<br />
すべてのタスク 情 報 とデータは、.NET モジュールを 使 用 して 処 理 され 実 行 されます。このモジュールは、 実 際 のクライアント<br />
エンジンとして 実 行 されます。<br />
リッチクライアントフォルダ<br />
<strong>Magic</strong> xpa のインストール 処 理 によって、インストールフォルダ 内 に 以 下 の 3 つのサブフォルダを 作 成 します。<br />
• Scripts …… インターネットリクエスタファイルが 格 納 されます。<br />
• RIACache …… タスクやイメージ、メニューのためにキャッシュデータを 格 納 します。<br />
• PublishedApplications …… HTML やマニフェストのような 公 開 する 必 要 のあるファイルの 格 納 先 です。<br />
これらのフォルダは、インストールディレクトリ 内 に 作 成 されます。これらは、 次 のセクションで 説 明 する Web エイリアスで<br />
管 理 されます。<br />
Web エイリアス<br />
Web エイリアスは、リッチクライアントアプリケーションを 実 行 するために 必 要 です。<br />
• <strong>Magic</strong>2xScripts …… Scripts ディレクトリを 参 照 しています。<br />
• <strong>Magic</strong>2xRIAApplications …… PublishedApplications ディレクトリ を 参 照 しています。<br />
これらの 設 定 内 容 は、アプリケーションの 内 容 に 応 じて 変 更 することもできます。<br />
動 作 環 境 設 定<br />
リッチクライアントキャッシュの 位 置 は、 必 要 に 応 じて 変 更 することができます。この 設 定 は、<strong>Magic</strong> xpa の[ 動 作 環 境 ]ダイ<br />
アログの[アプリケーションサーバ]タブで 行 うことができます。<br />
• リッチクライアントキャッシュパス …… アプリケーションサーバがリッチクライアントのキャッシュファイルを 書 き<br />
込 む 物 理 ディレクトリ(デフォルト:< インストールディレクトリ >\RIACache)を 指 定 します。<br />
43
リッチインターネットアプリケーションのチュートリアル<br />
モジュール<br />
分 散 型 アプリケーション・アーキテクチャー:<br />
<strong>Magic</strong> xpa によって 提 供 されます。<br />
Web サーバ:<br />
リモートクライアントからリクエストを 受 け 取 るために、Web サーバが 必 要 です。Web サーバは、<strong>Magic</strong> xpa サーバにリクエス<br />
トを 送 ります。<br />
インターネットリクエスタ:<br />
クライアントと <strong>Magic</strong> xpa サーバの 間 を 仲 介 するモジュール。このモジュールは、サーバのプールで 1 つのアイドル 状 態 の <strong>Magic</strong><br />
サーバにリクエストとデータを 渡 すことができます。これによって 負 荷 を 分 散 します。<br />
MRB(リクエストブローカ MRB):<br />
<strong>Magic</strong> xpa サーバのプールを 維 持 します。<strong>Magic</strong> xpa は、リクエストブローカとして 知 られているミドルウェアエージェントを 提<br />
供 します。MRB は、 利 用 可 能 なすべての <strong>Magic</strong> サーバエンジンを 処 理 して、インターネットリクエスタから 利 用 可 能 なサーバ<br />
エンジンへの 各 リクエストを 指 示 します。MRB は、 様 々なフェールオーバーに 対 応 するため、ロードバランシング 機 能 やリカ<br />
バリ 機 能 を 提 供 します。<br />
<strong>Magic</strong> サーバ:<br />
<strong>Magic</strong> xpa サーバは、インタラクティブなリッチクライアント・アプリケーション 環 境 の 中 心 にあります。これは、 実 際 の 実 行<br />
時 単 位 で、 各 リクエストを 処 理 して、 受 け 取 った 各 タイプのリクエストに 対 応 した 全 てのアプリケーション・ロジックを 実 行 し<br />
ます。<strong>Magic</strong> サーバは、MRB の 位 置 を 認 識 しており、それに 接 続 し、それ 自 体 でインターネットリクエスタを 利 用 できるよう<br />
にする 必 要 があります。<br />
<strong>Magic</strong> サーバエンジンは、 一 回 のエンジンプロセスを 使 用 して 複 数 のリクエストを 処 理 するように 設 計 されています。これは、<br />
<strong>Magic</strong> xpa サーバエンジンがマルチスレッド 機 能 を 使 用 して 実 現 しています。<br />
モジュールの 分 散<br />
上 記 のモジュールは 同 じマシン 上 にインストールしたり、 異 なる OS を 使 用 した 異 なるマシン 上 に 分 散 させることもできます。<br />
<strong>Magic</strong> xpa のインストール 処 理 とアプリケーションサーバによって、 必 要 なモジュールのインストールと 実 行 のための 環 境 設 定<br />
は 自 動 的 に 行 われます。インターネットリクエスタは、クライアント 側 から 送 られるリクエストを 処 理 します。インタネットリ<br />
クエスタは、<strong>Magic</strong> エンジンと 異 なる PC 上 に 置 くこともできます。<br />
図 8-1 この 図 は、リッチクライアントがどのようにアプリケーションサーバと 通 信 し、どのよ<br />
うに 返 り、 分 散 されている <strong>Magic</strong> xpa モジュール 間 でどのように 相 互 作 用 しているかを 表 して<br />
います。<br />
44
リッチインターネットアプリケーションのチュートリアル<br />
リッチクライアントの 必 要 条 件<br />
RIA アプリケーションは、クライアントに 以 下 のソフトウエアがインストールされることを 必 要 条 件 とします。<br />
• .NET Framework …… Windows Vista SP1 以 上 の OS ではすでにインストールされています。 従 って、 改 めてインストール<br />
する 必 要 はありません。<br />
これらのインストールパッケージは、<strong>Magic</strong> xpa の PublishedAoApplications\RIA フォルダ 内 にコピーされており、これを 使 用<br />
して 手 動 でインストールすることができます。<br />
リッチクライアントインタフェースビルダによって 作 成 された HTML ファイルは、これらのインストール 処 理 を 簡 単 に 行 うこ<br />
とができるように、ガイダンスを 表 示 しています。これについては、 後 で 説 明 します。<br />
ノート<br />
.NET フレームワーク V2.0 SP2 を 使 用 する 場 合 、 再 配 布 可 能 な Microsoft Visual C++ 2008 をインストールする 必<br />
要 があります。Scripts\RIA フォルダ 内 の NetFx20SP2_x86.exe と VCRedist_x86.exe ファイルを 実 行 することに<br />
よって、インストールすることができます。<br />
.NET フレームワーク V3.5SP1 がインストールされている 場 合 は 不 要 です。<br />
ClickOnce<br />
ClickOnce は Microsoft 社 によって 開 発 されたテクノロジーで、Web から 直 接 .Net アプリケーションを 実 行 させることができま<br />
す。このテクノロジーによって、クライアントアプリケーションをインターネットからだけだけでなくデスクトップ 環 境 からも<br />
実 行 されることが 可 能 になります。<br />
ClickOnce を 使 用 する 利 点 の 一 つは、(.NET Framework や MsHtmlSetup などの 必 要 条 件 を 除 き) 管 理 者 権 限 を 必 要 としないでア<br />
プリケーションをインストールしたり、アップグレードできる 方 法 が 提 供 できることです。<br />
注 意<br />
Web サーバに、.NET のインストール 処 理 が 組 み 込 まれていない 場 合 、MIME タイプ 拡 張 を 定 義 する 必 要 があり<br />
ます。<br />
以 下 の 操 作 で 定 義 できます。<br />
1. IIS を 開 きます。<br />
2. Web サイトのプロパティを 開 きます。<br />
3.[HTTP ヘッダー]タブをクリックします。<br />
4.[MIME マップ]グループ 上 の[ファイルの 種 類 ]ボタンをクリックします。<br />
5. ウィンドウが 開 いたら、[ 追 加 ]ボタンをクリックします。<br />
6. 以 下 の 値 を 設 定 します。<br />
拡 張 子<br />
.manifest<br />
.application<br />
コンテンツの 種 類<br />
application/x-ms-manifest<br />
application/x-ms-application<br />
.NET マニフェストファイル<br />
アプリケーションを 実 行 するためのフレームワークが 得 られたら、アプリケーションをどのように 実 行 するかを 定 義 する 必 要 が<br />
あります。つまり、<strong>Magic</strong> アプリケーションをどのように 認 識 し、 実 行 させるかを Click Once に 教 える 必 要 があります。これに<br />
ついては、.NET のマニフェストファイルで 経 由 で 実 現 できます。ここには、Click Once の 起 動 メカニズムをどのように 組 み 込<br />
むかを 定 義 する 記 述 が 含 まれています。<br />
<strong>Magic</strong> xpa のリッチクライアントインタフェースビルダ<br />
<strong>Magic</strong> xpa では、「リッチクライアントインタフェースビルダ」と 呼 ばれる、 簡 単 に .NET マニフェストファイルを 定 義 すること<br />
ができるユーティリティを 提 供 しています。これは、プロジェクトを 開 いている 状 態 でプルダウンメニューから[オプション /<br />
インタフェース ビルダー / リッチクライアント]を 選 択 することで 起 動 することができます。<br />
45
リッチインターネットアプリケーションのチュートリアル<br />
このユーティリティは、 必 要 な 手 順 をウィザード 形 式 で 示 しながら HTML とマニフェストファイルを 作 成 していくものです。こ<br />
のウィザードでは、Click Once で 起 動 されるリッチクライアントモジュールの 名 前 を 指 定 します。1 つの <strong>Magic</strong> アプリケーショ<br />
ンに 対 して 複 数 のリッチクライアントモジュールとマニフェストファイルを 定 義 することもできます。<br />
ユーティリティ 内 で、リッチクライアントモジュールが 読 み 込 まれた 場 合 、 最 初 に 起 動 するプログラムを 指 定 します。 起 動 され<br />
るプログラムは、[ 公 開 名 ]カラムと[ 外 部 ]カラムが 設 定 されていなければなりません。<br />
リッチクライアントインタフェースビルダは、2つの 外 部 ファイルを 作 成 します。<br />
• HTML ファイル …… クライアントでの Click Once の 有 効 性 をチェックし、 必 要 であればインストールします。ここに<br />
は、 起 動 プログラムなどのいくつかのアプリケーション 実 行 環 境 などの XML 定 義 が 含 まれています。<br />
• マニフェストファイル …… サーバパスなどのアプリケーション 環 境 が 含 まれています。<br />
ノート<br />
マニフェストファイルと HTML ファイルは、 常 に Web サーバ 上 の 同 じフォルダに 配 置 してください。<br />
<strong>Magic</strong> エンジンをアップデートした 場 合 、マニフェストファイルを 必 ず 再 作 成 してください。<br />
マニフェストファイルの 保 護<br />
.NET のマニフェストファイルを 実 行 させるためには、 証 明 書 を 使 用 して 署 名 する 必 要 があります。これはリッチクライアント<br />
インタフェースビルダを 使 用 する 際 に、 証 明 書 とそのパスワードを 指 定 することで 可 能 になります。<br />
ノート<br />
<strong>Magic</strong> xpa のインストール 時 に 提 供 されたテスト 用 の 証 明 書 (test.pfx)は、 発 行 元 が 確 認 できないため 運 用 環 境<br />
では 使 用 しないことを 推 奨 します。 通 常 は、 発 行 元 が 確 認 できるような 特 定 機 関 の 証 明 書 を 使 用 してください。<br />
マニフェストファイルの 変 更<br />
インタフェースビルダで 作 成 されたマニフェストファイルは 署 名 されているため、テキストエディタで 変 更 すると 使 用 できなく<br />
なります。 通 常 は、 運 用 環 境 を 元 にマニフェストファイルを 作 成 して 配 布 することを 推 奨 します。マニフェストファイルの 作 成<br />
後 にファイルを 修 正 する 場 合 は、 修 正 後 にマニフェストファイルを 手 動 で 署 名 し 直 す 必 要 があります。<br />
マニフェストファイルを 署 名 するには、Microsoft 社 が 提 供 しているツールユーティリティ(Mage.exe または、MageUI.exe)を<br />
使 用 します。これは、.NET Framework の SDK に 同 梱 されているツールで、Microsoft 社 のサイトからダウンロードすることがで<br />
きます。Mage.exe は、<strong>Magic</strong> xpa Enterprise Studio のインストールフォルダにもコピーされています。<br />
マニフェストファイルの 変 更 は、 以 下 の 手 順 で 行 います。<br />
1. テキストエディタでマニフェストファイルを 修 正 します。 以 下 の 行 以 外 は、 修 正 しないでください。<br />
• <br />
• <br />
2. 以 下 のコマンドを 実 行 し、マニフェストファイルを 署 名 します。<br />
mage -Sign xxx.application -Certfile text.pfx -Password test<br />
• xxx.application ……マニフェストファイル 名<br />
• text.pfx ……<strong>Magic</strong> xpa が 提 供 している 証 明 書 ファイル。<strong>Magic</strong> xpa Enterprise Studio のインストールフォルダ 内 の<br />
Buiders\RC にコピーされています。 特 定 機 関 によって 発 行 された 証 明 書 がある 場 合 は、そのファイルを 指 定 してくだ<br />
さい。<br />
• test …… 証 明 書 でマニフェストに 署 名 する 場 合 に 使 用 するパスワード。<strong>Magic</strong> xpa が 提 供 している 証 明 書 ファイルを 使<br />
用 する 場 合 は、「test」と 指 定 してください。 特 定 機 関 によって 発 行 された 証 明 書 を 使 用 する 場 合 は、その 証 明 書 用 のパ<br />
スワードを 指 定 してください。<br />
ノート<br />
• html ファイルは、 署 名 する 必 要 がありません。<br />
• ツールの 詳 細 説 明 は、Microsoft 社 の 以 下 のサイトを 参 照 してください。<br />
http://msdn.microsoft.com/ja-jp/library/acz3y3te%28VS.80%29.aspx<br />
46
リッチインターネットアプリケーションのチュートリアル<br />
実 行 モード<br />
リッチクライアント・アプリケーションを 正 しく 実 行 させるには、<strong>Magic</strong> エンジンの 実 行 モードを「バックグラウンド」に 設 定<br />
する 必 要 があります。オンラインモードは、 開 発 環 境 でアプリケーションをデバッグする 際 に 使 用 してください。<br />
初 期 プログラム<br />
外 部 からプログラムを 呼 び 出 す 場 合 は、このプログラムの[ 外 部 ]カラムをチェックする 必 要 があります。<br />
このプログラムのフォームは SDI として 定 義 することを 推 奨 します。<br />
このプログラムが 起 動 されると、 新 しいコンテキストが 自 動 的 にオープンされ、その 後 のすべてのプログラムはそのタスクツ<br />
リー 内 で 実 行 されます。<br />
ノート<br />
リッチクライアントの MDI を 使 用 する 場 合 は、 初 期 プログラムは 必 要 ありません。<br />
アプリケーションの 実 行<br />
アプリケーションをデプロイすると、URL を 指 定 して HTML ファイルを 開 くことでアクセスできます。URL を 指 定 してアプリ<br />
ケーションをインストールする 処 理 は、PC 上 で 最 初 にアプリケーションを 実 行 する 場 合 のみ 必 要 です。 最 初 にアプリケーショ<br />
ンを 起 動 する 際 に、ClickOnce はスタートメニューにアプリケーション 起 動 用 のショートカットを 作 成 します。 次 回 アプリケー<br />
ションを 起 動 する 場 合 は、このショートカットをクリックするだけになります。 従 って、ClickOnce をスタートするために 初 期<br />
起 動 時 のみ Web ブラウザを 利 用 します。<br />
既 知 の Web ブラウザの 問 題<br />
• Google Chrome …… このブラウザを 使 用 した 場 合 、ダウンロードエリアにマニフェストファイルをダウンロードするだ<br />
けで、 実 行 させることはできません。<br />
• Fire Fox …… このブラウザは、ClickOnce アプリケーションを 実 行 するためのアドオンが 提 供 されています<br />
(https://addons.mozilla.org/en-US/firefox/addon/1608)。<br />
他 の 既 知 の 問 題<br />
ClickOnce は、 統 合 プロキシ 認 証 のみサポートしています。 基 本 認 証 、フォーム 認 証 等 はサポートしません。<br />
ユーザ 認 証<br />
ユーザー 認 証 は、オンライン 環 境 と 同 じように 実 装 されているため、 同 じように 扱 うことができます。<br />
アプリケーションを 起 動 するとき、ユーザー 認 証 が 必 要 かどうかは 動 作 環 境 (MAGIC.INI)で 指 定 します。ログオンダイアログ<br />
を 必 要 とする 場 合 、 実 行 エンジンは <strong>Magic</strong> xpa のログオンダイアログを 表 示 します。<br />
アプリケーションの 起 動 時 に 環 境 変 数 を 取 得 する<br />
アプリケーションの 起 動 時 に 環 境 変 数 を 取 得 する 場 合 は、HTML ファイル 内 の envvars パラメータに 環 境 変 数 を 指 定 することで<br />
可 能 になります。この 設 定 は、リッチクライアントインタフェースビルダを 使 用 する 際 に 指 定 することができます。<br />
これらの 環 境 変 数 はサーバに 送 られ、リッチクライアントモジュールがクライアント 側 で 読 み 込 まれる 前 に 取 得 することができ<br />
ます(ClientOSEnvGet 関 数 とは 対 照 的 です)。この 方 法 を 使 用 することで、GetParam 関 数 で 環 境 変 数 を 取 得 し、それに 応 じた 初<br />
期 設 定 処 理 を 行 うことができます。<br />
アプリケーションにパラメータを 渡 す<br />
起 動 時 の URL を 使 用 してリッチクライアントにパラメータを 渡 すことができます。このパラメータの 値 は、GetParam 関 数 を 使<br />
用 することでアプリケーション 側 で 取 得 することができます。<br />
例 えば、リッチクライアントアプリケーションを 以 下 の URL で 起 動 した 場 合 を 想 定 します。<br />
http://server/<strong>Magic</strong>2xRIAApplications/projects/project.application?N1=v1&N2=v2<br />
v1 の 値 は GetParam('N1') で、v2 の 値 は GetParam('N2') で 取 得 できます。 指 定 できる 値 は 文 字 データのみで、UTF-8 でエンコード<br />
されます。このため 日 本 語 を 渡 す 場 合 は、アプリケーション 側 で UTF8toAnsi 関 数 を 使 用 して 変 換 する 必 要 があります。<br />
47
リッチインターネットアプリケーションのチュートリアル<br />
第 9 章 オフラインアプリケーションの 開 発<br />
アプリケーションにオフライン 機 能 とローカル・データソースと 追 加 すると、アプリケーションの 性 能 を 向 上 させることがで<br />
き、ネットワーク 上 のトラフィックを 減 らすことができます。<br />
詳 細 は『オフラインアプリケーションの 開 発 』を 参 照 してください。<br />
48
リッチインターネットアプリケーションのチュートリアル<br />
第 10 章 モバイル 用 の RIA アプリケーションの 開 発<br />
モバイル 端 末 からアプリケーションに 接 続 できたら 非 常 に 便 利 になります。モバイル 端 末 上 で 実 行 されるアプリケーションを 開<br />
発 するために、RIA テクノロジーを 使 用 することができます。これによりデスクトップ 上 での RIA アプリケーションと 同 じルッ<br />
ク&フィールを 持 つことができます。<br />
詳 細 は、『モバイル RIA 開 発 者 ガイド』を 参 照 してください。<br />
49