リッチクライアントとオンラインの違い

以下は、リッチクライアントタスクがオンラインタスクと異なる点を挙げたものです。

オンラインからリッチクライアントへ

オンラインプログラムは、インタラクティブなリッチクライアント・プログラムに変更されます。

他のプログラムの呼び出し

[コール]処理コマンドの[出力先]特性において

プログラムが別のプログラムを呼び出す場合、オンラインプログラムの場合、プログラムの[並行起動]特性が設定されていない限り、呼び出し元のプログラムは中断されます。しかし、リッチクライアントプログラムが別のプログラムを呼び出す場合は、呼び出したプログラムは、呼び出されたプログラムと同時に一つのコンテキストで実行し続けます。並行実行プログラムを呼び出した場合、呼び出されたプログラムは新しいサーバコンテキストを開き、新しい実行ツリー上の最初のプログラムとして動作します。

並列実行プログラムを呼び出すプログラムを終了しても、呼び出されたプログラムは閉じません。

標準のオンラインプログラムの動作をシミュレーションするには、呼び出されたプログラムのフォームを「モーダル」に設定してください。これは、プログラムの[ウィンドウタイプ]特性を「モーダル」に設定することによって実行されます。

呼び出されたプログラムの[ウィンドウタイプ]が「デフォルト」に定義されている場合、自動的に設定されます。

処理コマンド

サポートされない処理コマンド

以下の処理コマンドは、リッチクライアントタスクではサポートされません。

[エラー]処理コマンド

リッチクライアントタスクでは、[エラーログ]特性が「Yes」に設定された[エラー]処理コマンドは、InternalLogFile が設定されている場合のみ動作します。

リッチクライアントタスクから呼び出されるバッチタスクでは、[エラー]処理コマンドはバッチタスクが終了した後で、クライアント側で実行されます。

[項目更新]処理コマンド

リッチクライアントタスクでは、加算更新をサポートしません。

サポートされない関数

Magic xpaの関数のいくつかは、リッチクライアントタスクで利用できません。ただし、簡単に回避することもできます。いくつかの関数は、特定のロジックユニットでサポートされません。たとえば、KBPut()とKBGet()は、サポートされません。これらの関数の代わりに、[イベント実行]処理コマンドと[イベント]ロジックユニットを使用して同等機能を実装する必要があります。

以下の関数は、サポートされません:

 

* クライアント側のダイアログを開く場合は、ClientDirDlgを使用します。

**クライアント側でファイルダイアログを開く場合はClientFileOpenDlg関数とClientFileSaveDlg関数を使用します。

注意:

リッチクライアントタスクの場合、実行モードがバックグラウンドに設定された場合のみUser関数が動作します。

イベント

内部イベント

[ユーザアクションxx]イベントのようないくつかの内部イベントは、リッチクライアントタスクでは利用できません。通常は、これらのイベントの代わりにユーザイベントを作成して使用します。

タスクをリッチクライアントタスクに移行した場合、メインプログラム内に同名のユーザイベントが定義されていれば、[ユーザアクションXX]イベントは自動的に通常のユーザイベントに変換されます。

このようなイベントが[モデル]リポジトリに定義されていれば、リッチクライアント準備ユーティリティによってユーザイベントに変換されます。従って、準備ユーティリティを実行する前にメインプログラムにユーザイベントを定義することを推奨します。

以下のイベントはサポートされません。

OSコマンド

アプリケーションクローズ

アプリケーションを開く

オブジェクトの挿入

コンテキストがフォーカス取得

コンテキストがフォーカス喪失

マルチマーキングイベント

ユーザアクションxx

その他のウィンドウ

開始値

下行

次語

次のウィンドウ

上行

前のウィンドウ

前語

入出力ファイル

終了値

 

以下のイベントは、リッチクライアントタスクでのみ有効です。

ユーザイベント

[ユーザイベント]テーブルで[強制終了]カラムを「レコード更新前」に設定した場合[コントロール検証]ロジックユニットは以下のように動作します。

.NETイベント

フォームに配置されない.NETオブジェクトに対して:オンラインタスクでは、すべてのコンテキストでイベントが発行され、リッチクライアントでは、現在のコンテキスト内でのみ発行されます。

リッチクライアントタスクの呼び出し

リッチクライアントプログラムが呼び出された場合、CallProg関数でタスクの戻り値は戻りません。これは、式が、プログラムの終了を待たないためです。この関数によって呼び出された並行実行のリッチクライアントプログラムは並行起動でないプログラムとして実行されます。

バッチタスク

バッチタスクはリッチクライアントタスクから呼び出された場合は、ウィンドウを表示しません。これは、バッチタスクがサーバ側のバックグラウンドエンジン上で実行されるためで、インタラクティブなリッチクライアントとして呼び出すことができず、フォームを表示しないからです。クライアント側でインタラクティブでないタスクを実行する必要がある場合は、リッチクライアントタスクを、非インタラクティブとして設定することで可能になります。

C/SからRIAに既存のプログラムを移行する場合は、バッチタスクは自動的に非インタラクティブなリッチクライアントに変換されます。

入出力

リッチクライアントタスクでは、[入出力]テーブルや入出力関連の関数はサポートされません。

帳票

帳票処理は、PDFファイルとして出力し、表示プログラムを使用してPDFを表示することによって実現できます。PDFはクライアントに転送したり保存するか、クライアントからリモートアクセスすることができます。この例は、RIAのホワイトペーパを参照してください。ここの例では、帳票を表示するために、[ブラウザ]コントロールを使用しています。

