FileMaker Serverで公開されているデータベースのスクリプトを、Windowsタスクマネージャーを使用して定期的に実行する方法

Introduction

FileMakerのデータベースをFileMaker Server 8で公開している場合に、特定の処理を定期的かつ自動的に実行させたい状況が生じることがある。FileMaker Server 8自体に定期的にスクリプトを実行する機能がないばかりか、そもそもFileMakerクライアント(FileMaker Pro or FileMaker Pro Advanced)でなければスクリプトを実行することもできない。そのため、定期的にスクリプトを実行させるにはFileMaker Proに定期的に処理を実行させなくてはならない。定期的な処理を行う手法にはいくつか存在するがここでは追加コストなしにWindowsで利用できる機能だけを使うことにする。なお、FileMaker Server 9以降ではスクリプトを定期的に実行する機能が標準で装備されている。

手法1

Configuration
Fig.1 The configuration. The goal of this article is to run the "DoJob" script within "Northwind" database periodically by means of the Windows scheduled task

Fig.1がその構成図である。FileMaker Server上で公開されているデータベースの名前はNorthwindとし、その中のDoJobスクリプトを定期的に実行させるというのがここでの目的である。やり方を簡単にまとめれば次のようになる。まず、もう一つFileMakerのデータベースファイル(ScriptKicker.fp7)を作成する。ScriptKicker.fp7にはNorthwindのDoJobスクリプトを呼び出すスクリプト(名前をStartupScriptとする)を作成し、ファイルが開かれると自動的に起動されるように設定しておく。スクリプトの最後にはアプリケーションを終了するスクリプトステップも入れておく。あとはWindowsタスクでそのファイルを定期的に開くように設定しておくだけである。何も難しいところはないが、ここで確認したいのはScriptKicker.fp7を実行するPC上で誰もログオンしていないときでも正常にFileMakerのスクリプトが実行されるかというところと、あとユーザー認証の問題である。

Definition of StarttupScript script
Fig.2 The definition of "StartupScript" script within "ScriptKicker" database.

Fig.2はScriptKickerファイルに作成したStartupScriptスクリプトの定義である。ここで重要なのはNorthwindファイルのDoJobスクリプトを呼び出すところだけである。ここではおまけとしてAdminユーザーでファイルを開いたときはスクリプトを実行しないようにし、また、スクリプトの実行結果をレコードに保存する機能を付けている。ScriptKickerテーブルの定義はFig. 3の通りである。

Table schema of ScriptKicker
Fig.3 The schema of "ScriptKicker" table. The value of 'AccountName' field is auto-entered by 'Get(AccountName)' function.
FileOption of ScriptKicker file
Fig.4 File Options for "ScriptKicker" database file

ScriptKickerのFile OptionsではFig.4のようにファイルが開かれると自動的にStartupScriptスクリプトが実行されるようにしておく。さらに、ファイルが開かれるときにパスワードを尋ねるダイアログボックスが表示されないよう、特定のユーザーアカウントでファイルを開くようにもしておく。ScriptKickerで定義されているユーザーアカウントはFig. 5に載せた。このユーザーアカウント(DBUser)とパスワードはNorthwindファイルでも同じものを定義しておく必要がある。さもないとDoJobスクリプトを呼び出す際にユーザーアカウントとパスワードを尋ねるダイアログボックスが表示されてしまう。この時点でスクリプトが正常に動作するか確認をしておく。

Accounts and privileges
Fig.5 Accounts and privileges defined within the "ScriptKicker" database. (Similar definitions must exist in the "Northwind" database as well.)

次はWindowsのスケジュールされたタスクの設定である。コントロールパネルの「タスク」からタスクウィザードを起動する。ウィザードではScriptKicker.fp7ファイルを開くようスケジュールを作成する。ウィザードではタスクを実行するWindowsのユーザーアカウントとパスワードも設定しておく必要がある。このユーザーアカウントにはFileMaker Proを起動してスクリプトを実行することができるだけの十分なアクセス権を持ち(かつ、必要以上の権限を持たない)アカウントを設定しておく必要がある。コンピューターに誰もログオンしていない状態でも予定の時間が来ればそのユーザーアカウントでFileMaker Proが起動してスクリプトが実行されることになる。もし実行するスクリプトが、たとえば別のコンピューターの共有フォルダ内にあるファイル(テキストファイル等)からデータを取り込むような処理を行っている場合、その共有フォルダへのアクセス権がないと取り込みに失敗することになる。

