nkjmkzk.net

powered by Kazuki Nakajima

Archive for 11月, 2012

アプリケーションパートナー様のバイブル、ISVforce Guideが日本語化

Force.com、Heroku、Chatterといったプラットフォームでアプリを開発・販売アプリケーションパートナー様はAppExchange, LMA, Trialforce, 転送アップグレード, 代理ログインといった様々なお役立ちツールを駆使していくことになります。

これらのプロセスと手順はISVforce Guideというドキュメントにまとまっているのですが、これまで英語版のみのご提供でした。

今回、ついにこちらのドキュメントが日本語化されました!!

ISVforce Guide 日本語版

是非ご活用ください。

without comments

Written by 中嶋 一樹

11月 22nd, 2012 at 2:29 pm

Posted in Uncategorized

Tagged with ,

大量データをForce.comにロードしよう。Bulk APIの使い方

Force.comにREST APIでデータをインサートしたいな、と思ったとき、標準APIだと単一レコードしかインサートすることができません。今のところ複数レコードをインサートする場合はApex REST(オレオレAPI)を定義する必要があります。またはSOAP APIか。

複数レコード、特に大量のデータをインサートしたい場合は素直にBulk APIを利用するのが賢明でしょう。

Bulk APIは太古の昔から(Summer’10かな?)ある機能ですが、OAuth2.0で得たアクセストークンで利用するBulk APIの使い方をまとめておきたいと思います。(ドキュメントではSOAP APIのlogin()で取得したSESSION IDを使う、という記載しかないので)

なお、コマンドラインで簡単に試せるように例はcurlを使っています。

認証

まずOAuth2.0でアクセストークンとインスタンスURLを取得します。これはこの記事の範疇を超えるのでこのあたりの記事を別途参照ください。
また、以下の例はではインスタンスURLはhttps://na14.salesforce.comとして話を進めます。

ジョブの登録

Bulk APIではまずジョブを登録し、そのジョブに後からバッチとよばれるデータのリストをアサインすることで処理を進めます。ジョブ登録時には最低限下記のような指示をおこないます。

  • object : 操作対象のオブジェクト
  • operation : 操作 => delete, insert, query, upsert, update, hardDelete
  • contentType : バッチ(データリスト)のフォーマット => XML,CSV あるいはそのZIPアーカイブ

curl https://na14.salesforce.com/services/async/26.0/job/ -H 'X-SFDC-Session: あなたのアクセストークン' -H "X-PrettyPrint:1" -H "Content-Type: application/xml" -d @register_job.xml -X POST

通常のREST APIでは、URLがhttps://インスタンス.salesforce.com/services/data/v26.0/からはじまりますが、Bulk APIではhttps://インスタンス.salesforce.com/services/async/26.0/からはじまることに注意してください。data => async, v26.0 => 26.0です。後者はややこしいですね。

そして、アクセストークンはX-SFDC-Session:というヘッダーにセットします。通常のRESTだとここは Authorization: Bearer アクセストークン となりますよね。

そして、上記のcurlコマンドではregister_job.xmlというファイルをジョブの指示書として指定しています。このファイルの中身も見ておきましょう。

<?xml version="1.0" encoding="UTF-8"?>
<jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload">
    <operation>insert</operation>
    <object>myObject__c</object>
    <contentType>CSV</contentType>
</jobInfo>

myObject__cというオブジェクトに、CSVフォーマットのデータをインサートするジョブですよ、という指定ですね。

このジョブ登録が完了するとXMLのレスポンスが返ってきます。特に重要なのはその中のid要素です。このid要素にはジョブIDがセットされており、このジョブIDはジョブにバッチを追加する際に必要になります。

ジョブにバッチを追加

先ほど登録したジョブにデータをアップロードして処理を開始させます。データはジョブ登録の際にcontentTypeで指定したフォーマットでなければなりません。 例

curl https://na14.salesforce.com/services/async/26.0/job/ジョブID/batch -H 'X-SFDC-Session: あなたのアクセストークン' -H "Content-Type:text/csv" -X POST --data-binary @myData.csv

上記コマンドではmyData.csvというファイルをデータリストとして指定しています。CSVファイルは一行目にフィールドのAPI名、二行目以降にそのフィールドに対応するデータが記載されたものになります。
また、curlコマンドでの注意点ですが、ファイルを指定するときに-dオプションで指定してしまうとCSVファイルの改行が削除され、フォーマットが崩れてしまいます。–data-binaryオプションで指定することによって改行を維持したままアップロードできます。

ジョブの終了

ジョブは一つのバッチが終了しても、放っておいてはオープンされたままになります。用が済んだら閉じましょう。

curl https://na14.salesforce.com/services/async/26.0/job/ジョブID -H 'X-SFDC-Session: あなたのアクセストークン' -H "X-PrettyPrint:1" -H "Content-Type: application/xml" -d @close_job.xml -X POST

上記コマンドではジョブの指示書としてclose_job.xmlというファイルを指定しています。
このファイルも同様にみておきましょう。

<?xml version="1.0" encoding="UTF-8"?>
<jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload">
    <state>Closed</state>
</jobInfo>

シンプルですね。state要素をClosedにセットするだけです。

これでBulk APIの一つのトランザクションが完了します。
より詳細な情報はドキュメントを参照ください。
Bulk API Developer’s Guide

Enjoy.

without comments

Written by 中嶋 一樹

11月 8th, 2012 at 10:38 am

Posted in Uncategorized

Tagged with , , ,