AppleScript 救急隊

The ForeSight Inc. AppleScript救急隊 ASQsについて Download (サンプル&デモ)


ビジネスで有効活用を目指す

われらがAppleScript救急隊

 

MacPower誌



Vol.2 ファイルメーカーProとEudraProの連携(2)

AppleScript講座の2回目は、Eudora Proでメールを自動送信できるファイルメーカーProの顧客データベース構築の続き。前回は、ファイルメーカーProからレコードごとのフィールドの内容を取得するところまでを実現した。今回はいよいよ、そのデータを含むメールを送信してみよう。

Eudora Proからメールを送信する

いきなりだが、前置きなしでスクリプトをお見せする。Eudora Proからメールを送るスクリプトは、これ。

tell application "Eudora Pro3.0.2-J"
make message at end of mailbox "送信" of mail folder ""
tell message 0
set field "To" to "foo@fsight.co.jp"
set field "Subject" to "AppleScriptで自動発信したメールです"
set field "" to "これが本文です"
end tell
queue message 0
end tell

まずは何も考えず、このまま丸写しで動かしてみよう。
これで送信のメールボックスの中に、キュー(送信待ちの状態)としてメールが入るはず。
このスクリプトでポイントになるのは、set field "〜" to "〜"の部分だ。
Eudora Proで新規に作成した送信メッセージのToやSubjectをAppleScriptから指定するには、field "To"やfield "Subject"というオブジェクトに内容を代入する。
もちろん"Cc"や"Bcc"も使用でき、メールの本文(ボディー)に内容を代入するときは、field ""というオブジェクトに対して内容を送信することになる(図1)


         図1 Eudora Proの送信メールにAppleScriptからデータを入れるためのキーワード

メッセージをいきなり送信せずに、ユーザーが確認した後に一括送信できるキュー状態にするには、

queue message 0

―とする。こうしておけば、スクリプトの動作が終了後、Eudora Proでキュー状態になっているメールの内容を確認してから「送信待ちメールの送信」で送信できる。


TOPへ

ファイルメーカーProのレコードを送信

では、前回のファイルメーカーProのレコードの内容を取得するスクリプトと合体してみよう。流れとしては、(1)検索済みの、送信に必要なレコード数を取得する、(2)レコード1から最後のレコードまで順に内容を読み込み、Eudora Proで新規メールとしてその内容を送信する―ということにする。
メールの内容で、ファイルメーカーProのレコードから得られるデータ以外の定型部分については、スクリプトの中に定数として持たせることにする。定数で持っている文字列と、ファイルメーカーProで取得したデータを順につないで文章を作成する。AppleScriptでは「&」で文字列を結合できるので、例えば、変数aContentの後ろにどんどん文字列をつないでいく。

set aContent to "この文字列に"
set aContent to aContent & "この文字列をつなぐ"
set aContent to aContent & return
set aContent to aContent & "ここで改行"

get aContent

―でOK。これを実行すると、

この文字列にこの文字列をつなぐ
ここで改行

―という結果になる。改行を入れたい場合には、定数returnを使う(図2)

Set aContent to "この文字列に"

この文字列に

set aContent to aContent & "この文字列をつなぐ"

この文字列にこの文字列をつなぐ

set aContent to aContent & return

この文字列にこの文字列をつなぐ

set aContent to aContent & "ここで改行"

この文字列にこの文字列につなぐ
ここで改行

図2 順に文字列結合をした際の、変数 aContentsの中身

さて、前回完成したファイルメーカーProからその内容をメールするスクリプトは、SampleScripts Vol.2に収録したScript 1のようになる。これがきちんと動作することを確認したら、実行形式で保存したり、ファイルメーカーProのスクリプトに埋め込んでボタンから呼べるようにすると便利だ。


TOPへ

もっと汎用的なスクリプトにするには


