画面サイズを変更する|ACSで簡単モダナイゼーション(短期連載③)

 

 

画面サイズを拡張しよう

 

 今回はIBM i Access Client Solutions(以下、ACS)の機能を利用して、画面サイズをシンプルな手順で変更する簡単モダナイゼーションを紹介しましょう。

 ご存じのとおり、5250画面の標準サイズは24×80です。この制限のためにアプリケーション開発者はいろいろと苦労しています。データ量の多い場合は複数の画面に分割したり、サブファイル行を複数にしたり、画面配置に苦慮したことでしょう。

 ところがエミュレータ・セッションの「画面サイズ」を変更すれば、この制約を大幅に緩和できます。このパラメータを変更すると、いったんセッションが切断されたのち再接続されますが、アプリケーションなどへの影響を心配する必要はありません。

 画面サイズには、下記の2種類があります。

 

24×80(*DS3)  バイト数=1920

27×132(*DS4)  バイト数=3564(約1.85倍)  (以下*DS3、*DS4と呼びます)

 

 *DS4は、*DS3と比較して1画面に表示できるデータが1.85倍になるので、より多くのデータを一度に表示できます。セッションの画面サイズを変更しても、ユーザー・アプリケーションの画面には一切影響を与えません。

 今まで標準サイズで運用してきたアプリケーション環境で、*DS4サイズのセッションから運用した場合でも、アプリケーション画面は何ら変化することなく、従来どおりに利用できます。

 サイズを変更することで、システム画面の一部を拡張表示したり、アプリケーション画面を大きくできるなどのメリットがあります。

 また27×132(*DS4)設定であれば、従来の24×80(*DS3)との共存も可能です。ただし24×80(*DS3)設定の場合、27×132(*DS4)の画面は処理できないので注意が必要です。

 

画面サイズの拡張で
システム画面が便利に

 まずは開発担当者のセッションを*DS4に変更して、日々の保守運用を行ってみてください(図表1)。とくに注意すべきことは何もなく、今までどおりに運用できます。

 

 設定を変更すると、エミュレータが再起動されるので、サイン・オフしてから変更しましょう。設定を変更したら、スプール表示画面を見てみます。従来の*DS3画面と比べると、表示されるスプールデータが増えているのがわかります。

 *DS3では1桁目から75桁目までが1画面で表示できる範囲でしたが、*DS4になると127桁目までの範囲を1画面で表示できるようになります。132幅のスプールであれば、ほぼ全体を表示できます(図表2)。

 

 

 

 次に、QRYの結果表示画面を見てみましょう(図表3)。*DS3では、70桁までの表示範囲が124桁までに拡張しています。RUNQRY(WRKQRY)コマンドだけでなく、SQLの結果画面も同様に拡張されます。

 

 またこの画面には「F22=幅80」のコマンドが追加され、従来の*DS3の表示画面に切り替えられます(*DS3セッションではこのコマンドは表示されません)。

 スプール表示やQRY照会はアプリケーションの修正が不要なので、すでに利用しているユーザーにも今すぐ役立ちます。

 

画面サイズの拡張で
アプリケーション画面が便利に

 表示できるデータ量が増えることで、画面デザインに拡張性が生まれます。

 

開発でのシステム画面 

 アプリケーションの開発保守にSEUを利用しているユーザーは多いでしょう。*DS4セッションでは、SEU画面も拡張されます(図表4)。これは、ソース・データ長が長くなったILEプログラムなどを編集する際に大変便利です。

 

 

 ソース長112のILE RPGを編集する場合、*DS3ではコメントエリアや行の最終変更日を画面上に表示できませんが、*DS4セッションではコメントおよび行の最終変更日も表示されるので、編集効率を高められます。ちなみにILE RPGのソース長は112以上の設定も可能です。

 現在IBMではプログラム開発ツールとして、RDi(IBM Rational Developer for i)を推奨しています。本稿では従来の開発手法であるSEUやSDAを使って解説しますが、操作方法などはRDiのほうが便利なので、ぜひ利用を推奨します(RDiについては別の機会に紹介する予定です)。

 

ユーザー・アプリケーション画面 

 *DS4画面のセッションを前提にすることで、アプリケーション画面も*DS4サイズで設計できようになります。図表5では、従来3画面を使っていた保守プログラムの画面が、1つの画面に統合されています。

 

 

 画面の編集にSDAを利用しているユーザーも多いかと思いますが、当然SDAも*DS4サイズに対応しています。実際に、*DS3の画面を*DS4に変更してみましょう(図表6)。

 

 

 画面ファイルのサイズを変更するには、ファイルレベル・キーワードのDSPSIZキーワードを使用します。このキーワードが省略されると*DS3の指定となりますので、指定がない場合は追加し、ある場合はパラメータを変更します(図表7)。

 

 

 

 パラメータを変更したら、再度SDA(PDMの17番)で開いてみると、編集画面が拡張されます(図表8)。網掛け部分が拡張されたエリアです。

 

 

 ただしこのままだと、左上にレイアウトが集中しているので、バランスのよいレイアウトに変更する必要があります。フィールドを1つ1つ移動させてもよいですが、特定エリアを一括して移動することも可能です。

 特定範囲を一括で移動させたい場合は、その範囲の最上行左端と最下行右端をハイフンで囲んで、移動エリアを指定します(図表9)。

 

 次に、移動させたいエリアの左上の位置に「=」を入れて、実行キーを押すと、エリア全体が移動します(図表10)。

 

 

 移動以外のフィールドの追加など画面エリアが広がったことで、画面全体を使って編集作業を行えます。

 ただし当然ながら、アプリケーション画面を変更するとプログラム側にも影響が出ます。とくにカーソルの位置を行番号や桁位置で判別して処理しているプログラムなどは、確実にこの影響を受けます。

 位置を少し変えただけで、その都度プログラムの修正が必要になるようでは、「簡単モダナイゼーション」とは言えません。そこで、画面レイアウトが変更になってもプログラムへの影響度を極力少なくするための有効なキーワードを以下に紹介します。

 

