フィルタ関数の使用

フィルタ関数は、基本的に、どこかから値を取得し、その値を引用符(' ')で囲まれたストリングとして返します。これは、以下の関数を含む全ての種類のフィルタ関数に当てはまります。

フィルタ関数の唯一の目的は、FILTER() キーワードで使用される SQL WHERE 節のための句を構築することです。したがって、スタンドアロンの FILTER() 関数を使用するのは、PROPERTY、V(変数)、E(イベントパラメタ)、SV(セッション変数)、GC(グローバル定数)、METHODPARM(メソッドパラメタ)以外の式を使用して SQL WHERE 節の句を構築するときのみです。それは、これらには全て、FILTER() を操作しなくても使用できるフィルタ関数が対応しているからです。

たとえば、接頭辞という名のパラメタがイベントに渡されたとします。このイベントは、品目 ID コードが接頭辞で始まる全ての品目に対して機能するよう設計されています。これらの品目は、以下のパラメタとともにロード IDO コレクション処理を使用してロードすることができます。


IDO("SLItems")
FILTER( SUBSTITUTE("Item LIKE {0}", FILTER( E(Prefix) + "*" ) ) )
PROPERTIES("Item, Description")

イベントが起動し、接頭辞 [AL] が渡されたとします。

最初の FILTER() キーワード内の式は、以下のように機能します(内側から外側の順)。

  • E(Prefix) + "*" で次のように評価されます。[AL]*
  • その外側の FILTER() によって一重引用符で囲まれます:[ 'AL*]'
  • SUBSTITUTE() 関数で次のようになります:["Item LIKE 'AL*'] "

IDO ランタイムサービスがアスタリスクを SQL Server が認識できる % 記号に置換するので、結果の文字列は完璧な SQL WHERE 節になります。

注:  一方、FE(Prefix) 式では[ 「'AL'」]が求められます。これでは、必要な箇所でアスタリスクを一重引用符で囲む役には立ちません。実際に一重引用符で囲むのは適切な時期になってからになります。

別のレベルの SUBSTITUTE() を使用したり、引用符付きの引用を使用した連結ストリングを使用することによっても同じ結果が得られますが、FILTER() の方が見た目がすっきりします。