2016年6月18日土曜日

FileMakerからPostgreSQLにレコードを送りつける・その2

先日出たFileMaker Pro 15で、PostgreSQL(以下PSQL)のデータベースを、FileMakerで扱えるようになったということを取り上げました。
FileMakerとOracleやMySQL、PSQLといったデータベースは違う世界に生きているので、その架け橋としてODBCという通訳さんが必要というところまで話したと思います。

突然ですが、PSQLの場合は、実は通訳さんが二人必要です。
イメージとしてはこんな感じ。


ODBCに加えて、Actual ESS Adapterというものを使わないと接続できません。
ひとまず、やりたいことは以下のように、FileMakerのリレーションシップグラフに、PSQLのテーブルを追加することです。


これをやるためにインストールが必要なものをまとめてみました。
環境はWindows7(64bit版)です。

・PostgreSQL 9.4.8-1-windows-x64
→PSQLのテーブルを作らないといけないので、PSQLそのものが不可欠。

・psqlodbc_09_03_0400
→通訳その1。

・Actual ESS Adapter win64
→通訳その2。

・FileMaker Pro 15
→14以前だと無理です。

・A5:SQL Mk-2
→SQL実行環境。なくてもいいですが、PSQLのデータベースを直接操作する際に便利。

ちなみに、FileMaker以外はフリーです。

上記の環境をインストールしたら、まずODBC接続のためのアカウントのようなもの(DSNといいます)を設定します。
コントロールパネル→システムとセキュリティ→管理ツールに、データソース(ODBC)というのがありますので、ここから設定します。

PSQL-ODBCのDSNはこんな感じで。


Actual ESS AdapterのDSNはこんな感じで。


DSNの設定が終わったら、FileMakerを起動して、テーブルと、送り付けたいレコードを作りましょう。


超適当ですが、こんなもんでいいですかね。
このレコードをPSQLのほうに送りたいので、受け皿となるPSQLのテーブルも作っておきましょう。


PSQL付属のSQL実行環境が使いにくいので、A5:SQL Mk-2というフリーソフトを使っています。
テーブルを作るときのコマンド「create table」で、FileMakerで作ったテーブルと同じ形式のテーブル(sample_psql)を作っています。
selectでテーブルの形を見た結果が、下の画面に表示されています。
データは1件も入ってませんが、これから、ここにFileMakerで作ったデータが放り込まれていくわけです。

それでは、先ほどのFileMakerのファイルのリレーションシップグラフに、sample_psqlを追加してみます。
テーブルの追加→データソース:ODBCデータソースの追加→Actual ESS Adapterを選択→sample_psqlを選択→idにチェックしてOK。


斜体のテーブルが現れればOKです。
あとは、sampleテーブルからsample_psqlにレコードをインポートするだけです。


インポート先に、先ほどリレーションシップグラフに追加したPSQLのテーブルを指定します。
このスクリプトをボタンにでも仕掛けておきます。


レコードが21件あることを確認してから、ボタンを押してみます。
手ごたえはまったくないですが、SQL実行環境でselect文を唱えて、確認してみましょう。


21件、入ってました。
ボタンを押しまくるとどんどん同じデータが入っていくので、一度入れたデータは送信しないように、フラグをつけるなどしたほうがいいかもしれません。

ちなみに、別のテーブルで試してみた結果。


18000件ほどやってみました。
データ件数が多いと、インポートに少し時間がかかるくらいで、結果としては問題ないみたいです。

こんなふうに、PSQLにデータが入ってしまえば、SQLを使ってデータ分析……とかできると思います。
データ登録はFileMakerで、データ管理と分析はPSQLで、という感じでしょうか。

今回は同じPC内でのデータの受け渡しということで、実用的にはあんまり意味がないですが……
もしPSQLデータベースが別PCで、しかも地理的に離れた所にある場合でも、同じようなことができるとしたら?
たとえば、各支店のFileMakerのPOSデータを、本社のPSQLデータベースに集めて分析、みたいなこともできると思います。

終わり。

2016年6月9日木曜日

FileMakerからPostgreSQLにレコードを送りつける・その1

先日、FileMaker Pro 15がリリースされました。

メンテナンスリリースで無償インストールできたので、早速使ってみた。

感想は……14とあまり変わってない感じ。

むしろ、メニューの表示が変わってて、ひじょうに使いにくくなっていました。

元々、今回はiOS関連の機能の追加が多いようでしたので、実はあまり興味がなかったのですが、ODBC接続でPostgreSQLが使えるようになるという点にだけ、注目していました。

ODBC?Post?なんのことやらわからんという人に言っておくと……



まずPostgreSQLですが……

同じ人間でも人種が違うように、データベースを扱うソフトウェアにも、種類がたくさんあります。

FileMaker以外にも、MySQLやOracleなど、いろいろありまして、PostgreSQLもそのうちのひとつ。

PostgreSQLはよくポスグレと呼ばれます。

タダで使えるうえに、同じタダで使えるMySQLよりも高機能なので、評価されているらしいです。



次にODBC。

実はFileMakerは、リレーションシップのグラフに、別データベースのテーブルを追加することができるのです(外部データソースと言います)。

こんな感じで。


ごちゃってますが、一番右のテーブル。

これはFileMakerのテーブルではなく、PostgreSQLのテーブルです。

テーブル名(order_psql)が斜体になっているのが目印。



それで、これができると何が良いかというと、FileMakerとは一切関係のないシステムで作ったデータベースに、FileMakerで作ったデータを放り込む……ということができます。

ただし、ここで注意点がひとつあります。

FileMakerと上述のPostgreSQLは別物、日本人とドイツ人みたいなものなので、両者をつなぐためには、その仲介をする「共通言語」が必要なのです。

この共通言語が、ODBC(Open Database Connectivity)になります。

その名の通り、データベースをオープンにつなぐ……データベース界の通訳さんです。

FileMaker ---- ODBC ---- PostgreSQL という構成をとることで、FileMakerのデータをPostgreSQLに転送することができるようになります。

実データはPostgreSQLデータベースで管理しているんだけど、データ入力はFileMakerでやりたいんだよね。

そんな時に使えばいいと思います。



本題に戻ると、FileMaker の14までは、PostgreSQLを外部データソースとして使うことができませんでした(リレーションシップグラフに追加できなかった)。

15になって初めて、PostgreSQLとの本格的な連携ができるようになったわけです。

ですので、今回はFileMakerで作ったデータを、ODBCを介してPostgreSQLデータベースに送りつけてみました。

わざわざFileMakerのデータをPostgreSQLに送って何の役に立つのかというと……

イメージとしては、各店舗のPOS端末から、本社のデータベースにデータを送って、本社側でデータ分析、みたいな。

データ分析、FileMakerでもできなくはないと思いますが、データ分析用の関数があるPostgreSQLでやったほうが良いと思います。



FileMaker→PostgreSQLへのデータ転送にはいろいろ準備が要ってめんどくさいですが、手順としては、以下のような流れになります。

① PostgreSQLをインストールする。

② PostgreSQL用のODBCドライバをインストールする。

③ Windowsの管理ツールで、②を使うためのアカウントのようなもの(DSNという)を作る。

④ Actual ESS Adapterをインストールする。

⑤ Windowsの管理ツールで、④を使うためのアカウントのようなもの(DSNという)を作る。

⑥ FileMakerでテーブルを作って、レコードをいくつか追加する。

⑦ PostgreSQLに、FileMakerで作ったテーブルと同じ形式のテーブルを作る(SQL実行環境が必要)。

⑧ FileMakerで外部データソースを追加して、リレーションシップグラフに⑦で作ったテーブルを追加する。

----ここまでが準備----

⑨ FileMakerのレコードを⑧のテーブルにインポートする。



ちなみに今回は、同じPCにPostgreSQLとFileMakerを入れた完全ローカル環境、OSはWindows7(64bit)での実験になります。

本当はサーバー・クライアントでやってみたかったのですが、最初なのでシンプルに。

……長くなりそうなので、詳細は次の投稿でやります。

2016年6月5日日曜日

スクリプト一時停止の罠をやっつける

FileMakerのスクリプトステップのひとつ、「スクリプト一時停止/続行」、使ってますか?

停止する時間を指定できますので、処理中にウェイトを挟むときとかに便利なやつです。

しかし、このスクリプトステップには罠があります。

デモ用ファイル



罠を再現するために作りました。

「メイン処理」ボタンを押すと、4秒間停止した後に、「終了」のダイアログが出るようになってます。

ところが、この停止している間に「割り込み処理」ボタンを押すと、停止したまま動かなくなります。

上のメニューバーに出ている「続行」を押すことでまた動き始めるのでよさそうなもんですが、

メニューバーは実用時には消しておくのが普通なので、実用時にこれが起きると、再開する方法がありません。

これがスクリプト一時停止の罠です。

やばくないですか?

というわけで今回は、この罠をやっつけたいと思います。



主役はポップオーバーさん。

レイアウト内に配置して、クリックしたときだけに表示させたいフィールドなどを置いておく、といったのが普通の使い方なのですが。

今回はこれを画面外に配置します(右上)。


スクリプト一時停止/実行の前に、このポップオーバーを開くようにしてあげます(ポップオーバーを開くというスクリプトステップはありませんので、ポップオーバーに名前をつけて、オブジェクト移動)。


すると、こういうふうになります。

ポップオーバーが開いているので、「割り込み処理」ボタンは押せません。

これで一件落着……に見えるんですが、実はそうじゃありません。

これだけだと、ポップオーバーがカバーしきれていない隙間をクリックしたとき、ポップオーバーが閉じてしまい、「割り込み処理」ボタンを押せるようになってしまいます。

ですので、追加で、スクリプト一時停止中は、ポップオーバーを閉じさせない細工をする必要があります。

具体的には、ポップオーバーのスクリプトトリガ・OnObjectExitにポップオーバーを閉じさせないためのスクリプトを設定します。

ポップオーバーから脱出されそうなときに、監視をさせるようなイメージ。

この監視網を張ってやれば、目的達成です。

ポップオーバーがレイアウトを守っているので、一時停止中にボタンは押せませんし、たとえ画面端をクリックされようとも、ポップオーバーが閉じることはありません。

何をしようが、4秒後には「終了」のダイアログが必ず表示されるというわけです。

ポップオーバーさん+監視スクリプト=鉄壁?