From 66d4fe491147b5602a3434393c3fe49bbb78e5b9 Mon Sep 17 00:00:00 2001 From: Craig McElroy Date: Sat, 24 Apr 2021 12:25:30 -0500 Subject: [PATCH] :zap: Salesforce Case/Lead Owner - Add Queues to Owner picklist (#1689) --- .../nodes/Salesforce/CaseDescription.ts | 4 +- .../nodes/Salesforce/LeadDescription.ts | 4 +- .../nodes/Salesforce/Salesforce.node.ts | 64 +++++++++++++++++++ 3 files changed, 68 insertions(+), 4 deletions(-) diff --git a/packages/nodes-base/nodes/Salesforce/CaseDescription.ts b/packages/nodes-base/nodes/Salesforce/CaseDescription.ts index 381d5085fb..0c98360708 100644 --- a/packages/nodes-base/nodes/Salesforce/CaseDescription.ts +++ b/packages/nodes-base/nodes/Salesforce/CaseDescription.ts @@ -140,7 +140,7 @@ export const caseFields = [ name: 'owner', type: 'options', typeOptions: { - loadOptionsMethod: 'getUsers', + loadOptionsMethod: 'getCaseOwners', }, default: '', description: 'The owner of the case.', @@ -303,7 +303,7 @@ export const caseFields = [ name: 'owner', type: 'options', typeOptions: { - loadOptionsMethod: 'getUsers', + loadOptionsMethod: 'getCaseOwners', }, default: '', description: 'The owner of the case.', diff --git a/packages/nodes-base/nodes/Salesforce/LeadDescription.ts b/packages/nodes-base/nodes/Salesforce/LeadDescription.ts index 4f0c57d119..2bb553dfa1 100644 --- a/packages/nodes-base/nodes/Salesforce/LeadDescription.ts +++ b/packages/nodes-base/nodes/Salesforce/LeadDescription.ts @@ -251,7 +251,7 @@ export const leadFields = [ name: 'owner', type: 'options', typeOptions: { - loadOptionsMethod: 'getUsers', + loadOptionsMethod: 'getLeadOwners', }, default: '', description: 'The owner of the lead.', @@ -509,7 +509,7 @@ export const leadFields = [ name: 'owner', type: 'options', typeOptions: { - loadOptionsMethod: 'getUsers', + loadOptionsMethod: 'getLeadOwners', }, default: '', description: 'The owner of the lead.', diff --git a/packages/nodes-base/nodes/Salesforce/Salesforce.node.ts b/packages/nodes-base/nodes/Salesforce/Salesforce.node.ts index e558234f84..3bae184ef4 100644 --- a/packages/nodes-base/nodes/Salesforce/Salesforce.node.ts +++ b/packages/nodes-base/nodes/Salesforce/Salesforce.node.ts @@ -298,6 +298,70 @@ export class Salesforce implements INodeType { sortOptions(returnData); return returnData; }, + // Get all the users and case queues to display them to user so that he can + // select them easily + async getCaseOwners(this: ILoadOptionsFunctions): Promise { + const returnData: INodePropertyOptions[] = []; + const qsQueues = { + q: "SELECT Queue.Id, Queue.Name FROM QueuesObject where Queue.Type='Queue' and SobjectType = 'Case'", + }; + const queues = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qsQueues); + for (const queue of queues) { + const queueName = queue.Queue.Name; + const queueId = queue.Queue.Id; + returnData.push({ + name: `Queue: ${queueName}`, + value: queueId, + }); + } + const qsUsers = { + q: 'SELECT id, Name FROM User', + }; + const users = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qsUsers); + const userPrefix = returnData.length > 0 ? 'User: ' : ''; + for (const user of users) { + const userName = user.Name; + const userId = user.Id; + returnData.push({ + name: userPrefix + userName, + value: userId, + }); + } + sortOptions(returnData); + return returnData; + }, + // Get all the users and lead queues to display them to user so that he can + // select them easily + async getLeadOwners(this: ILoadOptionsFunctions): Promise { + const returnData: INodePropertyOptions[] = []; + const qsQueues = { + q: "SELECT Queue.Id, Queue.Name FROM QueuesObject where Queue.Type='Queue' and SobjectType = 'Lead'", + }; + const queues = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qsQueues); + for (const queue of queues) { + const queueName = queue.Queue.Name; + const queueId = queue.Queue.Id; + returnData.push({ + name: `Queue: ${queueName}`, + value: queueId, + }); + } + const qsUsers = { + q: 'SELECT id, Name FROM User', + }; + const users = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qsUsers); + const userPrefix = returnData.length > 0 ? 'User: ' : ''; + for (const user of users) { + const userName = user.Name; + const userId = user.Id; + returnData.push({ + name: userPrefix + userName, + value: userId, + }); + } + sortOptions(returnData); + return returnData; + }, // Get all the lead sources to display them to user so that he can // select them easily async getLeadSources(this: ILoadOptionsFunctions): Promise {