Formula from string に新たなオプションが追加!

4D のデベロッパーとして、フォーミュラを作成し、使用したことがあると思います。フォーミュラは、FormulaFormula 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 用の) インターフェースコンポーネントを簡単に作成できるようになります。

自由度が増し、パワーが増すということは、責任も増すということです。しかし、このオープン性は非常に実用的であり、コンポーネントがホストデータベースの関数にアクセスすることを可能にします。

 

フォーラムに感想をぜひお寄せください!

 

 

 

 

Roland Lannuzel
- プロダクトオーナー&4Dエキスパート -電子工学を学んだ後、産業用ITの分野で開発者兼コンサルタントとして、さまざまなデータベースやテクノロジーを使って顧客のためのソリューションを構築。80年代後半に4Dに惚れ込み、会計、請求書作成、メールシステムなどのビジネスアプリケーションの作成に4Dを使用してきました。現在も、新機能やデータベース開発ツールの定義など、4Dの未来を積極的に切り開いています。