diff --git a/packages/nodes-base/credentials/ServiceNowBasicApi.credentials.ts b/packages/nodes-base/credentials/ServiceNowBasicApi.credentials.ts
new file mode 100644
index 0000000000..b55cbb7e73
--- /dev/null
+++ b/packages/nodes-base/credentials/ServiceNowBasicApi.credentials.ts
@@ -0,0 +1,35 @@
+import {
+ IAuthenticateBasicAuth,
+ ICredentialType,
+ INodeProperties,
+ ICredentialTestRequest,
+} from 'n8n-workflow';
+
+export class ServiceNowBasicApi implements ICredentialType {
+ name = 'serviceNowBasicApi';
+ extends = [
+ 'httpBasicAuth'
+ ];
+ displayName = 'ServiceNow Basic Auth API';
+ documentationUrl = 'serviceNow';
+ properties: INodeProperties[] = [
+ {
+ displayName: 'Subdomain',
+ name: 'subdomain',
+ type: 'string',
+ default: '',
+ hint: 'The subdomain can be extracted from the URL. If the URL is: https://dev99890.service-now.com the subdomain is dev99890',
+ required: true,
+ },
+ ];
+ authenticate: IAuthenticateBasicAuth = {
+ type: 'basicAuth',
+ properties: {},
+ };
+ test: ICredentialTestRequest = {
+ request: {
+ baseURL: '=https://{{$credentials?.subdomain}}.service-now.com',
+ url: '/api/now/table/sys_user_role',
+ }
+ }
+}
diff --git a/packages/nodes-base/credentials/ServiceNowOAuth2Api.credentials.ts b/packages/nodes-base/credentials/ServiceNowOAuth2Api.credentials.ts
index 9539cb1fe1..4bd0bc2e19 100644
--- a/packages/nodes-base/credentials/ServiceNowOAuth2Api.credentials.ts
+++ b/packages/nodes-base/credentials/ServiceNowOAuth2Api.credentials.ts
@@ -16,8 +16,7 @@ export class ServiceNowOAuth2Api implements ICredentialType {
name: 'subdomain',
type: 'string',
default: '',
- placeholder: 'n8n',
- description: 'The subdomain of your ServiceNow environment',
+ hint: 'The subdomain can be extracted from the URL. If the URL is: https://dev99890.service-now.com the subdomain is dev99890',
required: true,
},
{
diff --git a/packages/nodes-base/nodes/ServiceNow/BusinessServiceDescription.ts b/packages/nodes-base/nodes/ServiceNow/BusinessServiceDescription.ts
index c5fd6dd0fe..fddf24e3f9 100644
--- a/packages/nodes-base/nodes/ServiceNow/BusinessServiceDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/BusinessServiceDescription.ts
@@ -7,6 +7,7 @@ export const businessServiceOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -44,7 +45,7 @@ export const businessServiceFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -99,17 +100,19 @@ export const businessServiceFields: INodeProperties[] = [
name: 'sysparm_fields',
type: 'multiOptions',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getColumns',
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
diff --git a/packages/nodes-base/nodes/ServiceNow/ConfigurationItemsDescription.ts b/packages/nodes-base/nodes/ServiceNow/ConfigurationItemsDescription.ts
index 1d3f738f08..33804b9601 100644
--- a/packages/nodes-base/nodes/ServiceNow/ConfigurationItemsDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/ConfigurationItemsDescription.ts
@@ -7,6 +7,7 @@ export const configurationItemsOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -44,7 +45,7 @@ export const configurationItemsFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -68,7 +69,7 @@ export const configurationItemsFields: INodeProperties[] = [
maxValue: 500,
},
default: 50,
- description: 'The max number of results to return',
+ description: 'Max number of results to return',
},
{
displayName: 'Options',
@@ -99,17 +100,19 @@ export const configurationItemsFields: INodeProperties[] = [
name: 'sysparm_fields',
type: 'multiOptions',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getColumns',
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
diff --git a/packages/nodes-base/nodes/ServiceNow/DepartmentDescription.ts b/packages/nodes-base/nodes/ServiceNow/DepartmentDescription.ts
index 28c3d93090..dcc6f950fb 100644
--- a/packages/nodes-base/nodes/ServiceNow/DepartmentDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/DepartmentDescription.ts
@@ -7,6 +7,7 @@ export const departmentOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -44,7 +45,7 @@ export const departmentFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -99,17 +100,19 @@ export const departmentFields: INodeProperties[] = [
name: 'sysparm_fields',
type: 'multiOptions',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getColumns',
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
diff --git a/packages/nodes-base/nodes/ServiceNow/DictionaryDescription.ts b/packages/nodes-base/nodes/ServiceNow/DictionaryDescription.ts
index ba1152b31c..718a24cbf9 100644
--- a/packages/nodes-base/nodes/ServiceNow/DictionaryDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/DictionaryDescription.ts
@@ -7,6 +7,7 @@ export const dictionaryOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -44,7 +45,7 @@ export const dictionaryFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -99,17 +100,19 @@ export const dictionaryFields: INodeProperties[] = [
name: 'sysparm_fields',
type: 'multiOptions',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getColumns',
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
diff --git a/packages/nodes-base/nodes/ServiceNow/GenericFunctions.ts b/packages/nodes-base/nodes/ServiceNow/GenericFunctions.ts
index 2924cdf53d..5d121933f0 100644
--- a/packages/nodes-base/nodes/ServiceNow/GenericFunctions.ts
+++ b/packages/nodes-base/nodes/ServiceNow/GenericFunctions.ts
@@ -10,15 +10,25 @@ import {
import {
IDataObject,
INodePropertyOptions,
+ JsonObject,
NodeApiError,
} from 'n8n-workflow';
export async function serviceNowApiRequest(this: IExecuteFunctions | ILoadOptionsFunctions, method: string, resource: string, body: any = {}, qs: IDataObject = {}, uri?: string, option: IDataObject = {}): Promise { // tslint:disable-line:no-any
- const credentials = await this.getCredentials('serviceNowOAuth2Api');
+ const headers = {} as IDataObject;
+ const authenticationMethod = this.getNodeParameter('authentication', 0, 'oAuth2') as string;
+
+ let credentials;
+
+ if (authenticationMethod === 'basicAuth') {
+ credentials = await this.getCredentials('serviceNowBasicApi');
+ } else {
+ credentials = await this.getCredentials('serviceNowOAuth2Api');
+ }
const options: OptionsWithUri = {
- headers: {},
+ headers,
method,
qs,
body,
@@ -38,11 +48,11 @@ export async function serviceNowApiRequest(this: IExecuteFunctions | ILoadOption
}
try {
-
- return await this.helpers.requestOAuth2!.call(this, 'serviceNowOAuth2Api', options);
+ const credentialType = authenticationMethod === 'oAuth2' ? 'serviceNowOAuth2Api' : 'serviceNowBasicApi';
+ return await this.helpers.requestWithAuthentication.call(this, credentialType, options);
} catch (error) {
- throw new NodeApiError(this.getNode(), error);
+ throw new NodeApiError(this.getNode(), (error as JsonObject));
}
}
diff --git a/packages/nodes-base/nodes/ServiceNow/IncidentDescription.ts b/packages/nodes-base/nodes/ServiceNow/IncidentDescription.ts
index ba06f0d45e..744ee35472 100644
--- a/packages/nodes-base/nodes/ServiceNow/IncidentDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/IncidentDescription.ts
@@ -7,6 +7,7 @@ export const incidentOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -85,19 +86,21 @@ export const incidentFields: INodeProperties[] = [
name: 'assigned_to',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getUsers',
loadOptionsDependsOn: [
'additionalFields.assignment_group',
],
},
default: '',
- description: 'Which user is the incident assigned to. Requires the selection of an assignment group',
+ description: 'Which user is the incident assigned to. Requires the selection of an assignment group.',
},
{
displayName: 'Assignment Group',
name: 'assignment_group',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getAssignmentGroups',
},
default: '',
@@ -108,6 +111,7 @@ export const incidentFields: INodeProperties[] = [
name: 'business_service',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getBusinessServices',
},
default: '',
@@ -125,6 +129,7 @@ export const incidentFields: INodeProperties[] = [
name: 'category',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentCategories',
},
default: '',
@@ -142,9 +147,10 @@ export const incidentFields: INodeProperties[] = [
name: 'cmdb_ci',
type: 'multiOptions',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getConfigurationItems',
},
- default: '',
+ default: [],
description: 'Configuration Items, \'cmdb_ci\' in metadata',
},
{
@@ -197,7 +203,7 @@ export const incidentFields: INodeProperties[] = [
value: 1,
},
],
- default: '',
+ default: 1,
description: 'The impact of the incident',
},
{
@@ -205,16 +211,18 @@ export const incidentFields: INodeProperties[] = [
name: 'close_code',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentResolutionCodes',
},
default: '',
- description: 'The resolution code of the incident. \'close_code\' in metadata',
+ description: 'The resolution code of the incident, \'close_code\' in metadata',
},
{
displayName: 'State',
name: 'state',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentStates',
},
default: '',
@@ -225,6 +233,7 @@ export const incidentFields: INodeProperties[] = [
name: 'subcategory',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentSubcategories',
loadOptionsDependsOn: [
'additionalFields.category',
@@ -251,7 +260,7 @@ export const incidentFields: INodeProperties[] = [
value: 1,
},
],
- default: '',
+ default: 1,
description: 'The urgency of the incident',
},
],
@@ -275,7 +284,7 @@ export const incidentFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -330,17 +339,19 @@ export const incidentFields: INodeProperties[] = [
name: 'sysparm_fields',
type: 'multiOptions',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getColumns',
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
@@ -417,10 +428,12 @@ export const incidentFields: INodeProperties[] = [
name: 'sysparm_fields',
type: 'multiOptions',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getColumns',
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Return Values',
@@ -489,19 +502,21 @@ export const incidentFields: INodeProperties[] = [
name: 'assigned_to',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getUsers',
loadOptionsDependsOn: [
'additionalFields.assignment_group',
],
},
default: '',
- description: 'Which user is the incident assigned to. Requires the selection of an assignment group',
+ description: 'Which user is the incident assigned to. Requires the selection of an assignment group.',
},
{
displayName: 'Assignment Group',
name: 'assignment_group',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getAssignmentGroups',
},
default: '',
@@ -512,6 +527,7 @@ export const incidentFields: INodeProperties[] = [
name: 'business_service',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getBusinessServices',
},
default: '',
@@ -529,6 +545,7 @@ export const incidentFields: INodeProperties[] = [
name: 'category',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentCategories',
},
default: '',
@@ -546,9 +563,10 @@ export const incidentFields: INodeProperties[] = [
name: 'cmdb_ci',
type: 'multiOptions',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getConfigurationItems',
},
- default: '',
+ default: [],
description: 'Configuration Items, \'cmdb_ci\' in metadata',
},
{
@@ -601,7 +619,7 @@ export const incidentFields: INodeProperties[] = [
value: 1,
},
],
- default: '',
+ default: 1,
description: 'The impact of the incident',
},
{
@@ -609,9 +627,11 @@ export const incidentFields: INodeProperties[] = [
name: 'close_code',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentResolutionCodes',
},
default: '',
+ // nodelinter-ignore-next-line
description: 'The resolution code of the incident. \'close_code\' in metadata',
},
{
@@ -619,6 +639,7 @@ export const incidentFields: INodeProperties[] = [
name: 'hold_reason',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentHoldReasons',
},
default: '',
@@ -629,6 +650,7 @@ export const incidentFields: INodeProperties[] = [
name: 'state',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentStates',
},
default: '',
@@ -639,6 +661,7 @@ export const incidentFields: INodeProperties[] = [
name: 'subcategory',
type: 'options',
typeOptions: {
+ // nodelinter-ignore-next-line
loadOptionsMethod: 'getIncidentSubcategories',
loadOptionsDependsOn: [
'additionalFields.category',
@@ -665,7 +688,7 @@ export const incidentFields: INodeProperties[] = [
value: 1,
},
],
- default: '',
+ default: 1,
description: 'The urgency of the incident',
},
],
diff --git a/packages/nodes-base/nodes/ServiceNow/ServiceNow.node.ts b/packages/nodes-base/nodes/ServiceNow/ServiceNow.node.ts
index 98ad4bf4b4..d68afb18a3 100644
--- a/packages/nodes-base/nodes/ServiceNow/ServiceNow.node.ts
+++ b/packages/nodes-base/nodes/ServiceNow/ServiceNow.node.ts
@@ -9,6 +9,7 @@ import {
INodePropertyOptions,
INodeType,
INodeTypeDescription,
+ JsonObject,
NodeOperationError,
} from 'n8n-workflow';
@@ -82,13 +83,49 @@ export class ServiceNow implements INodeType {
{
name: 'serviceNowOAuth2Api',
required: true,
+ displayOptions: {
+ show: {
+ authentication: [
+ 'oAuth2',
+ ],
+ },
+ },
+ },
+ {
+ name: 'serviceNowBasicApi',
+ required: true,
+ displayOptions: {
+ show: {
+ authentication: [
+ 'basicAuth',
+ ],
+ },
+ },
},
],
properties: [
+ {
+ displayName: 'Authentication',
+ name: 'authentication',
+ type: 'options',
+ options: [
+ {
+ name: 'Basic Auth',
+ value: 'basicAuth',
+ },
+ {
+ name: 'OAuth2',
+ value: 'oAuth2',
+ },
+ ],
+ default: 'oAuth2',
+ description: 'Authentication method to use',
+ },
{
displayName: 'Resource',
name: 'resource',
type: 'options',
+ noDataExpression: true,
options: [
{
name: 'Business Service',
@@ -427,7 +464,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -448,7 +485,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -469,7 +506,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -490,7 +527,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -529,7 +566,7 @@ export class ServiceNow implements INodeType {
const id = this.getNodeParameter('id', i) as string;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -541,7 +578,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -604,7 +641,7 @@ export class ServiceNow implements INodeType {
const id = this.getNodeParameter('id', i) as string;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -617,7 +654,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -679,7 +716,7 @@ export class ServiceNow implements INodeType {
const getOption = this.getNodeParameter('getOption', i) as string;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -700,7 +737,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -730,7 +767,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -751,7 +788,7 @@ export class ServiceNow implements INodeType {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
qs = this.getNodeParameter('options', i) as IDataObject;
- if (qs.sysparm_fields) {
+ if (qs.sysparm_fields && typeof qs.sysparm_fields !== 'string') {
qs.sysparm_fields = (qs.sysparm_fields as string[]).join(',');
}
@@ -771,7 +808,7 @@ export class ServiceNow implements INodeType {
}
} catch (error) {
if (this.continueOnFail()) {
- returnData.push({ error: error.message });
+ returnData.push({ error: (error as JsonObject).message });
continue;
}
diff --git a/packages/nodes-base/nodes/ServiceNow/TableRecordDescription.ts b/packages/nodes-base/nodes/ServiceNow/TableRecordDescription.ts
index 9c60fbc511..a48cb47259 100644
--- a/packages/nodes-base/nodes/ServiceNow/TableRecordDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/TableRecordDescription.ts
@@ -7,6 +7,7 @@ export const tableRecordOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -71,7 +72,7 @@ export const tableRecordFields: INodeProperties[] = [
type: 'options',
options: [
{
- name: 'Auto-map Input Data to Columns',
+ name: 'Auto-Map Input Data to Columns',
value: 'mapInput',
description: 'Use when node input names match destination field names',
},
@@ -117,7 +118,7 @@ export const tableRecordFields: INodeProperties[] = [
},
default: '',
required: false,
- description: 'List of input properties to avoid sending, separated by commas. Leave empty to send all inputs',
+ description: 'List of input properties to avoid sending, separated by commas. Leave empty to send all inputs.',
},
{
displayName: 'Fields to Send',
@@ -208,7 +209,7 @@ export const tableRecordFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -268,15 +269,16 @@ export const tableRecordFields: INodeProperties[] = [
'tableName',
],
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
@@ -380,8 +382,9 @@ export const tableRecordFields: INodeProperties[] = [
'tableName',
],
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Return Values',
@@ -455,7 +458,7 @@ export const tableRecordFields: INodeProperties[] = [
type: 'options',
options: [
{
- name: 'Auto-map Input Data to Columns',
+ name: 'Auto-Map Input Data to Columns',
value: 'mapInput',
description: 'Use when node input names match destination field names',
},
@@ -501,7 +504,7 @@ export const tableRecordFields: INodeProperties[] = [
},
default: '',
required: false,
- description: 'List of input properties to avoid sending, separated by commas. Leave empty to send all inputs',
+ description: 'List of input properties to avoid sending, separated by commas. Leave empty to send all inputs.',
},
{
displayName: 'Fields to Send',
diff --git a/packages/nodes-base/nodes/ServiceNow/UserDescription.ts b/packages/nodes-base/nodes/ServiceNow/UserDescription.ts
index ca76b3c4b4..7a26f845b3 100644
--- a/packages/nodes-base/nodes/ServiceNow/UserDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/UserDescription.ts
@@ -7,6 +7,7 @@ export const userOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -84,7 +85,7 @@ export const userFields: INodeProperties[] = [
displayName: 'Active',
name: 'active',
type: 'boolean',
- default: '',
+ default: false,
description: 'Whether to activate the user',
},
{
@@ -196,7 +197,7 @@ export const userFields: INodeProperties[] = [
displayName: 'Password Needs Reset',
name: 'password_needs_reset',
type: 'boolean',
- default: '',
+ default: false,
description: 'Whether to require a password reset when the user logs in',
},
{
@@ -213,7 +214,7 @@ export const userFields: INodeProperties[] = [
typeOptions: {
loadOptionsMethod: 'getUserRoles',
},
- default: '',
+ default: [],
description: 'Roles of the user',
},
{
@@ -242,6 +243,7 @@ export const userFields: INodeProperties[] = [
name: 'user_name',
type: 'string',
default: '',
+ // nodelinter-ignore-next-line
description: 'A username associated with the user (e.g. user_name.123)',
},
{
@@ -272,7 +274,7 @@ export const userFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -332,15 +334,16 @@ export const userFields: INodeProperties[] = [
'operation',
],
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
@@ -491,8 +494,9 @@ export const userFields: INodeProperties[] = [
'operation',
],
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Return Values',
@@ -560,7 +564,7 @@ export const userFields: INodeProperties[] = [
displayName: 'Active',
name: 'active',
type: 'boolean',
- default: '',
+ default: false,
description: 'Whether to activate the user',
},
{
@@ -672,7 +676,7 @@ export const userFields: INodeProperties[] = [
displayName: 'Password Needs Reset',
name: 'password_needs_reset',
type: 'boolean',
- default: '',
+ default: false,
description: 'Whether to require a password reset when the user logs in',
},
{
@@ -689,7 +693,7 @@ export const userFields: INodeProperties[] = [
typeOptions: {
loadOptionsMethod: 'getUserRoles',
},
- default: '',
+ default: [],
description: 'Roles of the user',
},
{
@@ -718,6 +722,7 @@ export const userFields: INodeProperties[] = [
name: 'user_name',
type: 'string',
default: '',
+ // nodelinter-ignore-next-line
description: 'A username associated with the user (e.g. user_name.123)',
},
{
diff --git a/packages/nodes-base/nodes/ServiceNow/UserGroupDescription.ts b/packages/nodes-base/nodes/ServiceNow/UserGroupDescription.ts
index 271e7ea76d..a631c49905 100644
--- a/packages/nodes-base/nodes/ServiceNow/UserGroupDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/UserGroupDescription.ts
@@ -7,6 +7,7 @@ export const userGroupOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -44,7 +45,7 @@ export const userGroupFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -101,15 +102,16 @@ export const userGroupFields: INodeProperties[] = [
typeOptions: {
loadOptionsMethod: 'getColumns',
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
diff --git a/packages/nodes-base/nodes/ServiceNow/UserRoleDescription.ts b/packages/nodes-base/nodes/ServiceNow/UserRoleDescription.ts
index 59bb84f4fa..ba43b0d4af 100644
--- a/packages/nodes-base/nodes/ServiceNow/UserRoleDescription.ts
+++ b/packages/nodes-base/nodes/ServiceNow/UserRoleDescription.ts
@@ -7,6 +7,7 @@ export const userRoleOperations: INodeProperties[] = [
displayName: 'Operation',
name: 'operation',
type: 'options',
+ noDataExpression: true,
displayOptions: {
show: {
resource: [
@@ -44,7 +45,7 @@ export const userRoleFields: INodeProperties[] = [
},
},
default: false,
- description: 'If all results should be returned or only up to a given limit',
+ description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
@@ -101,15 +102,16 @@ export const userRoleFields: INodeProperties[] = [
typeOptions: {
loadOptionsMethod: 'getColumns',
},
- default: '',
+ default: [],
description: 'A list of fields to return',
+ hint: 'String of comma separated values or an array of strings can be set in an expression',
},
{
displayName: 'Filter',
name: 'sysparm_query',
type: 'string',
default: '',
- description: 'An encoded query string used to filter the results. More info',
+ description: 'An encoded query string used to filter the results. More info.',
},
{
displayName: 'Return Values',
diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json
index 43ab38c5fa..0374378b30 100644
--- a/packages/nodes-base/package.json
+++ b/packages/nodes-base/package.json
@@ -258,6 +258,7 @@
"dist/credentials/SentryIoOAuth2Api.credentials.js",
"dist/credentials/SentryIoServerApi.credentials.js",
"dist/credentials/ServiceNowOAuth2Api.credentials.js",
+ "dist/credentials/ServiceNowBasicApi.credentials.js",
"dist/credentials/Sftp.credentials.js",
"dist/credentials/ShopifyApi.credentials.js",
"dist/credentials/Signl4Api.credentials.js",