メニューボタン
IBMi海外記事2025.11.12

独自のATTNプログラムを作成して周囲から注目を浴びる

Gregory Simmons 著

ほとんどのIBM i ユーザーは、あまり考えることなくアテンション キー(Attention key)を押していると思います。お馴染みのシステム提供メニューがポップ アップするのには慣れっこでしょう。あるいは、プロファイルの構成次第では、コマンド ラインかもしれません。しかし、システムの中には、強力なカスタマイズ ポイントが埋まっています。自分独自のATTNプログラムを割り当てることができるのです。そうすることにより、そのキーをインターセプトして、ご自分のショップのニーズにぴったり合うように調整された機能を提供することができるようになります。アテンション プログラムを設定する方法は主に3通りあり、それぞれに強みと弱みがあります。

一番分かりやすい方法は、ユーザー プロファイル レベルでの設定法です。ATNPGMパラメーターを設定する場所は、プロファイルの属性内にあります。そこでATNPGMパラメーターを設定すると、ユーザーがアテンション キーを押すたびに、指定されたプログラムが実行されます。これは、ユーザーがどこでサイン オンしても、プロファイルがユーザーを追い掛けているため、一番すっきりしているアプローチであるかもしれません。マイナス面としては、多くの開発者およびオペレーターは、自分のプロファイルを更新する権限を持たないことであり、つまり、代わりに管理者に変更してもらわなければならないということです。

2つ目の方法は、ジョブ レベルでの設定法です。(訳注:この段落は著者の誤認によるものと思われます。CHGJOBコマンドにおいてATNPGMパラメーターがサポートされている事実を確認できませんでした。)CHGJOBコマンドを使用して、現行ジョブのATNPGM設定を変更することができます。つまり、プロファイルそのものに触れる必要がないということであり、また、ジョブが終了するとすぐにその変更内容は消失します。これは、テストや一時的なオーバーライド向けにちょうど良いアプローチです。プロファイル変更の権限を持たないが、ジョブを変更する権限を持つ開発者には、これが一番実用的な方法だと思えるかもしれません。

3つ目の方法は、システム レベルでの設定法です。(訳注:この段落は著者の誤認によるものと思われます。システム値QATNPGMが*MENUパラメーターをサポートする事実を確認できませんでした。)システム値QATNPGMおよびQATNPGMLIBを設定することによって、システム上の誰に対しても適用されるデフォルトのアテンション プログラムを割り当てることができます。QATNPGM(*MENU)を指定した場合、システムはプログラムの代わりにアテンション メニューを呼び出します。そして、他のどのメニュー オブジェクトとも同じように、その内容をコントロールすることができます。この方法は、包括的な設定方法です。すなわち、それらのシステム値を変更した瞬間から、新たなアテンションの挙動が、すべてのユーザーに適用されます。それだけに、それらを変更するには、*SECADM権限(または、*SECOFRなどのより強力な権限)を必要とします。

臨時雇用の開発者は、この調整を行うことができません。それは良いことだと思われます。システム値を誤用すると、プログラムにバグが多い場合や、メニューで安全な出口パスが提供されない場合には、ユーザーに混乱を招いたり、さらにはユーザーをロック アウトしてしまったりすることもあるからです。

ATTNプログラムを割り当てる方法を理解できたら、今度は、ATTNプログラムが何を行うべきかを考える楽しみが始まります。まずは、CLプログラムを1つ書いてみます。最初なので、簡潔さが肝心です。コマンドを1つ発行し、最初に戻るだけのCLプログラムです。権限がある場合は、ユーザー プロファイルでそのプログラムを自分のATTNプログラムとして設定します。権限がない場合は、CHGJOBコマンドをプロンプトして、このプログラムを参照するようにATNPGMパラメーターを設定することで、テストを行うことができます。(訳注:この部分は著者の誤認によるものと思われます。CHGJOBコマンドにおいてATNPGMパラメーターがサポートされている事実を確認できませんでした。)

テストに使用できる、最も簡潔なプログラムを以下に示します。以下のコードで、QCLSRCにMYATTNというソース メンバーを作成します。

PGM
   DCL VAR(&MSG) TYPE(*CHAR) LEN(50)

   CHGVAR &MSG '*** Attention Key Pressed ***'
   SNDPGMMSG MSG(&MSG)

   RETURN
ENDPGM

これをCRTCLPGMでコンパイルして、次いで、CHGUSRPRF USRPRF(YOURUSER) ATNPGM(MYLIB/MYATTN)で、プロファイルを変更するか、または、現行セッションで、CHGJOB ATNPGM(MYLIB/MYATTN)を実行します。これで、アテンション キーを押すと常に、この小さなプログラムが起動し、そのメッセージを表示して、制御が戻されます。

まだまだ序の口です。この技法に慣れてきたら、それを無数の方向に広げることができます。たとえば、いつ、どこでアテンション キーが押されたかを記録したり、クイック コマンド用にユーティリティ メニューを提供したり、アプリケーションでアテンションをインターセプトして、ユーザーを安全な場所に導いたりすることもできます。ATTNプログラムは、小さな機能ですが、カスタマイズを行う機会は大きく広がります。

それでは、また、次回の記事で。楽しいコーディングを。

あわせて読みたい記事

PAGE TOP