画面レイアウトの変更時に
便利に使えるキーワード

 

RTNCSRLOCキーワード 

 上記の問題を解決するのに、まず注目したいのがRTNCSRLOCキーワードです。

 画面ファイルのレコード・レベル・キーワードに「RTNC
SRLOC」があります。すでにこれを使ってカーソルの位置を判別している場合は、フィールドの位置が変更になってもプログラムの修正は不要です。しかし過去のプログラム資産のなかには、このキーワードを利用せずにコーディングしている場合もあるでしょう(図表11)。

 

 このようなコーディングの場合、画面の行と桁位置でカーソルの位置を判別するので、レイアウトが変更になると修正が必要となります。

 RTNCSRLOCキーワードを使って図表11の内容を変更する場合は、画面ファイルの該当レコードにキーワードを追加します(図表12)。

 

 

 このRTNCSRLOCキーワードはカーソル位置のレコード様式名、フィールド名、フィールド内での位置をプログラムに戻します。これにより行桁位置に関係なく、カーソルが置かれたフィールドを特定できるので、プログラムでの制御が容易になるだけでなく、位置の変更だけであればプログラム修正は不要となり、コーディングが簡素化されます(図表13)。

 

 フィールドの位置が変わっても修正不要で、RPG側を気にせずにレイアウト変更ができるなど大変に便利です。ただしフィールド名が変わった場合は修正が必要なので、注意しましょう。

 

FLDCSRPRGキーワード 

 カーソルの制御は画面プログラムの必須要件なので、カーソルを簡単に制御できることは、開発生産性や保守性を高めるのに役立ちます。また画面設計の自由度が上がるので、ユーザーの要望を実現しやすくなります。

 さらにユーザーの操作性を高めるうえでは、カーソルの移動順序も重要な要素になります。本来カーソルは左上から右下に移動しますが、FLDCSRPRGキーワードを使用すれば、自由にカーソルの移動を制御できます。

 前述した3画面を1画面に統合した画面のカーソルの移動は、図表14のようになります。

 

 

 

そのほかの便利な
カーソル制御キーワード

 

 上記以外にも、便利に使えるカーソル制御キーワードがあるので、いくつか紹介します。

 

DSPATR(PC)

 指定されたフィールドの先頭にカーソルを位置付けします。

 

CSRLOC(&Line &Pos) 

 行と桁指定で、画面上の任意の位置にカーソルを位置付けします。&Line/&Posは、小数点以下ゼロの3バイトのゾーン10進数の潜在フィールド(3.0H)です。

 

FLDCSRPRG(&Field-ID) 

 これを指定したフィールドの次に、カーソルを移動するフィールド名を指定できます。意外に知られていないようですが、大変便利です。&Field-IDは、10バイト文字列の潜在フィールド(10A H)です。

 

RTNCSRLOC(&REC-ID &Field-ID &Pos)

 カーソル位置の判別に使用します。カーソル位置のレコード様式、フィールド名、フィールド内の相対位置をプログラムに戻します。&REC-IDは、10バイト文字列の潜在フィールド(10A H)です。&Field-IDは、10バイト文字列の潜在フィールド(10A H)です。&Posは、小数点以下ゼロの4桁の符号付き数字潜在フィールド(4S 0H)です。

 

 

RTNCSRLOC (*WINDOW/*MOUSE &Line &Pos) 

 前述したRTNCSRLOCキーワードですが、最初のパラメータに*WINDOWまたは*MOUSEを指定することで、カーソル位置の行番号と桁位置をプログラムに戻します。&Lineは、小数点以下ゼロの3桁の符号付き数字潜在フィールド(3S 0H)です。&Posは、小数点以下ゼロの3桁の符号付き数字潜在フィールド(3S 0H)です。

 

SFLCSRRRN(&SFL-REC-NO) 

 サブファイル制御レコードに指定するキーワードで、カーソルの置かれているサブファイル番号を戻します。&SFL-REC-NOは、小数点以下ゼロの5桁の符号付き数字潜在フィールド(5S 0H)です。カーソルがサブファイル・レコード上にない場合は、ゼロが戻されます。図表15に、キーワードを使ったコーディング例を示します。

 

 

 ここで紹介した以外にも、カーソル制御に関係するキーワードはいろいろあるので、マニュアルを参照して利用することをお勧めします。

 筆者が日々開発作業を行ううえで身につけたノウハウを、多くのユーザーに伝えることで、IBM iの有効活用に役立てていただこうと本稿を執筆しました。したがって、マニュアル等を詳細に説明する内容ではないことをご了承下さい。IBM i利用時に参考になれば幸いです。

 


著者

金澤  廣志氏

株式会社アイエステクノポート
代表取締役社長

More Posts