mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-25 04:34:06 -08:00
⚡ Add option to use Field IDs on Quickbase Node (#1651)
* QuickBase: Use FieldIDs instead of names * Fix name change * Delete tmp-209473KO4eyCT5LSi * Fix name change * Change default to false
This commit is contained in:
parent
03639b0e3a
commit
35cae02a36
|
@ -41,8 +41,10 @@ export async function quickbaseApiRequest(this: IExecuteFunctions | ILoadOptions
|
|||
body,
|
||||
qs,
|
||||
uri: `https://api.quickbase.com/v1${resource}`,
|
||||
json: true,
|
||||
json: true
|
||||
};
|
||||
|
||||
|
||||
if (Object.keys(body).length === 0) {
|
||||
delete options.body;
|
||||
}
|
||||
|
|
|
@ -230,7 +230,7 @@ export class QuickBase implements INodeType {
|
|||
if (operation === 'create') {
|
||||
const tableId = this.getNodeParameter('tableId', 0) as string;
|
||||
|
||||
const { fieldsLabelKey, fieldsIdKey } = await getFieldsObject.call(this, tableId);
|
||||
const useFieldIDs = this.getNodeParameter('useFieldIDs', 0) as boolean;
|
||||
|
||||
const simple = this.getNodeParameter('simple', 0) as boolean;
|
||||
|
||||
|
@ -244,12 +244,18 @@ export class QuickBase implements INodeType {
|
|||
const columns = this.getNodeParameter('columns', i) as string;
|
||||
|
||||
const columnList = columns.split(',').map(column => column.trim());
|
||||
|
||||
if (useFieldIDs) {
|
||||
for (const key of Object.keys(items[i].json)) {
|
||||
record[key] = { value: items[i].json[key] };
|
||||
}
|
||||
} else {
|
||||
const { fieldsLabelKey } = await getFieldsObject.call(this, tableId);
|
||||
for (const key of Object.keys(items[i].json)) {
|
||||
if (fieldsLabelKey.hasOwnProperty(key) && columnList.includes(key)) {
|
||||
record[fieldsLabelKey[key].toString()] = { value: items[i].json[key] };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data.push(record);
|
||||
}
|
||||
|
@ -259,8 +265,9 @@ export class QuickBase implements INodeType {
|
|||
to: tableId,
|
||||
};
|
||||
|
||||
// If not fields are set return at least the record id
|
||||
body.fieldsToReturn = [fieldsLabelKey['Record ID#']];
|
||||
// If no fields are set return at least the record id
|
||||
// 3 == Default Quickbase RecordID #
|
||||
body.fieldsToReturn = [3];
|
||||
|
||||
if (options.fields) {
|
||||
body.fieldsToReturn = options.fields as string[];
|
||||
|
@ -275,7 +282,7 @@ export class QuickBase implements INodeType {
|
|||
for (const record of records) {
|
||||
const data: IDataObject = {};
|
||||
for (const [key, value] of Object.entries(record)) {
|
||||
data[fieldsIdKey[key]] = (value as IDataObject).value;
|
||||
data[key] = (value as IDataObject).value;
|
||||
}
|
||||
responseData.push(data);
|
||||
}
|
||||
|
@ -365,6 +372,8 @@ export class QuickBase implements INodeType {
|
|||
|
||||
const { fieldsLabelKey, fieldsIdKey } = await getFieldsObject.call(this, tableId);
|
||||
|
||||
const useFieldIDs = this.getNodeParameter('useFieldIDs', 0) as boolean;
|
||||
|
||||
const simple = this.getNodeParameter('simple', 0) as boolean;
|
||||
|
||||
const updateKey = this.getNodeParameter('updateKey', 0) as string;
|
||||
|
@ -380,18 +389,23 @@ export class QuickBase implements INodeType {
|
|||
|
||||
const columnList = columns.split(',').map(column => column.trim());
|
||||
|
||||
if (useFieldIDs) {
|
||||
for (const key of Object.keys(items[i].json)) {
|
||||
record[key] = { value: items[i].json[key] };
|
||||
}
|
||||
} else {
|
||||
const { fieldsLabelKey } = await getFieldsObject.call(this, tableId);
|
||||
for (const key of Object.keys(items[i].json)) {
|
||||
if (fieldsLabelKey.hasOwnProperty(key) && columnList.includes(key)) {
|
||||
record[fieldsLabelKey[key].toString()] = { value: items[i].json[key] };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (items[i].json[updateKey] === undefined) {
|
||||
throw new NodeOperationError(this.getNode(), `The update key ${updateKey} could not be found in the input`);
|
||||
}
|
||||
|
||||
record[fieldsLabelKey['Record ID#']] = { value: items[i].json[updateKey] };
|
||||
|
||||
data.push(record);
|
||||
}
|
||||
|
||||
|
@ -400,8 +414,9 @@ export class QuickBase implements INodeType {
|
|||
to: tableId,
|
||||
};
|
||||
|
||||
// If not fields are set return at least the record id
|
||||
body.fieldsToReturn = [fieldsLabelKey['Record ID#']];
|
||||
// If no fields are set return at least the record id
|
||||
// 3 == Default Quickbase RecordID #
|
||||
//body.fieldsToReturn = [fieldsLabelKey['Record ID#']];
|
||||
|
||||
if (options.fields) {
|
||||
body.fieldsToReturn = options.fields as string[];
|
||||
|
@ -432,7 +447,8 @@ export class QuickBase implements INodeType {
|
|||
if (operation === 'upsert') {
|
||||
const tableId = this.getNodeParameter('tableId', 0) as string;
|
||||
|
||||
const { fieldsLabelKey, fieldsIdKey } = await getFieldsObject.call(this, tableId);
|
||||
const useFieldIDs = this.getNodeParameter('useFieldIDs', 0) as boolean;
|
||||
|
||||
|
||||
const simple = this.getNodeParameter('simple', 0) as boolean;
|
||||
|
||||
|
@ -451,11 +467,18 @@ export class QuickBase implements INodeType {
|
|||
|
||||
const columnList = columns.split(',').map(column => column.trim());
|
||||
|
||||
if (useFieldIDs) {
|
||||
for (const key of Object.keys(items[i].json)) {
|
||||
record[key] = { value: items[i].json[key] };
|
||||
}
|
||||
} else {
|
||||
const { fieldsLabelKey } = await getFieldsObject.call(this, tableId);
|
||||
for (const key of Object.keys(items[i].json)) {
|
||||
if (fieldsLabelKey.hasOwnProperty(key) && columnList.includes(key)) {
|
||||
record[fieldsLabelKey[key].toString()] = { value: items[i].json[key] };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (items[i].json[updateKey] === undefined) {
|
||||
throw new NodeOperationError(this.getNode(), `The update key ${updateKey} could not be found in the input`);
|
||||
|
@ -472,8 +495,9 @@ export class QuickBase implements INodeType {
|
|||
mergeFieldId,
|
||||
};
|
||||
|
||||
// If not fields are set return at least the record id
|
||||
body.fieldsToReturn = [fieldsLabelKey['Record ID#']];
|
||||
// If no fields are set return at least the record id
|
||||
// 3 == Default Quickbase RecordID #
|
||||
body.fieldsToReturn = [3];
|
||||
|
||||
if (options.fields) {
|
||||
body.fieldsToReturn = options.fields as string[];
|
||||
|
@ -488,7 +512,7 @@ export class QuickBase implements INodeType {
|
|||
for (const record of records) {
|
||||
const data: IDataObject = {};
|
||||
for (const [key, value] of Object.entries(record)) {
|
||||
data[fieldsIdKey[key]] = (value as IDataObject).value;
|
||||
data[key] = (value as IDataObject).value;
|
||||
}
|
||||
responseData.push(data);
|
||||
}
|
||||
|
|
|
@ -69,7 +69,7 @@ export const recordFields = [
|
|||
description: 'The table identifier',
|
||||
},
|
||||
{
|
||||
displayName: 'Columns',
|
||||
displayName: 'Insert Fields',
|
||||
name: 'columns',
|
||||
type: 'string',
|
||||
displayOptions: {
|
||||
|
@ -84,11 +84,30 @@ export const recordFields = [
|
|||
},
|
||||
default: '',
|
||||
required: true,
|
||||
placeholder: 'id,name,description',
|
||||
placeholder: 'Select Fields...',
|
||||
description: 'Comma separated list of the properties which should used as columns for the new rows.',
|
||||
},
|
||||
{
|
||||
displayName: 'Simple',
|
||||
displayName: 'Use Field IDs',
|
||||
name: 'useFieldIDs',
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: [
|
||||
'record',
|
||||
],
|
||||
operation: [
|
||||
'create',
|
||||
'upsert',
|
||||
'update'
|
||||
],
|
||||
},
|
||||
},
|
||||
default: false,
|
||||
description: 'Use Field IDs instead of Field Names in Insert Fields.',
|
||||
},
|
||||
{
|
||||
displayName: 'Simplified Response',
|
||||
name: 'simple',
|
||||
type: 'boolean',
|
||||
displayOptions: {
|
||||
|
@ -122,7 +141,7 @@ export const recordFields = [
|
|||
},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Fields',
|
||||
displayName: 'Return Fields',
|
||||
name: 'fields',
|
||||
type: 'multiOptions',
|
||||
typeOptions: {
|
||||
|
@ -133,7 +152,7 @@ export const recordFields = [
|
|||
},
|
||||
default: [],
|
||||
description: `Specify an array of field ids that will return data for any updates or added record. Record ID (FID 3) is always returned if any field ID is requested.`,
|
||||
},
|
||||
}
|
||||
],
|
||||
},
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
@ -255,54 +274,6 @@ export const recordFields = [
|
|||
},
|
||||
},
|
||||
options: [
|
||||
// {
|
||||
// displayName: 'Group By',
|
||||
// name: 'groupByUi',
|
||||
// placeholder: 'Add Group By',
|
||||
// type: 'fixedCollection',
|
||||
// typeOptions: {
|
||||
// multipleValues: true,
|
||||
// },
|
||||
// default: {},
|
||||
// options: [
|
||||
// {
|
||||
// name: 'groupByValues',
|
||||
// displayName: 'Group By',
|
||||
// values: [
|
||||
// {
|
||||
// displayName: 'Field ID',
|
||||
// name: 'fieldId',
|
||||
// type: 'options',
|
||||
// typeOptions: {
|
||||
// loadOptionsMethod: 'getTableFields',
|
||||
// },
|
||||
// default: '',
|
||||
// description: 'The unique identifier of a field in a table.',
|
||||
// },
|
||||
// {
|
||||
// displayName: 'Grouping',
|
||||
// name: 'grouping',
|
||||
// type: 'options',
|
||||
// options: [
|
||||
// {
|
||||
// name: 'ASC',
|
||||
// value: 'ASC',
|
||||
// },
|
||||
// {
|
||||
// name: 'DESC',
|
||||
// value: 'DESC',
|
||||
// },
|
||||
// {
|
||||
// name: 'Equal Values',
|
||||
// value: 'equal-values',
|
||||
// },
|
||||
// ],
|
||||
// default: 'ASC',
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
{
|
||||
displayName: 'Select',
|
||||
name: 'select',
|
||||
|
|
Loading…
Reference in a new issue