本リリースの新機能

以下に、V5R4 の ILE RPG における機能強化について説明します。

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

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

例えば、データ構造 DS1 が文字サブフィールド A、B、および C を持ち、データ構造 DS2 が文字サブフィールド B、C、および D を持つ場合、ステートメント EVAL-CORR DS1 = DS2; は、サブフィールド DS2.B および DS2.C からのデータを DS1.B および DS1.C に割り当てます。 EVAL-CORR 命令で影響を受けるターゲット・データ構造のヌル可能サブフィールドは、ソース・データ構造のサブフィールドの NULL 標識から割り当てられた NULL 標識も持つか、ソース・サブフィールドがヌル可能でない場合は、*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 は、処理手順へのすべての呼び出しでパラメーターとして渡す変数を指定します。参照によって渡されるプロトタイプ・パラメーターの検査に使用される同じ規則に従って、オペランドは処理手順の第 1 プロトタイプ・パラメーターに対して完全一致する必要があります。通信域パラメーターは、配列およびデータ構造を含む、任意のタイプであってかまいません。

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

XML-SAX は、%XML 組み込み関数で指定された XML 文書用の SAX 構文解析を開始します。文書の構文解析を開始する XML パーサーを呼び出すことによって、XML-SAX 命令は開始します。 要素の開始の検出、属性名の検索、要素の終了の検出などのイベントをパーサーが発見した場合、パーサーは、イベントを記述するパラメーターと共に 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 文書からデータを読み込みます。

命令を制御するためにさまざまなオプションを指定することができます。

第 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)
空の文字リテラル (中断文字なしで指定した 2 つの単一引用符) が「ファイルおよび定義仕様 (File and Definition specifications)」のための PREFIX キーワードの第 1 パラメーターとして指定された場合、指定した文字数がフィールド名から除去されます。例えば、ファイルがフィールド XRNAME、XRIDNUM、 および XRAMOUNT を持っている場合、「ファイル仕様」に PREFIX('':2) を指定すると、内部フィールド名は、NAME、IDNUM、および AMOUNT になります。

ユーザーが、ファイル固有の接頭部以外同じ名前であるサブフィールドを持つ 2 つのファイルを所有している場合、この機能を使用して、そのファイルから定義される外部記述データ構造のサブフィールドの名前から接頭部を除去することができます。 これを使用すると、EVAL-CORR を使用して、1 つのデータ構造からの同じ名前のサブフィールドを他に割り当てることができます。例えば、ファイル FILE1 がフィールド F1NAME を持ち、ファイル FILE2 がフィールド F2NAME を持ち、PREFIX('':2) が外部記述データ構造 DS1 を FILE1 に対して、外部記述データ構造 DS2 を FILE2 に対して指定した場合、サブフィールド 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_data_structure_name で、例えば、_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 (SI13932) および V5R3M0 (SI14185) の PTF で使用可能です。

表 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 構文解析を開始します。