日常業務を FileMaker を使って効率化する際に、「上位の基幹システムからデータを夜間に自動で取り込めたら、その後のデータだけ人が入れれば済むので楽になりそう」と思うことはないでしょうか。
今回の記事では、FileMaker Server の機能を利用して「自動でデータを取り込む」という処理を設定していきます。
前提条件
今回の記事の前提条件は下記の通りです。
- FileMaker Server の Documents フォルダに他システムからのファイルが配置される。
- FileMaker Server で読み込める文字コード/改行コードになっている。
- 本記事は Windows Server 2019、FileMaker Server 19.5.4 で検証しています。
- 今回記載したバッチファイルや FileMaker のスクリプトはわかりやすくするためエラー処理等あえて考慮していません。実際の利用には皆様の環境に合わせてエラーや例外についても考慮してください。
全体図
全体としては下記のようなデータの流れとなります。
[1] 他のシステムから転送されてきた csvを一つのファイルに合体
[2] FileMaker スクリプトでインポート
[3] 処理済csvファイルの移動
必要な作業
今回必要なのは大きく下記4点です。
- FileMaker Pro で取り込みスクリプトを作成 (今回は省略)
- Documents フォルダに配置される csv を一つにまとめるバッチファイルの作成
- 取込処理が終わった csv ファイルを別フォルダに保存するバッチファイルの作成
- FileMaker Server Admin Console でスクリプトシーケンスの設定
以下それぞれ見ていきます。
1. FileMaker Pro で取り込みスクリプトを作成 (今回は省略)
こちらは普段 FileMaker Pro で取り込みを行う処理と変わりません。唯一変わるのは、取り込み元ファイルの指定です。
今回は Get ( ドキュメントパス ) 関数を使って、サーバ上の Documents フォルダへのパスを取得するようにしています。
2. Documents フォルダに配置される csv を一つにまとめるバッチファイルの作成
A.csv 、B.csv を、import.csv といった一つのファイルにまとめる(全体図の[1])にはバッチファイルの力を借ります。
今回は before.bat というバッチファイルを作りました。何をやっているかは下記コード内のコメントを参考に確認してみてください。
@echo off
rem "FileMakerへのインポートを実行する前に起動する。"
rem "インストールパスの下、Documentsフォルダに移動"
cd "C:\Program Files\FileMaker\FileMaker Server\Data\Documents\"
rem "csvのファイルが存在したらPROCへ、なければEOFヘ"
IF EXIST *.csv (GOTO PROC) ELSE GOTO :EOF
:PROC
rem フォルダ内の全てのcsvファイルを「import.csv」にマージする。
copy /y /b *.csv import.csv
rem おわり
GOTO :EOF
3. 取込処理が終わった csv ファイルを別フォルダに保存するバッチファイルの作成
処理済みの imprt.csv を、処理済みファイルの保管フォルダ [ processed ] に保存します(全体図の[3])。
before.bat 同様に after.bat というファイルを作ります。Documents フォルダのパスは FileMaker Server のインストールパスによって異なりますのでご注意ください。
@echo off
rem "FileMakerのインポートスクリプト実行後に実行される。"
rem "before.batで生成したimport.csvを yyyymmdd_import.csvにリネームして[proccessed]フォルダに移動"
rem "その他のcsvファイルは削除する"
rem "インストールパスの下、Documentsフォルダに移動"
cd "C:\Program Files\FileMaker\FileMaker Server\Data\Documents\"
rem "import.csvが存在したらPROCへ、なければEOFヘ"
IF EXIST import.csv (GOTO PROC) ELSE GOTO :EOF
:PROC
rem "import.csvをyyyymmdd_import.csvにリネームして[proccessed]フォルダに移動する"
rem リネーム後のファイル名を生成
set filename=%date:~-10,4%%date:~-5,2%%date:~-2,2%_import.csv
rem リネームと移動
ren import.csv %filename%
move /y %filename% processed\
rem "[Documents]フォルダ内のCSVファイルを全て削除
del /f /q *.csv
rem おわり
GOTO :EOF
4. FileMaker Server Admin Console でスクリプトシーケンスの設定
ここまででデータベース、前処理バッチファイル、後処理バッチファイルとできましたので、FileMaker Server Admin Console で連携する設定を行います。
今回のように、 前処理=>メイン処理=>後処理 といった流れを制御するには、スクリプトシーケンスという仕組みを使います。スクリプトシーケンスは FileMaker Server 上でのスクリプト実行の ”前後に” バッチ処理を実行できる仕組みです。なおバッチ処理は OS に合わせたスクリプト環境で作成することになります(今回は *.bat)。
これにより FileMaker Server でスクリプト実行する前処理や、スケジュール実行されたスクリプトの結果をシステム側で利用できたり、FileMaker Server Admin Console で実行スケジュールを設定/管理ができるようになります。作成にはスクリプトスケジュールの作成時にスケジュールタイプを「スクリプトシーケンス」にセットすることで可能となります。
実行
ここまでできたら、あとは Documents フォルダに csv ファイルを配置し、processed フォルダを作成して スケジュールを実行するだけです。
期待通りに動作しましたか?もしうまく動かない場合は下記を確認してみましょう。
困ったら
もしここまでやってもバッチファイルが期待通りの結果にならなかった場合は、どこを確認すれば良いでしょうか。
まずは下記の4点を確認しましょう。
- 各バッチ単体、FileMaker のスクリプト単体、がそれぞれ期待通りに動作するか
- スクリプトの権限は正しいか
- 処理対象は存在するか
- 処理対象が不正なデータになっていないか
また、実運用に際しては処理の結果を確認する方法の整備をしておくことをお勧めします。たとえば、
- Admin Consoleでログの確認
- FileMaker側に取込用テーブルを作成して、管理者用レイアウトとしてアクセス可能にする
といった方法が考えられますね。この他にも FileMaker Server のスケジュール設定に関しては同じサーバ上に他のシステムが同居している場合、そのシステムの夜間処理への影響の有無。またデータベースのバックアップスケジュールがどうなっているかを事前に確認しましょう。
さらにこれは直接今回の仕組みとは関係ないのですが、一般的に他のシステムとのデータ連携時には転送元システムの担当者と責任境界について合意しておくことをお勧めします。たとえば
- データが [ Documents ] にこないのは先方の問題
- データは配置されているけれども中身がが正しい状態でない場合は先方の問題
- データが正しいのに FileMaker に入ったら正しくセットされていない場合は FIleMaker 開発者の問題
といった感じです。
FileMaker Server のスクリプトシーケンスなどのサーバ側での処理の実行方法を覚えると、今回のようにサーバ側で定期的に処理を自動実行させることが可能になりますので、是非試してみてください。