WebFOCUS開発のプロが手放せないシステム変数5選!!

2021年11月17日サポぶろぐ

みなさん、はじめまして!
株式会社アシスト北海道でWebFOCUSのサポートを担当しております鑓水(やりみず)です。
珍しい苗字ということもあり聞き馴染みはないかと思いますが、ぜひこの機会に名前を
覚えていただけると嬉しいです!

さて、本日のテーマは システム変数 です。
みなさんは ”システム変数” と聞いて、何を思い浮かべますか?
中には、「そもそもシステム変数なんて知らない!」って方もいらっしゃるのではないでしょうか。
私自身、システム変数について初めて触れたときは「システム変数?どれのこと?いつ使うの?」など、
わからないことばかりでした・・・

これからご紹介するシステム変数は、WebFOCUSで事前に定義された変数 のことで、
誰でも利用することができる、とっても便利な変数なんです!

ということで、今回は新卒入社2年目の私が お問い合わせで頻繁に目にするシステム変数5選
についてご紹介いたします!

【日時関連】 &YYMD / &DATEYYMD
       &TOD

【その他】  &LINES
       &RETCODE
       &FOCERRNUM

それでは、サンプルプロシジャと共に1つずつ見ていきましょう!

――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

日時関連

&YYMD / &DATEYYMD

現在の日付を返すシステム変数です。
「&YYMD」は数字8桁で、「&DATEYYMD」はスラッシュ付きの数字8桁で
現在の日付を表示します。

【例】&YYMD:20211101
   &DATEYYMD:2021/11/01


<サンプルプロシジャ> Excelファイル名に実行日時を指定したいとき

-*-------------------------------------------------------------------------
TABLE FILE CAR
SUM SALES
BY COUNTRY
-*1
ON TABLE PCHOLD AS &YYMD FORMAT XLSX
END
-*-------------------------------------------------------------------------

<解説>
*1:AS句にシステム変数「&YYMD」を指定することで、
  Excelファイル名に実行日時を出力することができます。

▽実行結果(2021年11月1日に実行)
  出力ファイル名:20211101.xlsx

&TOD

現在の時刻を返すシステム変数です。
「&TOD」は数字6桁で「時.分.秒」の現在の時刻を表示します。

【例】&TOD:12.30.05 (12時30分05秒)

※弊社技術にて導入作業を実施させていただいた際は、「SET TIME_SEPARATOR=COLON」
 を初期値として設定するため、表記のピリオド「.」がコロン「:」となります。【例】12:30:05

<サンプルプロシジャ> 見出しに実行時刻を表示したいとき

-*-------------------------------------------------------------------------
TABLE FILE CAR
SUM SALES
BY COUNTRY
HEADING
-*1
"&TOD"
END
-*-------------------------------------------------------------------------

<解説>
*1:HEADINGにてシステム変数「&TOD」を指定することで、
  見出しに実行時刻を出力することができます。

▽実行結果(14時45分04秒に実行)
             

                時刻が表示

その他

&LINES

出力行数を返す変数です。
出力行数を取得できるので、出力件数によって処理を分岐したい場合などに使用します。


<サンプルプロシジャ> 出力件数が0件の場合に任意の画面を表示したいとき

-*-------------------------------------------------------------------------
TABLE FILE CAR
SUM SALES
BY COUNTRY
BY CAR
WHERE COUNTRY EQ '&COUNTRY';
END

-* ここまでの処理を実行
-RUN

-*1 IF文を使用し、出力件数に応じて処理を分岐
-IF &LINES EQ 0 THEN GOTO LABEL1 ELSE GOTO LABEL2;

-* 出力件数が0件の場合
-LABEL1

-HTMLFORM BEGIN
<HTML>
<BODY>
検索結果は0件です。
</BODY>
</HTML>
-HTMLFORM END

-* 出力件数が1件以上の場合
-LABEL2
-*-------------------------------------------------------------------------

