Salesforceの導入支援とかしてると、VBAを使ってSalesforceのAPIを叩きたくなることは多々あります。

  • Excelでちょっとデータ加工してExcelから直でデータインポートしたいんだよなー、とか
  • Excelで作ったオブジェクト定義書からSalesforceにオブジェクト作りたいんだよなー、とか
  • ちょっとデータ見たいんだけど、データローダ使ってCSVインポートして…てやってられるか!とか
  • プロトタイプでガーってオブジェクト作ったけどオブジェクト定義書作ってない!Salesforceから一気に定義書作れたら良いのに!とか

Excel内でやりたいこと、色々ありすぎて困ります。

業務用のツールとか作れば社内でモテること間違いなし!

ということで今回はVBAからSalesforceのAPI叩いてみることにします。

ちなみにForce.com Office Toolkitが有りますが、ツールキット依存になる上に、MetadataAPIとか叩けないので自前でAPIコールしてます。

ちなみにちなみにVBAレベル1のスライムベスなのでコードレベルはご了承ください。

1. SOAPでログイン

RESTでログインしても良いんだけど、その場合接続アプリケーション用意しないといけなくなって、やや面倒なのでSOAP使いました。

こんな感じのHTTP通信をすればOK

 

SOAPメッセージBodyはこんな感じ

で、こんな感じのレスポンスが返って来ます

ここでsessionIdとかserverUrlとかmetadataServerUrlとかを取得して、後のMetadataAPIのコールに使用します。

VBAだとこんな感じ

2. RESTでデータ取得

VBAでJSON扱うのは色々面倒らしいのでレスポンスはXMLで

HTTPはこんな感じ(Bodyはなし)

レスポンスはこんな感じ

あとは頑張ってパースするだけ!

VBAだとこんな感じ

3. SOAPでカスタムオブジェクト作る

前回fiddler使ってSOAPの中身を見たので、そのSOAPメッセージを書き換えて送信します。

エンドポイントはmetadataServerUrlの値を書き換えてください。

でBodyは

RESTはHTTPヘッダにSessionIDを入れますが、SOAPはBodyのSOAPヘッダに入れます。

レスポンスは

VBAだとこんな感じ(ワークシートから作るデータ取得してます)

4. SOAPでカスタム項目を作る

HTTPヘッダは3と同じ。

Bodyは

VBAだとこんな感じ

こんな感じでExcelから簡単にSalesforceのレコードやメタデータを操作することができます。

VBA使って社内限定でモテるエンジニアになりましょー!