filemaker-ruby
FileMaker の API を利用する方法については昨年の Advent Calendar でも書き散らしましたが1、いくつかの方法があります。メンテナンスの現状やそれを利用する言語などを検討すると、2017年ならば filemaker-ruby を使うのがモダンかと思います。
mech/filemaker-ruby: A Ruby wrapper to FileMaker XML API
この filemaker-ruby は、FileMaker の API のうち、XML方式 の API を Ruby でラップしたものです。
使い方
使い方は README に網羅されていますが、実際のコードを見たほうが早いと思います。ここでは単純に「レコードを検索する」コード例を紹介します。
使うための準備
コード例を見る前に、とにもかくにもまずは filemaker-ruby をインストールしておかなければいけません。
$ gem install filemaker
分割したコード例(レコードの検索を例に)
コード例はいくつかに分割して掲載します。そして最後にそれらをつなぎあわせます。
1. filemaker-ruby を require する
まず filemaker-ruby を require しないと始まりません。
require 'filemaker'
2. FileMaker Server に接続するための基本設定を行う
FileMaker Server への接続情報を以下のようにして定義しましょう。fm_server
の中に接続情報が詰め込まれています。
fm_server = Filemaker::Server.new do |config|
config.host = '10.10.10.100'
config.account_name = 'your_account_name'
config.password = 'your_password'
config.ssl = { verify: false } # SSLを用いる場合はtrueを指定します
end
3. 「データベース名」と「レイアウト名」を指定する(準備をする)
後ほど「データベース名」と「レイアウト名」を使用する場面が出てきますので、ここでそれらを変数に押し込めておきます。
db_name = '顧客データ'
layout_name = '性別一覧'
4. レコードを検索する
ここまでできたならばレコードを検索することは簡単です。以下のようなメソッドを実行するとレコードの検索ができます。
results = fm_server.database[db_name].layout[layout_name].query('性別': ['男'])
上記の例では、以下の順に頭からメソッドチェーンをしています。
- FileMaker Server の定義
- データベース名を
database[データベース名]
で定義 - レイアウト名を
layout[レイアウト名]
で定義 -
query
メソッドで検索条件を定義
したがってこの例では以下のような条件で検索をしていることになります。
-
10.10.10.100
にある FileMaker Server に - ユーザー名は
your_account_name
- パスワードは
your_password
- 上記のユーザー名とパスワードで接続し
-
顧客データ
というデータベースの -
性別一覧
というレイアウトにおいて -
性別
というフィールドが -
男
であるレコードを - 検索する
そして上記の結果は results
に格納されます。レコードは複数個ヒットする可能性があります。
結合したコード例(レコードの検索を例に)
前項のコードを結合すると以下のようになります。このコードのファイル名を fm_ruby_practice.rb
としましょう。
require 'filemaker'
fm_server = Filemaker::Server.new do |config|
config.host = '10.10.10.100'
config.account_name = 'your_account_name'
config.password = 'your_password'
end
db_name = '顧客データ'
layout_name = '性別一覧'
results = fm_server.database[db_name].layout[layout_name].query('性別': ["男"])
あとはこれを実行するだけです。
$ ruby fm_ruby_practice.rb
これで results
に検索結果が格納されました!2
検索結果を取り扱うために
一つの記事に多くを詰め込み過ぎると読む気が無くなると思います3ので、検索結果をどう取り扱うか、についてはこの記事では省略します4。
注意することは、上記例の results
には複数のレコードが格納されていることです5。個別のレコードを扱う場合には、results
を「バラして」から6扱う必要があります。
「バラした」あとのレコード7からフィールドの値を取り出す方法は、例えば、「バラした」レコードが result
という変数に格納されているとすると、result.性別
というメソッドによって「性別」フィールドの値が返ってきます8。