はじめに
連載5回目となる本稿は、FileMaker Proの基本操作や業務に関する定型処理を自動化できる「スクリプト」について、その機能と役割を紹介します。
スクリプトによる自動化のメリット
FileMaker Proではレイアウト切り替えやレコードの移動、検索やソート、印刷などの基本操作から、それらを組み合わせて行う複雑な処理まで、一連の手動で操作していた処理をスクリプトによって自動化することができます。
自動化して意味のある処理の例として売上集計があります。
例えば、日々の売上データを集計する場合、業種によって多少集計方法は異なりますが、個々の集計は基本的には定期的に同じ方法で行われます。手動で行う集計作業は時間と手間がかかります。計算方法は同じであっても手動によるミスや、元データの誤りなどが発生する可能性もあります。
売上集計を自動化した場合、例えば集計対象となる期間を入力してスクリプトを実行すれば、後は自動的に集計作業が行われ集計結果が表示されます。
もし、元の数値に誤りがあってもその数値を修正した後、再度集計用のスクリプトを実行すれば再計算された集計結果を得ることができます。
そして、集計内容によって月単位や年単位といった長期的に繰り返される処理の場合も一度自動化することで手動よりもはるかに集計作業が効率的に行うことができます。
自動化による操作性のアップ
作成したスクリプトは、レイアウトオブジェクトにボタンとして設定することができます。使用頻度の高い機能がボタンとして配置されていれば、クリック操作で簡単に実行できるため、データベースを積極的に利用する気になるのではないでしょうか?
簡単なメニュー操作であっても、アプリケーションの操作に慣れていないユーザーにとっては苦労の種です。一方、レイアウトにボタンとして配置されていれば、苦労することはありません。ボタン名に処理名を付けて機能を明示すれば、さらに安心して操作できることでしょう。
スクリプトの特徴
製品に添付しているサンプルのデータベースで使用しているスクリプトステップを見てみると、メニューから選択した時に表示される内容と、スクリプトステップの名称が一致しているため、手動操作の順番でステップを選択してスクリプトが作成されていることが理解できます。そのためプログラミングの知識がなくても普段手動でやっている一連の操作をスクリプトに置き換えることができます。
手動ではできない処理でも、「If...End If」のスクリプトステップを使って処理を分岐させたり、「Loop...End Loop」のスクリプトステップを使って処理を繰り返したりすることもできます。
これら、手作業の手順の自動化、繰り返しや条件分離処理以外にも、次のようなことがFileMaker Proのスクリプトで実現可能になります。
- 変数が利用できる(ローカルおよびグローバル変数)
- 手作業にはないスクリプト特有の処理もいくつか用意されている
- スクリプトの動作をあらかじめ設定した通りに行うことも、実行時にダイアログボックスなどで細かく指定することもできる
- 他のスクリプトを呼び出すことができる
- ユーザーの処理によるスクリプトの実行や、タイマーによる実行もできる(次項で紹介)
- Advanced版ではステップ処理やデバッグが可能(次回に紹介)
- FileMaker Serverではスクリプトをバックグランドで動作させることも可能
スクリプトの実行のタイミング
スクリプトを実行するタイミングは次のようにいくつかあります。
- 「スクリプト」メニューからの実行(メニューに表示されないスクリプトもある)
- ボタンなどに割り当てておき、それをクリックした時
- スクリプト一覧ウインドウからの実行(管理者権限が必要)
- スクリプトトリガによる実行
- 一定時間ごとの起動
FileMaker Pro 10からは、「スクリプトトリガ」の機能により、入力やレイアウト切り替えのタイミングでスクリプトを実行できるようになったため、レイアウトが切り替えられたときにソートして表示したり、フィールドに入力された値をチェックしてメッセージを表示したりすることもできます。
各イベントについては前回(第4回)説明されていますので、ここでは実際にFileMaker Proを操作した際に、どのような順番でイベントが発生するかを紹介します。対象とする操作は、レイアウト切り替えとフィールド編集、それらを組み合わせた3種類です。それぞれの場合で発生したイベントの種類と順番は次のようになります。
レイアウトを切り替えたとき
ブラウズモードでレコードを編集する前に、レイアウトポップアップメニューから別のレイアウトへ切り替えたときに発生するイベントの順番は、次のようになります。
- OnLayoutLoad
- OnRecordLoad
フィールドに入力したとき
ブラウズモードで現在カーソルがあるフィールドに「a」と入力したときは、次のようにイベントが発生します。
- OnObjectKeystroke
- OnLayoutKeystroke
- 「a」が表示される
- OnObjectModify
レコードが編集状態でレイアウト切り替えたとき
レコードの編集状態でレイアウトを切り替えると、次の順番でイベントが発生します。
- OnObjectSave
- OnObjectExit
- OnRecordCommit
- OnLayoutLoad
- OnRecordLoad
イベントの発生順番を理解することで、目的によってどのイベントで処理するのが適しているのかが明確になります。また、処理内容によっては、一つだけでなく複数のイベントを使用するケースもあります。
例えば、レイアウトが切り替わったときにソートされた状態でレコードを表示する場合は「OnLayoutLoad」のイベントに対しソート処理が実行されるようにスクリプトを指定します。