7.5 での変更点

このセクションでは、7.5 で ILE RPG に対して行われた機能強化について説明します。

注: これらの機能拡張の多くは、 7.3 および 7.4の PTF でも使用可能です。 プログラムをコンパイルして実行しているシステムで必要な 7.3 および 7.4 PTF を判別するには、「 https://www.ibm.com/support/pages/rpg-cafe 」を参照してください。

PTF を介して提供される一部の機能拡張には、コンパイル時 PTF とランタイム PTF の両方が必要です。 プログラムがランタイム PTF を必要とする拡張機能を使用する場合は、プログラムが復元されるすべてのシステムにランタイム PTF が適用されていることを確認する必要があります。

新規命令コード SND-MSG
SND-MSG を使用すると、通知メッセージまたはエスケープ・メッセージを呼び出しスタック上のプログラムまたはプロシージャーに送ることができます。
  • 次の例では、「Hello from RPG」が通知メッセージとしてジョブ・ログに送信されます。

    2 つの SND-MSG 操作は同等です。 最初の SND-MSG のデフォルトは、メッセージ・タイプとして *INFO です。 2 番目の SND-MSG は、明示的に *INFOを指定します。

    メッセージ・タイプとして *INFO が指定されている場合、またはメッセージ・タイプ・オペランドが指定されていない場合、メッセージはデフォルトで現行プロシージャーに送信されます。

    
    DCL-S name VARCHAR(20) inz('RPG');
    
    SND-MSG 'Hello from ' + name;
    
    SND-MSG *INFO 'Hello from ' + name;
    
  • 次の例では、メッセージ・ファイル *LIBL/MYMSGF からのメッセージ ACT1234 が、現行プロシージャーの呼び出し元にエスケープ・メッセージとして送信されます。 *ESCAPE を指定すると、メッセージはデフォルトで現行プロシージャーの呼び出し元に送信されます。

    メッセージに 2 つの置換値があるとします。

    1. TYPE (*CHAR) LEN (25) (TYPE (*CHAR) LEN (25))
    2. TYPE (*DEC) LEN (10) (TYPE (*DEC) LEN (10))
    
    DCL-DS ACT1234_text qualified;
       account_name char(25);
       account_number packed(10);
    END-DS;
    
    CHAIN (acct_num) FILE;
    IF NOT %FOUND();
       ACT1234_text.account_name = name;
       ACT1234_text.account_number = acct_num;
       SND-MSG *ESCAPE %MSG('ACT1234' : 'MYMSGF' : ACT1234_text);
    ENDIF;
    
  • 次の例の SND-MSG 操作は前の例と似ていますが、メッセージは明示的に呼び出しスタック項目 'MYCLPGM' に送信されます。 RPG プログラマーは、 MYCLPGM というプログラムが現行プロシージャーの前に呼び出され、 MYCLPGM がまだ戻っていないことを想定しています。 RPG プログラマーがプログラムをデバッグしていて、パラメーター OPTION (*PGMSTK)を指定して DSPJOB コマンドを使用する場合、プログラム・スタックは、 MYCLPGM が現行プロシージャーのアクティブな呼び出し元であることを示す必要があります。
    
       SND-MSG *ESCAPE %MSG('ACT1234' : 'MYMSGF' : ACT1234_text)
                       %TARGET('MYCLPGM');
    
  • 以下の例の SND-MSG 操作は前の例と似ていますが、 %TARGEToffset オペランドに値 1 を指定することによって、メッセージは明示的に MYCLPGMの呼び出し側に送信されます。
    
       SND-MSG *ESCAPE %MSG('ACT1234' : 'MYMSGF' : ACT1234_text)
                       %TARGET('MYCLPGM' : 1);
    
  • メッセージの送信中にエラーが発生した場合、SND-MSG 操作は新しい状況コード 126 で失敗します。 エスケープ・メッセージを現行プロシージャーに送ると、RPG プロシージャーは状況コード 9999 で失敗します。
SND-MSG (ジョブ・ログへのメッセージの送信)を参照してください。

この機能拡張は、2022 年の前半のコンパイル時 PTF およびランタイム PTF で使用できます。

この機能拡張は、コンパイル時 PTF およびランタイム PTF を適用した 7.3 でも使用できます。

