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

ファイルメーカー Pro 3.0 とAppleScript

発言者:田中求之
( Date Saturday, March 01, 1997 22:29:49 )


ファイルメーカー用 CGI を FMP 3.0 用に作り替える作業を行っているのですが、
その中で気が付いたことは、確かに FMPがスクリプトで操作するのに便利に
なっていることです。

たとえば、ちょっとしたことですが、make new で新しいレコードを作ると、
それが必ず最後のレコードになる(これまではカレントの次に挿入されていた)
といったことです。

また、バックグランドになったままの状態で動きます。


しかしながら、検索関連で動作が変わっています。

まずワイルドカードを検索のキーにする場合、これまでは

   ...record whose cell A is "*"

でよかったのが、

  ...record whose cell A is "=*"

と書かなくてはいけないことと、この場合、セルが空になっている
レコードは該当しなくなったことです。

この最後の点が引っかかって、CGIの移植が終わっていません。

…、あ、そうか (今、ひとつ方法を思いついた!)

田中求之 さんからのコメント
( Saturday, March 01, 1997 23:17:47 )

ワイルドカードの件は解決したのですが、今度は、検索したら余分なものを
ヒットするという問題に悩まされています。

ううう

田中求之 さんからのコメント
( Sunday, March 02, 1997 04:34:39 )

結局、データベースを新たに作りなおしたら、変なものがヒットする問題は解決
しました。

というわけで、やっとこさ問題点をクリアーしましたので、ファイルメーカー Pro
3.0 用の CGI のサンプルを公開します。

基本的には、3.0 に対応させたことが変更点ですが、細かいこととして、複数の
データベースが開いている場合にも対応したこと、詳細/編集のページでテーブルを
用いたこと、さらに削除後は一覧ページに飛ぶようになったこと、などの変更を
加えてあります。



→  FMP Sample 3

Ichida さんからのコメント
( Sunday, March 02, 1997 13:13:24 )

早速使わせていただきました。m(__)m

試しにそれぞれTitleとDescriptionでサーバーという語彙の検索をしたところ
Descriptionでは検索結果として「Macintosh インターネットサーバー構築術」
がでるのにTitleでは該当データなしとなります。
*を入れても同じ結果でした。何が原因でしょう?

>バックグランドになったままの状態で動きます。
ありがとうございます。非常に助かります。
ずっとファイルメーカー3.0用のCGIが欲しかったのですが、お忙しそうでした
ので我慢していました。(以前お願いばかりしていましたので..^_^;)

ファイルメーカー3.0もV1の他にV2がありますが、どちらでも同じように使用
できるのでしょうか?

Ichida さんからのコメント
( Sunday, March 02, 1997 13:17:15 )

=*を入れても同じ状況です。

田中求之 さんからのコメント
( Sunday, March 02, 1997 15:33:00 )

3.0 対応が遅れてしまってすみません。

検索の件ですが、CGI の問題というより、ファイルメーカー側の動作の
問題のようです。キーワードで検索するときに、こつがいるようなんですよ。

ちょっと調べてみます。

田中求之 さんからのコメント
( Sunday, March 02, 1997 16:08:47 )

ファイルメーカー 3.0 は、たとえば

 record whose cell "Title" is "サーバー"

で検索したとき、「サーバー」がキーワードとして独立しているか、「サーバー」
という言葉で始まるキーワードを含むものを探します。ですから、「インターネッ
トサーバー」は、この条件ではヒットしません。

日本語のキーワードの切り分けは、文字種(漢字/カタカナ/ひらがな)の切り替
わりや、句読点を目印に行われます。

ですから、もし「サーバー」ということばで「インターネットサーバー」をヒット
させたい場合には

*サーバー*

というように、両端を * (ワイルドカード)ではさむ必要があるようです。
CGI でうまくいくかどうかは、まだテストしてませんが。


ところで、v1 と v2 があるとのことですが(私は v1 です)、違いは何か
分かりますか? もし検索などの動作が異なっているのなら、残念ながら
v1 のみでしか責任は持てない、ということになるのですが。

田中求之 さんからのコメント
( Sunday, March 02, 1997 16:59:59 )

>CGI でうまくいくかどうかは、まだテストしてませんが。

Ichida さんも書かれていたように、CGI を使った場合は、検索条件に
ワイルドカードを入れておいてもうまくいきませんねぇ。

やれやれ。

さて、どうしたものかな?

Ichida さんからのコメント
( Sunday, March 02, 1997 18:48:49 )

