Advent Calendarの季節になりましたね。世のエンジニアの1年間のノウハウが放出されるイベント、楽しみです。
さてそんな中、Advent Calendarとまったく関係のない記事になりますw(エントリを逃したとも言う…)
SFDC謹製のJavaのAPIクライアントであるWSC (Force.com Web Service Connector)を使って、ちょっとクセのある(?)「地理地情報型(Location)」や、Summer'17でパイロットリリースされた「時間データ型(Time)」を操作する時のやり方についてのメモです。
地理位置情報型・時間型の扱い方
先に結論ですが、それぞれ以下のように扱うことで、利用できます。
- 地理位置情報型
- 緯度と経度を別々に扱えばOK。例えば項目のAPI参照名が
FooLocation__c
の場合は、 緯度がFooLocation__Latitude__s
, 経度がFooLocation__Longitude__s
のようになる
- 緯度と経度を別々に扱えばOK。例えば項目のAPI参照名が
- 時間型
- "00:00:00.000Z" の形式
地理位置情報型、以下のIssueにある通り、少し前まではダウンロードしてきたWSDLに手を加えないと使えなかったのですが、今は直っているみたいですね*1。
また、時間データ型についてはベータなので、今後変更になる可能性もある気もしますが、現時点での結果ということで…。
サンプルコード
レコード1件をINSERTする場合の例。
public class Sample { private static final Logger log = LoggerFactory.getLogger(Sample.class); public static void main(String... args) throws Exception { ConnectorConfig config = new ConnectorConfig(); config.setUsername("[ログイン名]"); config.setPassword("[パスワード]"); PartnerConnection connection = Connector.newConnection(config); SObject obj = new SObject("Hoge__c"); obj.setField("Name", "test"); obj.setField("Time1__c", "12:00:00.000Z"); // これで 12:00 として時間が登録される obj.setField("Location1__Latitude__s", "35.1"); obj.setField("Location1__Longitude__s", "135.2"); SaveResult[] results = connection.create(new SObject[]{obj}); for (SaveResult result : results) { log.info("{} {} {}", result.getId(), result.getSuccess(), result.getErrors()); } } }