Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

[ Image Removed |../../index.htm#lansa/groupfields.htm]
現在地:

...

14.1.2 フィールド・グループおよび拡張可能なグループ

GROUP_BYコマンドを使って1つまたは複数のフィールドを共通の名前の下でグループ化します。これはRDMLコマンドの中で最も時間を節約できるコマンドの1つです。このコマンドを使用すれば、多くのフィールド名が羅列されたリストを繰り返し指定する必要がなくなります。 また、パラメータにフィールド名のリストが必要なコマンドについても、そのほとんどでグループ名の指定が許されます。次の例を検討してみましょう。

また、パラメータにフィールド名のリストが必要なコマンドについても、そのほとんどでグループ名の指定が許されます。次の例を検討してみましょう。 

     BEGIN_LOOP

...

     REQUEST    FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
INSERT     FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
          TO_FILE(A)

...

     INSERT     FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
          TO_FILE(B)

...

     UPRINT     FIELDS(#ORDLIN #PRODUCT #QUANTITY #PRICE)
CHANGE     FIELD(#ORDLIN #PRODUCT #QUANTITY #PRICE)
          TO(*DEFAULT)
END_LOOP

...

ここで、GROUP_BYコマンドを使ってすべてのフィールドを共通の名前でグループ化するように書かれた同じRDMLプログラムを見てみましょう。 BYコマンドを使ってすべてのフィールドを共通の名前でグループ化するように書かれた同じRDMLプログラムを見てみましょう。 

     GROUP_

...

BY   NAMED(#ORDERLINE)

...

 FIELDS(#ORDLIN #PRODUCT #QUANTITY
                                   #PRICE)
BEGIN_LOOP

...

     REQUEST    FIELDS(#ORDERLINE)

...

     INSERT     FIELDS(#ORDERLINE)

...

 TO_FILE(A)

...

     INSERT     FIELDS(#ORDERLINE)

...

 TO_FILE(B)

...

     UPRINT     FIELDS(#ORDERLINE)

...

     CHANGE     FIELD(#ORDERLINE)

...

 TO(*DEFAULT)
END_LOOP

 
新たな5個のフィールドをRDMLプログラムに追加する場合、変更はどちらが容易でしょうか。 新たな5個のフィールドをRDMLプログラムに追加する場合、変更はどちらが容易でしょうか。 

グループとGROUP_BYコマンドに関する注意点を以下に示します。

  • 必要なだけのGROUP_BYコマンドを定義することができます。
  • 1つのフィールドを複数のGROUP_BYコマンドのFIELDSパラメータで定義することができます。
  • 通常、フィールド名のリストを指定できる場所であればどこでもGROUP_BY名を使用することができます。
  • 以下のようにGROUP_BY名を定義します。
     GROUP_

...

  • BY   NAMED(#ORDERHEAD)

...

  •  FIELDS(#ORDER #CUSTNO #ADDR1
                                       #ADDR2
                                       #POSTCD)

次に以下のように使用します。

      FETCH      FIELDS(#ORDERHEAD)

...

 FROM_FILE(ORDHED)
    FETCH      FIELDS(#ORDERHEAD)

...

 FROM_FILE(CUSMST)

...

1番目のFETCHでは、グループ内のフィールドでORDHEDファイルにあるものだけが取得されます。この場合では#ORDERと#CUSTNOだけが取り出されます。グループ内の他のフィールドはORDHEDファイルにないため、このコマンドで変更されることはなく無視されます。

...

2番目のFETCHでは、#CUSTNO(再取得)

...

、#ADDR1、#ADDR2、および#POSTCDが取得されます。これらのフィールドがすべてCUSMSTファイルにあるためです。#ORDERフィールドはCUSMSTファイルにないため、このコマンドで変更されることはなく無視されます。 

...

さらに、次のトピックも参照してください。 

拡張可能グループ

拡張可能なグループに関する特記事項

拡張可能なグループ式

拡張可能なグループの例

...