JSforce で Salesforce の複合項目を扱う

2023.01.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。

Salesforceのオブジェクトにおけるフィールドには「複合項目」という特殊なフィールドがあります。

例えば住所のデータは複合項目として構造化されたデータとして格納されています。ざっくりとしたイメージとしては以下のような感じです。

Address
┣ Country
┣ State
┣ City
…
┗ PostalCode

この「複合項目」を「JSforce」で取得する際に、どうのようにデータを扱えばよいかを簡単に説明したいと思います。

JSforceのAPIについて

JSforceのAPI機能は、こちらのドキュメントから実際に動作を確認することができます。当エントリでもこちらを利用しています。

複合項目を扱う

単純に複合項目を指定してクエリを発行する

まずは何も考えずに単純にクエリを投げて結果を見てみます。

conn.query("SELECT Id, Name, BillingAddress FROM Account", function(err, result) {
  console.log('Id:', result.records[0].Id)
  console.log('Name:', result.records[0].Name)
  console.log('BillingAddress:', result.records[0].BillingAddress)
});

すると、以下のように構造化されたデータが取得できることが分かります。

Id: 0015i000005GOgFAAW
Name: United Oil & Gas, Singapore
BillingAddress: {
    "city": "Singapore",
    "country": null,
    "geocodeAccuracy": null,
    "latitude": null,
    "longitude": null,
    "postalCode": null,
    "state": "Singapore",
    "street": "9 Tagore Lane\nSingapore, Singapore 787472\nSingapore"
}

このことから「住所項目はオブジェクトとして取得されている」ことが分かります。

例えばcityのみ取得したい場合には、以下のようにすれば良いことが分かります。

conn.query("SELECT Id, Name, BillingAddress FROM Account", function(err, result) {
  console.log('Id:', result.records[0].Id)
  console.log('Name:', result.records[0].Name)
  console.log('BillingAddressCity:', result.records[0].BillingAddress.city)
});
Id: 0015i000005GOgFAAW
Name: United Oil & Gas, Singapore
BillingAddressCity: Singapore

個別の項目を直接指定してクエリを発行する

次に、個別の項目を直接指定してクエリを発行してみます。ここではBillingCityをクエリで指定しています。

conn.query("SELECT Id, Name, BillingCity FROM Account", function(err, result) {
  console.log('Id:', result.records[0].Id)
  console.log('Name:', result.records[0].Name)
  console.log('BillingCity:', result.records[0].BillingCity)
});
Id: 0015i000005GOgFAAW
Name: United Oil & Gas, Singapore
BillingCity: Singapore

こちらの方法ではクエリで指定するフィールドは変わりますが、同様にデータを取得することができますね。他の項目を指定したい場合には、同様にBillingXXXを指定することになります。

まとめ

以上、JSforce で Salesforce の複合項目を扱ってみました。

複合項目のフィールドを指定してオブジェクトとして取得することもできますし、各項目フィールドを指定して取得することもできるので、利用用途に合わせてうまく使っていきたいです。

どなたかのお役に立てば幸いです。それでは!