この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
SalesforceのオブジェクトをIN句で検索する
Salesforceのレコード検索に用いるSOQL(Salesforce Object Query Language)では、次のようにIN句を使ってレコードを絞り込むことができます。
/* 名前(Name)がA社、B社、C社のいずれかにマッチする取引先だけ取得する */
List<String> names = new List<String>{'A社', 'B社', 'C社'};
List<Account> accounts = [SELECT Id, Name, CreatedDate FROM Account WHERE Name IN :names];
System.debug(accounts);
JSforceはJavaScriptからSalesforceのAPIにアクセスするライブラリです。
このJSforceで先述のIN句を使うためには次のようにします。
const names = ['A社', 'B社', 'C社']
const accounts = []
conn
.sobject("Account")
.find({
'Name': { $in: names }
}, ['Id', 'Name', 'CreatedDate'])
.on("record", (record) => {
accounts.push(record)
})
.on("end", () => {
})
.on("error", (err) => {
console.error(err)
})
.run({ autoFetch : true, maxFetch : 100 })
この例だと、3つ(A社、B社、C社)しか選択肢がないので、あまり有り難みがわかりませんが、何百、何千件という要素のListをIN句に渡したいときに便利です。直にSOQLを構築するやり方だと、SOQLの長さ制限に引っかかってしまいますので。
SOQL と SOSL の制限 | Salesforce の制限クイックリファレンスガイド | Salesforce Developers
IN句以外にもいろいろあります
IN句の他にも、LIKEや比較演算子(<, <=, >, >=)も使えます。
conn.sobject("Contact")
.find({
LastName: { $like : 'A%' },
CreatedDate: { $gte : jsforce.Date.YESTERDAY },
'Account.Name': { $in ['クラスメソッド株式会社', 'アノテーション株式会社'] }
}, [ 'Id', 'Name', 'CreatedDate' ])
.execute(function(err, records) {
if (err) { return console.error(err) }
console.log("fetched : " + records.length)
console.log(JSON.stringify(records, null, 2))
})
この例では、親の取引先名が「クラスメソッド株式会社」か「アノテーション株式会社」で、名字がAで始まる、昨日以降に作られた取引先責任者を取得しています。
現在、サポートしているのは次のオペレータのようです。
オペレータ | 作用 |
---|---|
$ne | != (not equal) |
$lt | < (less than) |
$lt | <= (less than equal) |
$gt | > (grater than) |
$gte | >= (grater than equal) |
$in | IN |
$nin | NOT IN |
$like | LIKE |
$exists | EXISTS |
JSforceの何が嬉しい?何が便利?
この他にもJSforceを使うと
- レコードのCRUD(Create, Retrieve, Update, Upsert, Destroy)が可能
- Metadataを扱える
- Apex REST APIをコールできる
- Bulk処理ができる
などが簡単にできますので、次のようなメリット、便利さがあります。
- JavaScript、Node.js、Visualforce、コマンドラインから簡単にSalesforce APIを実行できる
- 特にコマンドラインから使えるちょっとしたツールを作るのに便利
- 私が過去に作ったことのある具体例
- 組織のAccount、Contact、Leadなどの重複を調べるツール
- 組織の重複レコードをマージするツール
- 組織から取り出した情報で他のAPIのPATCHを呼び出して、更新をかけるツール
- 私が過去に作ったことのある具体例
- React Nativeなど、アプリからSalesforce APIを呼び出すことにも使える
JavaScriptに慣れた人にとってはかなり便利に使えるライブラリですので、おすすめですー。