新規命令コード ON-EXCP
ON-EXCP 命令コードにメッセージ ID をリストすることによって、MONITOR グループ内の特定のメッセージ ID をモニターすることができます。 ON-EXCP は ON-ERROR に似ていますが、ON-EXCP を使用すると、モニター対象のメッセージ ID をリストします。

ON-EXCP 命令は、MONITOR グループ内の ON-ERROR 命令より前になければなりません。

ON-EXCP ステートメントを含むプロシージャーに送信されるメッセージをエスケープするように ON-EXCP を制限するには、(C) 拡張を指定します。

次の例では、MONITOR グループに 2 つの ON-EXCP ブロックと 1 つの ON-ERROR ブロックがあります。


MONITOR;
ON-EXCP 'ABC1234' : 'ABC2345';
   // handle exception messages
ON-EXCP 'DEF1234';
   // handle another exception message
ON-ERROR 222;
   // handle pointer-not-set
ENDMON;
ON-EXCP (On Exception)を参照してください。

この機能拡張は、2022 年の前半のコンパイル時 PTF およびランタイム PTF で使用できます。

この機能拡張は、コンパイル時 PTF およびランタイム PTF を適用した 7.3 および 7.4 でも使用できます。

新規命令コード DATA-GEN
DATA-GEN は、RPG 変数から JSON や CSV などの構造化文書を生成します。 文書の生成には、生成プログラムが必要です。 DATA-GEN 命令は、生成プログラムを呼び出して RPG 変数の名前と値を渡し、生成プログラムは、構造化された文書のテキストを DATA -GEN 命令に戻します。この命令は、情報を出力ファイルまたは出力 RPG 変数に入れます。

DCL-DS product QUALIFIED;
   name VARCHAR(25);
   id CHAR(10);
   price PACKED(9 : 2);
END-DS product;

DATA-GEN product %DATA('ProductInfo.JSON' : 'doc=file')
                  %GEN('MYLIB/MYJSONGEN');
DATA-GEN (変数から文書を生成)%DATA (文書 {:options})%GEN (生成プログラム {: options})を参照してください。

この機能強化は、2019 年後半のコンパイル時 PTF および実行時 PTF が適用された 7.3 および 7.4 でも使用可能です。

新規命令コード FOR-EACH
FOR-EACH 命令コードは、配列、%LIST、または %SUBARR の要素に対して反復処理を行う命令のグループを開始します。

FOR-EACH の第 1 オペランドは、配列または %LIST 内の現行要素の値を受け取る変数です。

ループは、ENDFOR 命令コードで終了します。

以下の例の filenames 配列の各要素は FOR-EACH グループで処理されます。 FOR-EACH 命令と ENDFOR 命令の間の命令コード・グループ内の file 変数には filenames 配列の現行要素の値が入ります。

DCL-S filenames CHAR(10) DIM(10);
DCL-S file CHAR(10);
DCL-S numFilenames INT(10);
...
FOR-EACH file in %SUBARR(filenames : 1 : numFilenames);
   process (file);
ENDFOR;

FOR-EACH (For Each)を参照してください。

この機能強化は、2020 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

複数のサブフィールドによって配列データ構造をソートします。
配列データ構造をソートのためのサブフィールドをリストするには、%FIELDS を使用します。

以下の例では、データ構造配列 info がサブフィールド dueDate および orderId によってソートされています。 info の 2 つの要素の必要な順序を決定するために、サブフィールド dueDate が最初に比較されます。 2 つの要素の dueDate の値が等しい場合は、サブフィールド orderId を使用して info の 2 つの要素の順序が決定されます。

info(2).dueDateinfo(3).dueDate より大きいため、要素 2 および要素 3 の相対順序を決定するために 2 番目のサブフィールド orderId を比較する必要はありません。

info(1).dueDateinfo(3).dueDate と等しいため、要素 1 および要素 3 の相対順序を決定するために info(1).orderIdinfo(3).orderId と比較されます。


DCL-DS info QUALIFIED DIM(3);
   orderId packed(5);
   dueDate DATE(*ISO);
   quantity int(10);
END-DS;

info(1).orderId = 23456;
info(1).dueDate = D'2021-09-08';
info(1).quantity = 5;

info(2).orderId = 12345;
info(2).dueDate = D'2021-10-08';
info(2).quantity = 3;

