使用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。

这次的例子中,我决定在每个目录中创建添加记录和显示记录的程序。

プログラム内容作成するディレクトリ名カスタムオブジェクトにレコードを追加するプログラム/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,并将记录添加到自定义对象中。

创建一个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]$ 

这就是以上的内容。

广告
将在 10 秒后关闭
bannerAds