Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


Valenceの一時的なワークファイルデータのクリーンアップ

(※このトピックスは、Valence開発元(米CNX社)のブログ記事を翻訳・再編集したものとなります。原文記事は、コチラとなります。)

ほとんどの場合、Valence Portal 内で実行されるアプリケーションは、必要なデータを会社の IBM i またはリモートデータベースから直接取得し、中間ステップを必要とせずに適切な情報をユーザーに提供します。そのため、アプリが完了した後に「後始末」をする必要はありません。

しかし、より複雑なシナリオの場合、プロセスをサポートするためにバックエンドの作業ファイルが必要になることがあります。

このような場合、バックエンドのプログラムがシステムにデータを蓄積していくので、不要な一時データでディスク容量が一杯にならないように、最終的にはクリーンアップする必要があります。

作業ファイルのためにQTEMPライブラリを使用することは、CGIジョブが終了するとそこで作成された作業ファイルがすべて廃棄されるため、多くのクリーンアップ作業に対処する必要性を軽減するための一般的な方法です。しかし、ジョブ固有のQTEMPライブラリを使用することは、ページごとのグリッドロードを行う場合など、常に推奨されるわけではありません。以前のブログ記事で説明したように、最初のページロードのためにQTEMPデータを作成した同じCGIジョブが、2番目のページをロードする呼び出しを処理するとは保証できないからです。

(1) ユーザーがポータルからログアウトまたはタイムアウトするたびに呼び出されるグローバルな終了プログラム、または (2) ユーザーがアプリを閉じるたびに呼び出される終了プログラムを介して。両方の方法を試してみましょう。

(1) ログアウト時のグローバル終了プログラムの呼び出し

ユーザーがログオフするか、タイムアウトやブラウザーを閉じることによって起動されるまで、ワーク・ファイル・データのクリーンアップを心配する必要がない場合、これは最もシンプルでキャッチオールなメカニズムとして使用することができます。VALENCE6ライブラリーのRPGプログラムEXEXITPGMをテンプレートとして使用し、LOGOUTセクションまでスキップして、次のサンプル・コードをご覧ください。

Logout exit program

この場合、SQLを使って、ログアウトしたセッションに対応するセッションIDのレコードを削除しています。 “vvsid”フィールドは、最初の入力パラメータで渡されたセッションデータにより、プログラムの開始時に入力されます。

プログラムをコンパイルしたら、[ポータル管理] > [設定] > [出口プログラム] > 「セッション ログアウト」で、この図のように登録する必要があります。

Exit program settings

(2) アプリ終了時のグローバル終了プログラムの呼び出し

場合によっては、ユーザーがログアウトするまで待つのではなく、特定のアプリケーションを終了するたびにクリーンアップやその他の特別なタスクを実行したいことがあります。このシナリオを処理するには、アプリが閉じられるたびに特定のRPGプログラムを呼び出すように、Valence Portalの特別なフロントエンド命令を設定します。そのプログラムは、どのアプリが終了しているかを判断し、それに応じて動作することができます。

このタイプのRPGプログラム用のテンプレートはありませんが、EXSQLJSONのような単純なものを出発点として使用することができ、これにはValence RPG ToolKit にアクセスするために必要なコピー・ソースが含まれているからです。あなたのプログラムは、次のような行を使用してアプリIDを引き出すことから始める必要があります。

appId = vvIn_num(‘closing_appId’);

このアプリIDをもとに、プログラムが実行すべきクリーンアップタスクやその他の処理を決定します。アプリIDはVVAPPNAMEフィールドを通じてVVAPPSファイルから直接引き出すことができます。

終了プログラムがコンパイルされたら、Valenceディレクトリの/resources/desktop/フォルダにあるHook.jsというフロントエンド設定「フック」ファイルを使って、そのプログラムを呼び出すようポータルに伝える必要があります(つまり、/valence-6.0/resources/desktop/Hook.jsということです)。このファイルは、Valenceのアップデートを適用するたびに上書きされない特別なファイルなので、ここで行った変更はビルド間で「固定」されます。

Nitro IFS Explorer アプリを使用してこのファイルを開き、「closeapp」関数までスクロールダウンすることができます。この部分の JavaScript は、すべてのアプリの終了に連動して実行されるので、以下のようにバックエンドの RPG プログラムへの呼び出しを挿入してください。

Hook.js adjustments for app close

Hook.jsのこの調整が保存されると、次回のポータルへのログインから、アプリが閉じられるたびに、このプログラム(この場合はMY_EXITPGM)が呼び出されるようになります。この終了プログラムは、特定のValenceアプリに属していないため、最初はVVCALLプログラムによって「異物」とみなされ、次のようなエラーメッセージが表示される場合があることに注意してください。

Error when calling exit program

この権限の問題を解決するには、[ポータル管理] > [設定] > [IBM i 設定] > “権限チェックなしで呼び出せるプログラム” にアクセスし、「編集」リンクをクリックして、ここに描かれているように、終了プログラムをリストに追加してください。

Settings adjustment for app close exit program

ただし、ユーザーのパソコンが突然の電源断やフリーズした場合など、(2)のロジックがスキップされる可能性があるため、(1)も適用しておくとよいでしょう。