info(3).orderId = 12345;
info(3).dueDate = D'2021-09-08';
info(3).quantity = 25;

SORTA info %FIELDS(dueDate : orderId);

// info(1).orderId = 12345
// info(1).dueDate = D'2021-09-08'
// info(1).quantity = 25
//
// info(2).orderId = 23456
// info(2).dueDate = D'2021-09-08'
// info(2).quantity = 5
//
// info(3).orderId = 12345
// info(3).dueDate = D'2021-10-08'
// info(3).quantity = 3

%FIELDS (ソート用サブフィールド)を参照してください。

この機能強化は、2021 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

新規 IN 演算子
IN 演算子は、項目が配列または %LIST にあるか、あるいは範囲内にあるかを判別するために使用されます。

IF item IN %RANGE(lower_limit : upper_limit);
   ...
ENDIF;
IF item IN myArray;
   ...
ENDIF;

IF item IN %LIST(item1 : item2 : ...);
ENDIF;

IN 演算子 (IN operator)」を参照。

この機能強化は、2020 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

新規組み込み関数 %RANGE
%RANGE 組み込み関数を使用することによって、値が他の 2 つの値の範囲にあるかどうかを検査することができます。
以下の例で、num が 1 以上 10 以下の場合、IF ステートメントは真になります。

DCL-S num PACKED(15:5);

IF num IN %RANGE(1 : 10);
   ...
ENDIF;

%RANGE (下限: 上限)を参照してください。

この機能強化は、2020 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

新規組み込み関数 %LIST
組み込み関数 %LISTを使用して一時配列を定義することができます。%LIST は、SORTA、%LOOKUPxx、および %SUBARR を除き、配列を使用できる場所であれば、どこででも使用できます。
以下の例では、libraries 配列の最初の 4 つの要素は %LIST 組み込み関数の値から割り当てられています。 libraries の最初の要素には値「QGPL」が割り当てられ、2 番目の要素には変数 currentUserProfile の値が割り当てられています。

DCL-S libraries CHAR(10) DIM(10);

libraries = %LIST ('QGPL'
                 : currentUserProfile
                 : 'QTEMP'
                 : getDevLib ());

%LIST (item {: item { : item ... } })を参照してください。

この機能強化は、2020 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

新規組み込み関数 %LOWER および %UPPER
%LOWER 組み込み関数を使用して文字または UCS-2 ストリングの大/小文字を小文字に変換したり、組み込み関数 %UPPER を使用して大文字に変換したりすることができます。

変換の開始と長さを指定することにより、変換をストリングの一部のみに制限できます。

以下の例では、最初の文字の後に続く文字が小文字に変換されます。

DCL-S string VARCHAR(20);

string = %LOWER('GÖTEBORG' : 2);
// string = "Göteborg"

%LOWER および %UPPER (小文字または大文字への変換)を参照してください。

この機能強化は、2021 年後半のコンパイル時 PTF および実行時 PTF が適用された 7.3 および 7.4 でも使用可能です。

新規組み込み関数 %SPLIT
%SPLIT を使用して、ストリングをサブストリングの一時配列に分割することができます。

デフォルトでは、ストリングはブランクで分割されます。 2 番目のパラメーターは、分割する文字を使用して指定できます。

以下の例では、%SPLIT の結果が配列に割り当てられています。

  1. 最初の割り当てでは、ストリングがブランクで分割されます。
  2. 2 番目の割り当てでは、ストリングがアスタリスクまたはブランクのいずれかで分割されます。

DCL-S array VARCHAR(20) DIM(10);

array = %SPLIT(' **One** **Two** **Three** '); //  1 
// array(1) = '**One**'
// array(2) = '**Two**'
// array(3) = '**Three**'

array = %SPLIT(' **One** **Two** **Three** ' : ' *');  //  2 
// array(1) = 'One'
// array(2) = 'Two'
// array(3) = 'Three'

%SPLIT (ストリングをサブストリングに分割)を参照してください。

この機能強化は、2021 年後半のコンパイル時 PTF および実行時 PTF が適用された 7.3 および 7.4 でも使用可能です。

