| Runtime 外部オブジェクト | |
GeneXus.Common.Runtime 外部オブジェクトを使用して、さまざまな目的で特定の実行時プロパティを取得または設定できます。
アプリケーションがクライアント側でアクションを実行するときと、サーバー側でアクションを実行するときを実行時に区別できます。その目的は、開発者がプログラムでシステムのビジネスロジックに従って決定を行えるようにすることです (例: レコードの挿入タイムスタンプの決定、同期中にクライアントとサーバーで異なる場合がある)。
呼び出されたアクションが実行される環境の情報を指定する RuntimeEnvironment ドメイン (後述) に基づきます。
使用可能な実行時環境を示す列挙型ドメインです。
Server |
サーバー側 |
Device |
スマートデバイス環境のクライアント側 |
Browser |
Web 環境のクライアント側 |
このプロパティでは、プロセスが、たとえば [ Call protocol ] プロパティを Command Line に設定したプロシージャーの 1 つを停止したときに、終了コード (errorlevel) を設定できます。このプロパティは通常、バッチプログラムのフローを制御するのに使用されます。
既定値は 0 です。 異常停止 (例外) したプロセスの終了コードは 1 です。
注: 停止したプログラムによって設定された終了コードは、Windows バッチファイルの '%ERRORLEVEL%' 変数や Linux シェルの '$?' を使用して読み取ることができます。
このセクションには、Runtime 外部オブジェクトが役立つ簡単なユースケースを示します。
- [ Environment ] プロパティ - 同期中の時間差
オフライン スマート デバイス アプリケーションで、新しいレコードがデータベースに挿入されるとき、そのレコードにはデバイスのタイムスタンプ (実際のもの) が使用されますが、同期後にサーバーでは別のタイムスタンプが維持されます。この問題は、レコードを物理的に挿入するタイミングを開発者が制御することで回避できます。 次のトランザクションがあるとします:Task
{
TaskId* : Numeric(4.0)
TaskAbstract : Character(200)
TaskCreated : DateTime
}
Rules
noaccept(TaskCreated);
TaskCreated = now() if insert; アプリケーションがオフラインの場合、TaskCreated タイムスタンプの値はどちらになりますか。レコードがオフラインのデータベースに挿入された時点ですか、それともサーバーのデータベースに挿入された時点ですか。この問題を回避するために、次に示すように、TaskSynced 項目属性 (これも DateTime ベース) を指定し、両方のケースを区別できます:Task
{
TaskId* : Numeric(4.0)
TaskAbstract : Character(200)
TaskCreated : DateTime
TaskSynced : DateTime
}
Rules
noaccept(TaskCreated);
noaccept(TaskSynced);
TaskCreated = now() if insert and Runtime.Environment = RuntimeEnvironment.Device;
TaskSynced = now() if insert and Runtime.Environment <> RuntimeEnvironment.Device;
- [ Environment ] プロパティ - オフライン通知
スマート デバイス アプリケーションがオフラインアーキテクチャで動作するとき、通知を送信するプロセスを制御して、デバイスではなくサーバーから通知が送信されるようにする必要があります。この問題は、サーバーからの場合にのみ実行を限定する (RuntimeEnvironment.Server) ことで回避できます (ユースケース (1) に似ています)。
- [ ExitCode ] プロパティ - Errorlevel 設定
次のプロシージャーで終了コードが返されます (コンソールへの書き込みも行われます)。
データを正常に保存できた場合: プロシージャーで終了コード 0 が設定され、コンソールに "Data has been saved successfully" と書き込まれます。
データを保存できなかった場合: プロシージャーで終了コード 2 が設定され、コンソールに "Data could not be saved" と書き込まれます。
処理されなかったという例外が発生した場合 ('Client BC' がゼロ除算の場合): プロシージャーで終了コード 1 が設定され、コンソールに例外の詳細が書き込まれます。&Client.Id = 1
&Client.Name = "John"
&Client.Save()
If &Client.Fail()
rollback
msg("Data could not be saved",status)
GeneXus.Common.Runtime.Exitcode = 2
else
commit
msg("Data has been saved successfully",status)
endif
プラットフォーム |
スマートデバイス (Android、iOS)、Web (Java、.NET) |
この外部オブジェクトは、GeneXus 15 以降で利用できます。 [ ExitCode ] プロパティは、GeneXus 16 Upgrade 5 以降で利用できます。
|
|
|
|
|