2012年10月11日木曜日

【FileMaker】検索設定をフィールドで管理し、様々な検索を実行する。


検索対象のファイルに
フィールド名
[Subject]
[from]
がある。

例1:
フィールドに保存した検索設定
{

from|*
omit
Subject|バックアップ完了
omit
Subject|タスク_が正常に完了しました。
omit
Subject|[fmjml:*
}


上記値を引数にして以下のスクリプトを実行。

スクリプト名:検索(フィールド名,値)

以下の検索を実行します。


from|* ・・・・・・ フィールド:from を「*」で検索
omit
Subject|バックアップ完了 ・・・・・・ フィールド:Subject が 「バックアップ完了」を除外
omit
Subject|タスク_が正常に完了しました。 ・・・・・・ フィールド:Subject が 「タスク_が正常に完了しました。」を除外
omit
Subject|[fmjml:* ・・・・・・ フィールド:Subject が 「[fmjml:*」を除外



例2:
フィールドに保存した検索設定
{

from|"@gmail.com"
and
Subject|バックアップ完了
}
フィールド:from を「"@gmail.com"」で検索し2行目が「and」なので
フィールド:Subject を「バックアップ完了」で絞込み検索します。

「and」 「or」 「omit」(除外) が使用可能!

以下、スクリプトの中身!

スクリプト名:検索(フィールド名,値)

{
#引数無しは、全てのレコード表示
レイアウト切り替え [「List」 (mailer)]
変数を設定 [$argu; 値:Get(スクリプト引数)]
If [IsEmpty ( $argu )]
#引数がなければすべて表示
全レコードを表示
レコードのソート [記憶する; ダイアログなし]
現在のスクリプト終了 []
End If
変数を設定 [$max; 値:ValueCount ( $argu )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n>$max]
変数を設定 [$RawRow; 値:GetValue ( $argu ; $n )]
#「フィールド名|検索値」 を 「フィールド名¶検索値」 にする
変数を設定 [$row; 値:Let([ P=Position ( $RawRow ; "|" ; 1 ; 1 ) ]; If ( P>0 ; Replace ( $RawRow ; P ; 1 ; "¶" ) ; $RawRow  )   )  
#検索条件 を確認 and or omit(除外)
変数を設定 [$SearchCondition; 値:Case (  $RawRow = "and" ; "and" ;  $RawRow = "or" ; "or" ;  $RawRow = "omit" ; "omit" ;  $RawRow = "-" ; "omit" ; "" )]
If [ not IsEmpty ( $SearchCondition )]
#検索条件があれば、次の行の 「フィールド名|検索値」 を設定
変数を設定 [$n; 値:$n+1]
変数を設定 [$row; 値:Let( val=GetValue ( $argu ; $n );
End If
#テーブル名 と フィールド名を 連結
変数を設定 [$TargetFieldName; 値:Get ( レイアウトテーブル名 ) & "::" & GetValue( $row ;1)]
#検索値を取得
変数を設定 [$SearchValue; 値:GetValue( $row ;2)]
#
検索モードに切り替え []
#検索値を設定
フィールドを名前で設定 [$TargetFieldName; $SearchValue]
エラー処理 [オン]
If [$n = 1]
検索実行 []
Else If [$SearchCondition = "and" or IsEmpty ( $SearchCondition )]
対象レコードの絞り込み []
Else If [$SearchCondition = "or"]
対象レコードの拡大 []
Else If [$SearchCondition = "omit"]
#除外
ブラウズモードに切り替え []
対象外のみを表示
検索モードに切り替え []
フィールドを名前で設定 [$TargetFieldName; $SearchValue]
対象レコードの拡大 []
対象外のみを表示
End If
エラー処理 [オフ]
変数を設定 [$n; 値:$n+1]
End Loop
}




0 件のコメント:

コメントを投稿