新規組み込み関数 %MAXARR および %MINARR
%MAXARR または %MINARRを使用して、配列内の最大値または最小値の指標を見つけることができます。
以下に例を示します。
  1. %LIST からの割り当ての後、配列内の最大値は「Yellow」(array1(2)) です。 最小値は「Blue」(array1(3)) です。
  2. %MAXARR(array1) は 2 を返します。
  3. %MINARR(array1) は 3 を返します。 %MINARR(array1) が array1 の索引として使用される場合、minVal に割り当てられる値は「Blue」です。

DCL-S array1 VARCHAR(10) DIM(3);
DCL-S i INT(10);
DCL-S minVal LIKE(array1);

array1 = %LIST('Red' : 'Yellow' : 'Blue'); //  1 

i = %MAXARR(array1); //  2 
// i = 2

minVal = array1(%MINARR(array1)); //  3 
// minVal = 'Blue'

%MAXARR および %MINARR (配列内の最大エレメントまたは最小エレメント)を参照してください。

この機能強化は、7.4 および 2021 年後半のコンパイル時 PTF が適用された 7.4 でも使用可能です。

新規オプション *STRICTKEYS が EXPROPTS 制御キーワードに追加されます。
EXPROPTS (*STRICTKEYS) を指定すると、キーのリストまたは %KDS を使用してキー付きファイル操作の検索引数を指定する際の規則が厳格になります。

*STRICTKEYSを参照してください。

この機能強化は、2021 年前半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

文字を数値に変換する組み込み関数でのブランクを許可
新規オプション *ALWBLANKNUM が EXPROPTS 制御キーワードに追加されました。

EXPROPTS(*ALWBLANKNUM) を指定すると、数値変換組み込み関数 %DEC、%DECH、%FLOAT、%INT、%INTH、%UNS、および %UNSH でブランク文字の値を使用できます。 これらの組み込み関数は、文字オペランドがブランクであるか、長さがゼロである場合には、ゼロを返します。 DATA-INTO および XML-INTO で数値フィールドの値がブランクまたは空の場合、値にゼロが入ります。

以下の例では、EXPROPTS(*ALWBLANKNUM) が指定されているため、ブランク値による %DEC 命令の失敗は発生しません。

CTL-OPT EXPROPTS(*ALWBLANKNUM);

DCL-S num PACKED(15:5);
DCL-S string CHAR(10) INZ(*BLANKS);

num = %DEC(string : 63 : 15);

EXPROPTS (*MAXDIGITS | *RESDECPOS | *ALWBLANKNUM | *USEDECEDIT) および 組み込み関数を使用した文字値から数値への変換に関する規則を参照してください。

この機能強化は、2020 年後半のコンパイル時 PTF および実行時 PTF が適用された 7.3 および 7.4 でも使用可能です。

文字を数値に変換する組み込み関数で桁区切り文字を許可
新規オプション *USEDECEDIT が EXPROPTS 制御キーワードに追加されました。

EXPROPTS(*USEDECEDIT) が指定されている場合、数値変換組み込み関数 %DEC、%DECH、%FLOAT、%INT、%INTH、%UNS、および %UNSH は、制御キーワード DECEDIT によって定義された設定に従ってピリオドとコンマ文字を解釈します。 このキーワードは、数値フィールドのデータを DATA-INTO および XML-INTO で処理する方法にも影響を与えます。

デフォルトでは、DECEDIT ('.') または DECEDIT ('0.') を使用すると、 あるいは、ジョブ DECFMT 値が J でない場合は、DECEDIT (*JOBRUN) を指定すると、ピリオドは小数点文字になり、コンマは数字区切り文字 (千単位区切り文字) になります。

DECEDIT (',') または DECEDIT('0,')、あるいはジョブ DECFMT の値が J である場合の DECEDIT(*JOBRUN) では、コンマは小数点文字、ピリオドは数字区切り記号になります。

以下に例を示します。
  • キーワード EXPROPTS(*USEDECEDIT) が指定されています。
  • キーワード DECEDIT が指定されていないため、小数点文字はデフォルトのピリオド、桁区切り文字はデフォルトのコンマになります。
  • ストリング「1,234,567.89」は %DEC で許可されています。 コンマは桁区切り文字であるため、無視されます。
  • %DEC 組み込み関数は 1234567.89 を返します。

CTL-OPT EXPROPTS(*USEDECEDIT);

