HDI: 4D View Pro: カスタムファンクションとコレクション/オブジェクト引数
カスタムファンクションは、4D View Pro の強力な機能で、4D View Pro の可能性を拡張し、ニーズに合わせたカスタムの計算や操作を実行することができます。このカスタムファンクションの引数として、ユーザーにより指定されたセルレンジの値をコレクションやオブジェクトの形で渡せるようになりました。
コレクションを扱う場合
1. フォーミュラの作成
まず、4D View Pro が呼び出すファンクションの動作を定義するフォーミュラが必要ですが、ここでは CustomFunctionCreator クラスに _averageNonZeroValues() という名の関数を作成して、フォーミュラとして利用します。この関数は、引数としてコレクションを 1つ受け取り、中身は以下のように定義されてています:
Function _averageNonZeroValues($values : Collection) : Real
// レンジに含まれる 0 または Null でない値の平均
// コレクションの値の合計
var $total:=$values.flat(2).sum()
// 0 または Null でない値を持つセルの数を計算します
var $NonZeroValueNumber : Integer:=$values.flat(2).count()-$values.flat(2).countValues(0)
// セルに表示する計算結果を返します
return $NonZeroValueNumber>0 ? $total/$NonZeroValueNumber : 0
2. カスタムファンクションの定義
Function averageNonZeroValues()->$customFunction : Object
var $this : Object
$customFunction:={}
$this:=This // フォーミュラの定義に使用する This を取得します
// スプレッドシート内でカスタムファンクションが使われたときに呼び出されるフォーミュラ
$customFunction.formula:=Formula($this._averageNonZeroValues($1))
// 引数がコレクション型の場合、カスタムファンクションの引数の宣言は必須です
$customFunction.parameters:=[{name: "値のレンジ"; type: Is collection}]
// 自動補完ポップアップに表示されるカスタムファンクションの概要
$customFunction.summary:="ゼロでない値の平均を計算します。"
// 受け入れる引数の数
$customFunction.minParams:=1
$customFunction.maxParams:=1
オブジェクトを扱う場合
- 4D View Pro に呼び出されたカスタムファンクションが、評価を実行するのに使用するフォーミュラを作成します。
- カスタムファンクションのオプションを定義するオブジェクトを作成します。
ここでも引き続き CustomFunctionCreator クラスを使用します。
1. フォーミュラの作成
まず、4D View Pro が呼び出すファンクションの動作を定義するためのフォーミュラが必要です。CustomFunctionCreator クラスに _modifiedProperties() という名のクラス関数を作成して、フォーミュラとして利用します。このクラス関数は、引数としてオブジェクトを 1つ受け取り、中身は以下のように定義されてています:
Function _modifiedProperties($object: Object) : Text
// スプレッドシートの表のデータと、その元となった Form.people のデータを比較します
var $myObject : Object:=$object.value
// スプレッドシートの表のデータと、その元となった Form.people 間で値の異なる属性を検索します
For each ($property; $myObject)
// スプレッドシートから受け取ったオブジェクト引数と Form.people オブジェクトを比較します
If ($myObject[$property]#Form.people[$property])
// データが変更されている場合にセルに表示するメッセージ
return "データが変更されています"
End if
End for each
return ""
2. カスタムファンクションの定義
Function modifiedProperties()->$customFunction : Object
var $this : Object
$customFunction:={}
$this:=This // フォーミュラの定義に使用する This を取得します
// スプレッドシート内でカスタムファンクションが使われたときに呼び出されるフォーミュラ
$customFunction.formula:=Formula($this._modifiedProperties($1))
// オブジェクト引数の宣言
$customFunction.parameters:=[{name: "値"; type: Is object}]
// 自動補完ポップアップに表示されるカスタムファンクションの概要
$customFunction.summary:="ユーザーがデータを変更した場合、メッセージを表示します。"
// 受け入れる引数の数
$customFunction.minParams:=1
$customFunction.maxParams:=1
3. カスタムファンクションの宣言
仕上げのステップでは、フォームの “On Load” イベントにおいて、averageNonZeroValues() とmodifiedProperties() クラス関数を使って、VP SET CUSTOM FUNCTIONS を呼び出します:
Case of
: (FORM Event.code=On Load)
var $customFunctions:={}
// 4D View Pro エリアにおいて使用が許可されるカスタムファンクションを宣言します
var $creator:=cs.CustomFunctionsCreator.new()
$customFunctions.MY_AVERAGENONZEROVALUES:=$creator.averageNonZeroValues()
$customFunctions.MY_MODIFICATIONS:=$creator.modifiedProperties()
VP SET CUSTOM FUNCTIONS("ViewProArea"; $customFunctions)
End case
これで、4D View Pro エリアで利用可能な 2つの新しいカスタムファンクションが追加されました:
- “MY_AVERAGENONZEROVALUES”:
- “MY_MODIFICATIONS”:
4D View Pro でカスタムファンクションを使用することで、スプレッドシートの可能性を新たな高みへと引き上げ、オーダーメイドの計算や操作が可能になります。より詳細な情報についてはドキュメントをご覧ください。