FMP6 では、例えば日付のフィールドで 2005.12.1 〜 2005.12.31 というような範囲での検索は、
FMPro?-op=gte&date=2005.12.1&-op=lte&date=2005.12.31&-find(関係ない引数は省略しています)
といったかたちで実行できましたが、FMP7では引数に同じフィールドを2回使用することができないようです。
実際にやってみましたが動作せず、松尾さんの解説書「FileMaker Server カスタムWebテクニック」55ページに、
FileMaker クエリー文字列において同じフィールド名のクエリー引数を複数回指定することはできません。とあります。(「FMS 7 カスタム Web ガイド.pdf」でも探しましたが、該当する記述を見つけられませんでした。)
当方では Webアプリケーション開発に PHP & FX.php を使っていますので、予め"..."を使って連結し、引数として渡してやる必要があります。
$dateRange = $date1 . "..." . $date2;これでうまく動作しました。
$query->AddDBParam("date", $dateRange);
「getメソッドではand検索ができない!?」
通常、複数条件での検索はFormを使ったpostメソッドで行うことが多いのですが、URLの形式で書くgetメソッドを使わなければならないこともあります。
従来、getメソッドにおいて複数の条件が指定されているとき、デフォルトがand検索で、-lopで指定すればor検索も可能になっていました。FMSA7付属のドキュメントにもそのように記載されていますが、実際にはその通りになっていない(すくなくとも私の環境では)。
デフォルトがor検索で、-lop=andと明示的に書いても結果はor検索のままでした。
これもデュアルCPU問題?
getメソッド内の検索条件数や検索対象フィールドを動的に変化させるような要求に直面することは少ないと思われます。要するに検索フィールドの組み合わせが固定的であることが多いので、あらかじめターゲットとする複数のフィールド値を結合する計算フィールドを作っておき、結合値を以て検索することで間接的にand検索を行わせ、問題を回避しました。
たとえばメールの本文にURLを含めておき、それをクリックしたときに所定の検索が行われることで、そのユーザに、目的に合致した情報を見せる...というのがありますよね。性善説的にはレコードIDだけを条件にすれば良いのですが、ユーザが妙な興味を持って、URLに含まれるレコードIDの数字列を打ち変えたら、他のレコードも見られてしまいます。
回避するためには、たとえばレコード上に乱数などを置いておき、それとのand検索にすれば良いのですが、その動きがおかしかったことから発覚しました。
ちなみに、postメソッド(Form)からの検索に問題は見られません。
システムが検証位相に入るとともに、問題が吹き出してきているような気が。
FMSA8では大丈夫なんでしょうかねぇ。
getでAND検索ができないというのは、同じフィールドに複数の条件を設定した場合、ということでしょうか? それとも違うフィールドでも?
来週検証してみます。
FMP6+WebCompanion だと、どのような検索が実行されたのかを、Web公開側のデータベースで検索条件を確認することができましたが、FMS7では検索結果から確認するしかありませんね。
-db=MyDb&-lay=MyLayout&-recid=12345&randomno=12345678901234&-find
といった感じで。(演算子などは省略)
私の環境はG5デュアルで、デュアル問題回避のために、一方のCPUを無かったことにするターミナルコマンドが有効になっています。
拡張関数によるメール送信も何だかおかしいので、ターミナルコマンドのせいかもしれません。
正しくは以下です。
-db=MyDb&-lay=MyLayout&userno=12345&randomno=12345678901234&-find
話の辻褄から言うと、-recidではなくフィールド名にすべきでした。
実際にはそこが-recidであっても同じ結果になります。最初から複数フィールドではなく複数項目と表現すべきでした。すみません。
-maxをはずしてみたり、-lay.responseをつけたりはずしたりしましたが、問題を再現できませんでした。
-lopをつけないとマニュアル通りAND検索となり、-lop=andでも同じ。-lop=orでOR検索になりました。
どっちでもOKになるように組み直しておいてよかった。
前回とは環境に相違があります。
ターミナルコマンドで一方のCPUを停止させて使っていましたが、その方法だとシングルCPUになりきらないことがあるらしく、エラー連発を経験しました。
このため、Developer's tool kitとCHUDの組み合わせで、コンパネからCPUを停止させる方法に切替えています。
なんだか関連がありそうな気がします。
すみませんが、ここから脱線です。
Developer's tool kit、CHUDともにApple純正品です。Developer's tool kitが入っていないとCHUDはインストールできません。
前者は商品版のOS10.3に付属していたCDを使いました。(環境自体は10.4ですが受け付けてくれました)
後者はAppleの英文サイトからダウンロードしました。
CHUDにはバージョンが幾つもあり、目的のマシンに適合するものを選択する必要があります。
これらは開発環境として用意されているツールですが、実際にはその機能のごく一部を使って1方のCPUの停止/起動に利用します。
インストールすると、コンパネにそれ用の項目が追加され、一方のCPUのON/OFFがGUIで可能になります。
設定の変更はその場で反映されるので、特に再起動は必要なさそうです。
メニューバーにアイコンを置くこともできます。
また、2個のCPUの負荷をトレンドグラフとして表示できるので、本当に1個停止しているか視覚的に確認できます。
ここで、どうにも不思議なのは、CHUDでCPUを1個停止させた状態で次のターミナルコマンドを入力
nvram boot-args
結果、PRAM上ではCPUを停止させていない(デフォルト設定)、という戻り値が表示されるのが不思議です。
必要に迫られている方に限り、自己責任でお試しください。