DCL-S num PACKED(15:5);

num = %DEC('1,234,567.89' : 15 : 5);

EXPROPTS (*MAXDIGITS | *RESDECPOS | *ALWBLANKNUM | *USEDECEDIT) および 組み込み関数を使用した文字値から数値への変換に関する規則を参照してください。

この機能強化は、2020 年後半のコンパイル時 PTF および実行時 PTF が適用された 7.3 および 7.4 でも使用可能です。

多重定義プロトタイプ
OVERLOAD キーワードは、プロトタイプの名前を OVERLOAD キーワードと一緒に使用することで呼び出すことができる他のプロトタイプのリストを定義します。 OVERLOAD キーワードが指定されたプロトタイプが呼び出し命令で使用される場合、コンパイラーは、呼び出しに指定されるパラメーターを使用して、OVERLOAD キーワードにリストされている候補プロトタイプのうちのどの候補プロトコルを呼び出すかを決定します。

/OVERLOAD 指示を使用すると、呼び出すプロシージャーをコンパイラーが決定する方法について、コンパイル・リストからより多くの情報を要求することができます。

以下の例の FORMAT は、OVERLOAD キーワードで定義されています。
  1. FORMAT の最初の呼び出しでは、パラメーターに日付タイプが指定されているため、FORMAT_DATE が呼び出されます。
  2. FORMAT の 2 番目の呼び出しでは、パラメーターに時刻タイプが指定されているため、FORMAT_TIME が呼び出されます。
  3. FORMAT の 2 番目の呼び出しでは、パラメーターに文字タイプが指定されているため、FORMAT_MESSAGE が呼び出されます。

DCL-PR format_date VARCHAR(100);
   dateParm DATE(*ISO) CONST;
END-PR;
DCL-PR format_time VARCHAR(100);
   timeParm TIME(*ISO) CONST;
END-PR;
DCL-PR format_message VARCHAR(100);
   msgid CHAR(7) CONST;
   replacement_text VARCHAR(100) CONST OPTIONS(*NOPASS);
END-PR;
DCL-PR format VARCHAR(100) OVERLOAD(format_time : format_date : format_message);
DCL-S result varchar(50);

result = format(%date());              //  1 
result = format(%time());              //  2 
result = format('MSG0100' : filename); //  3 
OVERLOAD (prototype1 { : prototype2 ...}) を参照してください。 および /OVERLOAD DETAIL | NODETAIL

この機能強化は、2019 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

プロトタイプ・パラメーターの OPTIONS(*EXACT)
プロトタイプ・パラメーターに OPTIONS(*EXACT) が指定されている場合、呼び出し先プロシージャーが渡されたパラメーターと同じ値を受け取るようにするために、追加の規則が適用されます。 例えば、OPTIONS(*EXACT) を指定しない場合、コンパイラーでは、渡されるパラメーターをプロトタイプ・パラメーターよりも長くすることができ、渡されるパラメーターとは異なるデータ構造に LIKEDS によって関連付けられているデータ構造を渡すことができます。 OPTIONS(*EXACT) を指定する場合、渡されたパラメーターをプロトタイプ・パラメーターよりも長くすることはできません。また、プロトタイプ・パラメーターが LIKEDS キーワードで定義されている場合、渡されるパラメーターは、LIKEDS によって同じデータ構造に関連付けられている必要があります。

次の例では、フィールド fld10 をプロトタイプ p1のパラメーター parm5 に渡すことができます。 ただし、呼び出されたプロシージャーは、 fld10の完全な値「abcdefghij」ではなく、値「abcde」を受け取ります。

フィールド fld10 は、プロトタイプ p2 のパラメーター parm5Exact に渡すことができません。長さが 10 で、 fld10 の長さが、プロトタイプ・パラメーター parm5Exactの長さ 5 を超えています。


dcl-pr p1;
   parm5 char(5);
end-pr;
dcl-pr p2;
   parm5Exact char(5) OPTIONS(*EXACT);
end-pr;
dcl-s fld10 char(10) inz('abcdefghij');

p1 (fld10);
p2 (fld10);  // Error
OPTIONS (*EXACT)を参照してください。

この機能強化は、2019 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

