開発ライセンスのSalesForceを登録
ここで登録可能
https://developer.salesforce.com/signup
今回はセキュリティートークンで認証するため
「私の設定」⇒「私のセキュリティートークンのリセット」
リセットすると、トークンが登録アドレスに送られてくる。
Partner WSDLの取得
自社に連携ツールを作るなら本来は Enterprise WSDL の方が良い。
但し、今回はより汎用的に利用できる Partner WSDL を取得する。
http://mvnrepository.com/artifact/com.force.api/force-wsc/34.0
ここから force-wsc-34.0.jar をダウンロードして
$ java -classpath force-wsc-34.0.jar com.sforce.ws.tools.wsdlc partner.wsdl partner.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/stringtemplate/v4/STGroupDir
失敗するが単なるライブラリ不足。
http://www.stringtemplate.org/download/ST-4.0.8.jar
これを落として再度トライ。
$ java -classpath force-wsc-34.0.jar;ST-4.0.8.jar com.sforce.ws.tools.wsdlc partner.wsdl partner.jar
今回はMavenProjectを利用するので
$ mvn install:install-file -Dfile=D:\foo\lib\partner.jar -DgroupId=co.jp.infomart.force -DartifactId=partner -Dversion=34.0 -Dpackaging=jar -DgeneratePom=true
で、生成したpartner.jarをローカルリポジトリに入れておく。
ログインを実装して繋ぐ
まずは、必要なライブラリ。
だいたい、こんなもんだというところで・・・
pom.xml
<dependency>
<groupId>com.force.api</groupId>
<artifactId>force-wsc</artifactId>
<version>34.2.2</version>
</dependency>
<dependency>
<groupId>com.force.api</groupId>
<artifactId>force-partner-api</artifactId>
<version>34.0.0</version>
</dependency>
<dependency>
<groupId>co.jp.infomart.force</groupId>
<artifactId>partner</artifactId>
<version>34.0.0</version>
</dependency>
で、実装はこちら
接続テスト
/**
* 接続テスト
* 接続して、取引先の基本情報を取得
*/
private static void connectTestOne() {
final String uid = "ログインID(メールアドレス)を設定";
final String pass = "パスワードと発行したセキュリティートークンを繋げて設定";
// ↑ パスワードが「pass」でトークンが「xyz」なら「passxyz」となる
/**
* 接続設定
*/
ConnectorConfig config = new ConnectorConfig();
config.setUsername(uid);
config.setPassword(pass);
config.setAuthEndpoint("https://login.salesforce.com/services/Soap/u/34.0");
PartnerConnection connection = null;
boolean isConnected = false;
try {
// 接続
connection = com.sforce.soap.partner.Connector.newConnection(config);
isConnected = true;
LoginResult lr =connection.login(uid, pass);
System.out.println("--------------------------------");
System.out.println(lr.getUserInfo().getOrganizationName());
System.out.println(lr.getUserInfo().getUserFullName());
System.out.println("login success...");
System.out.println("--------------------------------");
} catch (ConnectionException ex) {
Logger.getLogger(ClientTest.class.getName()).log(Level.SEVERE, null, ex);
} finally {
// 切断
try {
if( isConnected ) {
connection.logout();
System.out.println("--------------------------------");
System.out.println("logout success...");
System.out.println("--------------------------------");
}
} catch (ConnectionException ex) {
Logger.getLogger(ClientTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
取引先を取得して表示
https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_account.htm
これがかなり参考になる。
取引先を取得する
/**
* 取引先一覧情報を取得
* @param partnerConnection
*/
public static void querySample(PartnerConnection partnerConnection) {
try {
// バッチサイズを設定
partnerConnection.setQueryOptions(250);
// 取引先抽出のSOQLを指定して抽出
String soqlQuery = "SELECT AccountNumber, Name, Phone, Fax, (Select c.Name From Contacts c) contactName FROM Account WHERE IsDeleted = false";
QueryResult qr = partnerConnection.query(soqlQuery);
boolean done = false;
int loopCount = 0;
// 結果を取得して表示
while (!done) {
System.out.println("Records in results set " + loopCount++ + " - ");
SObject[] records = qr.getRecords();
for (int i = 0; i < records.length; i++) {
SObject account = records[i];
Object accountName = account.getField("Name");
Object accountPhone = account.getField("Phone");
Object accountFax = account.getField("Fax");
System.out.println("Account " + (i+1) + ": "
+ account.getField("AccountNumber") + ":" + (accountName != null ? accountName : "")
+ " Phone " + (accountPhone != null ? accountPhone : "")
+ " Fax " + (accountName != null ? accountFax : ""));
}
if (qr.isDone()) {
done = true;
} else {
qr = partnerConnection.queryMore(qr.getQueryLocator());
}
}
} catch(ConnectionException ce) {
ce.printStackTrace();
}
System.out.println("\nQuery execution completed.");
}
で、こんな感じで取得ができる。
サンプルデータだけど。
出力結果
--------------------------------
株式会社むむむ
とっとこ ハム太郎
login success...
--------------------------------
Records in results set 0 -
Account 1: CC978213:GenePoint Phone (650) 867-3450 Fax (650) 867-9895
Account 2: CD355119-A:United Oil & Gas, UK Phone +44 191 4956203 Fax +44 191 4956620
Account 3: CD355120-B:United Oil & Gas, Singapore Phone (650) 450-8810 Fax (650) 450-8820
Account 4: CD451796:Edge Communications Phone (512) 757-6000 Fax (512) 757-9000
Account 5: CD656092:Burlington Textiles Corp of America Phone (336) 222-7000 Fax (336) 222-8000
Account 6: CC213425:Pyramid Construction Inc. Phone (014) 427-4427 Fax (014) 427-4428
Account 7: CC634267:Dickenson plc Phone (785) 241-6200 Fax (785) 241-6201
Account 8: CD439877:Grand Hotels & Resorts Ltd Phone (312) 596-1000 Fax (312) 596-1500
Account 9: CC947211:Express Logistics and Transport Phone (503) 421-7800 Fax (503) 421-7801
Account 10: CD736025:University of Arizona Phone (520) 773-9050 Fax (520) 773-9060
Account 11: CD355118:United Oil & Gas Corp. Phone (212) 842-5500 Fax (212) 842-5501
Account 12: null:sForce Phone (415) 901-7000 Fax (415) 901-7002
Query execution completed.
--------------------------------
logout success...
--------------------------------