Force.com 上での開発は、Apexでやるのだが、外部システムの連携とか日本ではありがちな細かな処理とかは厳しかったりする。そんな時のために(?)、外部からSOAP/RESTなどを使ってごにょごにょ出来る様になっている。ユーザが多いだけあって、便利なライブラリなどがそこら中にあるので、お手軽にできる。
今回は、環境原則依存しないexeを作りたかったので、PythonとBeatBoxにpy2exeを使うという方法で遊んだ。まぁLibreOfficeでもPython使えるからマクロとして使えるかも〜って気持ちがなかった訳ではないw
BeatBoxは、Salesforce.comの開発者wikiでも紹介されていたPythonのライブラリ。ライセンスはGPL。
2010年ぐらいまでは、Google Code をっ使っていたっぽいけど、今は、GitHub で開発しているっぽい。pypiやGoogle Codeにあるのは、パートナー WSD のSOAP API 20対応版。Salesforce.comのサイクルだと、最短3年でAPIのサポートはお隠れになるので、GitHubにある最新版を使った方が良いかと思う。
なおBeatBoxは、proxyをサポートしていないのでproxyへの対応が必要な場合は、salesforce-python-toolkitを検討した方が良いかも。
さて、使い方だがそれ自体は簡単。デモ(demo.py)があるのでそれを見れば分かると思う。サンプルの一部をもってくると以下の様になる。
sf = beatbox._tPartnerNS
svc = beatbox.Client()
svc.login("ユーザID","パスワード")
dg = svc.describeGlobal() #オブジェクト名を取ってくるAPI
for t in dg[sf.types:]:
print str(t)
基本的にAPIをマッピングしているだけなので、APIは、SOAP APIの説明書 を参照すればいい。データ取得時に使うSOQL構文については、ここを参照すればよい。
SOQL自体は原則的にSQLなので特に困らなかったのだが、日時指定方法で少し悩んだ。ここに書いてあるのだが。UTCで、YYYY-MM-ddThh:mm:ssZと書くか、日本時間でYYYY-MM-DDThh:mm:ss+09:00って書く必要があるみたい。
注意した方が良さげな所としては、
* 今回は必要なかったからちゃんと試していないけどレコード内の改行あたりは気をつけた方が良さげな雰囲気。
* 本番用アカウントで使う前にsandboxで試したい場合は、beatbox.py内のinitにあるURLの変更を忘れずに。
ちなみに、以下のようなビデオを今頃見つけたのでリンクしておく。
Intro to Beatbox part 1-3: