2005年12月20日

FMP7/8 カスタムWebで範囲検索をする

ようやく FMP7/8 にてカスタムWeb開発作業に入っています。実際にやってみると、いろいろ細かいところでの FMP6 との違いに戸惑っています。

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);
これでうまく動作しました。


posted by Kojima at 16:44| Comment(6) | TrackBack(0) | 覚え書き | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
今日、自宅から会社で動作中の検証版をいじくっていたところ、似たような問題を見つけました。

「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では大丈夫なんでしょうかねぇ。
Posted by 金丸製作所 at 2005年12月24日 01:00
いつも情報提供いただきどうもありがとうございます。とても参考になります。

getでAND検索ができないというのは、同じフィールドに複数の条件を設定した場合、ということでしょうか? それとも違うフィールドでも?

来週検証してみます。

FMP6+WebCompanion だと、どのような検索が実行されたのかを、Web公開側のデータベースで検索条件を確認することができましたが、FMS7では検索結果から確認するしかありませんね。
Posted by Kojima at 2005年12月24日 15:01
別のフィールドです。

-db=MyDb&-lay=MyLayout&-recid=12345&randomno=12345678901234&-find

といった感じで。(演算子などは省略)

私の環境はG5デュアルで、デュアル問題回避のために、一方のCPUを無かったことにするターミナルコマンドが有効になっています。
拡張関数によるメール送信も何だかおかしいので、ターミナルコマンドのせいかもしれません。
Posted by 金丸製作所 at 2005年12月24日 18:00
URL例を間違えました。

正しくは以下です。

-db=MyDb&-lay=MyLayout&userno=12345&randomno=12345678901234&-find

話の辻褄から言うと、-recidではなくフィールド名にすべきでした。
実際にはそこが-recidであっても同じ結果になります。最初から複数フィールドではなく複数項目と表現すべきでした。すみません。
Posted by 金丸製作所 at 2005年12月25日 01:52
当方の環境 (FMSA7, MacOS X Server 10.4) で、限られた条件ではありますがGETによるAND検索を試してみましたが、正しく動作しました。

-maxをはずしてみたり、-lay.responseをつけたりはずしたりしましたが、問題を再現できませんでした。

-lopをつけないとマニュアル通りAND検索となり、-lop=andでも同じ。-lop=orでOR検索になりました。
Posted by Kojima at 2005年12月26日 10:12
不思議なことに、今日、もう一度確かめてみると、正しくand検索されているようです。
どっちでも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を停止させていない(デフォルト設定)、という戻り値が表示されるのが不思議です。

必要に迫られている方に限り、自己責任でお試しください。
Posted by 金丸製作所 at 2005年12月27日 09:34
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。