デバッガーで名前付き定数の値を表示
デバッガーで名前付き定数の値を表示できるようにするには、制御キーワード DEBUG(*CONSTANTS) を指定します。

CTL-OPT DEBUG(*CONSTANTS);

DEBUG{(*DUMP | *INPUT | *RETVAL | *XMLSAX | *NO | *YES)}を参照してください。

この機能強化は、2021 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

デバッグ中にプロシージャーから戻り値を表示または変更
制御キーワード DEBUG(*RETVAL) が指定されている場合、特殊変数 _QRNU_RETVAL を評価して、プロシージャーが戻す値を表示または変更することができます。
この変数の値を表示または変更するには、プロシージャーの最後のステートメントにブレークポイントを設定します。
  • 自由形式のコードでは、END-PROC ステートメントにブレークポイントを設定します。
  • 固定形式のコードでは、Procedure-End 仕様にブレークポイントを設定します。
例えば、プログラマーが以下のプロシージャーをデバッグしているとします。
  1. このプロシージャーは、値「abcde」を返します。
  2. プログラマーは、END-PROC ステートメントにブレークポイントを設定します。
  3. デバッグ・セッションで、プログラマーは戻り値を表示します。

CTL-OPT DEBUG(*RETVAL);
...
DCL-PROC myProc;
   DCL-PI *n CHAR(10) END-PI;

   RETURN 'abcde';  1 
END-PROC;           2 
  1. END-PROC ステートメントのデバッグ・セッションで、プログラマーは戻り値を表示します。
  2. プログラマーは戻り値を「12345」に変更します。
  3. 値「12345」がプロシージャーから戻されます。

> EVAL _qrnu_retval                     1 
  _QRNU_RETVAL = 'abcde     '
> EVAL _qrnu_retval = '12345'           2 
  _QRNU_RETVAL = '12345' = '12345     '

DEBUG{(*DUMP | *INPUT | *RETVAL | *XMLSAX | *NO | *YES)}を参照してください。

この機能強化は、2020 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

オプションで、メイン・プロシージャーおよびエクスポートされたプロシージャーのプロトタイプを要求
パラメーター REQPREXP が CRTBNDRPG コマンドおよび CRTRPGMOD コマンドに追加され、エクスポートされるプロシージャーにプロトタイプが指定されていない場合のコンパイラーの応答を制御します。 さらに、キーワード REQPREXP を制御仕様書キーワードとして指定することもできます。

このパラメーターのデフォルトは *NOです。

*WARN レベルの場合、コンパイラーは警告診断メッセージを発行します。

*REQUIRE レベルの場合、コンパイラーは重大診断メッセージを発行します。これによりコンパイルが失敗します。

エクスポートされたプロシージャーまたはサイクル・メイン・プロシージャーのプロシージャー・インタフェースにキーワード REQPROTO(*NO) を指定して、プロトタイプがそのプロシージャーに必要でないことを指示できます。

サイクル・メイン・プロシージャーのプロシージャー・インターフェースについては、 REQPREXP (*NO | *WARN | *REQUIRE)REQPROTO (*NO) 、および REQPROTO (*NO) を参照してください。

この機能強化は、2020 年後半の 7.3 および 7.4 のコンパイル時 PTF でも提供されています。

マイクロ秒精度を戻す %TIMESTAMP
%TIMESTAMP() は、マイクロ秒精度のタイム・スタンプを返します。

%TIMESTAMP(*UNIQUE) を指定すると、返されるタイム・スタンプの 12 個の小数桁すべてにゼロ以外の値が入ります。 最初の 6 桁の小数秒はマイクロ秒精度を提供します。 最後の 6 桁は、固有のタイム・スタンプの作成に使用されます。

%TIMESTAMP (タイム・スタンプへの変換)を参照してください。

この機能強化は、2020 年後半のコンパイル時 PTF および実行時 PTF が適用された 7.3 および 7.4 でも使用可能です。

%KDS の 2 番目のパラメーターには、変数または式を使用できます。
%KDS の 2 番目のパラメーターは、キー付き操作に使用するキーの数です。 2 番目のパラメーターに変数または式を指定できるようになりました。

DCL-F myfile KEYED;
DCL-DS keys LIKEREC(myRec : *KEY);
DCL-S numKeys INT(10);

