V5R4 での変更点

V5R4 で ILE RPG に対して加えられた機能拡張について、以下にリストして記載します。

新規の命令コード EVAL-CORR
EVAL-CORR{(EH)} ds1 = ds2

新規命令コード EVAL-CORR は、ソース・データ構造のサブフィールドからのデータおよびヌル標識をターゲット・データ構造のサブフィールドに割り当てます。 割り当てられるサブフィールドは、両方のデータ構造で同じ名前と互換データ・タイプを持つサブフィールドです。

例えば、データ構造 DS1 が文字サブフィールド A、B、および C を持ち、データ構造 DS2 が文字サブフィールド B、C、および D を持つ場合、ステートメント EVAL-CORR DS1 = DS2; はサブフィールド DS2.B および DS2.C からのデータを DS1.B および DS1.C に割り当てます。また、EVAL-CORR 命令の影響を受ける、ターゲット・データ構造内のヌル可能サブフィールドのヌル標識は、ソース・データ構造のサブフィールドのヌル標識から割り当てられ、ソース・サブフィールドがヌル可能でない場合は *OFF に設定されます。

    //  DS1 subfields         DS2 subfields
    //    s1  character         s1 packed
    //    s2  character         s2 character
    //    s3  numeric
    //    s4  date              s4 date
    //                          s5 character
    EVAL-CORR  ds1 = ds2;
    // This EVAL-CORR operation is equivalent to the following EVAL operations
    //    EVAL  ds1.s2 = ds2.s2
    //    EVAL  ds1.s4 = ds2.s4
    // Other subfields either appear in only one data structure (S3 and S5)
    // or have incompatible types (S1).

EVAL-CORR は、外部記述ファイルおよびレコード様式への入出力操作の結果のデータ構造を簡単に使用できるようにし、レコード様式のレイアウトが違うか、サブフィールドのタイプが少し違う場合に、異なるレコード様式のデータ構造間でのデータの自動転送を可能にします。

新規プロトタイプ・パラメーター・オプション OPTIONS(*NULLIND)

OPTIONS(*NULLIND) がパラメーターに指定された場合、そのパラメーターと共にヌル・バイト・マップが渡され、着呼側プロシージャーが発呼者のパラメーターのヌル・バイト・マップに直接アクセスできるようになります。
新規組み込み関数 %XML
%XML (xmldocument { : options } )

%XML 組み込み関数は、XML 文書を記述し、その文書の構文解析方法を制御するオプションを指定します。 xmldocument パラメーターには文字式または UCS-2 式が可能であり、値は XML 文書または XML 文書を含む IFS ファイルの名前とすることができます。 xmldocument パラメーターの値がファイルの名前である場合は、"doc=file" オプションを指定する必要があります。

新規組み込み関数 %HANDLER
%HANDLER (handlingProcedure : communicationArea  ) 
%HANDLER は、イベントまたは一連のイベントを処理するプロシージャーを識別するために使用されます。 %HANDLER は値を戻しません。また、XML-SAX および XML-INTO の第 1 オペランドとしてのみ指定できます。

第 1 オペランド handlingProcedure は、処理プロシージャーのプロトタイプを指定します。 プロトタイプによって指定された戻り値およびパラメーターは、処理プロシージャーが必要とするパラメーターと一致している必要があります。要件は、%HANDLER が指定されている命令によって決まります。

第 2 オペランド communicationArea は、処理プロシージャーのすべての呼び出しでパラメーターとして渡される変数を指定します。 このオペランドは、参照によって渡されるプロトタイプ・パラメーターの検査に使用される規則と同じ規則に従って、処理プロシージャーの最初のプロトタイプ・パラメーターと完全に一致していなければなりません。 通信域パラメーターは、配列およびデータ構造を含む、任意のタイプであってかまいません。

新規命令コード XML-SAX
XML-SAX{ (e) } %HANDLER(eventHandler : commArea ) %XML(xmldoc { : options } );