デフォルトのプリンタに出力したり、印刷ダイアログや印刷プレビュー機能は利用できません。これは、印刷がサーバ側のバックグラウンドエンジン上で処理されるため、フォームが表示されないバッチタスクで行われるからです。

フォーム

以下のフォーム特性は、動作が異なります。

[コール]処理コマンドでフォームを指定することができません。

モーダルウィンドウは、他の全てのタスクのフローを停止させます。このため、最初にこのウィンドウを閉じることなく別のウィンドウをクリックすることはできません。

ファントムタスク

[サブフォーム]コントロールを利用した場合、ファントムタスクはC/Sアプリケーションでは必要ありません。ただ、この機能の既存のアプリケーションに存在している可能性があります。

リッチクライアントでは、[ウィンドウを閉じる]特性が無効になり「No」が設定されます。従って、リッチクライアントプログラムが終了した場合、ウィンドウは常に閉じます。別のプログラムが実行中に、プログラムのウィンドウを開いたままにしたいようなRIAに移行する場合は、非モーダルのリッチクライアントフォームを使用するか、呼び出し側でサブフォームを定義し、ファントムタスクのようにな動作になるように定義する必要があります。

呼び出し側に定義された[コール]処理コマンドは削除する必要があります。

コントロール特性

以下のコントロール特性は完全にサポートされていません:

共通

[ラジオボタン]コントロール

[チェックボックス]コントロール

[テーブル]コントロール

[カラム]コントロール

[ツリー]コントロール

コントロールの動作

コントロールによっては、リッチクライアント環境では異なる動作になります。プログラムを開発する際にこれらを考慮するために、以下の違いについて理解しておいてください。

[ブラウザ]コントロール

[ブラウザ]コントロールは、リッチクライアントでのみサポートします。

[RTFエディット]コントロール

色やフォント、または箇条書の設定を設定する場合は、オンラインの動作と異なります。

[RTFエディット]コントロールには、デフォルトで表示されるコンテキストメニューが組み込まれていません。エンドユーザに対して、[RTFエディット]コントロールの色またはフォントを変更することができるようにするには、Magic xpaの内部イベントをメニューに定義することで可能になります。例えば色やフォントを変更したり、左側や左側に整列させたりするイベントをメニューに定義し、このメニューをコントロールの[コンテキストメニュー]特性に割り当てることができます。

パーク不可のコントロールをクリックした後のキャレットの位置

[テーブル]コントロール

[サブフォーム]コントロール

オンライン環境では、タスクがサブフォームで表示されている場合、キャレットがタスクを抜けると、タスクは自動的に終了します。リッチクライアント環境では、コンテナタスクが終了するまでタスクは実行し続けます。ここに、注意すべき問題があります:

データ項目

OLE型項目はサポートされません。必要であれば、サーバ側で実行されるバッチプログラムに転送してください。

ステータスバー

リッチクライアントアプリケーションのステータスバーはメッセージセクションだけを含んでいるため、エラーメッセージや自動ヘルプを表示するこのとみ可能です。例えば「ズーム」や「挿入」、「上書」等は表示されません。

これは、コントロールにズームハンドラが定義されていても、この機能があることをステータスバーには表示されないことを意味しています。コントロールやモデルの自動ヘルプにてこの機能が組み込まれていることを表示させる必要があります。

SpecialShowStatusBarPanes を設定することで、ステータスバーにタスクモードを表示させることができます。

物理トランザクション

物理トランザクションはサポートされません。

データの修正(作成、更新、削除)が必要なリッチクライアントプログラムでは、遅延トランザクションが必要です。遅延トランザクションが設定されない場合、データの読み込みのみ可能です。

プログラムへの連続的なアクセスを行う手段として、アプリケーションがデータベースに対する物理ロックに依存する場合、プログラマーはこの代替案を見つけなければなりません。1つの可能な選択肢は、Lock()とUnlock()関数を利用することです。

並行コンテキスト

メインプログラムの[代入]特性はリッチクライアントタスクではサポートされません。

並行のコンテキスト間でイベントを発行することはサポートされません。リッチクライアントタスク内では複数のタスクを同時に実行させることができるので、並行プログラムの使用を減らすことができます。

適用可能であれば、呼び出されるプログラムの[並列実行]特性を無効にすることができます。プログラムの呼び出しの際の、並行実行と非並行実行の違いに気をつけてください。

環境設定

Magic xpa RIA Serverのライセンス(MGRIA12)は、リッチクライアントタスクのみ起動することができます。Magic xpa Enterprise Serverのライセンス(MGENT12)では起動できません。

ライセンスのユーザ数は、[動作環境]の[最大並行ユーザ数]に定義された値がMagicエンジンの起動時に消費されます。[最大並行ユーザ数]が「0」かライセンス上のユーザ数を越えている場合は、ライセンスのユーザ数分が消費されます。

注意:

SQL系のDBMSを利用する場合、[DBMS特性]の[最大接続数]特性の設定値を超えて接続する場合があります。各インスタンス毎で使用する最大スレッド数又はユーザ数の3倍を設定してください。

(例)20ーザ(RichClient Server)の場合……60

それでも最大接続数を超えるエラーが発生した場合は、設定値を大きくしてください。最大接続数を超えた場合、mgerror.logに「サーバに接続できません.最大接続数に達しました.」のエラーが記録されます。

 

[カーソルの画面中央位置付]は、サポートされません。

クライアントとサーバ側の式

クライアント側の式は、[代入]特性に指定できません。

混在した式は定義できません。

他方で実行されるで式を使用した混在する処理コマンドを使用することができません。

コントロールとフォームの特性にサーバ側の式を使用することができません。

関連トピック:

用語の変更

オフラインと非オフラインの違い