この節では、7.1 の ILE RPG における機能強化について説明します。
いずれかのサブフィールドをキーとして使用して、データ構造配列をソートおよび検索することができます。
// Sort the custDs array by the amount_owing subfield
SORTA custDs(*).amount_owing;
// Search for an element in the custDs array where the
// account_status subfield is "K"
elem = %LOOKUP("K" : custDs(*).account_status);
SORTA(A) を使用して昇順に、または SORTA(D) を使用して降順に配列をソートできます。 順序配列 (ASCEND キーワードまたは DESCEND キーワード) をこの配列にすることはできません。
// Sort the salary array in descending order
SORTA(D) salary;
%SCANRPL 組み込み関数は、ストリングにおける特定の値のすべての出現を走査して、それらを別の値に置換します。
// Replace NAME with 'Tom'
string1 = 'See NAME. See NAME run. Run NAME run.';
string2 = %ScanRpl('NAME' : 'Tom' : string1);
// string2 = 'See Tom. See Tom run. Run Tom run.'
%LEN 組み込み関数を使用して、可変長の文字フィールド、UCS-2 フィールド、または図形フィールドの最大文字数を取得することができます。
定義仕様書で ALIAS キーワードを使用して、外部記述データ構造のサブフィールドに代替名を使用することを指示します。 ファイル仕様書で ALIAS キーワードを使用して、ファイルのレコードから定義された LIKEREC データ構造に代替名を使用することを指示します。
A R CUSTREC
A CUSTNM 25A ALIAS(CUSTOMER_NAME)
A CUSTAD 25A ALIAS(CUSTOMER_ADDRESS)
A ID 10P 0
D custDs e ds ALIAS
D QUALIFIED EXTNAME(custFile)
/free
custDs.customer_name = 'John Smith';
custDs.customer_address = '123 Mockingbird Lane';
custDs.id = 12345;
RTNPARM キーワードを指定して定義されたプロシージャーは、隠されたパラメーターとして戻り値を処理します。 非常に大きな値、特に非常に大きな可変値を戻すようにプロシージャーがプロトタイプ化されている場合、 RTNPARM キーワードを指定してプロシージャーを定義することによって、それを呼び出すパフォーマンスを著しく向上させることができます。
D getFileData pr a varying len(1000000)
D rtnparm
D file a const varying len(500)
D data S a varying len(1000)
/free
data = getFileData ('/home/mydir/myfile.txt');
%PARMNUM(parameter_name) 組み込み関数は、パラメーター・リストにおけるパラメーターの序数を戻します。 プロシージャーが RTNPARM キーワードを指定してコーディングされている場合に、この組み込み関数の使用が特に重要になります。
D pi
D name 100a const varying
D id 10i 0 value
D errorInfo likeds(errs_t)
D options(*nopass)
/free
// Check if the "errorInfo" parameter was passed
if %parms >= %parmnum(errorInfo);
// The makeTitle procedure upper-cases the value
// and centers it within the provided length
alphaTitle = makeTitle(alphaValue : 50);
ucs2Title = makeTitle(ucs2Value : 50);
dbcsTitle = makeTitle(dbcsValue : 50);
これらのオプションは、6.1 の PTF でも利用可能です。
RPG モジュールおよびプログラムは、テラスペース記憶域モデルを使用するように、または呼び出し元の記憶域モデルを継承するように作成することができます。
テラスペース記憶域モデルを使用すると、自動記憶域に関するシステムしきい値が単一レベル記憶域モデルの場合と比べて大幅に高くなります。
単一プロシージャーの自動記憶域の量に関する限度と、呼び出しスタック上の全プロシージャーの自動記憶域の合計に関する限度があります。 
ACTGRP パラメーターおよび ACTGRP キーワードのデフォルト値が、QILE から *STGMDL に変更されました。
ACTGRP(*STGMDL) は、活動化グループがプログラムの記憶域モデルに依存することを指定します。 記憶域モデルが *TERASPACE の場合、ACTGRP(*STGMDL) は ACTGRP(QILETS) と同じです。 それ以外の場合、ACTGRP(*STGMDL) は ACTGRP(QILE) と同じです。
制御仕様書の ALLOC キーワードを使用して、モジュールの RPG 記憶域管理命令が、テラスペース記憶域または単一レベル記憶域のどちらを使用するかを指定します。 テラスペース記憶域割り振りの最大サイズのほうが、単一レベル記憶域割り振りの最大サイズより、著しく大きくなります。
モジュールのリスト・デバッグ・ビューが暗号化されると、 デバッグ・セッションでデバッグの実行者が暗号鍵を知っている場合にのみリスト・ビューを表示可能になります。 これにより、顧客がリスト・ビューを通してソース・コードを参照できてしまうことがないようにして、デバッグ可能プログラムを顧客に送ることができるようにします。 CRTRPGMOD コマンド、CRTBNDRPG コマンド、または CRTSQLRPGI コマンドの DBGENCKEY パラメーターを使用します。
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 制御仕様書キーワード | ACTGRP(*STGMDL) | ACTGRP のキーワードおよびコマンド・パラメーターの新しいデフォルトは、*STGMDL です。 プログラムがテラスペース記憶域モジュールを使用する場合、活動化グループは QILETS です。 それ以外の場合は、QILE です。 |
| 組み込み関数 | %LEN(可変長フィールド : *MAX) | これを使用して、可変長フィールドの文字の最大数を取得できるようになりました。 |
| 命令コード | SORTA(A | D) | SORTA 命令コードで命令拡張の A と D を使用できるようになりました。配列を昇順 (A) にソートするか、降順にソートするか (D) を指示します。 |
| 言語単位 | 要素 | 説明 |
|---|---|---|
| 制御仕様書キーワード | STGMDL(*INHERIT | *TERASPACE | *SNGLVL) | モジュールまたはプログラムの記憶域モデルを制御します。 |
| ALLOC(*STGMDL | *TERASPACE | *SNGLVL) | 記憶域管理命令 %ALLOC、 %REALLOC、DEALLOC、 ALLOC、REALLOC の記憶域モデルを制御します。 |
|
| ファイル仕様書のキーワード | ALIAS | LIKEREC キーワードで定義されたデータ構造のサブフィールドに対して代替フィールド名を使用します。 |
| 定義仕様書キーワード | ALIAS | 外部記述データ構造のサブフィールドに対して代替フィールド名を使用します。 |
| RTNPARM | 隠されたパラメーターとしてプロシージャーの戻り値を処理することを指定します。 | |
| 組み込み関数 | %PARMNUM | パラメーター・リストにおけるパラメーターの序数を戻します。 |
| %SCANRPL | ストリングにおける特定の値のすべての出現を走査して、それらを別の値に置換します。 | |
| XML-INTO のオプション | datasubf | 属性も指定された XML 要素のテキスト・データを受け取るサブフィールドを指定します。 |
| countprefix | XML-INTO 命令で設定された RPG 配列要素または非配列サブフィールドの数を受け取る、追加サブフィールドの名前の接頭部を指定します。 |