XML-SAX は、%XML 組み込み関数により指定された XML 文書に対して SAX 構文解析を開始します。 XML-SAX 命令は、文書の構文解析を開始する XML パーサーを呼び出すことにより開始します。 要素の開始の検出、属性名の検出、および要素の終了の検出などのイベントがパーサーにより発見された場合、パーサーはそのイベントを記述したパラメーターで eventHandler を呼び出します。 commArea オペランドは、パラメーターとして eventHandler に渡される変数であり、XML-SAX 命令コードが処理プロシージャーと通信する方法を提供します。 eventHandler が戻ると、次のイベントが検出されて再度 eventHandler が呼び出されるまでパーサーは構文解析を続行します。

新規命令コード XML-INTO
XML-INTO{ (EH) } variable   %XML(xmlDoc { : options });
XML-INTO{ (EH) } %HANDLER(handler : commArea ) %XML(xmlDoc { : options });
XML-INTO は、以下の 2 つの方法のいずれかで XML 文書からデータを読み込みます。
  • 変数に直接。
  • %HANDLER で指定されるプロシージャーに渡す配列パラメーターに徐々に。
命令を制御するためにさまざまなオプションを指定することができます。

第 1 オペランドには、構文解析されるデータのターゲットを指定します。 変数名または % HANDLER 組み込み関数を含むことができます。

第 2 オペランドには、XML 文書のソースを指定する %XML 組み込み関数、およびその文書の構文解析方法を制御する任意のオプションを指定します。 XML データを含むか、XML データのロケーションを含むことができます。このオペランドが何を指定するかを示すために、doc オプションを使用します。

// Data structure "copyInfo" has two subfields, "from"
// and "to".  Each of these subfields has two subfields
// "name" and "lib".
// File cpyA.xml contains the following XML document
// <copyinfo>
//    <from><name>MASTFILE</name><lib>CUSTLIB</lib></from>
//    <to><name>MYFILE</name><lib>*LIBL</lib>
// <copyinfo>
xml-into copyInfo %XML('cpyA.xml' : 'doc=file');       
// After the XML-INTO operation, the following
// copyInfo.from  .name = 'MASTFILE  ' .lib = 'CUSTLIB   '
// copyInfo.to    .name = 'MYFILE    ' .lib = '*LIBL     '
フィールド名の先頭から文字を除去するための PREFIX キーワードの使用
PREFIX('' : number_of_characters)
ファイル仕様書および定義仕様書で PREFIX キーワードの第 1 パラメーターとして空の文字リテラル (間に文字を入れずに指定された 2 つの単一引用符) が指定されていると、指定された数の文字がフィールド名から除去されます。 例えば、XRNAME、XRIDNUM、および XRAMOUNT というフィールドを含むファイルの場合は、ファイル仕様書で PREFIX('':2) と指定すると、内部フィールド名が NAME、IDNUM、および AMOUNT になります。

ファイル固有の接頭部以外は名前が同じであるサブフィールドを含むファイルが 2 つ存在する場合は、この機能を使用して、それらのファイルに基づいて定義された外部記述データ構造のサブフィールドの名前から接頭部を除去することができます。 これにより、EVAL-CORR を使用して一方のデータ構造から他方のデータ構造に同じ名前のサブフィールドを割り当てることが可能となります。 例えば、ファイル FILE1 にフィールド F1NAME があり、ファイル FILE2 にフィールド F2NAME があり、さらに FILE1 の外部記述データ構造 DS1 および FILE2 の外部記述データ構造 DS2 に対して PREFIX('':2) が指定された場合、サブフィールド F1NAME および F2NAME は両方とも NAME になります。 データ構造 DS1 および DS2 間の EVAL-CORR 命令は NAME サブフィールドを割り当てます。

DEBUG キーワードの新規値
DEBUG { ( *INPUT  *DUMP  *XMLSAX *NO *YES ) }
DEBUG キーワードは、モジュールに生成されるデバッグ援助機能を決定します。*NO および *YES が既存の値です。*INPUT、*DUMP および *XMLSAX によって *YES よりも細分性が提供されます。
*INPUT
変更の始まり入力仕様書にあっても、モジュール内の他のどの場所でも使用されないフィールドは、入力操作中にプログラム・フィールドに読み込まれます。変更の終わり
*DUMP
(A) 拡張がない DUMP 操作が実行されます。
*XMLSAX
SAX イベント名の配列がモジュールに生成され、SAX イベント・ハンドラーのデバッグ時に使用されます。
*NO
デバッグ援助機能をモジュールに生成しないように指示します。 DEBUG(*NO) を指定しても、DEBUG キーワードを省略した場合と同じになります。
*YES
この値は、互換性目的のために保持されています。DEBUG(*YES) を指定することは、パラメーターなしで DEBUG を指定するか、または DEBUG(*INPUT : *DUMP) を指定することと同じです。