<解説>
*1:システム変数「&LINES」を使用し、出力行数が 0(= 検索結果が0件)の場合はラベル「LABEL1」 へ遷移し、
  出力行数が 0 ではない(= 検索結果が1件以上)場合はラベル「LABEL2」 へ遷移します。

▽オートプロンプト画面にて、存在する値(例:JAPAN)で検索
                                        ➡  検索結果が出力され、
                                            LABEL2 へ処理が分岐

▽オートプロンプト画面にて、存在しない値(例:INDIA)で検索
                                        ➡  検索結果が0件のため、
                                            LABEL1 へ処理が分岐して任意の画面を表示

&RETCODE

データベースから発行されたエラー番号を取得するシステム変数です。
エラーごとに返り値が異なるので、発生したエラーによって表示する画面を分岐したい場合などに使用します。
なお、エラーがない場合、値は「0」となります。

【返り値の一覧】

&RETCODE の値が「0」の場合 → 正常終了
&RETCODE の値が「1」の場合 →  OSコマンドのエラー
&RETCODE の値が「8」の場合 →  プロシジャの解析エラー 

<サンプルプロシジャ> 
➡ 次に記載している「&FOCERRNUM」と一緒に使われることが多いので、
  次のサンプルプロシジャでまとめてご紹介します!

&FOCERRNUM

WebFOCUSのFOCエラー番号を取得する変数です。
「&FOCERRNUM」とあわせて、エラー発生時に処理を分岐したい場合などに使用します。
また、変数を使用することでエラー番号を画面に表示させることも可能です。
なお、エラーがない場合、値は「0」となります。

<サンプルプロシジャ> エラーが発生した場合に任意の画面を表示したいとき

-*-------------------------------------------------------------------------
-* 存在しないマスタファイルを指定し、エラーを意図的に発生
TABLE FILE AAA
PRINT *
END

-* ここまでの処理を実行
-RUN

-*1 IF文を使用し、実行結果に応じて処理を分岐
-IF (&FOCERRNUM NE 0) AND (&RETCODE NE 0) THEN GOTO LABEL1 ELSE GOTO LABEL2;

-* エラーが発生した場合
-LABEL1

-HTMLFORM BEGIN
<HTML>
<HEAD>
<TITLE>エラー画面</TITLE>
</HEAD>
<BODY>
エラーが発生しました。<BR>
エラーコード 
!IBI.AMP.FOCERRNUM;
</BODY>
</HTML>
-HTMLFORM END

-* 処理が正常に実行された場合
-LABEL2
-*-------------------------------------------------------------------------

<解説>
*1:変数「&FOCERRNUM」が 0 ではない場合、かつ「&RETCODE」が 0 ではない場合)は、
  処理が正常に行われていないことを意味するので、 ラベル「LABEL1」 へ遷移します。
  分岐条件に当てはまらない場合は、処理が正常に実行されているためラベル「LABEL2」 へ遷移します。

▽実行結果 
                     ➡ 「(FOC205) マスターファイルがありません : AAA 」
                         のエラーが発生し、任意の画面が表示

――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――

今回は、使用されることの多いシステム変数を 5つ 使用例と共にご紹介しましたが、いかがでしたでしょうか?

WebFOCUSには今回ご紹介したもの以外にも、たくさんのシステム変数が用意されているので、
興味を持った方は「よくつかうシステム変数」も確認してみてください!

これを機にシステム変数を使いこなして、WebFOCUSのプロになりましょう✨

次回は「面倒くさがり屋必見!必要な情報を先取り取得!」についてご紹介させていただきます!
お楽しみに!

<この記事をかいた人>
————————————————————————————————————
株式会社アシスト北海道 テクニカルサポート部情報基盤1課  鑓水 美希
入社歴   : 2020年新卒入社、1年間 WebFOCUS のサポートを専任
趣味     : ドラマ鑑賞、音楽(ピアノ/クラリネット)
ひとこと : WebFOCUSのプロを目指し、日々奮闘中です!
————————————————————————————————————