7.122.2 UPD_ENTRY についてのコメント/警告

項目を更新するリストとしてブラウズ・リストを指定した場合、UPD_ENTRYは「モード依存」コマンドになります。詳細については、「RDML画面モードとモード依存コマンド」を参照してください。

IBM i およびCPFオペレーティング・システムの制限により、以下の例のようなロジックは、2つ(またはそれ以上)のブラウズ・リストに対して正常に動作しません。

SELECTLIST NAMED(#LIST01)
<< process LIST01 entry >>
           SELECTLIST NAMED(#LIST02)
           << process LIST02 entry >>
           UPD_ENTRY  IN_LIST(#LIST02)
           ENDSELECT
UPD_ENTRY IN_LIST(#LIST01)
         ENDSELECT
 

これは、すべてのブラウズ・リストが同じ「ファイル」(表示ファイル)に属していることから、更新操作では、その「ファイル」内で最後に処理された「レコード」の更新が試行されるためです。この例のようなプログラムをコンパイルすると、#LIST01に対するUPD_ENTRYコマンドで失敗し、「先に読み取ることなく」更新が試行されたことを示すエラーが発行されます。

すなわち、ブラウズ・リストの項目を更新できるのは、どのブラウズ・リストの場合も、ブラウズ・リストに対して最後に実行された操作が更新対象のブラウズ・リストに対する読み取り操作(SELECTLISTまたはGET_ENTRY)である場合だけです。

通常、以下のように更新操作を実行するタイミングを変更することにより、この制限に対処することができます。

   SELECTLIST NAMED(#LIST01)
   << process LIST01 entry >>
=> UPD_ENTRY IN_LIST(#LIST01)
              SELECTLIST NAMED(#LIST02)
              << process LIST02 entry >>
              UPD_ENTRY  IN_LIST(#LIST02)
              ENDSELECT
   ENDSELECT
 

上記のようなソリューションを実装できない場合は、UPD_ENTRYコマンドの直前にGET_ENTRYコマンドを使用してください。

この制限は、作業リストには適用されません。