WebFOCUS開発のプロが手放せないシステム変数5選!!
みなさん、はじめまして!
株式会社アシスト北海道で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のプロを目指し、日々奮闘中です!
————————————————————————————————————