7.75.2 POINTについてのコメント/警告
· RDMLプログラムが最初に呼び出されたときに(または、その後、低使用頻度モードで呼び出されたときに)、プログラムが使用するすべてのファイルに対して以下のコマンドが実行されたかのように、使用されるすべてのファイル、ライブラリ、およびメンバーの内部詳細が初期化されます。
POINT FILE(XXXXX) TO_FILE(XXXXX) TO_LIBRARY(*LIBL)
TO_MEMBER(*FIRST)
すなわち、デフォルトでは、ファイルはコーディングされた名前と同じ名前で開かれます。このとき、ライブラリ・リストでファイルが検索され、そのファイル内の最初のメンバーへのアクセスが行われます。
· POINTコマンドは実行可能形式のコマンドです。使用されるファイル、ライブラリ、およびメンバーに関する内部詳細が、POINTコマンドの実行時に更新されます。
· 対話型RDMLファンクションは、最初の画面の対話処理と並行してデータベース・ファイルを開こうとします。そのため、最初のDISPLAY、REQUEST、またはPOP_UPコマンドを発行する前に、必要なすべてのPOINTコマンドを実行することをお勧めします。
· POINTコマンドで提供されるファイル・リダイレクトの詳細は、現在のファンクションのみに適用され、呼び出されたファンクションや以降に呼び出されるファンクションには適用されません。POINTコマンドは、ファンクションごと指定する必要があります。
· 論理ファイルに対してPOINTコマンドを発行するときは、関連付けられた/基となる物理ファイルに対してもPOINTコマンドを指定する必要があります。これは、論理ファイルを通して行われる多くのI/O要求が、実際には物理ファイルを通して実行されるからです(例:UPDATE、DELETE、LOCK(*YES))。この要件は全構文検査で検査され、要件が満たされていない場合は、致命的エラーが発行されます。
· 同様の理由から、物理ファイルに対してPOINTコマンドを発行するときは、ファンクションが使用するすべての関連論理ファイルに対してもPOINTコマンドを発行する必要があります。この要件は全構文検査で検査され、要件が満たされていない場合は、致命的エラー・メッセージが発行されます。
· 物理ファイルを特定のメンバーにリダイレクトし、関連付けられた論理ビューを別のメンバーにリダイレクトするPOINTコマンドを使用することもできますが、このような状況では、予期しない結果になる可能性があります。例えば、論理ビューを通してメンバーAからレコードを読み取り、更新した場合、実際にはメンバーBのまったく異なるレコードが更新されることがあります。
· POINTコマンドを使用する際は注意が必要です。POINTコマンドが関与する論理ファイルと物理ファイルが、最終的に同じ物理ファイル・メンバーのデータを「指す」ようにしてください。
· アクセスする実際のファイル、ライブラリ、またはメンバーがファンクションの実行中に変更される場合、そのファイルをCLOSEコマンドで閉じる必要があります。そうしないと、I/Oモジュールにより致命的エラーが発行されます。
例えば、以下のコマンドは2番目のFETCHで失敗します。
POINT FILE(CUSTMST) TO_MEMBER(CURRENT)
FETCH FIELDS(#NAME) FROM_FILE(CUSTMST) WITH_KEY(#CUSTNO)
POINT FILE(CUSTMST) TO_MEMBER(ARCHIVE)
FETCH FIELDS(#NAME) FROM_FILE(CUSTMST) WITH_KEY(#CUSTNO)
I/Oモジュールは異常終了し、メンバーCURRENTが開いている状態でメンバーARCHIVEに対してI/O要求が行われたことを示すエラーが発行されます。
正しくは、以下のように指定します。
POINT FILE(CUSTMST) TO_MEMBER(CURRENT)
FETCH FIELDS(#NAME) FROM_FILE(CUSTMST) WITH_KEY(#CUSTNO)
CLOSE FILE(CUSTMST)
POINT FILE(CUSTMST) TO_MEMBER(ARCHIVE)
FETCH FIELDS(#NAME) FROM_FILE(CUSTMST) WITH_KEY(#CUSTNO)
· アプリケーション・システム全体で複数メンバー・ファイルを使用する場合、通常、ファイル・メンバーに対して特定の命名規則使用されます。例えば、複数企業の財務システムでは、"M"の後に会社番号を続けたメンバー名が使用されることがあります。このような場合、使用するメンバー名を自動的に設定するシステム変数を作成しておくと便利です。
複数メンバー財務システムで使用されるすべてのRDMLプログラムの先頭部分で一般的に見られる以下のコーディングの例について考えます。
POINT FILE(GLMAST) TO_MEMBER(*COMPANY_MBR)
POINT FILE(SUMAST) TO_MEMBER(*COMPANY_MBR)
POINT FILE(FTMAST) TO_MEMBER(*COMPANY_MBR)
同じ機能を使用して、使用するライブラリの名前を決定することができます。例えば、PRODUCTION、TESTING1、およびTESTING2というまったく同じ3つデータ・ライブラリを使用するシステムでは、すべてのRDMLプログラムの先頭部分に以下のようにコーディングします。
POINT FILE(GLMAST) TO_LIBRARY(*DATA_LIBRARY)
POINT FILE(SUMAST) TO_LIBRARY(*DATA_LIBRARY)
POINT FILE(FTMAST) TO_LIBRARY(*DATA_LIBRARY)
システム変数"*DATA_LIBRARY"を処理するプログラムは、ユーザー・プロファイルまたはその他の識別子から必要なライブラリ名を導き出します。
· 現在のリリースのLANSAでは、データの検証やバッチ制御ロジックなど他の目的のためにI/Oモジュールで使用されるファイルをリダイレクトすることはできません。これらのファイルは、常に、ライブラリ・リストを検索してファイル内の最初のメンバーを使用することで開かれます。
· I/Oが、LANSAに定義されていないファイルにリダイレクトされる場合、LANSAは、ユーザーのアクセス権限を内部のセキュリティ情報と照合することができません。このような場合、ユーザーには「特別なアクセス権限」が与えられ、警告メッセージが発行されます。このようなアクセスも、通常のi5/OSオペレーティング・システムのセキュリティに制約されます。
· RDMLプログラムでPOINTコマンドを使用することにより生じる影響の確認と検査は、開発者の責任において行ってください。