3.3.1 クライアント処理

再利用可能パーツまたは Web ページからのサーバー・ルーチン (SrvRoutine) 実行は、他のリモート・プロシージャ・コールとほぼ同じです。

最もシンプルな形式としては、SrvRoutine 呼び出しによるデータ受信機能があり、データはフィールドやリストに直接戻され、ページに表示されます。以下のコードでは、SrvRoutine は定義後すぐに実行されます。戻されたデータはビジュアル・リスト・コンポーネント #List に直接マッピングされます。

 

Mthroutine Name(Load)
 
* サービス・インスタンスを定義して、非同期に実行
Define_Com Class(#ServerModule.GetEmployees) Name(#GetEmployees)
 
* 戻ったデータを直接画面上のリストにマッピング
#GetEmployees.ExecuteAsync( #List)
 
Endroutine
 

SrvRoutine を起動するために使用されているコマンドが ExecuteAsync であることに注目してください。これは、非同期に実行されることを表しています。つまり、Web ページまたは再利用可能パーツの RDMLX は、SrvRoutine からデータが戻されるのを待つ間も引き続き実行されているということです。ですから ExecuteAsync の直後に #List を処理する場合、未完成のデータ・セットが処理される可能性があります。

これは、複雑ではないコーディングではありますが、特に信頼性は高いとは言えません。接続エラーの場合、アプリケーションを保護してくれるものが何もないので、通常は必要なデータすべてが戻るまでは処理を行いません。(そうでなければ、予期せぬ結果を招く可能性があります。)

この SrvRoutine を更に進展させた次のコードでは、戻されたデータを一時リストに入れられ、SrvRoutine 完了通知を受けた時のみ、このリスト処理が行われます。また、Completed (完了) と Failed (エラー) のイベントが追加され、アプリケーションがサーバー・モジュール処理を監視して、適切な対応ができるようになっています。

 

Def_List Name(#Employees) Fields(#Empno #Surname #Givename #Empthm …) Type(*working)
 
Mthroutine Name(Load)
 
  * サービス・インスタンスを定義して、非同期に実行
  Define_Com Class(#ServerModule.GetEmployees) Name(#GetEmployees)
 
  #GetEmployees.ExecuteAsync( #Employees )
 
  * サーバーからのデータ送信完了
  Evtroutine Handling(#GetEmployees.Completed)
 

    * リスト・データのロード
    Selectlist Named(#Employees)
       Add_Entry To_List(#List)
     Endselect

   Endroutine
 
  * サーバー呼び出しのエラー時
  Evtroutine Handling(#GetEmployees.Failed)
   
    * エラー処理
 
  Endroutine

 

Endroutine
 

 

注意 - リストはこの例のように作業リストに戻すこともできますし、UDC も可能です。

サーバー・モジュール呼び出しについての詳細は、「19.3 同期と非同期データベース・アクセス」を参照してください。