APPEND TO LIST

4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次

version 11 (Modified)


APPEND TO LIST (list; itemText; itemRef{; sublist; expanded})

引数説明
listListRefリスト参照番号
itemText文字列新規リスト項目のテキスト
itemRef倍長整数新規リスト項目の参照番号
sublistListRef新規リスト項目に付属するオプションのサブリスト
expandedブールオプションのサブリストの展開/折りたたみ

説明

APPEND TO LIST コマンドは、listに渡した参照番号を持つ階層リストに新規項目を追加します。

itemTextには項目テキストを渡します。20億文字までのテキスト式を渡すことができます。

itemRefにはユニークな項目参照番号 (倍長整数型) を渡します。この項目の参照番号はユニークな番号としましたが、実際にはどのような値でも渡すことができます。詳細については階層リストの管理の節を参照してください。

項目にサブ項目を設定するには、sublistにサブ階層リストの有効なリスト参照を渡します。この場合、expanded 引数を渡さなければなりません。この引数にTrue または Falseを渡すと、それに応じてサブリストが展開あるいは折りたたまれて表示されます。

sublistに渡されたリスト参照は既存のリストを参照しなければなりません。既存のリストは1階層あるいはサブリストを持つリストのいずれでも構いません。新規項目にサブリストを添付しない場合は、この引数を省略するか0を渡します。サブリストを添付する場合、sublistexpandedは両方とも渡さなければなりません。

Tips

・リストに新規項目を挿入するには、INSERT IN LISTコマンドを使用します。既存の項目のテキストや、そのサブリスト、展開または縮小状態の変更を行うには、SET LIST ITEMコマンドを使用します。

・新たに追加された項目のアピアランスを変更するには、SET LIST ITEM PROPERTIESコマンドを使用します。

例題

以下は、データベースストラクチャの一部です:

[Departments] と [Employees] テーブルには以下のレコードが含まれています:

ここで、hlListという名前の階層リストを表示します。この階層リストは、部門を表示するとともに、各部門についてその部門で働いている従業員のサブリストを表示します。hlListのオブジェクトメソッドは以下のようになります:

      ` hlList 階層リストオブジェクトメソッド
   Case of 
  
      : (Form event=On Load)
         C_LONGINT(hlList;$hSubList;$vlDepartment;$vlEmployee)
            ` 空の階層リストを新規に作成する
         hlList:=New list
            ` [Departments] ーブルの全レコードをセレクションにする
         ALL RECORDS([Departments])
            ` Department毎に
         For ($vlDepartment;1;Records in selection([Departments]))
               ` Departmentに属するEmployees を選択
            RELATE MANY([Departments]Name)
               ` 何人いるか?
            $vlNbEmployees:=Records in selection([Employees])
               ` 最低一人いれば
            If ($vlNbEmployees>0)
                  ` Department 項目のサブリストを作成
               $hSubList:=New list
                  ` Employee毎に
               For ($vlEmployee;1;Records in selection([Employees]))
                     ` Employee項目をサブリストに追加   
                     `  [Employees] のレコード番号を項目参照
                     ` 番号とし指定しいることに留意
                  APPEND TO LIST($hSubList;[Employees]Last Name+", "+
                              [Employees]First Name;Record number([Employees]))
                     ` 次の[Employees] レコードを処理
                  NEXT RECORD([Employees])
               End for 
            Else 
                  ` Employeesがいない場合、Department項目にサブリストを付加しない     
               $hSubList:=0
            End if 
               ` メインリストにDepartment項目を追加
               ` [Departments]のレコード番号を項目参照
               ` 番号とし指定しいることに留意。
               ` 項目参照番号の31番目のビットを強制的に1に
               ` 設定する。これによりDepartmentとEmployee 
               ` の項目を区別できる。
            APPEND TO LIST(hlList;[Departments]Name;
                           0x80000000 | Record number([Departments]);$hSublist;$hSubList # 0)
               ` Department項目のフォントを太字に設定
            SET LIST ITEM PROPERTIES(hlList;0;False;Bold;0)
               ` 次のDepartmentを処理
            NEXT RECORD([Departments])
         End for 
            ` リスト全体を昇順でソート    
         SORT LIST(hlList;>)
            ` Windows スタイルでリストを表示
            ` 最低の項目高さを14 ポイントに指定
         SET LIST PROPERTIES(hlList;ala Windows;Windows node;14)
    
      : (Form event=On Unload)
            ` リストが必要なくなったら忘れずにメモリから解放する
         CLEAR LIST(hlList;*)
    
      : (Form event=On Double Clicked)
            ` ダブルクリックされた
            ` 選択された項目の位置を取得
         $vlItemPos:=Selected list items(hlList)
            ` 念のため位置を確認
         If ($vlItemPos # 0)
               ` リスト項目の情報を取得      
            GET LIST ITEM(hlList;$vlItemPos;$vlItemRef;$vsItemText;$vlItemSubList;$vbItemSubExpanded)
               ` 項目はDepartmentか?
            If ($vlItemRef ?? 31)
                  ` Department項目がダブルクリックされた        
               ALERT("You double-clicked on the Department item "+Char(34)+$vsItemText+Char(34)+".")
            Else 
                  ` Employee 項目がダブルクリックされた 
                  ` 親項目の参照番号を使用し [Departments] レコードを探す
               GOTO RECORD([Departments];List item parent(hlList;$vlItemRef)?-31)
                  ` Employee の部署と上司を表示する
               ALERT("You double-clicked on the Employee item "+Char(34)+$vsItemText+Char(34)+
                        " who is working in the Department "+Char(34)+[Departments]Name+Char(34)+
                        " whose manager is "+Char(34)+[Departments]Manager+Char(34)+".")
            End if 
         End if 
    
   End case 

      ` Note: 4Dは10億レコードを1ーブルに格納できます。
      ` レコード番号は24ビットに収まります。
      ` この例題では、未使用の31番目のビットを使用し
      ` Employees と Departments の項目を区別しいます。

この例では、[Departments]項目と[Employees]項目を区別する理由は1つだけです:

1. レコード番号を項目参照番号に格納しており、[Departments]項目は[Employees]項目と同じ項目参照番号を持つ可能性があります。

2. List parent itemコマンドを使用して、選択した項目の親項目を取得します。対応するレコード番号が10の[Employees]項目をクリックし、同じレコード番号を持つ[Departments]項目も存在する場合、項目参照番号を渡して項目を検索すると、List parent itemコマンドは[Departments]項目を見つけます。つまりこのコマンドは[Employees]項目の親ではなく、[Departments]項目の親を返します。

そのようなわけで一意の項目参照番号を作成しましたが、これはユニークな項目参照番号が必要なのではなく、[Departments]と[Employees]レコードを区別する必要があったからです。

フォームを実行すると、リストは以下のように表示されます:

Note: 上記の例は、比較的少ないレコードを扱う場合には、ユーザインターフェイスとして役立ちます。リストはメモリに置かれるので、何百万という項目を持つ階層リストでユーザインターフェイスを作成すべきではありません。

参照

INSERT IN LIST, SET LIST ITEM, SET LIST ITEM PROPERTIES.


4D - Documentation   French   English   German   Spanish   日本語   4D v11 SQLコマンドテーマリスト   4D v11 SQLインデックス   4D v11 SQL定数テーマリスト   戻る   前   次