某クライアント (不動産業) の案件で、『CSV を 吐き出して、FTPで (あらかじめ規定された) Webサーバ上のフォルダ にアップロードする』というものがありました。
そのクライアントは、社内業務に FileMaker を使っているので、FileMaker (Mac OS X) のスクリプトで実行したいわけです。
条件は、以下の通り。
- CSVファイルの文字コードは、UTF-8 / 改行コードは、LF。
- CSVファイル名は、YYYYMMDDhhmmss_テーブル識別子.csv の形式。
- CSV出力と同時にFTPアップロードする。
- FTPユーザ名/パスワードなどのFTP関連情報は、FileMakerアクセスからは隠す。
- Macを少しだけ使えるスタッフが、Macで、FTPサーバアドレス/FTPユーザ名/パスワードなどのFTP関連情報 をいつでも修正できるように。
1 は、普通にCSV(UTF-8)書き出し後に (Mac OS X での出力なので 改行コードが CR なので LF に修正するために)
$ perl -p -e ‘s/\r/\n/g’ < CR.txt > LF.txt
とやってやればOKですし、なんなら、XML FMPRESULT 指定で…という方法もあります。
2 は、
テーブル識別子を $tableid というグローバル変数に格納しておいて、
Let ( [
$YYMMDD = GetAsText ( Year ( Get ( 日付 ) ) * 10000 + Month ( Get ( 日付 ) ) * 100 + Day ( Get ( 日付 ) ) ) ;
$hhmmss = Right (
“000000” & GetAsText ( Hour ( Get ( 時刻 ) ) ) * 10000 + Minute ( Get ( 時刻 ) ) * 100 + Seconds ( Get ( 時刻 ) ) ;
6
) // Right
] ;
$YYMMDD & $hhmmss & “_” & $tableid & “.csv”
) // Let
とかやってやればOKでしょう。
3 も、4 の条件がなければ、シェルコマンドを do shell script な AppleScript ではじいてやればOKのはずなのですが、この場合、AppleScript内に、FTPユーザ名/パスワードなどの情報を書き込むことになります。
では、FTP情報を埋め込んだ AppleScript をアプリケーション形式で保存しておいて、それを叩いてやれば良さそうなものですが、
5 の条件でいう『Macを少しだけ使えるスタッフ』には、AppleScript の編集は、少し荷が重すぎるようです。
…で、「どうやって、FTPアップロードすべ?」と悩んでいたわけです。
いっそのこと、Transmit 4 などの FTPクライアントソフトの AppleScript 機能を使って…という『一応の解』が出ていたわけですが…ふと「Automator でどーよ!?」と思いました。
「Automator なら Automator のフロー側に FTPユーザ名/パスワードなどをリテラルで格納すれば、FTP関連情報をFileMaker アクセスからは隠せるし、Automatorのワークフローの修正なら、『Macを少しだけ使えるスタッフ』にも修正可能!」探したところ、Upload to FTPという Automator Action がありました。
これを使って、CSV書き出し用フォルダに、フォルダアクション として設定!(直接、フォルダアクションを設定したフォルダに書き出してダメ。詳しくは、下記の追記参照)
追記 (2013/05/24 15:35:31)
書くのが遅くなってしまいましたが…
FileMaker のファイル書き出し先をフォルダアクションの設定されたフォルダ(以下、アクションフォルダと言う)にしてしまうとダメでした。
とくにループ処理で何度も当該フォルダに『五月雨式に』書き出す…というような処理の場合、「さっきアンタがヤレって言ったことを今まだやってる最中でしょ!」と拗ねはります。あげく、エラーも出さずに黙ったまま処理を止めはります。
解決方法は…
- テンポラリフォルダの中身をクリアする
- ループでもなんでもいいから FileMaker からの書き出しは、テンポラリフォルダに行う
- アクションフォルダの中身をクリア
- テンポラリフォルダからアクションフォルダに、さっき書き出したファイルを移動
という順番での処理であれば、アクションフォルダに入るときに、対象ファイルが配列で渡されますので、処理が止まりません。
コメント