4D v16.3APPEND TO LIST |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
APPEND TO LIST
|
APPEND TO LIST ( list ; itemText ; itemRef {; sublist ; expanded} ) | ||||||||
引数 | 型 | 説明 | ||||||
list | ListRef |
![]() |
リスト参照番号 | |||||
itemText | 文字 |
![]() |
新規リスト項目のテキスト | |||||
itemRef | 倍長整数 |
![]() |
新規リスト項目の参照番号 | |||||
sublist | ListRef |
![]() |
新規リスト項目に付属するオプションのサブリスト | |||||
expanded | ブール |
![]() |
オプションのサブリストの展開/折りたたみ | |||||
APPEND TO LIST コマンドは、listに渡した参照番号を持つ階層リストに新規項目を追加します。
itemTextには項目テキストを渡します。20億文字までのテキスト式を渡すことができます。
itemRefにはユニークな項目参照番号 (倍長整数型) を渡します。この項目の参照番号はユニークな番号としましたが、実際にはどのような値でも渡すことができます。詳細についてはを参照してください。
項目にサブ項目を設定するには、sublistにサブ階層リストの有効なリスト参照を渡します。この場合、expanded 引数を渡さなければなりません。この引数にTrue または Falseを渡すと、それに応じてサブリストが展開あるいは折りたたまれて表示されます。
sublistに渡されたリスト参照は既存のリストを参照しなければなりません。既存のリストは1階層あるいはサブリストを持つリストのいずれでも構いません。新規項目にサブリストを添付しない場合は、この引数を省略するか0を渡します。サブリストを添付する場合、sublist と expandedは両方とも渡さなければなりません。
Tips:
以下は、データベースストラクチャの一部です:
[Departments] と [Employees] テーブルには以下のレコードが含まれています:
ここで、hlListという名前の階層リストを表示します。この階層リストは、部門を表示するとともに、各部門についてその部門で働いている従業員のサブリストを表示します。hlListのオブジェクトメソッドは以下のようになります:
` hlList 階層リストオブジェクトメソッド
C_LONGINT($event_l)
C_LONGINT(hlList;$hSubList;$vlDepartment;$vlEmployee;$vlDepartmentID)
$event_l:=Form event
Case of
:($event_l=On Load)
` 空の階層リストを新規に作成
hlList:=New list
` [Departments]テーブルの全レコードを選択
ALL RECORDS([Departments])
` 部門毎に
For($vlDepartment;1;Records in selection([Departments]))
` この部門の従業員を選択
RELATE MANY([Departments]Name)
` 何人いるか
$vlNbEmployees:=Records in selection([Employees])
` 部門に最低1人いるか
If($vlNbEmployees>0)
` 部門項目の子リストを作成
$hSubList:=New list
` 従業員毎に
For($vlEmployee;1;Records in selection([Employees]))
` サブリストに従業員を追加
` [Employees]レコードのIDフィールドを
` 項目参照番号として使用する
APPEND TO LIST($hSubList;[Employees]Last Name+", "+
[Employees]First Name;[Employees]ID)
` 次の[Employees]レコードへ
NEXT RECORD([Employees])
End for
Else
` 従業員がいない場合、部門項目に子リストを追加しない
$hSubList:=0
End if
` メインリストに部門項目を追加
` [Departments]レコードのIDフィールドを
` 項目参照番号として使用する。The bit #31
` トップビットを1に設定することで部門と従業員を
` 見分けることができる。詳細は後述の説明を参照
APPEND TO LIST(hlList;[Departments]Name;
[Departments]ID?+31;$hSublist;$hSubList#0)
`階層を強調するために 部門項目を太字にする
SET LIST ITEM PROPERTIES(hlList;0;False;Bold;0)
` 次の部門レコード
NEXT RECORD([Departments])
End for
` リスト全体を昇順にソート
SORT LIST(hlList;>)
` Windowsスタイルを使用してリストを表示
` 行の最低の高さを14ポイントにする
SET LIST PROPERTIES(hlList;Ala Windows;Windows node;14)
:($event_l=On Unload)
` リストはもう必要ない。メモリの解放を忘れずに
CLEAR LIST(hlList;*)
:($event_l=On Double Clicked)
` ダブルクリックされた
` 選択された項目の位置を取得
$vlItemPos:=Selected list items(hlList)
` 念のため位置を確認
If($vlItemPos#0)
` リスト項目の情報を取得
GET LIST ITEM(hlList;$vlItemPos;$vlItemRef;$vsItemText;$vlItemSubList;$vbItemSubExpanded)
`項目は部署か? ?
If($vlItemRef??31)
` そうであれば部署項目がダブルクリックされた
ALERT("部署項目 "+Char(34)+$vsItemText+Char(34)+" をダブルクリックしました。")
Else
` そうでなければ従業員項目がダブルクリックされた
` 親項目IDを使用して[Departments]レコードを検索できる
$vlDepartmentID:=List item parent(hlList;$vlItemRef)?-31
QUERY([Departments];[Departments]ID=$vlDepartmentID)
` 従業員が働いている部署と上司を表示する
ALERT("従業員 "+Char(34)+$vsItemText+Char(34)+" をダブルクリックしました。"
"この人は部署 "+Char(34)+[Departments]Name+Char(34)+
" で働いていて上司は "+Char(34)+[Departments]Manager+Char(34)+" です。")
End if
End if
End case
` Note: 4Dはテーブル毎に10億のレコードを格納できます。
` この例題では使用されない31番目のビットを用いて
` 従業員と部署を区別しています。
この例では、[Departments]項目と[Employees]項目を区別する理由は1つだけです:
1. レコードIDを項目参照番号に格納しており、[Departments]項目は[Employees]項目と同じ項目参照番号を持つ可能性があります。
2. List item parentコマンドを使用して、選択した項目の親項目を取得しています。対応するレコードIDが10の[Employees]項目をクリックし、同じレコードIDを持つ [Departments]項目も存在する場合、項目参照番号を渡して項目を検索すると、List item parentコマンドは[Departments]項目を見つけます。つまりこのコマンドは[Employees]項目の親ではなく、[Departments]項目の親を返します。
そのようなわけで一意の項目参照番号を作成しましたが、これはユニークな項目参照番号が必要なのではなく、[Departments]と[Employees]レコードを区別する必要があったからです。
フォームを実行すると、リストは以下のように表示されます:
Note: 上記の例は、比較的少ないレコードを扱う場合には、ユーザインターフェイスとして役立ちます。リストはメモリに置かれるので、何百万という項目を持つ階層リストでユーザインターフェイスを作成すべきではありません。
プロダクト: 4D
テーマ: 階層リスト
番号:
376
変更: 4D v11 SQL
ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)