numKeys = 3;
CHAIN %KDS(keys : numKeys) myRec;
READE %KDS(keys : numKeys - 1) myRec;
%KDS (データ構造の検索引数)を参照してください。

この機能強化は、2020 年後半のコンパイル時 PTF および実行時 PTF が適用された 7.3 および 7.4 でも使用可能です。

LIKEDS キーワードの修飾名
LIKEDS キーワードに修飾名を指定できるようになりました。 以下に例を示します。
  1. データ構造サブフィールド employees は、データ構造 employee_info に直接定義されます。
  2. プロシージャー check_employee のパラメーターの LIKEDS キーワードは、LIKEDS キーワードを使用して、修飾されたサブフィールド employee_info.employeeds と同じパラメーターを定義することによって定義されます。

DCL-DS employee_info QUALIFIED;
   num_employees INT(10);
   DCL-DS employees DIM(20);  //  1 
      name VARCHAR(25);
      salary PACKED(7:2);
   END-DS;
END-DS;
DCL-PR check_employee IND;
   employee LIKEDS(employee_info.employees);  //  2 
END-PI;
修飾データ構造名を使用した LIKEDS の指定を参照してください。

この機能強化は、2019 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

*ON および *OFF を論理式にすることができる
条件ステートメントに *ON および *OFF を直接使用できるようになりました。 例えば、無限 DOW ループが必要な場合は、「DOW *ON」とコーディングすることができます。

   DOW *ON;
    ...
   ENDDO;

この機能強化は、2019 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

LIKEDS キーワードの修飾名
LIKEDS キーワードに修飾名を指定できるようになりました。 以下に例を示します。
  1. データ構造サブフィールド employees は、データ構造 employee_info に直接定義されます。
  2. プロシージャー check_employee のパラメーターの LIKEDS キーワードは、LIKEDS キーワードを使用して、修飾されたサブフィールド employee_info.employeeds と同じパラメーターを定義することによって定義されます。

DCL-DS employee_info QUALIFIED;
   num_employees INT(10);
   DCL-DS employees DIM(20);  //  1 
      name VARCHAR(25);
      salary PACKED(7:2);
   END-DS;
END-DS;
DCL-PR check_employee IND;
   employee LIKEDS(employee_info.employees);  //  2 
END-PI;
修飾データ構造名を使用した LIKEDS の指定を参照してください。

この機能強化は、2019 年後半のコンパイル時 PTF が適用された 7.3 および 7.4 でも使用可能です。

ILE RPG では BOOLEAN データ・タイプがサポートされています。
データベース・ファイル内のフィールドがタイプ BOOLEAN で定義されている場合、RPG ではそのフィールドのタイプが標識タイプと見なされます。
表 1. 7.4 以降に変更された言語要素: 組み込み関数
要素 説明
%KDS 変数を %KDS の 2 番目のパラメーターとして指定できるようになりました。 %KDS (データ構造の検索引数)を参照してください。
%タイム・スタンプ %TIMESTAMP() は、マイクロ秒精度の値を戻します。%TIMESTAMP(*UNIQUE) は、固有のタイム・スタンプを返します。 %TIMESTAMP (タイム・スタンプへの変換)を参照してください。
表 2. 7.4 以降に変更された言語要素: 制御仕様書キーワード
要素 説明
DEBUG キーワード
  • プロシージャーから戻り値をデバッグする場合は、パラメーター *RETVAL を指定します。
  • デバッガーで名前付き定数の値を表示する場合は、パラメーター *CONSTANTS を指定します。
