複数のメソッドのプロパティを、それぞれのメソッドのプロパティダイアログを開かずに変更したい場合があるかと思います。
例えば、すべてのメソッドを「プリエンプティブモードで実行可能」な状態に設定してから、データベースをコンパイルしたいとします。コンパイルエラーで、プリエンプティブに変更するメソッドの概要がわかるわけです。
コマンドを使用して METHOD GET NAMESコマンドを使用してデータベースからメソッドのリストを取得し、次に METHOD SET ATTRIBUTESコマンドを使って属性を変更することで、すべてのメソッドを同時に変更することができます。
以下は、プロジェクトのすべてのメソッドをプリエンプティブモードに設定する例です。
ARRAY TEXT
(
($arrName;0)
C_OBJECT ($attributes)
// Retrieve all methods in structure
METHOD GET NAMES ($arrName)
// Create object with the "preemptive" attribute set to "capable"
OB SET ($attributes; "preemptive"; "capable")
// Change the "preemptive" attribute value for all methods For ($i;1;Size of array($arrName)
METHOD SET ATTRIBUTES$arrName{$i};$attributes)
End for
コレクションを使ってプロパティを操作する
4Dには、新しい型であるコレクションがあり、コレクションを扱うための多くのメソッドが用意されています。
では、この新しい型はどのように使うのでしょうか?メソッド名やプロパティをコレクションに挿入して、検索したり、変更したり、単純にコレクション型のリストボックスに表示したりします。
以下は、すべてのメソッドプロパティをコレクションに格納する例です。
C_OBJECT$iSize of array$arrName
$i$attributes($attributes)
C_COLLECTION (colMethod)
ARRAY TEXT ($arrName;0)
colMethod :=New collection()
// Retrieve all methods in structure
METHOD GET NAMES ($arrName)
For $attributes :=New object()
// Retrieve the attributes for each method
METHOD GET ATTRIBUTES ($arrName{$i};$attributes)
// Add item in the collection colMethod .push(New object("name";$arrName{ xml
End for
属性を編集した後、コレクションをループさせるだけで結果を保存することができます。
C_OBJECT// Save attributes ($item;$tmp)
(
// Loop for each item in the collection
For each ($item;colMethod)
$tmp :=$item.attributes
METHOD SET ATTRIBUTES$item.name;$tmp)
End for each