使用Node.js调用Salesforce REST API执行操作(向自定义对象添加记录)
首先
在Salesforce中,有一个名为Salesforce REST API的工具,可以对其进行各种操作。
使用Salesforce的REST API可以在Node.js中进行操作,如添加记录或获取记录。
我会在以下的示例程序中记录使用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设置。
我们使用JSforce来调用Salesforce REST API,非常感谢您提供的支持。
https://jsforce.github.io/ 可將連結嵌入網頁中介的工具
https://github.com/jsforce/jsforce 一個關於jsforce的GitHub儲存庫
安装 Node.js 和 JSforce 到 EC2 实例(Amazon Linux)上。
(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 ~]$
通过npm安装JSforce。
这次的例子中,我决定在每个目录中创建添加记录和显示记录的程序。
创建一个保存自定义对象的记录添加程序的目录。
[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,并将记录添加到自定义对象中。
创建一个Node.js程序,用于向Force.com自定义对象”测试对象”(例如,假设对象名为QuickStart__c)添加记录。
当执行此操作时,您可以向自定义对象添加记录。
[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,并显示自定义对象的记录。
创建一个 Node.js 程序来显示已注册在 Force.com 自定义对象「测试对象」中的记录(例如,假设对象名称为 QuickStart__c)。
执行此操作,您可以显示自定义对象的记录。
[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中执行,并显示自定义对象的记录(例如,从.bashrc环境变量中获取Salesforce REST API凭证的示例)。
可以通过将Salesforce REST API连接的设置(API凭据)添加到.bashrc环境变量中,在使用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 ~]$
如果需要从.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]$
这就是以上的内容。