フリー・フォーム計算用の構文検査

SEU では、フリー・フォーム・ステートメントが正しい構文であるか検査されるようになりました。

修飾されたデータ構造のヌル可能サブフィールド用の改良されたデバッグ・サポート
ヌル可能サブフィールドを持つ修飾されたデータ構造をデバッグする際に、すべてのヌル可能サブフィールド用に標識サブフィールドを持つ同じデータ構造として、NULL 標識が編成されるようになりました。データ構造の名前は、_QRNU_NULL_ データ構造名 (例えば _QRNU_NULL_MYDS) です。 データ構造のサブフィールド自身がヌル可能サブフィールドを持つデータ構造である場合は、NULL 標識データ構造は、標識サブフィールドを持つデータ構造サブフィールドを同様に持ちます。例えば、データ構造 DS1 がヌル可能サブフィールド DS1.FLD1、DS1.FLD2、および DS1.SUB.FLD3 を持つ場合、デバッグ命令を使用してデータ構造全体にすべての NULL 標識を表示することができます。
===> EVAL _QRNU_NULL_DS
> EVAL _QRNU_NULL_DS1
  _QRNU_NULL_DS1.FLD1 = '1'
  _QRNU_NULL_DS1.FLD2 = '0'
  _QRNU_NULL_DS1.SUB.FLD3 = '1'
===> EVAL _QRNU_NULL_DS.FLD2
  _QRNU_NULL_DS1.FLD2 = '0'
===> EVAL _QRNU_NULL_DS.FLD2 = '1'
===> EVAL DSARR(1).FLD2
  DSARR(1).FLD2 = 'abcde'

===> EVAL _QRNU_NULL_DSARR(1).FLD2

  _QRNU_NULL_DSARR(1).FLD2 = '0'
共用ファイルを持つファイルの終わりの振る舞いの変更

モジュールが共用ファイルに対してキー順次入力操作を実行した結果が EOF 状態になり、別のモジュールが SETLL などの位置決め操作を使用してファイル・カーソルを設定した場合、最初のモジュールによる後続の順次入力操作は正常に実行されます。 この変更の前では、最初の RPG モジュールは、他のモジュールが共用ファイルを位置変更したという事実を無視していました。

この振る舞いの変更は、リソース V5R2M0 および V5R3M0 の PTF (それぞれ、SI13932 および SI14185) で使用可能です。

表 1. V5R3 以降変更された言語要素
言語単位 要素 説明
制御仕様書キーワード DEBUG(*INPUT|*DUMP *XMLSAX|*NO|*YES) 新規パラメーター *INPUT、*DUMP および *XMLSAX は、デバッグ補助機能のためのさらなるオプションを提供します。
ファイル仕様書のキーワード PREFIX('':2) PREFIX キーワードの第 1 パラメーターとして空のリテラルを指定し、名前の先頭から文字を除去することができます。
定義仕様書キーワード OPTIONS(*NULLIND) NULL 標識がパラメーターと共に渡されることを示します。
PREFIX('':2) PREFIX キーワードの第 1 パラメーターとして空のリテラルを指定し、名前の先頭から文字を除去することができます。
表 2. V5R3 以降の新しい言語要素
言語単位 要素 説明
組み込み関数 %HANDLER(プロトタイプ: パラメーター) イベント用の処理手順を指定します。
%XML(文書 {:オプション}) XML 文書およびそれを構文解析する方法を制御するオプションを指定します。
命令コード EVAL-CORR ソース・データ構造のサブフィールドからのデータおよび NULL 標識をターゲット・データ構造のサブフィールドに割り当てます。
XML-INTO XML 文書からのデータをプログラム変数に直接読み込みます。
XML-SAX XML 文書の SAX 構文解析を開始します。