はじめに
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
[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
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接続用の設定を追加します。
[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');
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接続用の設定を追加します。
[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
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]$
以上になります。