20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.jsからSalesforce REST APIを実行する (カスタムオブジェクトへレコードを追加する)

Last updated at Posted at 2016-09-11

はじめに

Salesforceに対して、様々な操作を行えるSalesforce REST APIというものがあります。

Salesforce REST APIを使用する事で、Node.jsからSalesforceにレコードを追加したり、レコードを取得したりといった操作が可能です。

Node.jsからSalesforce REST APIを実行する事で、SalesforceのForce.comカスタムオブジェクトにレコードを追加するサンプルプログラムを記します。

また、Force.comカスタムオブジェクトに登録したレコード一覧を表示するサンプルプログラムも合わせて記します。

環境

Node.jsからSalesforce REST APIを呼び出す環境については、以下の手順を参考にして、AWS EC2インスタンス(Amazon Linux)で作成しました。また、EC2インスタンスからSalesforce REST APIを呼び出す為のSalesforce OAuth設定も以下をご参照下さい。

Node.jsからSalesforce REST APIの呼び出しについては、JSforceを使用させて頂きました。ありがとうございました。

https://jsforce.github.io/
https://github.com/jsforce/jsforce

EC2インスタンス(Amazon Linux)へのNode.jsとJSforceインストール

(1) EC2インスタンス(Amazon Linux)にNode.jsをインストールします。

[ec2-user@example-salesforce-api-test-nodejs ~]$ uname -a
Linux example-salesforce-api-test-nodejs 4.4.19-29.55.amzn1.x86_64 #1 SMP Mon Aug 29 23:29:40 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

[ec2-user@example-salesforce-api-test-nodejs ~]$ sudo yum install nodejs npm --enablerepo=epel

[ec2-user@example-salesforce-api-test-nodejs ~]$ npm --version
1.3.6
[ec2-user@example-salesforce-api-test-nodejs ~]$ node --version
v0.10.46
[ec2-user@example-salesforce-api-test-nodejs ~]$

(2) npmによりJSforceをインストールします。

今回の例では、レコード追加とレコード表示プログラムを各ディレクトリに作成していく事にします。

プログラム内容 作成するディレクトリ名
カスタムオブジェクトにレコードを追加するプログラム /home/ec2-user/insert_salesforce_api_test
カスタムオブジェクトのレコードを表示するプログラム /home/ec2-user/select_salesforce_api_test

カスタムオブジェクトへのレコード追加プログラムを保存するディレクトリを作成します。

[ec2-user@example-salesforce-api-test-nodejs ~]$ mkdir /home/ec2-user/insert_salesforce_api_test
[ec2-user@salesforce-api-test-nodejs ~]$ 

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ pwd
/home/ec2-user/insert_salesforce_api_test

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ npm install jsforce

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ npm install date-utils

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$

カスタムオブジェクトのレコード表示プログラムを保存するディレクトリを作成します。

[ec2-user@example-salesforce-api-test-nodejs ~]$ mkdir /home/ec2-user/select_salesforce_api_test
[ec2-user@example-salesforce-api-test-nodejs ~]$ 

