mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
Handle duplicate/delete actions
Code cleanup Improve error handling
This commit is contained in:
@@ -213,7 +213,7 @@ export class FileMaker implements INodeType {
|
|||||||
name: 'responseLayout',
|
name: 'responseLayout',
|
||||||
type: 'options',
|
type: 'options',
|
||||||
typeOptions: {
|
typeOptions: {
|
||||||
loadOptionsMethod: 'getLayouts',
|
loadOptionsMethod: 'getResponseLayouts',
|
||||||
},
|
},
|
||||||
options: [],
|
options: [],
|
||||||
default: '',
|
default: '',
|
||||||
@@ -557,7 +557,7 @@ export class FileMaker implements INodeType {
|
|||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
// create/edit
|
// create/edit
|
||||||
// ----------------------------------
|
// ----------------------------------
|
||||||
{
|
/*{
|
||||||
displayName: 'fieldData',
|
displayName: 'fieldData',
|
||||||
name: 'fieldData',
|
name: 'fieldData',
|
||||||
placeholder: '{"field1": "value", "field2": "value", ...}',
|
placeholder: '{"field1": "value", "field2": "value", ...}',
|
||||||
@@ -572,7 +572,7 @@ export class FileMaker implements INodeType {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},*/
|
||||||
{
|
{
|
||||||
displayName: 'Mod Id',
|
displayName: 'Mod Id',
|
||||||
name: 'modId',
|
name: 'modId',
|
||||||
@@ -679,6 +679,28 @@ export class FileMaker implements INodeType {
|
|||||||
// select them easily
|
// select them easily
|
||||||
async getLayouts(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
async getLayouts(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
||||||
const returnData: INodePropertyOptions[] = [];
|
const returnData: INodePropertyOptions[] = [];
|
||||||
|
|
||||||
|
let layouts;
|
||||||
|
try {
|
||||||
|
layouts = await layoutsApiRequest.call(this);
|
||||||
|
} catch (err) {
|
||||||
|
throw new Error(`FileMaker Error: ${err}`);
|
||||||
|
}
|
||||||
|
for (const layout of layouts) {
|
||||||
|
returnData.push({
|
||||||
|
name: layout.name,
|
||||||
|
value: layout.name,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return returnData;
|
||||||
|
},
|
||||||
|
async getResponseLayouts(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
||||||
|
const returnData: INodePropertyOptions[] = [];
|
||||||
|
returnData.push({
|
||||||
|
name: 'Use main layout',
|
||||||
|
value: '',
|
||||||
|
});
|
||||||
|
|
||||||
let layouts;
|
let layouts;
|
||||||
try {
|
try {
|
||||||
layouts = await layoutsApiRequest.call(this);
|
layouts = await layoutsApiRequest.call(this);
|
||||||
@@ -760,14 +782,16 @@ export class FileMaker implements INodeType {
|
|||||||
|
|
||||||
const credentials = this.getCredentials('FileMaker');
|
const credentials = this.getCredentials('FileMaker');
|
||||||
|
|
||||||
const action = this.getNodeParameter('action', 0) as string;
|
|
||||||
|
|
||||||
if (credentials === undefined) {
|
if (credentials === undefined) {
|
||||||
throw new Error('No credentials got returned!');
|
throw new Error('No credentials got returned!');
|
||||||
}
|
}
|
||||||
const token = await getToken.call(this);
|
|
||||||
|
|
||||||
const staticData = this.getWorkflowStaticData('global');
|
let token;
|
||||||
|
try {
|
||||||
|
token = await getToken.call(this);
|
||||||
|
} catch (e) {
|
||||||
|
throw new Error(`Login fail: ${e}`);
|
||||||
|
}
|
||||||
|
|
||||||
let requestOptions: OptionsWithUri;
|
let requestOptions: OptionsWithUri;
|
||||||
|
|
||||||
@@ -776,6 +800,8 @@ export class FileMaker implements INodeType {
|
|||||||
|
|
||||||
const url = `https://${host}/fmi/data/v1`;
|
const url = `https://${host}/fmi/data/v1`;
|
||||||
|
|
||||||
|
const action = this.getNodeParameter('action', 0) as string;
|
||||||
|
|
||||||
for (let i = 0; i < items.length; i++) {
|
for (let i = 0; i < items.length; i++) {
|
||||||
// Reset all values
|
// Reset all values
|
||||||
requestOptions = {
|
requestOptions = {
|
||||||
@@ -785,7 +811,6 @@ export class FileMaker implements INodeType {
|
|||||||
},
|
},
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
json: true
|
json: true
|
||||||
//rejectUnauthorized: !this.getNodeParameter('allowUnauthorizedCerts', itemIndex, false) as boolean,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const layout = this.getNodeParameter('layout', 0) as string;
|
const layout = this.getNodeParameter('layout', 0) as string;
|
||||||
@@ -802,10 +827,13 @@ export class FileMaker implements INodeType {
|
|||||||
requestOptions.qs = {
|
requestOptions.qs = {
|
||||||
'_offset': this.getNodeParameter('offset', 0),
|
'_offset': this.getNodeParameter('offset', 0),
|
||||||
'_limit': this.getNodeParameter('limit', 0),
|
'_limit': this.getNodeParameter('limit', 0),
|
||||||
'_sort': JSON.stringify(parseSort.call(this)),
|
|
||||||
'portal': JSON.stringify(parsePortals.call(this)),
|
'portal': JSON.stringify(parsePortals.call(this)),
|
||||||
...parseScripts.call(this)
|
...parseScripts.call(this)
|
||||||
};
|
};
|
||||||
|
const sort = parseSort.call(this);
|
||||||
|
if (sort) {
|
||||||
|
requestOptions.body.sort = sort;
|
||||||
|
}
|
||||||
} else if (action === 'find') {
|
} else if (action === 'find') {
|
||||||
requestOptions.uri = url + `/databases/${database}/layouts/${layout}/_find`;
|
requestOptions.uri = url + `/databases/${database}/layouts/${layout}/_find`;
|
||||||
requestOptions.method = 'POST';
|
requestOptions.method = 'POST';
|
||||||
@@ -823,7 +851,7 @@ export class FileMaker implements INodeType {
|
|||||||
} else if (action === 'create') {
|
} else if (action === 'create') {
|
||||||
requestOptions.uri = url + `/databases/${database}/layouts/${layout}/records`;
|
requestOptions.uri = url + `/databases/${database}/layouts/${layout}/records`;
|
||||||
requestOptions.method = 'POST';
|
requestOptions.method = 'POST';
|
||||||
requestOptions.headers['Content-Type'] = 'application/json';
|
requestOptions.headers!['Content-Type'] = 'application/json';
|
||||||
|
|
||||||
//TODO: handle portalData
|
//TODO: handle portalData
|
||||||
requestOptions.body = {
|
requestOptions.body = {
|
||||||
@@ -835,7 +863,7 @@ export class FileMaker implements INodeType {
|
|||||||
const recid = this.getNodeParameter('recid', 0) as string;
|
const recid = this.getNodeParameter('recid', 0) as string;
|
||||||
requestOptions.uri = url + `/databases/${database}/layouts/${layout}/records/${recid}`;
|
requestOptions.uri = url + `/databases/${database}/layouts/${layout}/records/${recid}`;
|
||||||
requestOptions.method = 'PATCH';
|
requestOptions.method = 'PATCH';
|
||||||
requestOptions.headers['Content-Type'] = 'application/json';
|
requestOptions.headers!['Content-Type'] = 'application/json';
|
||||||
|
|
||||||
//TODO: handle portalData
|
//TODO: handle portalData
|
||||||
requestOptions.body = {
|
requestOptions.body = {
|
||||||
@@ -849,6 +877,21 @@ export class FileMaker implements INodeType {
|
|||||||
requestOptions.qs = {
|
requestOptions.qs = {
|
||||||
'script.param': this.getNodeParameter('scriptParam', 0),
|
'script.param': this.getNodeParameter('scriptParam', 0),
|
||||||
};
|
};
|
||||||
|
} else if (action === 'duplicate') {
|
||||||
|
const recid = this.getNodeParameter('recid', 0) as string;
|
||||||
|
requestOptions.uri = url + `/databases/${database}/layouts/${layout}/records/${recid}`;
|
||||||
|
requestOptions.method = 'POST';
|
||||||
|
requestOptions.headers!['Content-Type'] = 'application/json';
|
||||||
|
requestOptions.qs = {
|
||||||
|
...parseScripts.call(this)
|
||||||
|
};
|
||||||
|
} else if (action === 'delete') {
|
||||||
|
const recid = this.getNodeParameter('recid', 0) as string;
|
||||||
|
requestOptions.uri = url + `/databases/${database}/layouts/${layout}/records/${recid}`;
|
||||||
|
requestOptions.method = 'DELETE';
|
||||||
|
requestOptions.qs = {
|
||||||
|
...parseScripts.call(this)
|
||||||
|
};
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`The action "${action}" is not implemented yet!`);
|
throw new Error(`The action "${action}" is not implemented yet!`);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,16 @@ import {
|
|||||||
} from 'n8n-workflow';
|
} from 'n8n-workflow';
|
||||||
|
|
||||||
import { OptionsWithUri } from 'request';
|
import { OptionsWithUri } from 'request';
|
||||||
|
import {Url} from "url";
|
||||||
|
|
||||||
|
interface ScriptsOptions {
|
||||||
|
script?: any; //tslint:disable-line:no-any
|
||||||
|
'script.param'?: any; //tslint:disable-line:no-any
|
||||||
|
'script.prerequest'?: any; //tslint:disable-line:no-any
|
||||||
|
'script.prerequest.param'?: any; //tslint:disable-line:no-any
|
||||||
|
'script.presort'?: any; //tslint:disable-line:no-any
|
||||||
|
'script.presort.param'?: any; //tslint:disable-line:no-any
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Make an API request to ActiveCampaign
|
* Make an API request to ActiveCampaign
|
||||||
*
|
*
|
||||||
@@ -205,12 +213,16 @@ export async function getToken(this: ILoadOptionsFunctions | IExecuteFunctions |
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
|
|
||||||
const errorMessage = error.response.body.messages[0].message + '(' + error.response.body.messages[0].message + ')';
|
let errorMessage;
|
||||||
|
if (error.response) {
|
||||||
|
errorMessage = error.response.body.messages[0].message + '(' + error.response.body.messages[0].message + ')';
|
||||||
|
} else {
|
||||||
|
errorMessage = `${error.message} (${error.name})`;
|
||||||
|
}
|
||||||
if (errorMessage !== undefined) {
|
if (errorMessage !== undefined) {
|
||||||
throw errorMessage;
|
throw errorMessage;
|
||||||
}
|
}
|
||||||
throw error.response.body;
|
throw error.message;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,11 +298,10 @@ export function parseScripts(this: IExecuteFunctions): object | null {
|
|||||||
if (!setScriptAfter && setScriptBefore && setScriptSort) {
|
if (!setScriptAfter && setScriptBefore && setScriptSort) {
|
||||||
return {};
|
return {};
|
||||||
} else {
|
} else {
|
||||||
const scripts = {
|
const scripts = {} as ScriptsOptions;
|
||||||
};
|
|
||||||
if (setScriptAfter) {
|
if (setScriptAfter) {
|
||||||
scripts.script = this.getNodeParameter('scriptAfter', 0);
|
scripts.script = this.getNodeParameter('scriptAfter', 0);
|
||||||
scripts['script.param'] = this.getNodeParameter('scriptAfter', 0);
|
scripts!['script.param'] = this.getNodeParameter('scriptAfter', 0);
|
||||||
}
|
}
|
||||||
if (setScriptBefore) {
|
if (setScriptBefore) {
|
||||||
scripts['script.prerequest'] = this.getNodeParameter('scriptBefore', 0);
|
scripts['script.prerequest'] = this.getNodeParameter('scriptBefore', 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user