以下は、リッチクライアントタスクがオンラインタスクと異なる点を挙げたものです。
オンラインプログラムは、インタラクティブなリッチクライアント・プログラムに変更されます。
[コール]処理コマンドの[出力先]特性において
リッチクライアントタスクでは、この特性が実行時のツリー内の出力先を探します。
オンラインタスクでは、この特性は、現在のタスクの子となるサブフォームタスクのみ探します。
プログラムが別のプログラムを呼び出す場合、オンラインプログラムの場合、プログラムの[並行起動]特性が設定されていない限り、呼び出し元のプログラムは中断されます。しかし、リッチクライアントプログラムが別のプログラムを呼び出す場合は、呼び出したプログラムは、呼び出されたプログラムと同時に一つのコンテキストで実行し続けます。並行実行プログラムを呼び出した場合、呼び出されたプログラムは新しいサーバコンテキストを開き、新しい実行ツリー上の最初のプログラムとして動作します。
並列実行プログラムを呼び出すプログラムを終了しても、呼び出されたプログラムは閉じません。
標準のオンラインプログラムの動作をシミュレーションするには、呼び出されたプログラムのフォームを「モーダル」に設定してください。これは、プログラムの[ウィンドウタイプ]特性を「モーダル」に設定することによって実行されます。
呼び出されたプログラムの[ウィンドウタイプ]が「デフォルト」に定義されている場合、自動的に設定されます。
サポートされない処理コマンド
以下の処理コマンドは、リッチクライアントタスクではサポートされません。
コールCOM
フォーム
[エラー]処理コマンド
リッチクライアントタスクでは、[エラーログ]特性が「Yes」に設定された[エラー]処理コマンドは、InternalLogFile が設定されている場合のみ動作します。
リッチクライアントタスクから呼び出されるバッチタスクでは、[エラー]処理コマンドはバッチタスクが終了した後で、クライアント側で実行されます。
[項目更新]処理コマンド
リッチクライアントタスクでは、加算更新をサポートしません。
Magic xpaの関数のいくつかは、リッチクライアントタスクで利用できません。ただし、簡単に回避することもできます。いくつかの関数は、特定のロジックユニットでサポートされません。たとえば、KBPut()とKBGet()は、サポートされません。これらの関数の代わりに、[イベント実行]処理コマンドと[イベント]ロジックユニットを使用して同等機能を実装する必要があります。
以下の関数は、サポートされません:
FileDlg** |
PPD |
* クライアント側のダイアログを開く場合は、ClientDirDlgを使用します。
**クライアント側でファイルダイアログを開く場合はClientFileOpenDlg関数とClientFileSaveDlg関数を使用します。
注意: |
リッチクライアントタスクの場合、実行モードがバックグラウンドに設定された場合のみUser関数が動作します。 |
内部イベント
[ユーザアクションxx]イベントのようないくつかの内部イベントは、リッチクライアントタスクでは利用できません。通常は、これらのイベントの代わりにユーザイベントを作成して使用します。
タスクをリッチクライアントタスクに移行した場合、メインプログラム内に同名のユーザイベントが定義されていれば、[ユーザアクションXX]イベントは自動的に通常のユーザイベントに変換されます。
このようなイベントが[モデル]リポジトリに定義されていれば、リッチクライアント準備ユーティリティによってユーザイベントに変換されます。従って、準備ユーティリティを実行する前にメインプログラムにユーザイベントを定義することを推奨します。
以下のイベントはサポートされません。
OSコマンド アプリケーションクローズ アプリケーションを開く オブジェクトの挿入 コンテキストがフォーカス取得 コンテキストがフォーカス喪失 マルチマーキングイベント ユーザアクションxx その他のウィンドウ |
開始値 下行 次語 次のウィンドウ 上行 前のウィンドウ 前語 入出力ファイル 終了値 |
以下のイベントは、リッチクライアントタスクでのみ有効です。
ユーザイベント
[ユーザイベント]テーブルで[強制終了]カラムを「レコード更新前」に設定した場合[コントロール検証]ロジックユニットは以下のように動作します。
オンラインタスクでは、データ項目が変更された場合のみ実行されます。
リッチクライアントタスクでは、常に実行されます。
.NETイベント
フォームに配置されない.NETオブジェクトに対して:オンラインタスクでは、すべてのコンテキストでイベントが発行され、リッチクライアントでは、現在のコンテキスト内でのみ発行されます。
リッチクライアントプログラムが呼び出された場合、CallProg関数でタスクの戻り値は戻りません。これは、式が、プログラムの終了を待たないためです。この関数によって呼び出された並行実行のリッチクライアントプログラムは並行起動でないプログラムとして実行されます。
バッチタスクはリッチクライアントタスクから呼び出された場合は、ウィンドウを表示しません。これは、バッチタスクがサーバ側のバックグラウンドエンジン上で実行されるためで、インタラクティブなリッチクライアントとして呼び出すことができず、フォームを表示しないからです。クライアント側でインタラクティブでないタスクを実行する必要がある場合は、リッチクライアントタスクを、非インタラクティブとして設定することで可能になります。
C/SからRIAに既存のプログラムを移行する場合は、バッチタスクは自動的に非インタラクティブなリッチクライアントに変換されます。
リッチクライアントタスクでは、[入出力]テーブルや入出力関連の関数はサポートされません。
帳票処理は、PDFファイルとして出力し、表示プログラムを使用してPDFを表示することによって実現できます。PDFはクライアントに転送したり保存するか、クライアントからリモートアクセスすることができます。この例は、RIAのホワイトペーパを参照してください。ここの例では、帳票を表示するために、[ブラウザ]コントロールを使用しています。
デフォルトのプリンタに出力したり、印刷ダイアログや印刷プレビュー機能は利用できません。これは、印刷がサーバ側のバックグラウンドエンジン上で処理されるため、フォームが表示されないバッチタスクで行われるからです。
以下のフォーム特性は、動作が異なります。
ウィンドウタイプ …… 次のウィンドウタイプはリッチクライアントタスクではサポートされません:「デフォルト」と「アプリケーションモーダル」
ウィンドウリストに表示 …… ウィンドウリストそのものがサポートされていません。
タイトルバー …… 式で指定できません。
[コール]処理コマンドでフォームを指定することができません。
モーダルウィンドウは、他の全てのタスクのフローを停止させます。このため、最初にこのウィンドウを閉じることなく別のウィンドウをクリックすることはできません。
オンラインタスクの場合は、並行実行タスクも停止します。
リッチクライアントタスクの場合は、並行実行タスクは停止しません。
[サブフォーム]コントロールを利用した場合、ファントムタスクはC/Sアプリケーションでは必要ありません。ただ、この機能の既存のアプリケーションに存在している可能性があります。
リッチクライアントでは、[ウィンドウを閉じる]特性が無効になり「No」が設定されます。従って、リッチクライアントプログラムが終了した場合、ウィンドウは常に閉じます。別のプログラムが実行中に、プログラムのウィンドウを開いたままにしたいようなRIAに移行する場合は、非モーダルのリッチクライアントフォームを使用するか、呼び出し側でサブフォームを定義し、ファントムタスクのようにな動作になるように定義する必要があります。
呼び出し側に定義された[コール]処理コマンドは削除する必要があります。
以下のコントロール特性は完全にサポートされていません:
共通
ヘルプ画面 …… URLヘルプのみサポートされます。
[ラジオボタン]コントロール
複数行 …… サポートされません。
テーブル内のラジオボタン …… ラジオボタンは[テーブル]コントロール内には定義できません。
[チェックボックス]コントロール
複数行 …… サポートされません。
[テーブル]コントロール
マルチマーク …… サポートされません。
下辺位置 …… サポートされません。
[カラム]コントロール
上境界線 …… サポートされません。
右境界線 …… サポートされません。
[ツリー]コントロール
マルチマーク …… サポートされません。
ツリー表示の保持 …… 「Yes」と同じように動作します。
コントロールによっては、リッチクライアント環境では異なる動作になります。プログラムを開発する際にこれらを考慮するために、以下の違いについて理解しておいてください。
[ブラウザ]コントロール
[ブラウザ]コントロールは、リッチクライアントでのみサポートします。
[RTFエディット]コントロール
色やフォント、または箇条書の設定を設定する場合は、オンラインの動作と異なります。
リッチクライアントプログラムでは、「バイナリ」のBLOB型に定義された変数をコントロールに割り当てます。
オンラインプログラムでは、「Unicode」のBLOB型に定義された変数をコントロールに割り当てます。
上記と異なるデータ型を使用した場合、色やフォント、または箇条書の設定はBLOBの内容が更新されると削除される場合があります。
[RTFエディット]コントロールには、デフォルトで表示されるコンテキストメニューが組み込まれていません。エンドユーザに対して、[RTFエディット]コントロールの色またはフォントを変更することができるようにするには、Magic xpaの内部イベントをメニューに定義することで可能になります。例えば色やフォントを変更したり、左側や左側に整列させたりするイベントをメニューに定義し、このメニューをコントロールの[コンテキストメニュー]特性に割り当てることができます。
パーク不可のコントロールをクリックした後のキャレットの位置
オンラインタスクでは、最も近いパーク可能なコントロールにキャレットが位置付けられます。
リッチクライアントタスクでは、現在の位置にとどまります。
[テーブル]コントロール
テーブル内に表示される変数項目の値を変更すると、そのカラムのすべての変数値が再表示されます。
テーブルを表示するためにスクロールバーを使用しても現在のレコードは動きません。
[サブフォーム]コントロール
オンライン環境では、タスクがサブフォームで表示されている場合、キャレットがタスクを抜けると、タスクは自動的に終了します。リッチクライアント環境では、コンテナタスクが終了するまでタスクは実行し続けます。ここに、注意すべき問題があります:
サブフォームの[タスク前]と[タスク後]のロジックユニットは異なる動作になります。
IsFirstRecordCycle()関数は、一回のみ実行されます。
様々なサブフォーム内で同じデータソースを使用する場合、[データソース名]特性を使用すると、そのデータソースを使用する全てのサブフォームに影響します。
サブフォームタスク内で(例えばEscボタン経由で)[終了]イベントを発行した場合、サブフォームのコンテナタスクでイベントが発行され、結果として両方のプログラムが終了することになります。親プログラムを終了させたくない場合は、[終了]イベントを捕捉するようにします。[終了]イベントが二回発生した場合は、親プログラムを終了するために補足をキャンセルするようにします。
サブフォームからTabキーを押下した場合に親の次のコントロールに移動するように定義することができます。[タブサイクル]の説明を参照してください。
リッチクライアントでサブフォーム領域をクリックすると、現在のコントロールにキャレットを保持し、フォーカスはサブフォームタスクに移動しません。
[非表示の再表示]特性を式で定義した場合、実行時の式の評価結果によって動作が変わります。式が、Trueと評価された場合
オンラインタスク …… サブフォームはすぐに再表示されます。
リッチクライアントタスク …… すぐに再表示されません。
[タスク前]または[レコード前]で処理コマンドを実行すると、例えば[エラー]処理コマンドのようにフォームの読み込みを中止します。そして、
リッチクライアント(非オフライン)の場合は、サブフォームはその処理コマンドの前に表示されます。
オンラインやリッチクライアント(オフライン)の場合は、サブフォームはその処理コマンドの後に表示されます。
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に「サーバに接続できません.最大接続数に達しました.」のエラーが記録されます。 |
[カーソルの画面中央位置付]は、サポートされません。
クライアント側の式は、[代入]特性に指定できません。
混在した式は定義できません。
他方で実行されるで式を使用した混在する処理コマンドを使用することができません。
コントロールとフォームの特性にサーバ側の式を使用することができません。
関連トピック: