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

FileMakerProへの新レコードの追加

発言者:飯島彰
( Date Thursday, March 28, 1996 13:57:13 )


教えて下さい。
FileMakerProへデータを登録させたいのですが、
うまく動作してくれません。
Scriptの中に
・・・
Create New Record With Data myRecord
・・・
という行を入れて、FileMakerPrに対して新レコード
を作成し、myRecordに入っているデータを入力
させたいのです。

SBK さんからのコメント
( Thursday, March 28, 1996 15:29:13 )

あまり参考にならないかもしれませんが、私の使っているソースの
一部です。とりあえず、これで動いています。おそらく、飯島さん
も同じように書かれているとおもいます。私も田中さんのをそのま
ま、まねして書いたようなものですから。あと、参考にしたのは、
 1:FileMakerについていたAppleEvent関係の説明のデーターベースファイルと
 2:技術評論社のMacintosh DEVELOPER'S JOURNAL 95/5-6月号
   (No.13号)のデベロッパーユニバーシティー誌上講座(8)
   AppleScriptでアプリケーションを制御する
です。どちらもちょっとしか参考にならなかったように覚えていま
す。(プログラミングは、そのちょっとが重要なのですけどね。)
あとは、諸先生の回答を待ちましょう。

ソースの一部(全部公開しても邪魔になるだけですから、今は一部にしておきます)
		set myRecord to {item 1 of userMsg, item 2 of userMsg, "1", ツ
			item 5 of userMsg, item 4 of userMsg, item 6 of userMsg, item 3 of userMsg}
		if comAct is "Topic" or comAct is "Comment" then
			if comAct is "Topic" then
				tell application "ファイルメーカー Pro"
					activate
					Show Database dbname1
					Show Layout "main"
					Show every Record
					Create New Record With Data myRecord
					set fnTn to Get Data of Cell "SerialNo" of last Record --トピック番号は新しく作られるので、それでfnTnを更新しておく
					Do Script FileMaker Script named "SetNewTopicNo"
				end tell
				wait(5)
				activate
				tell application "ファイルメーカー Pro"
//

田中求之 さんからのコメント
( Thursday, March 28, 1996 16:32:57 )

Create New Record With Data myRecord を使って一気にカードの
新規作成を行う場合の注意点としては、myRecord に、レコードの cell に
ちゃんと対応したデータを、リストとして入れておかなければならないという
のがあります。

Cell に何も値を入れない場合でも "" を渡すひつようがあります。

たとえば、登録したいレコードが cell を4つ持っている場合ですと、

set myRecord to {"","","Something",236}

のように、4つのアイテムからなるリストを作っておいて(上の場合、cell 1, cell 2
には何もデータを入れず空欄にしておくようになっている)

create new record with data myRecord

を実行するわけです。

この点は大丈夫ですか?

飯島彰 さんからのコメント
( Monday, April 01, 1996 11:04:00 )

