4D のデベロッパーとして、フォーミュラを作成し、使用したことがあると思います。フォーミュラは、Formula とFormula from string の 2つのコマンドで作成できます。後者は 4D V20 R3 で強化され、コンポーネントから制限なく使用できるようになりました!
フォーミュラと実行コンテキスト
フォーミュラは、その内容がどのようなものであれ、作成元のデータベースと密接にリンクしています。呼び出されると、フォーミュラは常に作成時のコンテキストで実行されます。
これは、Structure file のような 4Dコマンドや関数だけでなく、メソッド呼び出しに基づくフォーミュラにも当てはまります。
簡単な例
整形された文字列を返す FormatedCurrentDate メソッドを考えてみましょう。
#DECLARE($format : Integer)->$formatedDate : Text
$formatedDate:=String(Current date; $format)
このメソッドは、次のように作成されたフォーミュラ内で使用できます:
$formula:=Formula from string("FormatedCurrentDate(System date abbreviated)")
この場合、フォーミュラは期待どおりにフォーマットされた日付を返します。
$date:=$formula.call()
メソッドとフォーミュラが同じ環境にある場合、すべてうまくいきます。しかし、この共有されていないメソッドがホストデータベースにあり、このメソッドを使おうとするフォーミュラがコンポーネント内で作成された場合は実行できません。
新しいパラメーターが利用可能になりました
Formula from string に新しいパラメーターが追加され、フォーミュラがどのコンテキストで実行されるかを選択できる ようになりました。
#1) sk execute in the host database (ホストデータベースで実行)
非共有メソッドである FormatedCurrentDate がホストデータベースに属している先ほどの例に戻ると、以下のようにフォーミュラを作成することで、コンポーネントからも実行することが可能になります:
$formula:=Formula from string("FormatedCurrentDate(System date abbreviated)";sk execute in host database)
#2) sk execute in current database (カレントデータベースで実行)
定数 sk execute in current database が渡された場合 (または省略された場合)、フォーミュラは、そのフォーミュラを作成したデータベースで実行されます。
まとめ
この新しいオプションにより、ホストデータベースのメソッドや変数を使用して、独自の (たとえば 4D Write Pro 用の) インターフェースコンポーネントを簡単に作成できるようになります。
自由度が増し、パワーが増すということは、責任も増すということです。しかし、このオープン性は非常に実用的であり、コンポーネントがホストデータベースの関数にアクセスすることを可能にします。
フォーラムに感想をぜひお寄せください!