mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-26 05:04:05 -08:00
c972f3dd50
* Added logging to n8n This commit adds logging to n8n using the Winston library. For now, this commit only allows logging to console (default behavior) or file (need to pass in config via environment variables). Other logging methods can be further implemented using hooks. These were skipped for now as it would require adding more dependencies. Logging level is notice by default, meaning no additional messages would be displayed at the moment. Logging level can be set to info or debug as well to enrich the generated logs. The ILogger interface was added to the workflow project as it would make it available for all other projects but the implementation was done on the cli project. * Lint fixes and logging level naming. Also fixed the way we use the logger as it was not working previously * Improvements to logging framework Using appropriate single quotes Improving the way the logger is declared * Improved naming for Log Types * Removed logger global variable, replacing it by a proxy * Add logging to CLI commands * Remove unused GenericHelpers * Changed back some messages to console instead of logger and added npm shortcuts for worker and webhook * Fix typos * Adding basic file rotation to logs as suggested by @mutdmour * Fixed linting issues * Correcting comment to correctly reflect space usage * Added settings for log files rotation * Correcting config type from String to Number * Changed default file settings to number To reflect previous changes to the type * Changed the way log messages are added to be called statically. Also minor naming improvements * Applying latest corrections sent by @ivov * ⚡ Some logging improvements * Saving logs to a folder inside n8n home instead of root * Fixed broken tests and linting * Changed some log messages to improve formatting * Adding quotes to names on log messages * Added execution and session IDs to logs. Also removed unnecessary line breaks * ⚡ Added file caller to log messages (#1657) This is done using callsites library which already existed in the project as another library's dependency. So in fact it does not add any new dependency. * Adding logs to help debug Salesforce node * ⚡ Add function name to logs and add more logs * ⚡ Improve some error messages * ⚡ Improve some more log messages * ⚡ Rename logging env variables to match others Co-authored-by: dali <servfrdali@yahoo.fr> Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
2502 lines
96 KiB
TypeScript
2502 lines
96 KiB
TypeScript
import {
|
|
IExecuteFunctions,
|
|
} from 'n8n-core';
|
|
|
|
import {
|
|
IDataObject,
|
|
ILoadOptionsFunctions,
|
|
INodeExecutionData,
|
|
INodePropertyOptions,
|
|
INodeType,
|
|
INodeTypeDescription,
|
|
NodeApiError,
|
|
NodeOperationError,
|
|
} from 'n8n-workflow';
|
|
|
|
import {
|
|
accountFields,
|
|
accountOperations,
|
|
} from './AccountDescription';
|
|
|
|
import {
|
|
IAccount,
|
|
} from './AccountInterface';
|
|
|
|
import {
|
|
attachmentFields,
|
|
attachmentOperations,
|
|
} from './AttachmentDescription';
|
|
|
|
import {
|
|
IAttachment,
|
|
} from './AttachmentInterface';
|
|
|
|
import {
|
|
ICampaignMember,
|
|
} from './CampaignMemberInterface';
|
|
|
|
import {
|
|
caseFields,
|
|
caseOperations,
|
|
} from './CaseDescription';
|
|
|
|
import {
|
|
ICase,
|
|
ICaseComment,
|
|
} from './CaseInterface';
|
|
|
|
import {
|
|
contactFields,
|
|
contactOperations,
|
|
} from './ContactDescription';
|
|
|
|
import {
|
|
IContact,
|
|
} from './ContactInterface';
|
|
|
|
import {
|
|
customObjectFields,
|
|
customObjectOperations,
|
|
} from './CustomObjectDescription';
|
|
|
|
import {
|
|
flowFields,
|
|
flowOperations,
|
|
} from './FlowDescription';
|
|
|
|
import {
|
|
getQuery,
|
|
salesforceApiRequest,
|
|
salesforceApiRequestAllItems,
|
|
sortOptions,
|
|
} from './GenericFunctions';
|
|
|
|
import {
|
|
leadFields,
|
|
leadOperations,
|
|
} from './LeadDescription';
|
|
|
|
import {
|
|
ILead,
|
|
} from './LeadInterface';
|
|
|
|
import {
|
|
INote,
|
|
} from './NoteInterface';
|
|
|
|
import {
|
|
opportunityFields,
|
|
opportunityOperations,
|
|
} from './OpportunityDescription';
|
|
|
|
import {
|
|
IOpportunity,
|
|
} from './OpportunityInterface';
|
|
|
|
import {
|
|
searchFields,
|
|
searchOperations,
|
|
} from './SearchDescription';
|
|
|
|
import {
|
|
taskFields,
|
|
taskOperations,
|
|
} from './TaskDescription';
|
|
|
|
import {
|
|
ITask,
|
|
} from './TaskInterface';
|
|
|
|
import {
|
|
userFields,
|
|
userOperations,
|
|
} from './UserDescription';
|
|
|
|
import {
|
|
LoggerProxy as Logger,
|
|
} from 'n8n-workflow';
|
|
|
|
export class Salesforce implements INodeType {
|
|
description: INodeTypeDescription = {
|
|
displayName: 'Salesforce',
|
|
name: 'salesforce',
|
|
icon: 'file:salesforce.svg',
|
|
group: ['output'],
|
|
version: 1,
|
|
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
description: 'Consume Salesforce API',
|
|
defaults: {
|
|
name: 'Salesforce',
|
|
color: '#429fd9',
|
|
},
|
|
inputs: ['main'],
|
|
outputs: ['main'],
|
|
credentials: [
|
|
{
|
|
name: 'salesforceOAuth2Api',
|
|
required: true,
|
|
displayOptions: {
|
|
show: {
|
|
authentication: [
|
|
'oAuth2',
|
|
],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: 'salesforceJwtApi',
|
|
required: true,
|
|
displayOptions: {
|
|
show: {
|
|
authentication: [
|
|
'jwt',
|
|
],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
properties: [
|
|
{
|
|
displayName: 'Authentication',
|
|
name: 'authentication',
|
|
type: 'options',
|
|
options: [
|
|
{
|
|
name: 'OAuth2',
|
|
value: 'oAuth2',
|
|
},
|
|
{
|
|
name: 'OAuth2 JWT',
|
|
value: 'jwt',
|
|
},
|
|
],
|
|
default: 'oAuth2',
|
|
description: 'OAuth Authorization Flow',
|
|
},
|
|
{
|
|
displayName: 'Resource',
|
|
name: 'resource',
|
|
type: 'options',
|
|
options: [
|
|
{
|
|
name: 'Account',
|
|
value: 'account',
|
|
description: 'Represents an individual account, which is an organization or person involved with your business (such as customers, competitors, and partners).',
|
|
},
|
|
{
|
|
name: 'Attachment',
|
|
value: 'attachment',
|
|
description: 'Represents a file that a has uploaded and attached to a parent object.',
|
|
},
|
|
{
|
|
name: 'Case',
|
|
value: 'case',
|
|
description: 'Represents a case, which is a customer issue or problem.',
|
|
},
|
|
{
|
|
name: 'Contact',
|
|
value: 'contact',
|
|
description: 'Represents a contact, which is an individual associated with an account.',
|
|
},
|
|
{
|
|
name: 'Custom Object',
|
|
value: 'customObject',
|
|
description: 'Represents a custom object.',
|
|
},
|
|
{
|
|
name: 'Flow',
|
|
value: 'flow',
|
|
description: 'Represents an autolaunched flow.',
|
|
},
|
|
{
|
|
name: 'Lead',
|
|
value: 'lead',
|
|
description: 'Represents a prospect or potential.',
|
|
},
|
|
{
|
|
name: 'Opportunity',
|
|
value: 'opportunity',
|
|
description: 'Represents an opportunity, which is a sale or pending deal.',
|
|
},
|
|
{
|
|
name: 'Search',
|
|
value: 'search',
|
|
description: 'Search records',
|
|
},
|
|
{
|
|
name: 'Task',
|
|
value: 'task',
|
|
description: 'Represents a business activity such as making a phone call or other to-do items. In the user interface, and records are collectively referred to as activities.',
|
|
},
|
|
{
|
|
name: 'User',
|
|
value: 'user',
|
|
description: 'Represents a person, which is one user in system.',
|
|
},
|
|
],
|
|
default: 'lead',
|
|
description: 'Resource to consume.',
|
|
},
|
|
...leadOperations,
|
|
...leadFields,
|
|
...contactOperations,
|
|
...contactFields,
|
|
...customObjectOperations,
|
|
...customObjectFields,
|
|
...opportunityOperations,
|
|
...opportunityFields,
|
|
...accountOperations,
|
|
...accountFields,
|
|
...searchOperations,
|
|
...searchFields,
|
|
...caseOperations,
|
|
...caseFields,
|
|
...taskOperations,
|
|
...taskFields,
|
|
...attachmentOperations,
|
|
...attachmentFields,
|
|
...userOperations,
|
|
...userFields,
|
|
...flowOperations,
|
|
...flowFields,
|
|
],
|
|
};
|
|
|
|
methods = {
|
|
loadOptions: {
|
|
// Get all the lead statuses to display them to user so that he can
|
|
// select them easily
|
|
async getLeadStatuses(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
const qs = {
|
|
q: 'SELECT id, MasterLabel FROM LeadStatus',
|
|
};
|
|
const statuses = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
for (const status of statuses) {
|
|
const statusName = status.MasterLabel;
|
|
const statusId = status.Id;
|
|
returnData.push({
|
|
name: statusName,
|
|
value: statusId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the users to display them to user so that he can
|
|
// select them easily
|
|
async getUsers(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
const qs = {
|
|
q: 'SELECT id, Name FROM User',
|
|
};
|
|
const users = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
for (const user of users) {
|
|
const userName = user.Name;
|
|
const userId = user.Id;
|
|
returnData.push({
|
|
name: userName,
|
|
value: userId,
|
|
});
|
|
}
|
|
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<INodePropertyOptions[]> {
|
|
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<INodePropertyOptions[]> {
|
|
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<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/lead/describe');
|
|
|
|
for (const field of fields) {
|
|
if (field.name === 'LeadSource') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the lead custom fields to display them to user so that he can
|
|
// select them easily
|
|
async getCustomFields(this: ILoadOptionsFunctions): Promise < INodePropertyOptions[] > {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
const resource = this.getNodeParameter('resource', 0) as string;
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/${resource}/describe`);
|
|
|
|
for (const field of fields) {
|
|
if (field.custom === true) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the accounts to display them to user so that he can
|
|
// select them easily
|
|
async getAccounts(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
const qs = {
|
|
q: 'SELECT id, Name FROM Account',
|
|
};
|
|
const accounts = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
for (const account of accounts) {
|
|
const accountName = account.Name;
|
|
const accountId = account.Id;
|
|
returnData.push({
|
|
name: accountName,
|
|
value: accountId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the campaigns to display them to user so that he can
|
|
// select them easily
|
|
async getCampaigns(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
const qs = {
|
|
q: 'SELECT id, Name FROM Campaign',
|
|
};
|
|
const campaigns = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
for (const campaign of campaigns) {
|
|
const campaignName = campaign.Name;
|
|
const campaignId = campaign.Id;
|
|
returnData.push({
|
|
name: campaignName,
|
|
value: campaignId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the stages to display them to user so that he can
|
|
// select them easily
|
|
async getStages(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/opportunity/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'StageName') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the stages to display them to user so that he can
|
|
// select them easily
|
|
async getAccountTypes(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/account/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Type') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the account sources to display them to user so that he can
|
|
// select them easily
|
|
async getAccountSources(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/account/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'AccountSource') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the case types to display them to user so that he can
|
|
// select them easily
|
|
async getCaseTypes(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/case/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Type') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the case statuses to display them to user so that he can
|
|
// select them easily
|
|
async getCaseStatuses(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/case/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Status') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the case reasons to display them to user so that he can
|
|
// select them easily
|
|
async getCaseReasons(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/case/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Reason') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the case origins to display them to user so that he can
|
|
// select them easily
|
|
async getCaseOrigins(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/case/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Origin') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the case priorities to display them to user so that he can
|
|
// select them easily
|
|
async getCasePriorities(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/case/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Priority') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the task statuses to display them to user so that he can
|
|
// select them easily
|
|
async getTaskStatuses(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/task/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Status') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the task subjects to display them to user so that he can
|
|
// select them easily
|
|
async getTaskSubjects(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/task/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Subject') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the task call types to display them to user so that he can
|
|
// select them easily
|
|
async getTaskCallTypes(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/task/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'CallType') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the task call priorities to display them to user so that he can
|
|
// select them easily
|
|
async getTaskPriorities(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/task/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'Priority') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the task recurrence types to display them to user so that he can
|
|
// select them easily
|
|
async getTaskRecurrenceTypes(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/task/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'RecurrenceType') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the task recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getTaskRecurrenceInstances(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', '/sobjects/task/describe');
|
|
for (const field of fields) {
|
|
if (field.name === 'RecurrenceInstance') {
|
|
for (const pickValue of field.picklistValues) {
|
|
const pickValueName = pickValue.label;
|
|
const pickValueId = pickValue.value;
|
|
returnData.push({
|
|
name: pickValueName,
|
|
value: pickValueId,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
|
|
// Get all the custom objects recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getCustomObjects(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { sobjects: objects } = await salesforceApiRequest.call(this, 'GET', '/sobjects');
|
|
for (const object of objects) {
|
|
if (object.custom === true) {
|
|
const objectName = object.label;
|
|
const objectId = object.name;
|
|
returnData.push({
|
|
name: objectName,
|
|
value: objectId,
|
|
});
|
|
}
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
|
|
// Get all the custom objects fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getCustomObjectFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const customObject = this.getCurrentNodeParameter('customObject') as string;
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/${customObject}/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the account fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getAccountFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/account/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the attachment fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getAtachmentFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/attachment/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the case fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getCaseFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/case/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the lead fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getLeadFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/lead/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the opportunity fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getOpportunityFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/opportunity/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the opportunity fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getTaskFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/task/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the users fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getUserFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/user/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
// Get all the contact fields recurrence instances to display them to user so that he can
|
|
// select them easily
|
|
async getContactFields(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
|
const returnData: INodePropertyOptions[] = [];
|
|
// TODO: find a way to filter this object to get just the lead sources instead of the whole object
|
|
const { fields } = await salesforceApiRequest.call(this, 'GET', `/sobjects/contact/describe`);
|
|
for (const field of fields) {
|
|
const fieldName = field.label;
|
|
const fieldId = field.name;
|
|
returnData.push({
|
|
name: fieldName,
|
|
value: fieldId,
|
|
});
|
|
}
|
|
sortOptions(returnData);
|
|
return returnData;
|
|
},
|
|
},
|
|
};
|
|
|
|
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
|
|
const items = this.getInputData();
|
|
const returnData: IDataObject[] = [];
|
|
let responseData;
|
|
const qs: IDataObject = {};
|
|
const resource = this.getNodeParameter('resource', 0) as string;
|
|
const operation = this.getNodeParameter('operation', 0) as string;
|
|
|
|
Logger.debug(`Running "Salesforce" node named "${this.getNode.name}" resource "${resource}" operation "${operation}"`);
|
|
|
|
for (let i = 0; i < items.length; i++) {
|
|
if (resource === 'lead') {
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Lead/post-lead
|
|
if (operation === 'create') {
|
|
const company = this.getNodeParameter('company', i) as string;
|
|
const lastname = this.getNodeParameter('lastname', i) as string;
|
|
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
|
const body: ILead = {
|
|
Company: company,
|
|
LastName: lastname,
|
|
};
|
|
if (additionalFields.email !== undefined) {
|
|
body.Email = additionalFields.email as string;
|
|
}
|
|
if (additionalFields.city !== undefined) {
|
|
body.City = additionalFields.city as string;
|
|
}
|
|
if (additionalFields.phone !== undefined) {
|
|
body.Phone = additionalFields.phone as string;
|
|
}
|
|
if (additionalFields.state !== undefined) {
|
|
body.State = additionalFields.state as string;
|
|
}
|
|
if (additionalFields.title !== undefined) {
|
|
body.Title = additionalFields.title as string;
|
|
}
|
|
if (additionalFields.jigsaw !== undefined) {
|
|
body.Jigsaw = additionalFields.jigsaw as string;
|
|
}
|
|
if (additionalFields.rating !== undefined) {
|
|
body.Rating = additionalFields.rating as string;
|
|
}
|
|
if (additionalFields.status !== undefined) {
|
|
body.Status = additionalFields.status as string;
|
|
}
|
|
if (additionalFields.street !== undefined) {
|
|
body.Street = additionalFields.street as string;
|
|
}
|
|
if (additionalFields.country !== undefined) {
|
|
body.Country = additionalFields.country as string;
|
|
}
|
|
if (additionalFields.owner !== undefined) {
|
|
body.OwnerId = additionalFields.owner as string;
|
|
}
|
|
if (additionalFields.website !== undefined) {
|
|
body.Website = additionalFields.website as string;
|
|
}
|
|
if (additionalFields.industry !== undefined) {
|
|
body.Industry = additionalFields.industry as string;
|
|
}
|
|
if (additionalFields.firstname !== undefined) {
|
|
body.FirstName = additionalFields.firstname as string;
|
|
}
|
|
if (additionalFields.leadSource !== undefined) {
|
|
body.LeadSource = additionalFields.leadSource as string;
|
|
}
|
|
if (additionalFields.postalCode !== undefined) {
|
|
body.PostalCode = additionalFields.postalCode as string;
|
|
}
|
|
if (additionalFields.salutation !== undefined) {
|
|
body.Salutation = additionalFields.salutation as string;
|
|
}
|
|
if (additionalFields.description !== undefined) {
|
|
body.Description = additionalFields.description as string;
|
|
}
|
|
if (additionalFields.annualRevenue !== undefined) {
|
|
body.AnnualRevenue = additionalFields.annualRevenue as number;
|
|
}
|
|
if (additionalFields.isUnreadByOwner !== undefined) {
|
|
body.IsUnreadByOwner = additionalFields.isUnreadByOwner as boolean;
|
|
}
|
|
if (additionalFields.numberOfEmployees !== undefined) {
|
|
body.NumberOfEmployees = additionalFields.numberOfEmployees as number;
|
|
}
|
|
if (additionalFields.mobilePhone !== undefined) {
|
|
body.MobilePhone = additionalFields.mobilePhone as string;
|
|
}
|
|
if (additionalFields.customFieldsUi) {
|
|
const customFields = (additionalFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/lead', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Lead/patch-lead-id
|
|
if (operation === 'update') {
|
|
const leadId = this.getNodeParameter('leadId', i) as string;
|
|
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
|
|
const body: ILead = {};
|
|
if (!Object.keys(updateFields).length) {
|
|
throw new NodeOperationError(this.getNode(), 'You must add at least one update field');
|
|
}
|
|
if (updateFields.lastname !== undefined) {
|
|
body.LastName = updateFields.lastname as string;
|
|
}
|
|
if (updateFields.company !== undefined) {
|
|
body.Company = updateFields.company as string;
|
|
}
|
|
if (updateFields.email !== undefined) {
|
|
body.Email = updateFields.email as string;
|
|
}
|
|
if (updateFields.city !== undefined) {
|
|
body.City = updateFields.city as string;
|
|
}
|
|
if (updateFields.phone !== undefined) {
|
|
body.Phone = updateFields.phone as string;
|
|
}
|
|
if (updateFields.state !== undefined) {
|
|
body.State = updateFields.state as string;
|
|
}
|
|
if (updateFields.title !== undefined) {
|
|
body.Title = updateFields.title as string;
|
|
}
|
|
if (updateFields.jigsaw !== undefined) {
|
|
body.Jigsaw = updateFields.jigsaw as string;
|
|
}
|
|
if (updateFields.rating !== undefined) {
|
|
body.Rating = updateFields.rating as string;
|
|
}
|
|
if (updateFields.status !== undefined) {
|
|
body.Status = updateFields.status as string;
|
|
}
|
|
if (updateFields.street !== undefined) {
|
|
body.Street = updateFields.street as string;
|
|
}
|
|
if (updateFields.country !== undefined) {
|
|
body.Country = updateFields.country as string;
|
|
}
|
|
if (updateFields.owner !== undefined) {
|
|
body.OwnerId = updateFields.owner as string;
|
|
}
|
|
if (updateFields.website !== undefined) {
|
|
body.Website = updateFields.website as string;
|
|
}
|
|
if (updateFields.industry !== undefined) {
|
|
body.Industry = updateFields.industry as string;
|
|
}
|
|
if (updateFields.firstname !== undefined) {
|
|
body.FirstName = updateFields.firstname as string;
|
|
}
|
|
if (updateFields.leadSource !== undefined) {
|
|
body.LeadSource = updateFields.leadSource as string;
|
|
}
|
|
if (updateFields.postalCode !== undefined) {
|
|
body.PostalCode = updateFields.postalCode as string;
|
|
}
|
|
if (updateFields.salutation !== undefined) {
|
|
body.Salutation = updateFields.salutation as string;
|
|
}
|
|
if (updateFields.description !== undefined) {
|
|
body.Description = updateFields.description as string;
|
|
}
|
|
if (updateFields.annualRevenue !== undefined) {
|
|
body.AnnualRevenue = updateFields.annualRevenue as number;
|
|
}
|
|
if (updateFields.isUnreadByOwner !== undefined) {
|
|
body.IsUnreadByOwner = updateFields.isUnreadByOwner as boolean;
|
|
}
|
|
if (updateFields.numberOfEmployees !== undefined) {
|
|
body.NumberOfEmployees = updateFields.numberOfEmployees as number;
|
|
}
|
|
if (updateFields.mobilePhone !== undefined) {
|
|
body.MobilePhone = updateFields.mobilePhone as string;
|
|
}
|
|
if (updateFields.customFieldsUi) {
|
|
const customFields = (updateFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'PATCH', `/sobjects/lead/${leadId}`, body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Lead/get-lead-id
|
|
if (operation === 'get') {
|
|
const leadId = this.getNodeParameter('leadId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/lead/${leadId}`);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, 'Lead', returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, 'Lead', returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Lead/delete-lead-id
|
|
if (operation === 'delete') {
|
|
const leadId = this.getNodeParameter('leadId', i) as string;
|
|
try {
|
|
responseData = await salesforceApiRequest.call(this, 'DELETE', `/sobjects/lead/${leadId}`);
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Lead/get-lead
|
|
if (operation === 'getSummary') {
|
|
responseData = await salesforceApiRequest.call(this, 'GET', '/sobjects/lead');
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/CampaignMember
|
|
if (operation === 'addToCampaign') {
|
|
const leadId = this.getNodeParameter('leadId', i) as string;
|
|
const campaignId = this.getNodeParameter('campaignId', i) as string;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
const body: ICampaignMember = {
|
|
LeadId: leadId,
|
|
CampaignId: campaignId,
|
|
};
|
|
if (options.status) {
|
|
body.Status = options.status as string;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/CampaignMember', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Note/post-note
|
|
if (operation === 'addNote') {
|
|
const leadId = this.getNodeParameter('leadId', i) as string;
|
|
const title = this.getNodeParameter('title', i) as string;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
const body: INote = {
|
|
Title: title,
|
|
ParentId: leadId,
|
|
};
|
|
if (options.body) {
|
|
body.Body = options.body as string;
|
|
}
|
|
if (options.owner) {
|
|
body.OwnerId = options.owner as string;
|
|
}
|
|
if (options.isPrivate) {
|
|
body.IsPrivate = options.isPrivate as boolean;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/note', body);
|
|
}
|
|
}
|
|
if (resource === 'contact') {
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Contact/post-contact
|
|
if (operation === 'create') {
|
|
const lastname = this.getNodeParameter('lastname', i) as string;
|
|
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
|
const body: IContact = {
|
|
LastName: lastname,
|
|
};
|
|
if (additionalFields.fax !== undefined) {
|
|
body.Fax = additionalFields.fax as string;
|
|
}
|
|
if (additionalFields.email !== undefined) {
|
|
body.Email = additionalFields.email as string;
|
|
}
|
|
if (additionalFields.phone !== undefined) {
|
|
body.Phone = additionalFields.phone as string;
|
|
}
|
|
if (additionalFields.title !== undefined) {
|
|
body.Title = additionalFields.title as string;
|
|
}
|
|
if (additionalFields.jigsaw !== undefined) {
|
|
body.Jigsaw = additionalFields.jigsaw as string;
|
|
}
|
|
if (additionalFields.owner !== undefined) {
|
|
body.OwnerId = additionalFields.owner as string;
|
|
}
|
|
if (additionalFields.acconuntId !== undefined) {
|
|
body.AccountId = additionalFields.acconuntId as string;
|
|
}
|
|
if (additionalFields.birthdate !== undefined) {
|
|
body.Birthdate = additionalFields.birthdate as string;
|
|
}
|
|
if (additionalFields.firstName !== undefined) {
|
|
body.FirstName = additionalFields.firstName as string;
|
|
}
|
|
if (additionalFields.homePhone !== undefined) {
|
|
body.HomePhone = additionalFields.homePhone as string;
|
|
}
|
|
if (additionalFields.otherCity !== undefined) {
|
|
body.OtherCity = additionalFields.otherCity as string;
|
|
}
|
|
if (additionalFields.department !== undefined) {
|
|
body.Department = additionalFields.department as string;
|
|
}
|
|
if (additionalFields.leadSource !== undefined) {
|
|
body.LeadSource = additionalFields.leadSource as string;
|
|
}
|
|
if (additionalFields.otherPhone !== undefined) {
|
|
body.OtherPhone = additionalFields.otherPhone as string;
|
|
}
|
|
if (additionalFields.otherState !== undefined) {
|
|
body.OtherState = additionalFields.otherState as string;
|
|
}
|
|
if (additionalFields.salutation !== undefined) {
|
|
body.Salutation = additionalFields.salutation as string;
|
|
}
|
|
if (additionalFields.description !== undefined) {
|
|
body.Description = additionalFields.description as string;
|
|
}
|
|
if (additionalFields.mailingCity !== undefined) {
|
|
body.MailingCity = additionalFields.mailingCity as string;
|
|
}
|
|
if (additionalFields.mobilePhone !== undefined) {
|
|
body.MobilePhone = additionalFields.mobilePhone as string;
|
|
}
|
|
if (additionalFields.otherStreet !== undefined) {
|
|
body.OtherStreet = additionalFields.otherStreet as string;
|
|
}
|
|
if (additionalFields.mailingState !== undefined) {
|
|
body.MailingState = additionalFields.mailingState as string;
|
|
}
|
|
if (additionalFields.otherCountry !== undefined) {
|
|
body.OtherCountry = additionalFields.otherCountry as string;
|
|
}
|
|
if (additionalFields.assistantName !== undefined) {
|
|
body.AssistantName = additionalFields.assistantName as string;
|
|
}
|
|
if (additionalFields.mailingStreet !== undefined) {
|
|
body.MailingStreet = additionalFields.mailingStreet as string;
|
|
}
|
|
if (additionalFields.assistantPhone !== undefined) {
|
|
body.AssistantPhone = additionalFields.assistantPhone as string;
|
|
}
|
|
if (additionalFields.mailingCountry !== undefined) {
|
|
body.MailingCountry = additionalFields.mailingCountry as string;
|
|
}
|
|
if (additionalFields.otherPostalCode !== undefined) {
|
|
body.OtherPostalCode = additionalFields.otherPostalCode as string;
|
|
}
|
|
if (additionalFields.emailBouncedDate !== undefined) {
|
|
body.EmailBouncedDate = additionalFields.emailBouncedDate as string;
|
|
}
|
|
if (additionalFields.mailingPostalCode !== undefined) {
|
|
body.MailingPostalCode = additionalFields.mailingPostalCode as string;
|
|
}
|
|
if (additionalFields.emailBouncedReason !== undefined) {
|
|
body.EmailBouncedReason = additionalFields.emailBouncedReason as string;
|
|
}
|
|
if (additionalFields.customFieldsUi) {
|
|
const customFields = (additionalFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/contact', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Contact/patch-contact-id
|
|
if (operation === 'update') {
|
|
const contactId = this.getNodeParameter('contactId', i) as string;
|
|
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
|
|
const body: IContact = {};
|
|
if (!Object.keys(updateFields).length) {
|
|
throw new NodeOperationError(this.getNode(), 'You must add at least one update field');
|
|
}
|
|
if (updateFields.fax !== undefined) {
|
|
body.Fax = updateFields.fax as string;
|
|
}
|
|
if (updateFields.email !== undefined) {
|
|
body.Email = updateFields.email as string;
|
|
}
|
|
if (updateFields.phone !== undefined) {
|
|
body.Phone = updateFields.phone as string;
|
|
}
|
|
if (updateFields.title !== undefined) {
|
|
body.Title = updateFields.title as string;
|
|
}
|
|
if (updateFields.jigsaw !== undefined) {
|
|
body.Jigsaw = updateFields.jigsaw as string;
|
|
}
|
|
if (updateFields.owner !== undefined) {
|
|
body.OwnerId = updateFields.owner as string;
|
|
}
|
|
if (updateFields.acconuntId !== undefined) {
|
|
body.AccountId = updateFields.acconuntId as string;
|
|
}
|
|
if (updateFields.birthdate !== undefined) {
|
|
body.Birthdate = updateFields.birthdate as string;
|
|
}
|
|
if (updateFields.firstName !== undefined) {
|
|
body.FirstName = updateFields.firstName as string;
|
|
}
|
|
if (updateFields.homePhone !== undefined) {
|
|
body.HomePhone = updateFields.homePhone as string;
|
|
}
|
|
if (updateFields.otherCity !== undefined) {
|
|
body.OtherCity = updateFields.otherCity as string;
|
|
}
|
|
if (updateFields.department !== undefined) {
|
|
body.Department = updateFields.department as string;
|
|
}
|
|
if (updateFields.leadSource !== undefined) {
|
|
body.LeadSource = updateFields.leadSource as string;
|
|
}
|
|
if (updateFields.otherPhone !== undefined) {
|
|
body.OtherPhone = updateFields.otherPhone as string;
|
|
}
|
|
if (updateFields.otherState !== undefined) {
|
|
body.OtherState = updateFields.otherState as string;
|
|
}
|
|
if (updateFields.salutation !== undefined) {
|
|
body.Salutation = updateFields.salutation as string;
|
|
}
|
|
if (updateFields.description !== undefined) {
|
|
body.Description = updateFields.description as string;
|
|
}
|
|
if (updateFields.mailingCity !== undefined) {
|
|
body.MailingCity = updateFields.mailingCity as string;
|
|
}
|
|
if (updateFields.mobilePhone !== undefined) {
|
|
body.MobilePhone = updateFields.mobilePhone as string;
|
|
}
|
|
if (updateFields.otherStreet !== undefined) {
|
|
body.OtherStreet = updateFields.otherStreet as string;
|
|
}
|
|
if (updateFields.mailingState !== undefined) {
|
|
body.MailingState = updateFields.mailingState as string;
|
|
}
|
|
if (updateFields.otherCountry !== undefined) {
|
|
body.OtherCountry = updateFields.otherCountry as string;
|
|
}
|
|
if (updateFields.assistantName !== undefined) {
|
|
body.AssistantName = updateFields.assistantName as string;
|
|
}
|
|
if (updateFields.mailingStreet !== undefined) {
|
|
body.MailingStreet = updateFields.mailingStreet as string;
|
|
}
|
|
if (updateFields.assistantPhone !== undefined) {
|
|
body.AssistantPhone = updateFields.assistantPhone as string;
|
|
}
|
|
if (updateFields.mailingCountry !== undefined) {
|
|
body.MailingCountry = updateFields.mailingCountry as string;
|
|
}
|
|
if (updateFields.otherPostalCode !== undefined) {
|
|
body.OtherPostalCode = updateFields.otherPostalCode as string;
|
|
}
|
|
if (updateFields.emailBouncedDate !== undefined) {
|
|
body.EmailBouncedDate = updateFields.emailBouncedDate as string;
|
|
}
|
|
if (updateFields.mailingPostalCode !== undefined) {
|
|
body.MailingPostalCode = updateFields.mailingPostalCode as string;
|
|
}
|
|
if (updateFields.emailBouncedReason !== undefined) {
|
|
body.EmailBouncedReason = updateFields.emailBouncedReason as string;
|
|
}
|
|
if (updateFields.customFieldsUi) {
|
|
const customFields = (updateFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'PATCH', `/sobjects/contact/${contactId}`, body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Contact/get-contact-id
|
|
if (operation === 'get') {
|
|
const contactId = this.getNodeParameter('contactId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/contact/${contactId}`);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, 'Contact', returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, 'Contact', returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Contact/delete-contact-id
|
|
if (operation === 'delete') {
|
|
const contactId = this.getNodeParameter('contactId', i) as string;
|
|
try {
|
|
responseData = await salesforceApiRequest.call(this, 'DELETE', `/sobjects/contact/${contactId}`);
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Contact/get-contact
|
|
if (operation === 'getSummary') {
|
|
responseData = await salesforceApiRequest.call(this, 'GET', '/sobjects/contact');
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/CampaignMember
|
|
if (operation === 'addToCampaign') {
|
|
const contactId = this.getNodeParameter('contactId', i) as string;
|
|
const campaignId = this.getNodeParameter('campaignId', i) as string;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
const body: ICampaignMember = {
|
|
ContactId: contactId,
|
|
CampaignId: campaignId,
|
|
};
|
|
if (options.status) {
|
|
body.Status = options.status as string;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/CampaignMember', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Note/post-note
|
|
if (operation === 'addNote') {
|
|
const contactId = this.getNodeParameter('contactId', i) as string;
|
|
const title = this.getNodeParameter('title', i) as string;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
const body: INote = {
|
|
Title: title,
|
|
ParentId: contactId,
|
|
};
|
|
if (options.body !== undefined) {
|
|
body.Body = options.body as string;
|
|
}
|
|
if (options.owner !== undefined) {
|
|
body.OwnerId = options.owner as string;
|
|
}
|
|
if (options.isPrivate !== undefined) {
|
|
body.IsPrivate = options.isPrivate as boolean;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/note', body);
|
|
}
|
|
}
|
|
if (resource === 'customObject') {
|
|
if (operation === 'create') {
|
|
const customObject = this.getNodeParameter('customObject', i) as string;
|
|
const customFieldsUi = this.getNodeParameter('customFieldsUi', i) as IDataObject;
|
|
const body: IDataObject = {};
|
|
if (customFieldsUi) {
|
|
const customFields = (customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', `/sobjects/${customObject}`, body);
|
|
}
|
|
if (operation === 'update') {
|
|
const recordId = this.getNodeParameter('recordId', i) as string;
|
|
const customObject = this.getNodeParameter('customObject', i) as string;
|
|
const customFieldsUi = this.getNodeParameter('customFieldsUi', i) as IDataObject;
|
|
const body: IDataObject = {};
|
|
if (customFieldsUi) {
|
|
const customFields = (customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'PATCH', `/sobjects/${customObject}/${recordId}`, body);
|
|
}
|
|
if (operation === 'get') {
|
|
const customObject = this.getNodeParameter('customObject', i) as string;
|
|
const recordId = this.getNodeParameter('recordId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/${customObject}/${recordId}`);
|
|
}
|
|
if (operation === 'getAll') {
|
|
const customObject = this.getNodeParameter('customObject', i) as string;
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, customObject, returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, customObject, returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
if (operation === 'delete') {
|
|
const customObject = this.getNodeParameter('customObject', i) as string;
|
|
const recordId = this.getNodeParameter('recordId', i) as string;
|
|
try {
|
|
responseData = await salesforceApiRequest.call(this, 'DELETE', `/sobjects/${customObject}/${recordId}`);
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
}
|
|
if (resource === 'opportunity') {
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Opportunity/post-opportunity
|
|
if (operation === 'create') {
|
|
const name = this.getNodeParameter('name', i) as string;
|
|
const closeDate = this.getNodeParameter('closeDate', i) as string;
|
|
const stageName = this.getNodeParameter('stageName', i) as string;
|
|
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
|
const body: IOpportunity = {
|
|
Name: name,
|
|
CloseDate: closeDate,
|
|
StageName: stageName,
|
|
};
|
|
if (additionalFields.type !== undefined) {
|
|
body.Type = additionalFields.type as string;
|
|
}
|
|
if (additionalFields.ammount !== undefined) {
|
|
body.Amount = additionalFields.ammount as number;
|
|
}
|
|
if (additionalFields.owner !== undefined) {
|
|
body.OwnerId = additionalFields.owner as string;
|
|
}
|
|
if (additionalFields.nextStep !== undefined) {
|
|
body.NextStep = additionalFields.nextStep as string;
|
|
}
|
|
if (additionalFields.accountId !== undefined) {
|
|
body.AccountId = additionalFields.accountId as string;
|
|
}
|
|
if (additionalFields.campaignId !== undefined) {
|
|
body.CampaignId = additionalFields.campaignId as string;
|
|
}
|
|
if (additionalFields.leadSource !== undefined) {
|
|
body.LeadSource = additionalFields.leadSource as string;
|
|
}
|
|
if (additionalFields.description !== undefined) {
|
|
body.Description = additionalFields.description as string;
|
|
}
|
|
if (additionalFields.probability !== undefined) {
|
|
body.Probability = additionalFields.probability as number;
|
|
}
|
|
if (additionalFields.pricebook2Id !== undefined) {
|
|
body.Pricebook2Id = additionalFields.pricebook2Id as string;
|
|
}
|
|
if (additionalFields.forecastCategoryName !== undefined) {
|
|
body.ForecastCategoryName = additionalFields.forecastCategoryName as string;
|
|
}
|
|
if (additionalFields.customFieldsUi) {
|
|
const customFields = (additionalFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/opportunity', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Opportunity/post-opportunity
|
|
if (operation === 'update') {
|
|
const opportunityId = this.getNodeParameter('opportunityId', i) as string;
|
|
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
|
|
const body: IOpportunity = {};
|
|
if (updateFields.name !== undefined) {
|
|
body.Name = updateFields.name as string;
|
|
}
|
|
if (updateFields.closeDate !== undefined) {
|
|
body.CloseDate = updateFields.closeDate as string;
|
|
}
|
|
if (updateFields.stageName !== undefined) {
|
|
body.StageName = updateFields.stageName as string;
|
|
}
|
|
if (updateFields.type !== undefined) {
|
|
body.Type = updateFields.type as string;
|
|
}
|
|
if (updateFields.ammount !== undefined) {
|
|
body.Amount = updateFields.ammount as number;
|
|
}
|
|
if (updateFields.owner !== undefined) {
|
|
body.OwnerId = updateFields.owner as string;
|
|
}
|
|
if (updateFields.nextStep !== undefined) {
|
|
body.NextStep = updateFields.nextStep as string;
|
|
}
|
|
if (updateFields.accountId !== undefined) {
|
|
body.AccountId = updateFields.accountId as string;
|
|
}
|
|
if (updateFields.campaignId !== undefined) {
|
|
body.CampaignId = updateFields.campaignId as string;
|
|
}
|
|
if (updateFields.leadSource !== undefined) {
|
|
body.LeadSource = updateFields.leadSource as string;
|
|
}
|
|
if (updateFields.description !== undefined) {
|
|
body.Description = updateFields.description as string;
|
|
}
|
|
if (updateFields.probability !== undefined) {
|
|
body.Probability = updateFields.probability as number;
|
|
}
|
|
if (updateFields.pricebook2Id !== undefined) {
|
|
body.Pricebook2Id = updateFields.pricebook2Id as string;
|
|
}
|
|
if (updateFields.forecastCategoryName !== undefined) {
|
|
body.ForecastCategoryName = updateFields.forecastCategoryName as string;
|
|
}
|
|
if (updateFields.customFieldsUi) {
|
|
const customFields = (updateFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'PATCH', `/sobjects/opportunity/${opportunityId}`, body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Opportunity/get-opportunity-id
|
|
if (operation === 'get') {
|
|
const opportunityId = this.getNodeParameter('opportunityId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/opportunity/${opportunityId}`);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, 'Opportunity', returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, 'Opportunity', returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Opportunity/delete-opportunity-id
|
|
if (operation === 'delete') {
|
|
const opportunityId = this.getNodeParameter('opportunityId', i) as string;
|
|
try {
|
|
responseData = await salesforceApiRequest.call(this, 'DELETE', `/sobjects/opportunity/${opportunityId}`);
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Opportunity/get-opportunity
|
|
if (operation === 'getSummary') {
|
|
responseData = await salesforceApiRequest.call(this, 'GET', '/sobjects/opportunity');
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Note/post-note
|
|
if (operation === 'addNote') {
|
|
const opportunityId = this.getNodeParameter('opportunityId', i) as string;
|
|
const title = this.getNodeParameter('title', i) as string;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
const body: INote = {
|
|
Title: title,
|
|
ParentId: opportunityId,
|
|
};
|
|
if (options.body !== undefined) {
|
|
body.Body = options.body as string;
|
|
}
|
|
if (options.owner !== undefined) {
|
|
body.OwnerId = options.owner as string;
|
|
}
|
|
if (options.isPrivate !== undefined) {
|
|
body.IsPrivate = options.isPrivate as boolean;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/note', body);
|
|
}
|
|
}
|
|
if (resource === 'account') {
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Account/post-account
|
|
if (operation === 'create') {
|
|
const name = this.getNodeParameter('name', i) as string;
|
|
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
|
const body: IAccount = {
|
|
Name: name,
|
|
};
|
|
if (additionalFields.fax !== undefined) {
|
|
body.Fax = additionalFields.fax as string;
|
|
}
|
|
if (additionalFields.type !== undefined) {
|
|
body.Type = additionalFields.type as string;
|
|
}
|
|
if (additionalFields.jigsaw !== undefined) {
|
|
body.Jigsaw = additionalFields.jigsaw as string;
|
|
}
|
|
if (additionalFields.phone !== undefined) {
|
|
body.Phone = additionalFields.phone as string;
|
|
}
|
|
if (additionalFields.owner !== undefined) {
|
|
body.OwnerId = additionalFields.owner as string;
|
|
}
|
|
if (additionalFields.sicDesc !== undefined) {
|
|
body.SicDesc = additionalFields.sicDesc as string;
|
|
}
|
|
if (additionalFields.website !== undefined) {
|
|
body.Website = additionalFields.website as string;
|
|
}
|
|
if (additionalFields.industry !== undefined) {
|
|
body.Industry = additionalFields.industry as string;
|
|
}
|
|
if (additionalFields.parentId !== undefined) {
|
|
body.ParentId = additionalFields.parentId as string;
|
|
}
|
|
if (additionalFields.billingCity !== undefined) {
|
|
body.BillingCity = additionalFields.billingCity as string;
|
|
}
|
|
if (additionalFields.description !== undefined) {
|
|
body.Description = additionalFields.description as string;
|
|
}
|
|
if (additionalFields.billingState !== undefined) {
|
|
body.BillingState = additionalFields.billingState as string;
|
|
}
|
|
if (additionalFields.shippingCity !== undefined) {
|
|
body.ShippingCity = additionalFields.shippingCity as string;
|
|
}
|
|
if (additionalFields.accountSource !== undefined) {
|
|
body.AccountSource = additionalFields.accountSource as string;
|
|
}
|
|
if (additionalFields.annualRevenue !== undefined) {
|
|
body.AnnualRevenue = additionalFields.annualRevenue as number;
|
|
}
|
|
if (additionalFields.billingStreet !== undefined) {
|
|
body.BillingStreet = additionalFields.billingStreet as string;
|
|
}
|
|
if (additionalFields.shippingState !== undefined) {
|
|
body.ShippingState = additionalFields.shippingState as string;
|
|
}
|
|
if (additionalFields.billingCountry !== undefined) {
|
|
body.BillingCountry = additionalFields.billingCountry as string;
|
|
}
|
|
if (additionalFields.shippingStreet !== undefined) {
|
|
body.ShippingStreet = additionalFields.shippingStreet as string;
|
|
}
|
|
if (additionalFields.shippingCountry !== undefined) {
|
|
body.ShippingCountry = additionalFields.shippingCountry as string;
|
|
}
|
|
if (additionalFields.billingPostalCode !== undefined) {
|
|
body.BillingPostalCode = additionalFields.billingPostalCode as string;
|
|
}
|
|
if (additionalFields.numberOfEmployees !== undefined) {
|
|
body.NumberOfEmployees = additionalFields.numberOfEmployees as string;
|
|
}
|
|
if (additionalFields.shippingPostalCode !== undefined) {
|
|
body.ShippingPostalCode = additionalFields.shippingPostalCode as string;
|
|
}
|
|
if (additionalFields.shippingPostalCode !== undefined) {
|
|
body.ShippingPostalCode = additionalFields.shippingPostalCode as string;
|
|
}
|
|
if (additionalFields.customFieldsUi) {
|
|
const customFields = (additionalFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/account', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Account/patch-account-id
|
|
if (operation === 'update') {
|
|
const accountId = this.getNodeParameter('accountId', i) as string;
|
|
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
|
|
const body: IAccount = {};
|
|
if (updateFields.name !== undefined) {
|
|
body.Name = updateFields.name as string;
|
|
}
|
|
if (updateFields.fax !== undefined) {
|
|
body.Fax = updateFields.fax as string;
|
|
}
|
|
if (updateFields.type !== undefined) {
|
|
body.Type = updateFields.type as string;
|
|
}
|
|
if (updateFields.jigsaw !== undefined) {
|
|
body.Jigsaw = updateFields.jigsaw as string;
|
|
}
|
|
if (updateFields.phone !== undefined) {
|
|
body.Phone = updateFields.phone as string;
|
|
}
|
|
if (updateFields.owner !== undefined) {
|
|
body.OwnerId = updateFields.owner as string;
|
|
}
|
|
if (updateFields.sicDesc !== undefined) {
|
|
body.SicDesc = updateFields.sicDesc as string;
|
|
}
|
|
if (updateFields.website !== undefined) {
|
|
body.Website = updateFields.website as string;
|
|
}
|
|
if (updateFields.industry !== undefined) {
|
|
body.Industry = updateFields.industry as string;
|
|
}
|
|
if (updateFields.parentId !== undefined) {
|
|
body.ParentId = updateFields.parentId as string;
|
|
}
|
|
if (updateFields.billingCity !== undefined) {
|
|
body.BillingCity = updateFields.billingCity as string;
|
|
}
|
|
if (updateFields.description !== undefined) {
|
|
body.Description = updateFields.description as string;
|
|
}
|
|
if (updateFields.billingState !== undefined) {
|
|
body.BillingState = updateFields.billingState as string;
|
|
}
|
|
if (updateFields.shippingCity !== undefined) {
|
|
body.ShippingCity = updateFields.shippingCity as string;
|
|
}
|
|
if (updateFields.accountSource !== undefined) {
|
|
body.AccountSource = updateFields.accountSource as string;
|
|
}
|
|
if (updateFields.annualRevenue !== undefined) {
|
|
body.AnnualRevenue = updateFields.annualRevenue as number;
|
|
}
|
|
if (updateFields.billingStreet !== undefined) {
|
|
body.BillingStreet = updateFields.billingStreet as string;
|
|
}
|
|
if (updateFields.shippingState !== undefined) {
|
|
body.ShippingState = updateFields.shippingState as string;
|
|
}
|
|
if (updateFields.billingCountry !== undefined) {
|
|
body.BillingCountry = updateFields.billingCountry as string;
|
|
}
|
|
if (updateFields.shippingStreet !== undefined) {
|
|
body.ShippingStreet = updateFields.shippingStreet as string;
|
|
}
|
|
if (updateFields.shippingCountry !== undefined) {
|
|
body.ShippingCountry = updateFields.shippingCountry as string;
|
|
}
|
|
if (updateFields.billingPostalCode !== undefined) {
|
|
body.BillingPostalCode = updateFields.billingPostalCode as string;
|
|
}
|
|
if (updateFields.numberOfEmployees !== undefined) {
|
|
body.NumberOfEmployees = updateFields.numberOfEmployees as string;
|
|
}
|
|
if (updateFields.shippingPostalCode !== undefined) {
|
|
body.ShippingPostalCode = updateFields.shippingPostalCode as string;
|
|
}
|
|
if (updateFields.shippingPostalCode !== undefined) {
|
|
body.ShippingPostalCode = updateFields.shippingPostalCode as string;
|
|
}
|
|
if (updateFields.customFieldsUi) {
|
|
const customFields = (updateFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'PATCH', `/sobjects/account/${accountId}`, body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Account/get-account-id
|
|
if (operation === 'get') {
|
|
const accountId = this.getNodeParameter('accountId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/account/${accountId}`);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, 'Account', returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, 'Account', returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Account/delete-account-id
|
|
if (operation === 'delete') {
|
|
const accountId = this.getNodeParameter('accountId', i) as string;
|
|
try {
|
|
responseData = await salesforceApiRequest.call(this, 'DELETE', `/sobjects/account/${accountId}`);
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Account/get-account
|
|
if (operation === 'getSummary') {
|
|
responseData = await salesforceApiRequest.call(this, 'GET', '/sobjects/account');
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Note/post-note
|
|
if (operation === 'addNote') {
|
|
const accountId = this.getNodeParameter('accountId', i) as string;
|
|
const title = this.getNodeParameter('title', i) as string;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
const body: INote = {
|
|
Title: title,
|
|
ParentId: accountId,
|
|
};
|
|
if (options.body !== undefined) {
|
|
body.Body = options.body as string;
|
|
}
|
|
if (options.owner !== undefined) {
|
|
body.OwnerId = options.owner as string;
|
|
}
|
|
if (options.isPrivate !== undefined) {
|
|
body.IsPrivate = options.isPrivate as boolean;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/note', body);
|
|
}
|
|
}
|
|
if (resource === 'case') {
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Case/post-case
|
|
if (operation === 'create') {
|
|
const type = this.getNodeParameter('type', i) as string;
|
|
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
|
const body: ICase = {
|
|
Type: type,
|
|
};
|
|
if (additionalFields.origin !== undefined) {
|
|
body.Origin = additionalFields.origin as string;
|
|
}
|
|
if (additionalFields.reason !== undefined) {
|
|
body.Reason = additionalFields.reason as string;
|
|
}
|
|
if (additionalFields.owner !== undefined) {
|
|
body.OwnerId = additionalFields.owner as string;
|
|
}
|
|
if (additionalFields.subject !== undefined) {
|
|
body.Subject = additionalFields.subject as string;
|
|
}
|
|
if (additionalFields.parentId !== undefined) {
|
|
body.ParentId = additionalFields.parentId as string;
|
|
}
|
|
if (additionalFields.priority !== undefined) {
|
|
body.Priority = additionalFields.priority as string;
|
|
}
|
|
if (additionalFields.accountId !== undefined) {
|
|
body.AccountId = additionalFields.accountId as string;
|
|
}
|
|
if (additionalFields.contactId !== undefined) {
|
|
body.ContactId = additionalFields.contactId as string;
|
|
}
|
|
if (additionalFields.description !== undefined) {
|
|
body.Description = additionalFields.description as string;
|
|
}
|
|
if (additionalFields.isEscalated !== undefined) {
|
|
body.IsEscalated = additionalFields.isEscalated as boolean;
|
|
}
|
|
if (additionalFields.suppliedName !== undefined) {
|
|
body.SuppliedName = additionalFields.suppliedName as string;
|
|
}
|
|
if (additionalFields.suppliedEmail !== undefined) {
|
|
body.SuppliedEmail = additionalFields.suppliedEmail as string;
|
|
}
|
|
if (additionalFields.suppliedPhone !== undefined) {
|
|
body.SuppliedPhone = additionalFields.suppliedPhone as string;
|
|
}
|
|
if (additionalFields.suppliedCompany !== undefined) {
|
|
body.SuppliedCompany = additionalFields.suppliedCompany as string;
|
|
}
|
|
if (additionalFields.customFieldsUi) {
|
|
const customFields = (additionalFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/case', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Case/patch-case-id
|
|
if (operation === 'update') {
|
|
const caseId = this.getNodeParameter('caseId', i) as string;
|
|
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
|
|
const body: ICase = {};
|
|
if (updateFields.type !== undefined) {
|
|
body.Type = updateFields.type as string;
|
|
}
|
|
if (updateFields.origin !== undefined) {
|
|
body.Origin = updateFields.origin as string;
|
|
}
|
|
if (updateFields.reason !== undefined) {
|
|
body.Reason = updateFields.reason as string;
|
|
}
|
|
if (updateFields.owner !== undefined) {
|
|
body.OwnerId = updateFields.owner as string;
|
|
}
|
|
if (updateFields.subject !== undefined) {
|
|
body.Subject = updateFields.subject as string;
|
|
}
|
|
if (updateFields.parentId !== undefined) {
|
|
body.ParentId = updateFields.parentId as string;
|
|
}
|
|
if (updateFields.priority !== undefined) {
|
|
body.Priority = updateFields.priority as string;
|
|
}
|
|
if (updateFields.accountId !== undefined) {
|
|
body.AccountId = updateFields.accountId as string;
|
|
}
|
|
if (updateFields.contactId !== undefined) {
|
|
body.ContactId = updateFields.contactId as string;
|
|
}
|
|
if (updateFields.description !== undefined) {
|
|
body.Description = updateFields.description as string;
|
|
}
|
|
if (updateFields.isEscalated !== undefined) {
|
|
body.IsEscalated = updateFields.isEscalated as boolean;
|
|
}
|
|
if (updateFields.suppliedName !== undefined) {
|
|
body.SuppliedName = updateFields.suppliedName as string;
|
|
}
|
|
if (updateFields.suppliedEmail !== undefined) {
|
|
body.SuppliedEmail = updateFields.suppliedEmail as string;
|
|
}
|
|
if (updateFields.suppliedPhone !== undefined) {
|
|
body.SuppliedPhone = updateFields.suppliedPhone as string;
|
|
}
|
|
if (updateFields.suppliedCompany !== undefined) {
|
|
body.SuppliedCompany = updateFields.suppliedCompany as string;
|
|
}
|
|
if (updateFields.customFieldsUi) {
|
|
const customFields = (updateFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'PATCH', `/sobjects/case/${caseId}`, body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Case/get-case-id
|
|
if (operation === 'get') {
|
|
const caseId = this.getNodeParameter('caseId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/case/${caseId}`);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, 'Case', returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, 'Case', returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Case/delete-case-id
|
|
if (operation === 'delete') {
|
|
const caseId = this.getNodeParameter('caseId', i) as string;
|
|
try {
|
|
responseData = await salesforceApiRequest.call(this, 'DELETE', `/sobjects/case/${caseId}`);
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Case/get-case
|
|
if (operation === 'getSummary') {
|
|
responseData = await salesforceApiRequest.call(this, 'GET', '/sobjects/case');
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/CaseComment/post-casecomment
|
|
if (operation === 'addComment') {
|
|
const caseId = this.getNodeParameter('caseId', i) as string;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
const body: ICaseComment = {
|
|
ParentId: caseId,
|
|
};
|
|
if (options.commentBody !== undefined) {
|
|
body.CommentBody = options.commentBody as string;
|
|
}
|
|
if (options.isPublished !== undefined) {
|
|
body.IsPublished = options.isPublished as boolean;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/casecomment', body);
|
|
}
|
|
}
|
|
if (resource === 'task') {
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Task/post-task
|
|
if (operation === 'create') {
|
|
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
|
const status = this.getNodeParameter('status', i) as string;
|
|
const body: ITask = {
|
|
Status: status,
|
|
};
|
|
if (additionalFields.whoId !== undefined) {
|
|
body.WhoId = additionalFields.whoId as string;
|
|
}
|
|
if (additionalFields.whatId !== undefined) {
|
|
body.WhatId = additionalFields.whatId as string;
|
|
}
|
|
if (additionalFields.owner !== undefined) {
|
|
body.OwnerId = additionalFields.owner as string;
|
|
}
|
|
if (additionalFields.subject !== undefined) {
|
|
body.Subject = additionalFields.subject as string;
|
|
}
|
|
if (additionalFields.callType !== undefined) {
|
|
body.CallType = additionalFields.callType as string;
|
|
}
|
|
if (additionalFields.priority !== undefined) {
|
|
body.Priority = additionalFields.priority as string;
|
|
}
|
|
if (additionalFields.callObject !== undefined) {
|
|
body.CallObject = additionalFields.callObject as string;
|
|
}
|
|
if (additionalFields.description !== undefined) {
|
|
body.Description = additionalFields.description as string;
|
|
}
|
|
if (additionalFields.activityDate !== undefined) {
|
|
body.ActivityDate = additionalFields.activityDate as string;
|
|
}
|
|
if (additionalFields.isReminderSet !== undefined) {
|
|
body.IsReminderSet = additionalFields.isReminderSet as boolean;
|
|
}
|
|
if (additionalFields.recurrenceType !== undefined) {
|
|
body.RecurrenceType = additionalFields.recurrenceType as string;
|
|
}
|
|
if (additionalFields.callDisposition !== undefined) {
|
|
body.CallDisposition = additionalFields.callDisposition as string;
|
|
}
|
|
if (additionalFields.reminderDateTime !== undefined) {
|
|
body.ReminderDateTime = additionalFields.reminderDateTime as string;
|
|
}
|
|
if (additionalFields.recurrenceInstance !== undefined) {
|
|
body.RecurrenceInstance = additionalFields.recurrenceInstance as string;
|
|
}
|
|
if (additionalFields.recurrenceInterval !== undefined) {
|
|
body.RecurrenceInterval = additionalFields.recurrenceInterval as number;
|
|
}
|
|
if (additionalFields.recurrenceDayOfMonth !== undefined) {
|
|
body.RecurrenceDayOfMonth = additionalFields.recurrenceDayOfMonth as number;
|
|
}
|
|
if (additionalFields.callDurationInSeconds !== undefined) {
|
|
body.CallDurationInSeconds = additionalFields.callDurationInSeconds as number;
|
|
}
|
|
if (additionalFields.recurrenceEndDateOnly !== undefined) {
|
|
body.RecurrenceEndDateOnly = additionalFields.recurrenceEndDateOnly as string;
|
|
}
|
|
if (additionalFields.recurrenceMonthOfYear !== undefined) {
|
|
body.RecurrenceMonthOfYear = additionalFields.recurrenceMonthOfYear as string;
|
|
}
|
|
if (additionalFields.recurrenceDayOfWeekMask !== undefined) {
|
|
body.RecurrenceDayOfWeekMask = additionalFields.recurrenceDayOfWeekMask as string;
|
|
}
|
|
if (additionalFields.recurrenceStartDateOnly !== undefined) {
|
|
body.RecurrenceStartDateOnly = additionalFields.recurrenceStartDateOnly as string;
|
|
}
|
|
if (additionalFields.recurrenceTimeZoneSidKey !== undefined) {
|
|
body.RecurrenceTimeZoneSidKey = additionalFields.recurrenceTimeZoneSidKey as string;
|
|
}
|
|
if (additionalFields.recurrenceRegeneratedType !== undefined) {
|
|
body.RecurrenceRegeneratedType = additionalFields.recurrenceRegeneratedType as string;
|
|
}
|
|
if (additionalFields.customFieldsUi) {
|
|
const customFields = (additionalFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/task', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Task/patch-task-id
|
|
if (operation === 'update') {
|
|
const taskId = this.getNodeParameter('taskId', i) as string;
|
|
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
|
|
const body: ITask = {};
|
|
if (updateFields.whoId !== undefined) {
|
|
body.WhoId = updateFields.whoId as string;
|
|
}
|
|
if (updateFields.status !== undefined) {
|
|
body.Status = updateFields.status as string;
|
|
}
|
|
if (updateFields.whatId !== undefined) {
|
|
body.WhatId = updateFields.whatId as string;
|
|
}
|
|
if (updateFields.owner !== undefined) {
|
|
body.OwnerId = updateFields.owner as string;
|
|
}
|
|
if (updateFields.subject !== undefined) {
|
|
body.Subject = updateFields.subject as string;
|
|
}
|
|
if (updateFields.callType !== undefined) {
|
|
body.CallType = updateFields.callType as string;
|
|
}
|
|
if (updateFields.priority !== undefined) {
|
|
body.Priority = updateFields.priority as string;
|
|
}
|
|
if (updateFields.callObject !== undefined) {
|
|
body.CallObject = updateFields.callObject as string;
|
|
}
|
|
if (updateFields.description !== undefined) {
|
|
body.Description = updateFields.description as string;
|
|
}
|
|
if (updateFields.activityDate !== undefined) {
|
|
body.ActivityDate = updateFields.activityDate as string;
|
|
}
|
|
if (updateFields.isReminderSet !== undefined) {
|
|
body.IsReminderSet = updateFields.isReminderSet as boolean;
|
|
}
|
|
if (updateFields.recurrenceType !== undefined) {
|
|
body.RecurrenceType = updateFields.recurrenceType as string;
|
|
}
|
|
if (updateFields.callDisposition !== undefined) {
|
|
body.CallDisposition = updateFields.callDisposition as string;
|
|
}
|
|
if (updateFields.reminderDateTime !== undefined) {
|
|
body.ReminderDateTime = updateFields.reminderDateTime as string;
|
|
}
|
|
if (updateFields.recurrenceInstance !== undefined) {
|
|
body.RecurrenceInstance = updateFields.recurrenceInstance as string;
|
|
}
|
|
if (updateFields.recurrenceInterval !== undefined) {
|
|
body.RecurrenceInterval = updateFields.recurrenceInterval as number;
|
|
}
|
|
if (updateFields.recurrenceDayOfMonth !== undefined) {
|
|
body.RecurrenceDayOfMonth = updateFields.recurrenceDayOfMonth as number;
|
|
}
|
|
if (updateFields.callDurationInSeconds !== undefined) {
|
|
body.CallDurationInSeconds = updateFields.callDurationInSeconds as number;
|
|
}
|
|
if (updateFields.recurrenceEndDateOnly !== undefined) {
|
|
body.RecurrenceEndDateOnly = updateFields.recurrenceEndDateOnly as string;
|
|
}
|
|
if (updateFields.recurrenceMonthOfYear !== undefined) {
|
|
body.RecurrenceMonthOfYear = updateFields.recurrenceMonthOfYear as string;
|
|
}
|
|
if (updateFields.recurrenceDayOfWeekMask !== undefined) {
|
|
body.RecurrenceDayOfWeekMask = updateFields.recurrenceDayOfWeekMask as string;
|
|
}
|
|
if (updateFields.recurrenceStartDateOnly !== undefined) {
|
|
body.RecurrenceStartDateOnly = updateFields.recurrenceStartDateOnly as string;
|
|
}
|
|
if (updateFields.recurrenceTimeZoneSidKey !== undefined) {
|
|
body.RecurrenceTimeZoneSidKey = updateFields.recurrenceTimeZoneSidKey as string;
|
|
}
|
|
if (updateFields.recurrenceRegeneratedType !== undefined) {
|
|
body.RecurrenceRegeneratedType = updateFields.recurrenceRegeneratedType as string;
|
|
}
|
|
if (updateFields.customFieldsUi) {
|
|
const customFields = (updateFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[];
|
|
if (customFields) {
|
|
for (const customField of customFields) {
|
|
//@ts-ignore
|
|
body[customField.fieldId] = customField.value;
|
|
}
|
|
}
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'PATCH', `/sobjects/task/${taskId}`, body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Task/get-task-id
|
|
if (operation === 'get') {
|
|
const taskId = this.getNodeParameter('taskId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/task/${taskId}`);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, 'Task', returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, 'Task', returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Task/delete-task-id
|
|
if (operation === 'delete') {
|
|
const taskId = this.getNodeParameter('taskId', i) as string;
|
|
try {
|
|
responseData = await salesforceApiRequest.call(this, 'DELETE', `/sobjects/task/${taskId}`);
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Task/get-task
|
|
if (operation === 'getSummary') {
|
|
responseData = await salesforceApiRequest.call(this, 'GET', '/sobjects/task');
|
|
}
|
|
}
|
|
if (resource === 'attachment') {
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Attachment/post-attachment
|
|
if (operation === 'create') {
|
|
const name = this.getNodeParameter('name', i) as string;
|
|
const parentId = this.getNodeParameter('parentId', i) as string;
|
|
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
|
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i) as string;
|
|
const body: IAttachment = {
|
|
Name: name,
|
|
ParentId: parentId,
|
|
};
|
|
if (items[i].binary && items[i].binary![binaryPropertyName]) {
|
|
body.Body = items[i].binary![binaryPropertyName].data;
|
|
body.ContentType = items[i].binary![binaryPropertyName].mimeType;
|
|
} else {
|
|
throw new NodeOperationError(this.getNode(), `The property ${binaryPropertyName} does not exist`);
|
|
}
|
|
if (additionalFields.description !== undefined) {
|
|
body.Description = additionalFields.description as string;
|
|
}
|
|
if (additionalFields.owner !== undefined) {
|
|
body.OwnerId = additionalFields.owner as string;
|
|
}
|
|
if (additionalFields.isPrivate !== undefined) {
|
|
body.IsPrivate = additionalFields.isPrivate as boolean;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'POST', '/sobjects/attachment', body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Attachment/patch-attachment-id
|
|
if (operation === 'update') {
|
|
const attachmentId = this.getNodeParameter('attachmentId', i) as string;
|
|
const updateFields = this.getNodeParameter('updateFields', i) as IDataObject;
|
|
const body: IAttachment = {};
|
|
if (updateFields.binaryPropertyName !== undefined) {
|
|
const binaryPropertyName = updateFields.binaryPropertyName as string;
|
|
if (items[i].binary && items[i].binary![binaryPropertyName]) {
|
|
body.Body = items[i].binary![binaryPropertyName].data;
|
|
body.ContentType = items[i].binary![binaryPropertyName].mimeType;
|
|
} else {
|
|
throw new NodeOperationError(this.getNode(), `The property ${binaryPropertyName} does not exist`);
|
|
}
|
|
}
|
|
if (updateFields.name !== undefined) {
|
|
body.Name = updateFields.name as string;
|
|
}
|
|
if (updateFields.description !== undefined) {
|
|
body.Description = updateFields.description as string;
|
|
}
|
|
if (updateFields.owner !== undefined) {
|
|
body.OwnerId = updateFields.owner as string;
|
|
}
|
|
if (updateFields.isPrivate !== undefined) {
|
|
body.IsPrivate = updateFields.isPrivate as boolean;
|
|
}
|
|
responseData = await salesforceApiRequest.call(this, 'PATCH', `/sobjects/attachment/${attachmentId}`, body);
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Attachment/get-attachment-id
|
|
if (operation === 'get') {
|
|
const attachmentId = this.getNodeParameter('attachmentId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/attachment/${attachmentId}`);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, 'Attachment', returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, 'Attachment', returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Attachment/delete-attachment-id
|
|
if (operation === 'delete') {
|
|
const attachmentId = this.getNodeParameter('attachmentId', i) as string;
|
|
try {
|
|
responseData = await salesforceApiRequest.call(this, 'DELETE', `/sobjects/attachment/${attachmentId}`);
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/Attachment/get-attachment-id
|
|
if (operation === 'getSummary') {
|
|
responseData = await salesforceApiRequest.call(this, 'GET', '/sobjects/attachment');
|
|
}
|
|
}
|
|
if (resource === 'user') {
|
|
//https://developer.salesforce.com/docs/api-explorer/sobject/User/get-user-id
|
|
if (operation === 'get') {
|
|
const userId = this.getNodeParameter('userId', i) as string;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', `/sobjects/user/${userId}`);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
const options = this.getNodeParameter('options', i) as IDataObject;
|
|
try {
|
|
if (returnAll) {
|
|
qs.q = getQuery(options, 'User', returnAll) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
} else {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
qs.q = getQuery(options, 'User', returnAll, limit) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
} catch (error) {
|
|
throw new NodeApiError(this.getNode(), error);
|
|
}
|
|
}
|
|
}
|
|
if (resource === 'flow') {
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_action.meta/api_action/actions_obj_flow.htm
|
|
if (operation === 'invoke') {
|
|
const apiName = this.getNodeParameter('apiName', i) as string;
|
|
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
|
|
let variables = {};
|
|
if (jsonParameters) {
|
|
variables = this.getNodeParameter('variablesJson', i) as object;
|
|
} else {
|
|
// Input variables are defined in UI
|
|
const setInputVariable = this.getNodeParameter('variablesUi', i, {}) as IDataObject;
|
|
if (setInputVariable!.variablesValues !== undefined) {
|
|
for (const inputVariableData of setInputVariable!.variablesValues as IDataObject[]) {
|
|
// @ts-ignore
|
|
variables[inputVariableData!.name as string] = inputVariableData!.value;
|
|
}
|
|
}
|
|
}
|
|
const body = {
|
|
inputs: [
|
|
variables,
|
|
],
|
|
};
|
|
responseData = await salesforceApiRequest.call(this, 'POST', `/actions/custom/flow/${apiName}`, body);
|
|
}
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_action.meta/api_action/actions_obj_flow.htm
|
|
if (operation === 'getAll') {
|
|
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
|
|
responseData = await salesforceApiRequest.call(this, 'GET', '/actions/custom/flow');
|
|
responseData = responseData.actions;
|
|
if (returnAll === false) {
|
|
const limit = this.getNodeParameter('limit', i) as number;
|
|
responseData = responseData.splice(0, limit);
|
|
}
|
|
}
|
|
}
|
|
if (resource === 'search') {
|
|
//https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_query.htm
|
|
if (operation === 'query') {
|
|
qs.q = this.getNodeParameter('query', i) as string;
|
|
responseData = await salesforceApiRequestAllItems.call(this, 'records', 'GET', '/query', {}, qs);
|
|
}
|
|
}
|
|
if (Array.isArray(responseData)) {
|
|
returnData.push.apply(returnData, responseData as IDataObject[]);
|
|
} else {
|
|
if (responseData === undefined) {
|
|
// Make sure that always valid JSON gets returned which also matches the
|
|
// Salesforce default response
|
|
responseData = {
|
|
errors: [],
|
|
success: true,
|
|
};
|
|
}
|
|
returnData.push(responseData as IDataObject);
|
|
}
|
|
}
|
|
return [this.helpers.returnJsonArray(returnData)];
|
|
}
|
|
}
|