SBK様並びに田中様からご指導頂き、できました!
ただ、myRecordにsetするデータが20個あるため、{}の中に入力するのが大変でした。(^_^;
数多いデータを少ないキー入力で行う方法として、恐らくrepeat文でできるのでは?
と思いました。
また勉強します。
そして、また質問させていただきます。(_o_)

田中求之 さんからのコメント
( Friday, April 05, 1996 19:41:30 )

>数多いデータを少ないキー入力で行う方法として、恐らくrepeat文でできるのでは?
>と思いました。

扱うデータベースの構造は変わらないわけですから、あらかじめセルの数だけ空アイテム
を入れたリストを返すハンドラーを作っておいて、それに必要なデータを埋めていく
のがよいと思いますよ。

ようするに、

on makeNewList
  return {,,,,,}
end makeNewList

みたいなやつですね。

パラメーターでデータベースの名前を渡すと、そのデータベース(あるいはlayout)
に即したリストを返すハンドラーにしておけば、かなり使えるのではないでしょうか。

また、レコードからセル情報を読み込んで、自動的にふさわしいリストを生成させる
なんてことも可能ですね。

もっとも、機能に欲張ると速度が落ちてしまいますが。

橋爪二郎(hasizume@srl.mew.co.jp) さんからのコメント
( Thursday, November 28, 1996 08:56:07 )

「Macでサーバーを...(だったかな?家においてあるので正式名は忘れました)」の本で154ページの
田中様が書いたものと思いますが、「ファイルメーカProを利用する」の中のScriptがコンパイルエラーで
終わります。構文確認ではset userMsg to ACME parse args post_argsのparseで
"Expected end of line,etc. but found identifier"のメッセージが出ます。
ACMEはスクリプト機能追加フォルダーに入れてありますが...

又、AppleScriptの日本語解説(英文構文で)の適切な本があったら紹介してください。

田中求之 さんからのコメント
( Thursday, November 28, 1996 14:25:33 )

ACME parse args osax もちゃんとインストールしていますか?
ACME Script Widgets とは別の osax になっているのですが。


新目真紀 さんからのコメント
( Tuesday, January 28, 1997 16:56:59 )

教えて下さい。(初心者です)
FileMakerProへデータを登録したいのですが、他の方のコメントを読んでもわからないので
教えて下さい。
データベースに対応したcellをもつファイルをスクリプトにドラッグ&ドロップしてFilemakerpro
に登録できるようにしたいのですが、myrecordにドラッグしたファイルをどのように登録したら
よいかわかりません。
myrecordに{"xx","xx",...}という初期値を設定してCreate newrecord with data myrecordと
やれば上手くいくのですが、on open file名でオープンしたファイルをmyrecordにsetする方法
がわかりません。
#何か参考になるものがあれば教えて下さい。
よろしくお願いします。

稲垣@信州 さんからのコメント
( Tuesday, January 28, 1997 17:19:40 )

>やれば上手くいくのですが、on open file名でオープンしたファイルをmyrecordにsetする方法
>がわかりません。

 各行に対応したcellのデータを入れておけば、

 set XXXX to readFromfile file FileName
 set cell1 to paragraph 1 of XXXX
   set cell2  to paragraph 2 of XXXX

 XXXXは読み込んだデータです。などで設定して、

 set myRecord to {cell1,cell2,....}

 あまりスマートではないと思いますが、上記の方法で誤魔化せるのではないでしょうか?


田中求之 さんからのコメント
( Tuesday, January 28, 1997 19:21:58 )

>データベースに対応したcellをもつファイルを

各 Cell 用のデータがタブ区切りで並んでいるテキストファイル、ですか?
ファイルのフォーマット次第でスクリプトは変わりますが…

新目真紀 さんからのコメント
( Tuesday, January 28, 1997 21:43:18 )

お返事ありがとうございます。
あの後も四苦八苦していましたので、嬉しいです。
カンマ区切りで並んでいるテキストファイルです。
とりあえず、今から稲垣さんに教えて頂いた方法を試してみます。
どうもありがとうございます。
区切りはスクリプト内部でカンマ区切りで処理するとか、タブ区切りで処理
するというように指定する事はできないのでしょうか?



田中求之 さんからのコメント
( Tuesday, January 28, 1997 22:58:07 )

>区切りはスクリプト内部でカンマ区切りで処理するとか、タブ区切りで処理
>するというように指定する事はできないのでしょうか?

もちろん可能ですよ。

ドロップされたファイルを読み込んで新規レコードして登録していく場合、
基本的な処理の手順は以下のようになります(ファイルの各行には、レコードの
cell に対応するデータが並んでいるとして、データの検証は省きます)。

** Tanaka's osax を使った例になりますが、処理の流れはわかると思います。

set myList to readFromFile file DropedFile
 --- ドロップされたファイルからデータを読み込む

set oldDel to AppleScrit's text item delimiters
set AppleScript's text item delimiters to {return}
set myList to text items of myList
--- これで、myList は各行のデータ毎にきり分けられたリストに変換されます

set AppleScript's text item delimiters to {tab} --- タブ区切りの場合

tell application "FileMaker Pro"
  repeat with thisD in myList
    set thisD to contents of thisD
    if thisD ュ "" then
      set myData to text items of thisD --- これで各項目毎のリストになる
      create new record with data myData --- そのリストを渡してレコードを作らせる
    end if
  end repeat
end tell

set AppleScript's text item delimiters to oldDel


今、オンラインで直接書いたスクリプトですので、実際には動かないかもしれませんが、
ようするに、タブ区切りで並んでいるなら、text item delimiter の操作によって
それをリストに変換して、FileMaker にパラメーターとして渡せばよいわけです。