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 は、1 つのイベントまたは一連のイベントを処理するプロシージャーを識別するために使用します。%HANDLER は値を戻しません。 また、XML-SAX および XML-INTO の第 1 オペランドとしてのみ指定できます。%HANDLER (handlingProcedure : communicationArea )第 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 キーワードの最初のパラメーターとして空の文字リテラル (間に何も文字を入れずに 2 つの単一引用符を指定したもの) が指定された場合、指定された数の文字がフィールド名から削除されます。 例えば、ファイルにフィールド XRNAME、XRIDNUM、および XRAMOUNT がある場合、ファイル仕様書に PREFIX('':2) を指定すると、内部フィールド名は NAME、IDNUM、および AMOUNT になります。PREFIX('' : number_of_characters)2 つのファイルがあり、そのファイルにファイル固有の接頭部以外が同じ名前であるサブフィールドがある場合、この機能を使用して、それらのファイルで定義された外部記述データ構造のサブフィールドの名前から接頭部を削除できます。 これにより、EVAL-CORR を使用して、あるデータ構造から別のデータ構造へ、同一の名前のサブフィールドを代入できます。 例えば、ファイル FILE1 にフィールド F1NAME があり、ファイル FILE2 にフィールド F2NAME があり、さらに FILE1 の外部記述データ構造 DS1 および FILE2 の DS2 に対して PREFIX('':2) が指定された場合、サブフィールド F1NAME および F2NAME は両方とも NAME になります。 データ構造 DS1 および DS2 の間の EVAL-CORR 命令は、NAME サブフィールドを代入します。
- DEBUG キーワード用の新規の値
DEBUG キーワードにより、モジュールに生成されるデバッグ補助が決定されます。 *NO および *YES が既存の値です。*INPUT、*DUMP および *XMLSAX によって *YES よりも細分性が提供されます。DEBUG { ( *INPUT *DUMP *XMLSAX *NO *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 で使用可能です。
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 制御仕様書キーワード | DEBUG(*INPUT|*DUMP *XMLSAX|*NO|*YES) | 新規パラメーター *INPUT、*DUMP、および *XMLSAX により、デバッグ補助のオプションが追加されました。 |
| ファイル仕様書のキーワード | PREFIX('':2) | PREFIX キーワードの最初のパラメーターとして空のリテラルを指定可能であり、名前の先頭から文字を削除できます。 |
| 定義仕様書キーワード | OPTIONS(*NULLIND) | ヌル標識がパラメーター付きで渡されることを示します。 |
| PREFIX('':2) | PREFIX キーワードの最初のパラメーターとして空のリテラルを指定可能であり、名前の先頭から文字を削除できます。 |
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 組み込み関数 | %HANDLER(プロトタイプ: パラメーター) | イベントの処理プロシージャーを指定します。 |
| %XML(文書 {:オプション }) | XML 文書、およびその構文解析方法を制御するオプションを指定します。 | |
| 命令コード | EVAL-CORR | ソースのデータ構造のサブフィールドからターゲットのデータ構造のサブフィールドにデータおよびヌル標識を代入します。 |
| XML-INTO | XML 文書からプログラム変数に直接データを読み取ります。 | |
| XML-SAX | XML 文書の SAX 構文解析を開始します。 |