DEBUG{(*DUMP | *INPUT | *RETVAL | *XMLSAX | *NO | *YES)}を参照してください。
EXPROPTS キーワード パラメーター *ALWBLANKNUM、*USEDECEDIT、および *STRICTKEYS を EXPROPTS キーワードに指定できるようになりました。 EXPROPTS (*MAXDIGITS | *RESDECPOS | *ALWBLANKNUM | *USEDECEDIT)を参照してください。
テーブル3。 7.4 以降に変更された言語要素: 定義
要素 説明
LIKEDS 修飾名を許可します。 修飾データ構造名を使用する LIKEDS の指定」を参照してください。
OPTIONS(*EXACT) プロトタイプ・パラメーターの OPTIONS キーワードには *EXACT 値を指定することができます。これは、渡されたパラメーターの妥当性を検査するときにコンパイラーが追加規則を適用する必要があることを示します。 OPTIONS (*EXACT)を参照してください。
テーブル4。 7.4 以降に変更された言語要素: 命令コード
要素 説明
SORTA 命令コード %FIELDS は、ソートのためのサブフィールドをリストするために SORTA と一緒に指定することができます。 %FIELDS (ソート用サブフィールド)を参照してください。
テーブル5。 7.4 以降の新規言語要素: 指示
要素 説明
/OVERLOAD 指示の後のステートメントで多重定義プロトタイプの呼び出しに関する詳細情報を取得するには、/OVERLOAD DETAIL を指定します。 詳細情報の取得を停止するには、/OVERLOAD NODETAIL を指定します。 /OVERLOAD DETAIL | NODETAILを参照してください。
テーブル6。 7.4 以降の新規言語要素: 制御仕様書キーワード
要素 説明
OVERLOAD 多重定義されたプロトタイプ (OVERLOAD キーワード付きのプロトタイプ) の名前で呼び出すことができる候補プロトタイプを定義します。 OVERLOAD (prototype1 { : prototype2 ...}) を参照してください。
REQPROTO REQPROTO(*NO) をサイクル・メイン・プロシージャーのプロシージャー・インターフェース上で指定して、プロトタイプが必要でないことを指示することができます。 REQPROTO (*NO)を参照してください。
表 7. 7.4 以降の新規言語要素: 制御仕様キーワード
要素 説明
REQPREXP メイン・プロシージャーおよびエクスポートされたサブプロシージャーにプロトタイプが必要かどうかを制御します。 REQPREXP (*NO | *WARN | *REQUIRE)を参照してください。
表 8. 7.4 以降の新規言語要素: 式演算子
要素 説明
IN 第 1 オペランドが第 2 オペランドにあるかどうかをテストする 2 進条件ステートメントで使用されます。 IN 演算子 (IN operator)」を参照。
表 9. 7.4 以降の新規言語要素: 組み込み関数
要素 説明
%GEN DATA-GEN 命令コードの生成プログラムを指定します。 %GEN (生成プログラム {: options})を参照してください。
リスト (%LIST) 一時配列を返します。 See %LIST (item {: item { : item ... } })
%LOWER 小文字に変換された入力ストリングを戻します。 %LOWER (小文字への変換)を参照してください。
%MAXARR 配列内の最大値の指標を戻します。 %MAXARR および %MINARR (配列内の最大エレメントまたは最小エレメント)を参照してください。
%MINARR 配列内の最小値の指標を返します。 %MAXARR および %MINARR (配列内の最大エレメントまたは最小エレメント)を参照してください。
メッセージ (%MSG) SND-MSG のメッセージ ID を指定します。 %MSG (message-id: message-file { : replacement-text } )を参照してください。
範囲 (%R) IN 演算子を使用して検査する範囲を指定します。 %RANGE (下限: 上限)を参照してください。
%SPLIT サブストリングの配列を返します。 %SPLIT (Split String into Substrings)を参照してください。
ターゲット (%T) SND-MSG のターゲット・プログラムまたはプロシージャーを指定します。 %TARGET (プログラムまたはプロシージャー { : offset } )を参照してください。
%UPPER 大文字に変換された入力ストリングを返します。 %UPPER (大文字への変換)を参照してください。
表 10. 7.4 以降の新規言語要素: 命令コード
要素 説明
DATA-GEN RPG 変数から構造化文書を生成します。 DATA-GEN (変数からの文書の生成)を参照してください。
FOR-EACH 配列、%LIST、または副配列内の項目を繰り返します。 FOR-EACH (For Each)を参照してください。
ON-EXCP (O) 特定のエスケープ・メッセージ ID をモニターします。 ON-EXCP (On Exception)を参照してください。
SND-メッセージ メッセージをジョブ・ログに送信します。 SND-MSG (ジョブ・ログへのメッセージの送信)を参照してください。
表 11. 7.4 以降の新規言語要素: プロシージャー仕様書キーワード
要素 説明
REQPROTO REQPROTO(*NO) は、エクスポートされたプロシージャーにプロトタイプが必要でないことを示します。 REQPROTO (*NO)を参照してください。