ここまでの説明で、無事にファイルメーカーProの内容を埋め込んだメールを送信できるようになった。
ただ、メールの内容をスクリプトの中に式として記述しているため、文面を変更したい場合、わざわざAppleScriptのファイルを開いて変更しなくてはならず、結構面倒だ。そこでさらなる改良として、あらかじめテキストファイルで作ったテンプレートを読み込んで、その中を解析してから実行するように変更してみる(図3)


図3 テンプレートファイルを使うスクリプトのイメージ。テンプレートファイルは自由に変更できる

例えば、まず次のような内容のファイルを作っておく。

%NAME_KANJI%様
下記の通り、お客様のお買い物ポイントをお知らせいたします。
お買い物ポイント:%POINT%

"%"で挟まれているのが、ファイルメーカーProのデータベースのフィールド名である。
スクリプトはこのテキストファイルの内容を読み込んでから、「お、ファイルメーカProの"NAME_KANJI"フィールドと"POINT"フィールドの内容をあそことあそこに入れて、メールを新規作成して送信すればいいのね」と勝手に考えて処理してくれる。ちなみにテンプレートの1行目はSubjectになり、2行目以降が本文になる。これも、先にSampleScripts Vol.2のScript 2から見てもらいたい。ポイントだけを紹介すると最初の、

property TextDelim : "%"

―で、フィールド名を挟む文字を指定している。
ここで指定した文字で挟まれた文字列がフィールド名ということになる。
この例では"%"で挟むことにしているため、本文中に"%"という文字は使えない。それで困るような場合には、property TextDelimの文字を変えてほしい。
例えば"$$$"に変更するとテンプレート中のフィールドを表す文字列は、"$$$NAME_KANJI$$$"となる。
まずテンプレートとなるファイルをユーザーに指定してもらい、内容をすべて読み込む。その後、読み込んだテンプレートの内容を解析する。解析といっても、文字列を「テキストアイテム」に分解しているだけだ。

set AppleScript's text item delimiters to TextDelim
set aListTemp to every text item of aTemplate

―これでOK。
文字列を指定の区切り文字でバラバラに分解するというものだ。例えば、次のような文字列がある。

"%NAME_KANJI%さん、点数は%POINT%です。"

 "%"を区切り文字としてこれをバラバラに分解すると、

{"","NAME_KANJI","さん、点数は","POINT","です。"}

―という値になる。
これはAppleScriptのリスト型という変数なのだが(これについてはまた別の機会に詳しく説明する)、このような5つの文字列(テキストアイテム)に分解できる(図4)

今日の%NAME_KANJI%様の買い物ポイントは%POINT%点です

↓"%"という文字を区切り記号として、分解する。

今日の

様の買い物ポイントは

点です。

NAME_KANJI

POINT

↓AppleScriptではリスト型の値として表現される。

{"今日の","NAME_KANJI","様の買い物ポイントは","POINT","点です"}

図4 テンプレートファイルの中の文章の解析。区切り文字"%"で文章をばらばらにする

実際にいろいろなパターンのテンプレートを作ってみると気づくはずだが、区切り文字で分解する際には下記のようなルールがある。

・必ず奇数個のテキストアイテムに分解される。
・奇数番目のテキストアイテムは、そのまま表示する文字列。偶数番目のテキストアイテムは、ファイルメー カーProのデータベースのフィールド名。

―ということで、データベースの内容を含む文字列を作るためには、このリスト型の変数を前から順につなげて文字列を作ればいいわけだ。その際、奇数番目の文字列はそのまま文字列としてつなぎ、偶数番目の文字列は該当するフィールドの内容をデータベースから取得してつないでいく。
そして、データベースの内容をテンプレートに埋め込んだあと、1行目はSubjectとして、2行目以降は本文として変数に入れておく。あとはEudora Proで新規メールを作って、それぞれのフィールドに内容を書き込めばよい。
もちろん、このスクリプトは完全なものではない。例えば1行しか入っていないなど、テンプレートが完全ではないとエラーが発生して止まってしまう。しかし、ある程度処理内容を理解していれば、そのままでも使えることと思う。このスクリプトをベースにして、皆さんの日常業務に沿うように改良していただきたい。


TOP

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

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

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