>3.0 対応が遅れてしまってすみません。
いいえっ、とんでもない。ありがたいと常々感謝しています。
自分もアップルスクリプトやパールが自在に扱えたらと思い、情けなくなります。

>ところで、v1 と v2 があるとのことですが(私は v1 です)、違いは何か
>分かりますか?
済みません。分かりません。アップグレードが無料でできましたので
考えなしでアップグレードしてしまいました。(^_^;)

下記のところでV2が手に入ります。

→  ファイルメーカーV2アップグレード

田中求之 さんからのコメント
( Sunday, March 02, 1997 22:48:47 )

いま、バックでアップデータを落としていますが、ホームページの説明からすると
AppleEvent(AppleScript) 関連の修正はないようですね。

となると、検索の件は、スクリプト側の工夫で乗り切るしかないようですね。
FMP の検索モードを直接コントロールする方法も含めて、いくつか検討して
みます(こういうのって、実は燃えるんですよ (^_^;;  ただ、ドップリはまる
時間がとれないのが哀しいんですが)。

Ichida さんからのコメント
( Wednesday, March 05, 1997 20:31:11 )

お忙しいところ済みません。検索から話が逸れるのですが...

毎回データをソートし、ページとしてクライアントに送り出す方法はあるのでしょうか?
たとえばbooklistでしたら著者名が必ずアルファベット順になるということ
なのですが...

田中求之 さんからのコメント
( Wednesday, March 05, 1997 21:15:07 )

ファイルメーカーにデータをソートさせておけば、ソートされた順番でデータを
取り出せたと思います。


天野@NIHS・大阪 さんからのコメント
( Thursday, March 06, 1997 12:20:05 )

突然乱入失礼します。

>ファイルメーカーにデータをソートさせておけば、ソートされた順番でデータを
>取り出せたと思います。

これ出来なかったように思うのですが、3になって改良されたということでしょうか?
私もスクリプトを手直ししようとして、まず新バージョンのデータベースのファイルタ
イプさえわからなくて早々に撤退して田中さんの出動を待ってました (^_^;ごめんなさ
い)。かなり仕様の変更がありそうでスクリプトも大改訂になるんでしょうかねー?私
どちらかというと気が重いです。新しいサンプル早速いただきます、今後ともよろしく
ご指導下さい。

田中求之 さんからのコメント
( Thursday, March 06, 1997 16:46:47 )

>これ出来なかったように思うのですが、3になって改良されたということでしょうか?

あ、そうでしたっけ? (^_^;;

えっと、ファイルメーカー側でデータをソートしておいて、レコードの情報を取り出す
のに、ID ではなく、Index を使うようにすれば、ソートされた順番に取り出せるよう
に思ったのですが。


田中求之 さんからのコメント
( Thursday, March 06, 1997 16:48:43 )

検索の件は、

 record whose cell A contains B

にスクリプトを変更すると、部分一致がヒットするようになるみたいです。

ただ、これだと、ワイルドカードなどの扱いに問題が出るようなので、ちょっと
悩んでいます。

狩野正嗣 さんからのコメント
( Thursday, March 06, 1997 19:03:28 )

>ファイルメーカー側でデータをソートしておいて、
>レコードの情報を取り出す

 バージョン2でもできるはずですよ。私は今のとこ
ろバージョン2を使っていますが、ソートした後デー
タを取り出すスクリプトを何回か組んだことがありま
すから。

 自宅に戻ったらちょっと調べてみます。

田中求之 さんからのコメント
( Thursday, March 06, 1997 19:43:48 )

キーワードの検索方法を改良した、新しいサンプルを登録しました。
以前のものと同じ名前 (URL) です。

今回のバージョンは、検索の際、語句の一部がヒットするものも
ちゃんと見つけだします。Title を「術」で検索すると、
「Macintosh インターネット構築術」がちゃんとヒットします (^_^;;

スクリプトの変更点は、検索時に contains と is を組み合わせて使う
ようにしたことです。


→  FMP_Sample_3

田中求之 さんからのコメント
( Thursday, March 06, 1997 19:47:38 )

以前のバージョンをダウンされた方は、ブラウザのキャッシュの影響で新しいものが
ダウンできない(古いものが出てくる)可能性がありますので、新しい名前に変更
したものも登録しておきます。


→  FMP_Sample_3-2

狩野正嗣 さんからのコメント
( Thursday, March 06, 1997 20:29:49 )

 確認してみました。次のようにすることで、theRecordにソート済みのデ
ータが格納されます。

  tell application "ファイルメーカー Pro"
    activate
    Sort Layout 1 of Database 1 of Window 1 By Field 1 In Order Ascending
    set theRecord to Layout 1 of Database 1 of Window 1
  end tell

註)この例ではデータベースファイルがすでに開いていることを前提にして
  います。また複数のファイルを扱うことは考慮していません。

天野@NIHS・大阪 さんからのコメント
( Friday, March 07, 1997 12:54:16 )

いいかげんな事言って申し訳ありませんでした。出来ないのはファイルメーカー
じゃなくて私だったわけですね (^_^;。便乗して狩野さんのスクリプトいただき
ます。ありがとうございました。
しかし、原型を止めないほどの大改訂になってしまいそうだなー。どうしよう。

Ichida さんからのコメント
( Friday, March 07, 1997 16:32:35 )

検索、バッチリ動きました。(^_^)
ソートもできるように組み込んでみます。
皆さんありがとうございました。m(_ _)m

今井 竜太郎 さんからのコメント
( Thursday, March 13, 1997 11:13:43 )

はじめまして。
AppleScriptもイントラネット・サーバー構築も初心者です。
FMP_Sample_3-2を試そうとしているのですが、「スクリプティングシステムの誤り(OSA)」(-1750)というエラーがでて実行できません。
以前、別のコメントチェーンで、FMP2.1v2でも同様のエラーの報告がありましたが、完結したようなコメントを探すことができなかったので、こちらのコメントチェーンに書き込みさせていただきます。
どうすればよいかわからず、途方にくれております。
どなたかわかる方がいらっしゃいましたら御教授ください。

なお、システムは以下の通りです。
PowerMac 7100/AV  RAM40MB
漢字Talk7.5.5
MacHTTP2.2
ファイルメーカーPro 3.0Jv1

AppleScriptの英語、日本語の混在はしていません。

今井 竜太郎
ryo-imai@nsknet.or.jp

今井 竜太郎 さんからのコメント
( Thursday, March 13, 1997 11:16:29 )

追記

改行が変になってました。
申し訳ありません。
不慣れなもんで。
以後、気をつけます。

今井 竜太郎
ryo-imai@nsknet.or.jp

田中求之 さんからのコメント
( Thursday, March 13, 1997 20:31:47 )

そのエラーは、CGI を動かしている時に出るものですか?

どのようなときにエラーが出たか、具体的に状況を教えていただけますか?


今井 竜太郎 さんからのコメント
( Thursday, March 13, 1997 21:32:21 )

booklist.acgiを立ち上げようととしたときです。
ダブルクリック後、いきなり
「スクリプティング・システム
 (OSA)の誤りが起きましたので、
 ”booklist.acgi”というスクリプトは
 実行できません。
 (-1750)」
というダイアログがでてしまいます。
ただしアプリとしては動いてるようですが。
ファインダーメニュー(?)の中に起動しているアイコンがありますから。

ryo-imai@nsknet.or.jp

田中求之 さんからのコメント
( Thursday, March 13, 1997 21:47:32 )

OSA システムエラーがなんで起きるのだろう?

AppleScript は、システムに付属のものを使っている訳ですよね?

あと、デフォルトでシステムフォルダーにインストールされる機能拡張の
類で、取り除いたものなどありますか?

AppleScriptLib や ObjectSupportLib などもちゃんと「機能拡張」
の中に入ってますよね?

今井 竜太郎 さんからのコメント
( Thursday, March 13, 1997 22:10:40 )

AppleScriptは付属のものを使用しています。
機能拡張類は純正の物は触って(取り除いて)ません。
AppleScriptLib も ObjectSupportLib も当然あります。
ただ、会社のマシンということもあり、いろんな物は入れてますが。
何かとぶつかるという報告はあるのでしょうか?
一度、純正のシステム(漢字Talkのみ)に戻して試してみます。

田中求之 さんからのコメント
( Thursday, March 13, 1997 22:36:32 )

起動時にエラーということなので、以下のスクリプトを、スクリプトエディタ
(スクリプト編集プログラム)で動くかどうか試してもらえますか?

----

set mydb to ""

if mydb = "" then
  set mydb to (choose file with prompt "booklist はどこですか" of type {"FMP3"}) as string
end if
tell application "ファイルメーカー Pro"
  open file mydb
  set myDBName to name of database 1
end tell

---

CGI が起動時に行っている処理と同じものです。これをスクリプトエディタで
実行してみてください。

今井 竜太郎 さんからのコメント
( Friday, March 14, 1997 09:26:48 )

テスト・スクリプトですが、問題なく起動できました。
FMPミSampleのほうは相変わらずだめです。

なんだか非常にお手間をおかけしてるようで申し訳ありません。
たいへん恐縮しております。


ryo-imai@nsknet.or.jp

藤沢 純一 さんからのコメント
( Friday, March 14, 1997 12:58:25 )

>「スクリプティング・システム
> (OSA)の誤りが起きましたので、
> ”booklist.acgi”というスクリプトは
> 実行できません。
> (-1750)」

僕も経験しましまた。最初はぜんぜん理由が判りませんでしたが、別なマック
で動かしたら、メモリーが足りない、というようなメッセージが出ました。

そこで、booklist.acgiに割り当てているメモリーを1000に増やしたところ、正
常に動作するようになりました。

fujisawa@srimot.go.jp

狩野正嗣 さんからのコメント
( Friday, March 14, 1997 15:09:39 )

 関係ないかもしれませんが、当方の環境でeasyB BS DXを最初に起動し
たときも、同じ様なメッセージが出ました。結局は割当メモリを700KBに
増やすことで解決しましたけど。

 そういえば、たくさんアプリケーションを起動しているときにスクリプ
ト編集プログラムを起動して、初めてコンパイルするときにもこういうエ
ラーが出ることがあります。スクリプティングシステムをメモリに読み込
めなかった場合に出るエラーなのかもしれません。

田中求之 さんからのコメント
( Friday, March 14, 1997 17:34:23 )

スクリプトをコンパイルするときに、「実行専用」( Run-Only  )
でアプリケーションにしてみてください。

メモリーがらみのエラーは、これによって回避できることが多いです。
なぜかは良く分かりません。経験則です。

私は、すべての CGI を、Run-Only でアプリケーション化するように
してます。

藤沢 純一 さんからのコメント
( Friday, March 14, 1997 17:55:09 )

>スクリプトをコンパイルするときに、「実行専用」( Run-Only  )
>でアプリケーションにしてみてください。

なるほど。確かにこれだと問題ありませんでした。

fujisawa@srimot.go.jp

今井 竜太郎 さんからのコメント
( Friday, March 14, 1997 18:10:23 )

>そこで、booklist.acgiに割り当てているメモリーを1000に増やしたところ、正
>常に動作するようになりました。

> 関係ないかもしれませんが、当方の環境でeasyB BS DXを最初に起動し
>たときも、同じ様なメッセージが出ました。結局は割当メモリを700KBに
>増やすことで解決しましたけど。

>スクリプトをコンパイルするときに、「実行専用」( Run-Only  )
>でアプリケーションにしてみてください。


田中様、藤沢様、狩野様、ありがとうございました。
無事起動することができました。

最初、200KB割り当てられていたメモリーを700KBに
したところ問題なく起動できました。
その後、「実行専用」アプリで作り直したところ、
割り当てが200KBのままでも起動できました。

結局、根本的な原因は私には皆目わかりませんが。

皆さん、本当にありがとうございました。
今後とも宜しくお願い致します。


ryo-imai@nsknet.or.jp

谷口賢治 さんからのコメント
( Thursday, April 03, 1997 14:32:12 )

初めまして、ファイルメーカー初心者の者です。

突然ですが、ファイルメーカーの「レコード取り込み」
の命令をAppleScriptで実行させる方法がわからなくて
困っています。どなたか教えていただけないでしょうか?

また、ファイルメーカーのスクリプト内でAppleScriptを
実行させる命令は出せるみたいですが、その逆で、
AppleScriptを使ってファイルメーカーのスクリプトを
実行させるような命令は可能なんでしょうか?
知ってらっしゃる方が見てたら、どうか教えて下さい。
よろしくお願いします。

taniguch@naoe.eng.osaka-u.ac.jp

稲垣@信州 さんからのコメント
( Thursday, April 03, 1997 15:07:25 )

 FM3.0を持っていないので、うまく行くか分かりませんが、
スクリプトエディタで、記録モードにして、FM3.0で実際に手
で実行させてみてはどうでしょうか?

 記録可能であれば、コマンドが残ります。
#少しごみが入ってしまうので、その辺を削除する必要があ
#ります。


田中求之 さんからのコメント
( Thursday, April 03, 1997 15:15:41 )

ファイルメーカーで「レコード取り込み」は、たぶん、スクリプトでは無理だと
思います。というのも、do menu は使えませんし、また、レコード取り込みの
際には、ダイアログでいくつか設定を行いますが、あの設定をスクリプトでは
指示できません。


ファイルメーカーのスクリプトを走らせる場合には、do script "スクリプト名"
でOKです。

谷口賢治 さんからのコメント
( Thursday, April 03, 1997 16:09:38 )

稲垣さん、田中さん、どうもありがとうございます。
とても助かりました。
今後ともよろしくお願いします。


taniguch@naoe.eng.osaka-u.ac.jp

北尾 暁江 さんからのコメント
( Friday, May 02, 1997 13:14:23 )

はじめまして。今年入社の北尾と申します。<P>
じつは、このあいだFMP_Sample_3-2をダウンロードさせてもらったのですが、
それで1万件のデータを検索させたら、とても遅くてたいへんでした。<BR>
このサンプルだと、検索条件を設定していない項目も、すべて照らしあわせているようですね。
検索条件のないcellはスキップするようにできないものでしょうか?<P>

そして、どうもネット上で検索をするのはつらいのではないかと思い、ホームページから検索条件を入力したら、
それを変数としてファイルメーカに与え、ファイルメーカのスクリプトで検索を行うように
発想を変えてみたんですが、それも、検索条件を渡す方法がわからない&戻値の引き渡しもわからない
ということで、挫折しました。<P>

何か良い方法ないですか? Script初心者なので、相談にのっていただきたいのですが。。。<P>

kozka さんからのコメント
( Friday, May 02, 1997 16:18:47 )

>それで1万件のデータを検索させたら、とても遅くてたいへんでした。

ファイルメーカーProを直接操作して検索したのとどれぐらい違いますか?
ファイルメーカーPro自身の検索の性能もあると思います。1万件位だと確かに
検索に時間かかります。検索中の進行を示すダイアログ(Finderでのコピーの
時に表示されるのと同じタイプ)が出てきちゃいます。同様にソートも遅いで
す。

>ファイルメーカのスクリプトで検索を、、、

ファイルメーカーProの「モード」メニューから「検索」を選び検索条件を入力
して検索を実行するといった事をAppleScriptからでも「request」という検索
条件のオブジェクトと「Find」コマンドを使用して同様のことはできます。

ファイルメーカーProをインストールした時についてくる「AppleEventリファレ
ンス」(の様な名前)を参考するとファイルメーカーの各オブジェクトやコマ
ンドについて詳しく知ることができます。(でもそのリファレンス自身正しく
動かない部分があるので、手動でレコードをめくったり検索したりして下さい)




北尾 暁江 さんからのコメント
( Tuesday, May 06, 1997 14:09:27 )

kozkaさん、相談にのっていただき、ありがとうございます。

えーとですね、ファイルメーカを直接操作して検索させると約10秒弱。
ネットを通して同様の検索をさせると4分以上かかりました。
(しかもタイムアウトしてしまって、結果を返すことができませんでした)

[Find]と[request]を使ってやってみようと思って、いろいろ試しているの
ですが、どうもこの2つのコマンドの使い方がわからないのです。

「ファイルメーカーProをインストールしたときについてくるリファレンス」
なるものは、どうも目につくところには見当たりません。
インストールしたときにはあったのかどうかも、新入社員の私にはわかりません。

[Find]と[request]の簡単な使い方をどなたか教えてください。



kozka さんからのコメント
( Tuesday, May 06, 1997 18:59:29 )

>しかもタイムアウトしてしまって、、

返すべき検索結果が多すぎるのかもしれません。24Kbを超えるデータを返すには
工夫が必要です。

スクリプトを調節して検索スクリプトの部分が終わるまでとその後の時間を調べ
てみてください。検索が終わってからの方が時間がかかっているのかもしれませ
ん。

1.検索そのものに時間がかかっている
2.検索結果をHTMLに組み立てている部分に時間がかかっている
3.データの量が多すぎてWWW Serverにデータを返せないでいる。


requestとFindのサンプルスクリプトです。

set theSearchDocument to "sampleDB"
set theSearchKeyword to "sample word"
set theSearchCell to "sample cell"

tell document theSearchDocument of application "ファイルメーカー Pro"
  
  delete every request
  --まず、全てのリクエストを削除し、
  set x to create request
  --新たなリクエスト(新規検索条件)を作成
  set cell theSearchCell of x to theSearchKeyword
  --上で作成したリクエストに特定のセルに条件をセットする
  
  (*
以下のようにして検索条件を加えてゆく
  set cell theSearchCell2 of y to theSearchKeyword2
  set cell theSearchCell3 of z to theSearchKeyword3
and more
*)
  
  find --検索実行
  
end tell

ps.
リファレンスを入手されたほうがベストです。


→  ファイルメーカーの検索で24kを超えた場合は?