title1
navigation bar3



[ 1 | 2 | 3 | 4-p1 | 4-p2 | 4-p3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 ] [日経マック連載Index ]


連載[4-2] ファイルメーカー・オートメーションのすすめ

《 検索やデータ書き出しはAppleScriptいらず 》
で、本題に戻りますと?
先生
あぁそうだった。まず次のことはファイルメーカーProのスクリプト機能で自動化できるはずだ。
 ・あらかじめ指定した検索条件でレコードを検索する
 ・あらかじめ指定したファイル名でレコードを書き出す
あらっ、そんなことまでファイルメーカーProで自動化できたんですか。
先生
そうなんですよ。皆さんがあまりご存じないだけで、ファイルメーカーProのスクリプトだけでも随分いろんなことができるんです。例えばレコードの書き出しですが、あらかじめ「Today, Japan」とか、「Today, France」というように名前を指定しておいて、カレント・レコードをテキスト・ファイルとして書き出せます。だから今回の場合、ちょっと格好が悪いかも知れないけれど、   Today, XXX (XXXは支店名) というファイルを支店の数だけ作るファイルメーカーProのスクリプトを作ろうと思います。
僕はこれを、AppleScriptのrepeatでやろうとしてハマリました。
先生
そうだろうね。ほとんどの人がこれを全部AppleScripでやろうと思っちゃうんじゃないかな。危険、危険。
ここにサンプルのデータ・ファイルがあるんですが、これでやり方を見せていただけませんか。
先生
どれどれ、なるほど。国ごとに通貨単位を自動的に切り替えるなんて心にくいTipsですね。
恐縮です。
先生、今日はAppleScriptじゃなくてファイルメーカーProのセミナーなんですかぁ? 面白くないなぁ〜。
先生
何を言っとるんだ。AppleScriptの難しいところは、AppleScriptの文法だけ知っていりゃいいってものじゃないことなんだ。それで済むんだったら、この連載なんて必要ないからね。つまりAppleScriptはアプリケーションに働きかけるプログラムだから、働きかける相手の機能や特徴を知らなくちゃぁ話しにならない。敵を知り、己を知らば百戦危うからず、なんて誰かさんが言ったよね。
はい、先生。それでこのデータベースをどうするんですか。
先生
特定の支店の今日の日付のレコードだけを選んでテキスト・ファイルに書き出す、だったよね。こういうスクリプトを作ればいいんだよ。
これでその日のTokyo支店の売上データが「Today, Tokyo」というテキスト・ファイルとして書き出されるんですね。
先生
そうですよ。
同じようにNewYorkだろうがFrankfurtだろうが、あらゆる支店のレコードを書き出すスクリプトが作れます。
こんな感じにねっ。
ちょっとスクリプトの意味を説明していただけますか。
先生
「レイアウト切り替え」というのはね、使用するレイアウトを設定しているんだ。
次の「全レコードを対象に」は、検索をすべてのレコードに対して行うための準備。そして、次に検索モードに入って、検索のキーになる日付を「Date」フィールドに、支店名を「Branch」フィールドにペーストする、いいかな?
はい。
…(ウトウト)
先生
そして「検索実行」で指定したレコードを検索する。
最後に検索したレコードを「Today, Tokyo」というテキスト・ファイルにダイアログなしで自動的に書き出す。以上です。
これを実行するにはどうするのですか。
先生
設定したスクリプトは、「自動」というメニューに現れます。それで実行してもよいのですが、こうしたスクリプトを「ボタン」として登録しておけば、そのボタンをクリックするだけで処理は自動的に行われます。例えばこんな感じに。
先生、「All Branch」というスクリプトがありますが、もしかしてこれはすべての支店のデータを書き出すものですか。
先生
さすが、よく気がつきましたね。
これは簡単でね、単に「Tokyo, Today」以下のすべてのスクリプトを順番に実行してやるだけでいいんですよ。
TOP


《 AppleScriptでアプリのマクロをキック! 》
あれっ、先生。ソリューション・コンサルティングは終わりました?
先生

おやおや、やっとお目覚めかな。しかし、いいタイミングで目が覚めたもんだね。これから丁度佳境に入るところなんだ。
えっ、どういうことですか?
先生
やっとファイルメーカーProでの細工が終わって、これからAppleScriptが登場するところだってことだ。
すべての支店のテキスト・ファイルを書き出せるわけですから、後はファイル名を変えてサーバーに放り込んでやればいいわけですね。
先生
おっしゃる通り。まず書き出したファイルの名前「Today,XXX」の「Today」の部分を今日の日付に変えてやろう。
ファイル名の変更って、どこかでやったような気が…。
先生
おやおや、もう忘れてしまったのかい。ファイルの名前変更もコピーも、Finderに対してスクリプトを書けばいい。ではそうだな、先に1つスクリプトを見てもらおうか(図3)。
図3 シンプルなスクリプト
あ、先生。私,これに似たのをどこかで見たことがあります。
先生
ほう、よく分かったね、これは本連載第1回で作ったものを少し変更したスクリプトだよ。こんな美人にも読んでいただいているとはうれしいね、うんうん。そこへいくと、このはそんなこと全然忘れちゃって、困ったもんだ。
では、簡単におさらいをしながら説明して行くよ。最初のtell〜end tellブロック

 tell application "ファイルメーカーPro"
  Open file (ファイル名)
  Do Script (スクリプト名)
 end tell

は「ファイルメーカーPro」に対する命令だ。「Open」は指定したファイルを開かせるというのはいいよね。

はい。
先生
ミソは3行目の   Do Script "Today, All Branches"  だ。
これが今までのすべての作業を一発で行うスクリプト、いわばスクリプトの親分に当たります。
これはファイルメーカーProに対して、
 "Today, All Branches" というスクリプトを実行しろという命令なんだね。
Do ScriptはファイルメーカーProが持つAppleScriptコマンドで、先ほど作ったスクリプトを実行するんだ。
つまりAppleScripでアプリケーションの自動処理プログラム(マクロ)を起動するわけだね。

とっても面白そうですね。
先生
Do Script一発で、ファイルメーカーProは指定したスクリプトを実行して
、以下のようなテキスト・ファイルが自動的に出来上がる。データが多いと数分かかるがね。
ファイルが作られるフォルダは、ファイルメーカーProのスクリプトで「レコード書き出し」の設定で指定したものだ。
後は、このフォルダにあるすべてのファイルの名前を変更して、サーバーにコピーすればいいわけですね。
先生
そう。だがその前に、コピーする先のサーバーのフォルダ名と、書き出したファイルが入っているフォルダをユーザーに選ばせる仕組みを設けておこうよ。5行目と6行目にある

 set (変数) to choose folder
   with prompt (メッセージ)

の部分がそうだ。 スクリプトを実行するとこんなダイアログが2回出てくるから、フォルダを選んでくださいね。
その後はFinderに対する命令ですね。
先生
指定したフォルダ内にあるすべてのファイルについて、ファイル名を「今日の日付と支店名の組み合わせ」に変更します。

  repeat with aFile in every file of aLocalFolder
   (繰り返す内容)
  end repeat

というのが、先ほど指定したフォルダ内のすべてのファイルについて繰り返すブロックです。
本連載の第1回目で説明しましたから分かりますよね。

 


TOP

AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp

主催 株式会社フォーサイト   後援 アップルコンピュータ株式会社

(c)1996-2010 The ForeSight Inc. All rights reserved.Appleは、米国アップルコンピュータ社の登録商標です。
AppleScriptは、米国アップルコンピュータ社の商標です。
その他記載の会社名・製品名・ソフトウェア名は一般にその会社の登録商標または商標です。