POS - フィールド ID 関数

フォーマット/長さ: I4

システム関数 POS(field-name) は、システム関数で指定される名前を持つフィールドの内部識別子を返します。返される値は、フィールドアドレスの内部表現です。

POS(field-name) は、マップ内の位置と関係なく、特定のフィールドを識別するのに使用できます。これは、マップ内のフィールドのシーケンスと数が変更されても、POS(field-name) は引き続き同じフィールドを一意に識別できることを意味します。これにより、例えば、プログラムロジックに依存しているとフィールドに MARK を付ける場合、必要なのは 1 つの REINPUT ステートメントのみになります。

例:

DECIDE ON FIRST VALUE OF ... 
   VALUE ... 
      COMPUTE #FIELDX = POS(FIELD1) 
   VALUE ... 
      COMPUTE #FIELDX = POS(FIELD2) 
   ... 
END-DECIDE 
... 
REINPUT ... MARK #FIELDX

POS で指定されたフィールドが配列の場合、POS(FIELDX(5)) のように特定のオカレンスを指定する必要があります。POS を配列範囲に適用することはできません。

注意:
POS は同じ格納場所で開始する 2 つの異なる変数(REDEFINE 変数)を区別することはできません。これは、POS によって返される内部フィールドのアドレスが両方とも同じであるためです。

POS および *CURS-FIELD

システム関数 POS(field-name) は、カーソルが現在位置づけられているフィールドに応じて特定の機能を実行するために、Natural システム変数 *CURS-FIELD と組み合わせて使用できます。

*CURS-FIELD は、カーソルが現在位置づけられているフィールドの内部識別子を持ちます。これは単体では使用できず、POS(field-name) と組み合わせて使用する必要があります。これらを使用して、現在カーソルが特定のフィールドに置かれているかどうかを確認し、その状況に応じて処理を実行できます。

例:

IF *CURS-FIELD = POS(FIELDX) 
   MOVE *CURS-FIELD TO #FIELDY 
END-IF 
... 
REINPUT ... MARK #FIELDY

注意:

  1. *CURS-FIELD および POS(field-name) の値は、フィールドの内部識別子としてのみ機能し、算術演算に使用することはできません。
  2. 配列の次元のオカレンス数が EXPANDRESIZE、または REDUCE ステートメントを使用して変更された後には、X-array(最低でも 1 次元の最低でも 1 つの境界が拡張可能として定義されている配列)のオカレンスに対して POS(field-name) から返される値は変わることがあります。
  3. Natural RPC:*CURS-FIELD および POS(field-name) がコンテキスト変数を参照する場合、結果の情報は同じ会話内でのみ使用できます。
  4. Natural for Ajax アプリケーションの場合、入力にフォーカスがあるコントロールの値を表すオペランドが、*CURS-FIELD によって識別されます。*CURS-FIELDPOS 関数と併せて使用することにより、入力にフォーカスがあり、その条件に応じて処理を実行するコントロールをチェックできます。
  5. *CURS-FIELDPOS(field-name) は、同じ格納場所で開始する 2 つの異なる変数(REDEFINE 変数)を区別することはできません。これは、*CURS-FIELDPOS(field-name) によって返される内部フィールドのアドレスが両方とも同じ変数であるためです。

プログラミングガイド』の「ダイアログの設計」、「フィールドに基づいた処理」、および「プログラミングの単純化」も参照してください。