
SalesforceをJavaScriptで操作しよう!(JSforceによるクエリでIN句を表現する)
この記事は公開されてから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に慣れた人にとってはかなり便利に使えるライブラリですので、おすすめですー。






