本リリースの新機能

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 { : オプション } )

%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(xmldocument { : saxOptions } );

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

新規の命令コード XML-INTO
XML-INTO{ (EH) } 変数   %XML(xmlDoc { : オプション });
XML-INTO{ (EH) } %HANDLER(ハンドラー :
commArea ) %XML(xmlDoc { : オプション });

XML-INTO は、以下の 2 つのいずれかの方法で XML 文書からデータを読み取ります。

さまざまなオプションを指定してこの命令を制御します。

第 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 キーワードの最初のパ ラメーターとして空の文字リテラル (介在する文字なしで指定された 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 では、自由形式ステートメントの構文が正しいかチェックされるよう になりました。

修飾されたデータ構造のヌル対応サブフィールドのデバッグ・サポートの改善
ヌル対応サブフィールドがある修飾されたデータ構造をデバッグする場合、ヌル対応のそれぞれのサブフィールドごとに、標識サブフィールドがある類似のデータ構造としてヌル標識が編成されるようになりました。 データ構造の名前は、_QRNU_NULL_データ構造名 (例えば _QRNU_NULL_MYDS) です。 データ構造のサブフィールドそのものが、ヌル対応サブフィールドがあるデータ構造である場合、ヌル標識データ構造にも同様に、標識サブフィールドがあるデータ構造サブフィールドがあります。 例えば、データ構造 DS1 にヌル対応サブフィールド DS1.FLD1、DS1.FLD2、および DS1.SUB.FLD3 がある場合、デバッグ命令を使用して、データ構造全体のすべてのヌル標識を表示できます。
===> 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 (SI13932) および V5R3M0 (SI14185) のリリースの PTF で使用可能です。

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