[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ pwd
/home/ec2-user/select_salesforce_api_test

[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ npm install jsforce

[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ npm install date-utils

[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$

Node.jsからSalesforce REST APIを実行してカスタムオブジェクトにレコードを追加する

Node.jsからSalesforce REST APIを呼び出し、カスタムオブジェクトにレコードを追加します。

Force.comカスタムオブジェク「テストオブジェクト」(例としてオブジェクト名が QuickStart__c であるとします)にレコードを追加するNode.jsプログラムを作成します。

これを実行すると、カスタムオブジェクトにレコードを追加出来ます。

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ pwd
/home/ec2-user/insert_salesforce_api_test
[ec2-user@salesforce-api-test-nodejs insert_salesforce_api_test]$ vi /home/ec2-user/insert_salesforce_api_test/index.js
/home/ec2-user/insert_salesforce_api_test/index.js
[ec2-user@salesforce-api-test-nodejs insert_salesforce_api_test]$ cat /home/ec2-user/insert_salesforce_api_test/index.js
require('date-utils');
var jsforce = require('jsforce');

// Salesforce REST APIエンドポイント
//// Sandbox環境へ接続する場合のAPIエンドポイント
//var oauth_login_url = 'https://test.salesforce.com';
//// 本番環境へ接続する場合のAPIエンドポイント
var oauth_login_url = 'https://login.salesforce.com';

// Salesforce REST APIで接続するアプリケーションの「コンシューマ鍵」を設定する
var oauth_client_id = '3MV*******************************************************************************THF';

// Salesforce REST API接続用のSalesforceユーザ名を設定する
var oauth_client_username = 'example_salesforce_api_user@hoge.example.com';

//  Salesforce REST APIで接続するアプリケーションの「コンシューマの秘密」を設定する
var oauth_client_secret = '19***************84';

// Salesforce REST API接続用のSalesforceユーザのパスワードを設定する
var oauth_client_authenticate_password = '*************';

var sobject_name = 'QuickStart__c';

// Salesforce REST APIへ接続する時の「コンシューマ鍵」(OAuthコンシューマキー等)をセットする
var conn = new jsforce.Connection({
  oauth2 : {
    loginUrl : oauth_login_url,
    clientId : oauth_client_id,
    clientSecret : oauth_client_secret
  }
});

// カスタムオブジェクトへ追加するデータをセット
var date = new Date();
var insert_time = date.toFormat("YYYYMMDD_HH24MISS");
var insert_name = "testname_Node_" + insert_time;
var insert_email = insert_name + "@hoge.example.com";
var create_date = date.toFormat("YYYY-MM-DD");

var insert_record = {
  user_name__c: insert_name,
  user_email__c: insert_email,
  create_date__c: create_date
};

console.log("Salesforce REST API Insert Record");
console.log(insert_record);

// Salesforce REST APIへ接続する
conn.login( oauth_client_username, oauth_client_authenticate_password, function(err, res) {
  if (err) { return console.error(err); }

  // SalesForce REST APIを実行してカスタムオブジェクトへレコードを追加する
  conn.sobject( sobject_name ).create( insert_record, function(err, res) {
    if (err) { return console.error(err); }
    console.log(res);
  });
});

Node.jsプログラムを実行すると、Force.comカスタムオブジェクトにレコードを追加出来ます。

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ pwd
/home/ec2-user/insert_salesforce_api_test

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ node /home/ec2-user/insert_salesforce_api_test/index.js
SalesForce REST API Insert Record
{ user_name__c: 'testname_Node_20160912_020629',
  user_email__c: 'testname_Node_20160912_020629@hoge.example.com',
  create_date__c: '2016-09-12' }
{ id: 'a032800000GB179AAD', success: true, errors: [] }
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$

Node.jsからSalesforce REST APIを実行してカスタムオブジェクトのレコードを表示する

Node.jsからSalesforce REST APIを呼び出し、カスタムオブジェクトのレコードを表示します。

Force.comカスタムオブジェク「テストオブジェクト」(例としてオブジェクト名が QuickStart__c であるとします)に登録されているレコードを表示するNode.jsプログラムを作成します。

これを実行すると、カスタムオブジェクトのレコードを表示出来ます。

[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ pwd
/home/ec2-user/select_salesforce_api_test
[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ vi /home/ec2-user/select_salesforce_api_test/index.js
/home/ec2-user/select_salesforce_api_test/index.js
var jsforce = require('jsforce');

// Salesforce REST APIエンドポイント
//// Sandbox環境へ接続する場合のAPIエンドポイント
//var oauth_login_url = 'https://test.salesforce.com';
//// 本番環境へ接続する場合のAPIエンドポイント
var oauth_login_url = 'https://login.salesforce.com';

// Salesforce REST APIで接続するアプリケーションの「コンシューマ鍵」を設定する
var oauth_client_id = '3MV*******************************************************************************THF';

// Salesforce REST API接続用のSalesforceユーザ名を設定する
var oauth_client_username = 'example_salesforce_api_user@hoge.example.com';

//  Salesforce REST APIで接続するアプリケーションの「コンシューマの秘密」を設定する
var oauth_client_secret = '19***************84';

// Salesforce REST API接続用のSalesforceユーザのパスワードを設定する
var oauth_client_authenticate_password = '*************';

// Salesforce カスタムオブジェクトに対して実行するSOQLを設定する
var sobject_name = 'QuickStart__c';
var soql = 'SELECT user_name__c, user_email__c, create_date__c FROM ' + sobject_name;

// Salesforce REST APIへ接続する時の「コンシューマ鍵」(OAuthコンシューマキー等)をセットする
var conn = new jsforce.Connection({
  oauth2 : {
    loginUrl : oauth_login_url,
    clientId : oauth_client_id,
    clientSecret : oauth_client_secret
  }
});

console.log("Salesforce REST API Test SELECT SOQL [" + soql + "]");

// Salesforce REST APIへ接続する
conn.login( oauth_client_username, oauth_client_authenticate_password, function(err, res) {
  if (err) { return console.error(err); }

  // Salesforce REST APIを実行してカスタムオブジェクトへレコードを追加する
  conn.query( soql, function(err, res) {
    if (err) { return console.error(err); }
    console.log(res);
  });
});

Node.jsプログラムを実行すると、Force.comカスタムオブジェクトに登録されているレコードを表示出来ます。

[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ node /home/ec2-user/select_salesforce_api_test/index.js
SalesForce REST API Test SELECT SOQL [SELECT user_name__c, user_email__c, create_date__c FROM QuickStart__c]
{ totalSize: 29,
  done: true,
  records:
   [ { attributes: [Object],
       user_name__c: 'テスト太郎',
       user_email__c: 'test.tarou@example.com',
       create_date__c: null },
     { attributes: [Object],
       user_name__c: 'テスト次郎',
       user_email__c: 'test.jirou@example.com',
       create_date__c: null },

 (中略)

     { attributes: [Object],
       user_name__c: 'testname_Node_20160912_020629',
       user_email__c: 'testname_Node_20160912_020629@hoge.example.com',
       create_date__c: '2016-09-12' },
     { attributes: [Object],
       user_name__c: 'testname_Node_20160912_015615',
       user_email__c: 'testname_Node_20160912_015615@hoge.example.com',
       create_date__c: '2016-09-12' },
     { attributes: [Object],
       user_name__c: 'SalesForce APIテスト',
       user_email__c: 'example@hoge.example.com',
       create_date__c: '2016-09-07' } ] }
[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$

Node.jsからSalesforce REST APIを実行してカスタムオブジェクトにレコードを追加する (Salesforce REST APIクレデンシャルを.bashrcの環境変数から取得する例)

.bashrcの環境変数にSalesforce REST API接続用の設定(APIクレデンシャル)を追加しておく事で、Node.jsでSalesforce REST APIを実行する際、環境変数からAPIクレデンシャルを取得して、Salesforce REST APIを実行させる事も可能です。

まず.bashrcにSalesforce REST API接続用の設定を追加します。

/home/ec2-user/.bashrc
[ec2-user@salesforce-api-test ~]$ vi /home/ec2-user/.bashrc
 (末尾に以下を追加する)

### Sandbox環境へ接続する場合のAPIエンドポイント
##export DATABASEDOTCOM_HOST="test.salesforce.com"
### 本番環境へ接続する場合のAPIエンドポイント
export DATABASEDOTCOM_HOST="login.salesforce.com"

export DATABASEDOTCOM_CLIENT_ID="前述の「コンシューマ鍵」(OAuthコンシューマキー)を記載します。"
export DATABASEDOTCOM_CLIENT_SECRET="前述の「コンシューマの秘密」(OAuthコンシューマシークレット)を記載します。"
export DATABASEDOTCOM_CLIENT_USERNAME="APIを有効化しているSalesforceユーザアカウント名を記載します。"
export DATABASEDOTCOM_CLIENT_AUTHENTICATE_PASSWORD="APIを有効化しているSalesforceユーザアカウントのパスワードを記載します。"

.bashrcに追加した環境変数を読み込みます。

[ec2-user@example-salesforce-api-test-nodejs ~]$ source /home/ec2-user/.bashrc
[ec2-user@example-salesforce-api-test-nodejs ~]$ 

Node.jsで.bashrcから環境変数からAPIクレデンシャルを取得する場合、以下のプログラムに変更します。

ec2-user@example-salesforce-api-test-nodejs ~]$ cd insert_salesforce_api_test/
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ pwd
/home/ec2-user/insert_salesforce_api_test
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ vi /home/ec2-user/insert_salesforce_api_test/index.js
require('date-utils');
/home/ec2-user/insert_salesforce_api_test/index.js
var jsforce = require('jsforce');

// Salesforce REST APIエンドポイント
var oauth_login_url = 'https://' + process.env.DATABASEDOTCOM_HOST;

// Salesforce REST APIで接続するアプリケーションの「コンシューマ鍵」を設定する
var oauth_client_id = process.env.DATABASEDOTCOM_CLIENT_ID;

// Salesforce REST API接続用のSalesforceユーザ名を設定する
var oauth_client_username = process.env.DATABASEDOTCOM_CLIENT_USERNAME;

//  Salesforce REST APIで接続するアプリケーションの「コンシューマの秘密」を設定する
var oauth_client_secret = process.env.DATABASEDOTCOM_CLIENT_SECRET;

// Salesforce REST API接続用のSalesforceユーザのパスワードを設定する
var oauth_client_authenticate_password = process.env.DATABASEDOTCOM_CLIENT_AUTHENTICATE_PASSWORD;

var sobject_name = 'QuickStart__c';

// Salesforce REST APIへ接続する時の「コンシューマ鍵」(OAuthコンシューマキー等)をセットする
var conn = new jsforce.Connection({
  oauth2 : {
    loginUrl : oauth_login_url,
    clientId : oauth_client_id,
    clientSecret : oauth_client_secret
  }
});

// カスタムオブジェクトへ追加するデータをセット
var date = new Date();
var insert_time = date.toFormat("YYYYMMDD_HH24MISS");
var insert_name = "testname_Node_" + insert_time;
var insert_email = insert_name + "@hoge.example.com";
var create_date = date.toFormat("YYYY-MM-DD");

var insert_record = {
  user_name__c: insert_name,
  user_email__c: insert_email,
  create_date__c: create_date
};

console.log("Salesforce REST API Insert Record");
console.log(insert_record);

// Salesforce REST APIへ接続する
conn.login( oauth_client_username, oauth_client_authenticate_password, function(err, res) {
  if (err) { return console.error(err); }

  // Salesforce REST APIを実行してカスタムオブジェクトへレコードを追加する
  conn.sobject( sobject_name ).create( insert_record, function(err, res) {
    if (err) { return console.error(err); }
    console.log(res);
  });
}); 

Node.jsプログラムを実行すると、Force.comカスタムオブジェクトにレコードを追加出来ます。

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ pwd
/home/ec2-user/insert_salesforce_api_test
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ 
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ node /home/ec2-user/insert_salesforce_api_test/index.js
Salesforce REST API Insert Record
{ user_name__c: 'testname_Node_20170311_123050',
  user_email__c: 'testname_Node_20170311_123050@hoge.example.com',
  create_date__c: '2017-03-11' }
{ id: 'a032800000QEaALAA1', success: true, errors: [] }
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ 

Node.jsからSalesforce REST APIを実行してカスタムオブジェクトのレコードを表示する (Salesforce REST APIクレデンシャルを.bashrcの環境変数から取得する例)

.bashrcの環境変数にSalesforce REST API接続用の設定(APIクレデンシャル)を追加しておく事で、Node.jsでSalesforce REST APIを実行する際、環境変数からAPIクレデンシャルを取得して、Salesforce REST APIを実行させる事も可能です。

まず.bashrcにSalesforce REST API接続用の設定を追加します。

/home/ec2-user/.bashrc
[ec2-user@salesforce-api-test ~]$ vi /home/ec2-user/.bashrc
 (末尾に以下を追加する)

### Sandbox環境へ接続する場合のAPIエンドポイント
##export DATABASEDOTCOM_HOST="test.salesforce.com"
### 本番環境へ接続する場合のAPIエンドポイント
export DATABASEDOTCOM_HOST="login.salesforce.com"

export DATABASEDOTCOM_CLIENT_ID="前述の「コンシューマ鍵」(OAuthコンシューマキー)を記載します。"
export DATABASEDOTCOM_CLIENT_SECRET="前述の「コンシューマの秘密」(OAuthコンシューマシークレット)を記載します。"
export DATABASEDOTCOM_CLIENT_USERNAME="APIを有効化しているSalesforceユーザアカウント名を記載します。"
export DATABASEDOTCOM_CLIENT_AUTHENTICATE_PASSWORD="APIを有効化しているSalesforceユーザアカウントのパスワードを記載します。"

.bashrcに追加した環境変数を読み込みます。

[ec2-user@example-salesforce-api-test-nodejs ~]$ source /home/ec2-user/.bashrc
[ec2-user@example-salesforce-api-test-nodejs ~]$ 

Node.jsで.bashrcから環境変数からAPIクレデンシャルを取得する場合、以下のプログラムに変更します。

[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ cd ~
[ec2-user@example-salesforce-api-test-nodejs ~]$ 
[ec2-user@example-salesforce-api-test-nodejs ~]$ cd insert_salesforce_api_test/
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ pwd
/home/ec2-user/insert_salesforce_api_test
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ 
[ec2-user@example-salesforce-api-test-nodejs insert_salesforce_api_test]$ vi /home/ec2-user/insert_salesforce_api_test/index.js
/home/ec2-user/insert_salesforce_api_test/index.js
var jsforce = require('jsforce');
 
// Salesforce REST APIエンドポイント
var oauth_login_url = 'https://' + process.env.DATABASEDOTCOM_HOST;

// Salesforce REST APIで接続するアプリケーションの「コンシューマ鍵」を設定する
var oauth_client_id = process.env.DATABASEDOTCOM_CLIENT_ID;

// Salesforce REST API接続用のSalesforceユーザ名を設定する
var oauth_client_username = process.env.DATABASEDOTCOM_CLIENT_USERNAME;

//  Salesforce REST APIで接続するアプリケーションの「コンシューマの秘密」を設定する
var oauth_client_secret = process.env.DATABASEDOTCOM_CLIENT_SECRET;

// Salesforce REST API接続用のSalesforceユーザのパスワードを設定する
var oauth_client_authenticate_password = process.env.DATABASEDOTCOM_CLIENT_AUTHENTICATE_PASSWORD;

// Salesforce カスタムオブジェクトに対して実行するSOQLを設定する
var sobject_name = 'QuickStart__c';
var soql = 'SELECT user_name__c, user_email__c, create_date__c FROM ' + sobject_name;

// Salesforce REST APIへ接続する時の「コンシューマ鍵」(OAuthコンシューマキー等)をセットする
var conn = new jsforce.Connection({
  oauth2 : {
    loginUrl : oauth_login_url,
    clientId : oauth_client_id,
    clientSecret : oauth_client_secret
  }
});

console.log("Salesforce REST API Test SELECT SOQL [" + soql + "]");

// Salesforce REST APIへ接続する
conn.login( oauth_client_username, oauth_client_authenticate_password, function(err, res) {
  if (err) { return console.error(err); }

  // Salesforce REST APIを実行してカスタムオブジェクトへレコードを追加する
  conn.query( soql, function(err, res) {
    if (err) { return console.error(err); }
    console.log(res);
  });
});

Node.jsプログラムを実行すると、Force.comカスタムオブジェクトに登録されているレコードを表示出来ます。

[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ pwd
/home/ec2-user/select_salesforce_api_test
[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ node /home/ec2-user/select_salesforce_api_test/index.js
SalesForce REST API Test SELECT SOQL [SELECT user_name__c, user_email__c, create_date__c FROM QuickStart__c]
{ totalSize: 62,
  done: true,
  records: 
   [ { attributes: [Object],
       user_name__c: 'テスト太郎',
       user_email__c: 'test.tarou@example.com',
       create_date__c: null },
     { attributes: [Object],
       user_name__c: 'テスト次郎',
       user_email__c: 'test.jirou@example.com',
       create_date__c: null },

 (出力結果長いので中略)

       user_name__c: 'testname_Node_20170311_114546',
       user_email__c: 'testname_Node_20170311_114546@hoge.example.com',
       create_date__c: '2017-03-11' },
     { attributes: [Object],
       user_name__c: 'testname_Node_20170311_122616',
       user_email__c: 'testname_Node_20170311_122616@hoge.example.com',
       create_date__c: '2017-03-11' } ] }
[ec2-user@example-salesforce-api-test-nodejs select_salesforce_api_test]$ 

以上になります。

20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?