I wanted to write a node.js app to pull data from Salesforce. I found the NPM library jsforce. I added it to my packages in my package.json:
"dependencies": { "express": "*", "dotenv": "*", "jsforce": "*" }
I also added “dotenv” which I am using to load my client secret and all configuration data from a hidden .env file. This is not in my git repo, so I can have different values in production and development.
Here is what I have in my .env file:
CLIENTID=zWHRIM8F87FChMcfHpZKS9LhQeeLwfthDbaiL9iXNO7ZBwfUwFPFqpDzC2HruNkJfIxrOdeITtftxBg20WEIm CLIENTSECRET=123456789987654 REDIRECTURI=localhost [email protected] PASSWORD=PASSWORDANDCODE LOGINURL=https://sitename-dev-ed.my.salesforce.com
Here is the code to pull in the .env values, define the oauth2 connection and login.
var dotenv = require('dotenv').load(); var conn = new jsforce.Connection({ oauth2 : { loginUrl : process.env.LOGINURL, clientId : process.env.CLIENTID, clientSecret : process.env.CLIENTSECRET, redirectUri : process.env.REDIRECTURI } }); var username = process.env.USERNAME; var password = process.env.PASSWORD; conn.login(username, password, function(err, userInfo) { if (err) { return console.error(err); } console.log(conn.accessToken); console.log(conn.instanceUrl); console.log("User ID: " + userInfo.id); console.log("Org ID: " + userInfo.organizationId); });
Once connected and logged in, we can query using SOQL. This is a query to pull All Opportunities, their contacts and contact roles, and their team members and the team member roles. If that makes sense. I am using this query to show the relationships between Opportunities and their Contacts and team members using d3.js. More on that later.
var query = "SELECT Id, Name,(SELECT Contact.Name,Contact.Email,Contact.Id,Contact.AccountId,ContactId,Role,Contact.Account.Name FROM OpportunityContactRoles),(SELECT User.Name,User.Email,User.Id,UserId,TeamMemberRole FROM OpportunityTeamMembers) FROM Opportunity" conn.query(query, function(err, results) { if (err) { return console.error(err); } console.log("Query: " + results.totalSize) console.log(JSON.stringify(results, null, 2)) });
No comments yet.