diff --git a/packages/workflow/src/node-helpers.ts b/packages/workflow/src/node-helpers.ts index d7ae0b95a74..1ebbe94e519 100644 --- a/packages/workflow/src/node-helpers.ts +++ b/packages/workflow/src/node-helpers.ts @@ -929,20 +929,19 @@ export function getNodeParameters( if (typeof propertyValues !== 'object' || Array.isArray(propertyValues)) { continue; } + + nodePropertyOptions = nodeProperties.options!.find( + (nodePropertyOptions) => nodePropertyOptions.name === itemName, + ) as INodePropertyCollection; + + if (nodePropertyOptions === undefined) { + continue; + } + // Iterate over all items as it contains multiple ones for (const nodeValue of (propertyValues as INodeParameters)[ itemName ] as INodeParameters[]) { - nodePropertyOptions = nodeProperties.options!.find( - (nodePropertyOptions) => nodePropertyOptions.name === itemName, - ) as INodePropertyCollection; - - if (nodePropertyOptions === undefined) { - throw new ApplicationError('Could not find property option', { - extra: { propertyOption: itemName, property: nodeProperties.name }, - }); - } - tempNodePropertiesArray = nodePropertyOptions.values!; tempValue = getNodeParameters( tempNodePropertiesArray, diff --git a/packages/workflow/test/node-helpers.test.ts b/packages/workflow/test/node-helpers.test.ts index 2da320a9536..ea66d1faff3 100644 --- a/packages/workflow/test/node-helpers.test.ts +++ b/packages/workflow/test/node-helpers.test.ts @@ -3615,6 +3615,69 @@ describe('NodeHelpers', () => { }, }, }, + { + description: + 'complex type "fixedCollection" with "multipleValues: true". Skip unknown item names instead of throwing', + input: { + nodePropertiesArray: [ + { + displayName: 'Values', + name: 'values', + type: 'fixedCollection', + typeOptions: { + multipleValues: true, + }, + default: {}, + options: [ + { + name: 'number1', + displayName: 'Number 1', + values: [ + { + displayName: 'Number', + name: 'number', + type: 'number', + default: 0, + }, + ], + }, + ], + }, + ], + nodeValues: { + values: { + number1: [{ number: 42 }], + and: [{ property: 'Status', filter: 'active' }], + }, + }, + }, + output: { + noneDisplayedFalse: { + defaultsFalse: { + values: { + number1: [{ number: 42 }], + }, + }, + defaultsTrue: { + values: { + number1: [{ number: 42 }], + }, + }, + }, + noneDisplayedTrue: { + defaultsFalse: { + values: { + number1: [{ number: 42 }], + }, + }, + defaultsTrue: { + values: { + number1: [{ number: 42 }], + }, + }, + }, + }, + }, ]; for (const testData of tests) {