このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

CDMLでスクリプト実行

発言者:うえだ
( Date Friday, June 20, 2003 16:03:51 )


ファイルメーカー6で、CDMLで社内で公開しているのですが、スクリプト実行のタイミングがうまくいかず困っています。
検索語に実行や、全レコードを対象に実行する事は出来るのですが、
これでは検索後の結果に満足できなかった時には、すでにスクリプトが実行されてしまっています。
検索結果を見て、絞り込み検索後に結果を確認して、今アクティブなレコードに対してスクリプトを実行するにはどうすれば良いのでしょうか?
よろしくお願い致します。

とも さんからのコメント
( Saturday, June 21, 2003 23:06:27 )

-scriptコマンドですね。
どのようなスクリプトを実行するのでしょうか?
検索結果のページにボタンを配置して-scriptコマンドで実行させればええんちゃいますやろか?

うえだ さんからのコメント
( Sunday, June 22, 2003 14:24:58 )

お返事ありがとうございます。

具体的には、検索結果をテキストファイルに書き出したり、自動組版したりするものです。アップルスクリプトで他のアプリケーションと連係しています。

-scriptコマンドには、必ずオプションが必要ですよね?
つけなければエラーが出ます。
例えば、-findなどをつけると、全レコードが対象にされてスクリプトが動きだします。
-findallならこの動作も理解できるのですが、実際にはそうなります。
単純に、今のレコード状態(ソート状態も含めて)でスクリプトを実行したいです。

とも さんからのコメント
( Wednesday, June 25, 2003 15:02:21 )

返事が遅くなってすみません。
答えになっていないかもしれませんが。
-findですと、検索後にスクリプトが動きますね。
-script.prefind、あるいは-script.presortですと、ソート前に実行します。
-scriptコマンドにオプションが必要だったかどうかは、ちょっと覚えてないのですが。。。
-tokenを使ってはどうでしょうか?
グローバルフィールドにデータを入力し、その値を別途読み出すことで複数の値を読むことができるそうです(実際に経験なくてもうしわけありません)。
-tokenを使って、-viewや-findをさせて、その時に-scriptコマンドを実行してみてはいかがでしょう?

うえだ さんからのコメント
( Wednesday, June 25, 2003 16:48:53 )

アドバイス、ありがとうございます。

>-scriptコマンドにオプションが必要だったかどうかは、ちょっと覚えてないのですが。。。

Ver4くらいでは、オプションなしで動くような記述をどこかで見かけましたが、Ver6ではエラーが出ます。

-script.prefindって、言葉的には検索前だと思うのですが、実際の動作は検索後ですよね?

人数も限られた社内のLANなので、ファイルメーカを台数分購入してそれで共有すれば簡単な話のような気がするのですが、社長が購入してくれないのでCDMLで作業しなければならない状況です。
データは散在するし、無駄な手間が増えて困ってしまいます。

とも さんからのコメント
( Wednesday, June 25, 2003 18:24:20 )

>-script.prefindって、言葉的には検索前だと思うのですが、実際の動作は検索後ですよね

いえ。ver4.1の頃は、検索前でしたね。
やったことあるはずなんで間違い無いと思います。

どのようなscriptですか?
その検索した後ですと、やはりそれを一旦、-tokenでなにかしらさせるのがいいかな。。。
それともう一つの手としては、Javascriptをうまく利用する手もありますね。
Javaやその他の言語も使えるようなことがマニュアルに載ってましたね、そういや。
どのような操作なのかいまいちわからないのでどれが一番良いのか分からないですが。

V6はバグが結構あるのかもしれませんね。
私もV6は手に入れているのですが、できないことがあったのでV5.5に戻しました。

あまり参考にならなかいですね。すみません。

とも さんからのコメント
( Thursday, June 26, 2003 09:48:18 )

先ほど、ver6でテストしてみました。
-script.prefindを利用してみたところ、検索前に行いますね。
これを利用して、簡単なものを作ってみました。
ポイントだけ説明します。
作ったモデルはnoとnameだけのもの。
スクリプトは単純にこの二つのフィールドをエクスポートするだけ。
作成したページは、
○search.html⇒results.htmlの二つだけ。
検索結果を表示するresults.htmlへ行くとき、検索条件を
[fmp-findopitem:]と[fmp-findvalueitem]を利用して、resultsでスクリプトを実行させるときに再度検索かけるといいでしょう。
-script.prefindを利用してxを実行し、results.htmlを再度表示。
このときに、results.htmlから飛んできたときに、っていうことで「FMP-if」を利用して"データをエクスポートしました"って表示させれば、なおOKでしょう。

こんなところでどうですか?

とも さんからのコメント
( Sunday, June 29, 2003 23:32:15 )

どうでした?できました?
説明がわかりにくかったでしょうか?
まあ、後で読んでわかりにくいな、って思いましたね、我ながら。
整理すると、
search.html→(-findで検索して絞り込む)→result.html→(ここに、fmp-findopitemとfmp-findvalueitemをhiddenで配置しておく。そして、-script.prefindと-findでスクリプトを実行してから前回と同じ検索をかける。)→result2.html→(result2.htmlではrefreshで元のresult.htmlに戻すのをmetaでheadに書いとく)→result.html

こんなところでどうでしょう?
一番単純な方法だと思いますが。

うえだ さんからのコメント
( Tuesday, July 01, 2003 20:54:58 )

御丁寧にありがとうございます。
現在、違う業務で忙しいので、また空いた時間に試してみます。