ウィザードでScriptKicker.fp7ファイルを選択する代わりにFileMaker Proのアプリケーションを選択する方法もある。この場合、詳細プロパティ画面を開いて「実行するファイル名」の欄にたとえば次のようにFileMaker Proのアプリケーションパスと半角スペースを一つ入れた後に開きたいファイル(ここではScriptKicker.fp7)のパスを記載する。
例: "C:\Program Files\FileMaker\FileMaker Pro 8.5 Advanced\FileMaker Pro Advanced.exe" "C:\Scripts\ScriptKicker.fp7"
パス内にスペースが含まれる場合パスを二重引用符で囲む。

Advanced properties of scheduled task
Fig.6 Property dialog box of the scheduled task.

タスクの設定が終われば手動で実行して正常に処理が行われることを確認する。

以上の作業を終え、タスクを設定したコンピューターからログオフし誰もログオンしていない状態で指定した時間になればはたしてスクリプトが正常に実行されるかを確認してみたところ問題なく実行されているようである。ここでNorthwindのDoJobスクリプトはDBUserのファイルメーカーアカウントのもとで実行されるので、もしアクセス権が不十分だと実行に失敗するので注意が必要である。また、エラーが生じた場合でもスクリプトの実行途中でダイアログボックスが表示されて実行が停止しないよう、スクリプトの作り方には十分気をつける必要がある。

手法2 ScriptKickerファイルもFileMaker Server上におく場合

Configuration 2
Fig.7 The second configuration. The "ScriptKicker" file is hosted on the server side as well.

今度はScriptKickerファイルもFileMaker Server上で共有する場合を考える。ScriptKickerファイルも共有するくらいなら最初からNorthwindファイルだけで何とかならないのかと思われるかもしれないが、この回りくどさは特定のスクリプトを外部から指定して実行させる方法が今のところ見つからないということに起因している。

よく知られているようにWindowsではInternet ExplorerでURLの入力欄に
fmp7://DBUser:password@192.168.0.23/ScriptKicker.fp7
のように入力することでFileMakerの共有ファイルを開くことができる。これを利用するのである。上述のタスクの設定で「実行するファイル名」欄にInternet Explorerのパスに続き上記のパスを指定する。たとえば、
C:\PROGRA~1\INTERN~1\iexplore.exe -extoff "fmp7://DBUser:password@192.168.0.23/ScriptKicker.fp7"
のように入力する。(もちろんFileMaker ServerのIPアドレスが192.168.0.23だったらの話である。)ただ、ここでの問題は見ての通りパスワードが(タスクのプロパティを見れば)一目瞭然になってしまうことである。そのため、通常はここにパスワードを記述せずFig. 4でやったように自動的に特定のユーザーアカウントを使うようにするか、あるいはFileMaker ServerでActive Directoryを使った外部サーバー認証を利用する。すでにFig. 5で「FileMaker Users」という外部サーバーのアカウントが登録されている。「FileMaker Users」というのは前もって作成しておいたActive Directory上のドメインローカルグループである。つまり、タスクの設定のところで指定したWindowsのドメインユーザーアカウントがこの「FileMaker Users」グループに所属していれば(DBUserではなく)そのユーザーアカウントのコンテキストでスクリプトが実行される。これはすなわち、パスワードはタスクの作成の時しか入力する必要がないので機密性が高まるということである。ちなみに、実験によるとFileMakerのGet(AccountName)関数(日本名ではGet(アカウント名))は「FileMaker Users」といったグループ名ではなく、現在のWindowsユーザーアカウント名を返すようである。なお、外部サーバー認証を使用するにはActive Directoryが導入されているのはもちろんのことだが、FileMaker Serverでもそれを有効にしておく必要があるので注意が必要である(Fig.8)。

FileMaker Server properties
Fig.8 You need to change the Client Authentication settings to enable External Server accounts for use of ActiveDirectory authentication.

資料室へ戻る