{ "id": "RKbQHfblpcvMGZ4w", "meta": { "instanceId": "workflow-434d08cb", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:43.474920", "updatedAt": "2025-09-29T07:07:43.474984", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "Form with Dynamic Dropdown Field", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "aa627a35-9bea-4c07-b7e7-26f048564443", "name": "n8n | get wf", "type": "n8n-nodes-base.n8n", "position": [ 540, -180 ], "parameters": { "operation": "get", "workflowId": { "__rl": true, "mode": "id", "value": "={{ $workflow.id }}" }, "requestOptions": {} }, "credentials": { "n8nApi": { "id": "us0k8UE7R2MZPFBK", "name": "n8n account" } }, "typeVersion": 1, "notes": "This n8n node performs automated tasks as part of the workflow." }, { "id": "902a8e45-f4b4-469c-96a6-80002de5f6dc", "name": "n8n | update", "type": "n8n-nodes-base.n8n", "position": [ 1060, -180 ], "parameters": { "operation": "update", "workflowId": { "__rl": true, "mode": "id", "value": "={{ $json.id }}" }, "requestOptions": {}, "workflowObject": "={{ JSON.stringify($json) }}" }, "credentials": { "n8nApi": { "id": "us0k8UE7R2MZPFBK", "name": "n8n account" } }, "typeVersion": 1, "notes": "This n8n node performs automated tasks as part of the workflow." }, { "id": "3e9e5c16-0080-4cba-8a8a-8f24f7266fcb", "name": "On form submission", "type": "n8n-nodes-base.formTrigger", "position": [ 40, -620 ], "webhookId": "3e975d29-df26-49fb-8dcf-abe8fe8bc4e6", "parameters": { "options": {}, "formTitle": "Example Title", "formFields": { "values": [ { "fieldLabel": "Example text field" }, { "fieldType": "dropdown", "fieldLabel": "Example dropdown", "fieldOptions": { "values": [ { "option": "test publieke ruimtes" }, { "option": "Demonstraties" }, { "option": "Demonstraties" }, { "option": "Juridisch medewerker IE-recht Streetlife" }, { "option": "Bamboe" }, { "option": "Klaar?" }, { "option": "Dannu?" } ] } } ] } }, "typeVersion": 2.2, "notes": "This formTrigger node performs automated tasks as part of the workflow." }, { "id": "0b874994-c123-44f8-b0f5-0b365b57d945", "name": "Google Sheets Trigger", "type": "n8n-nodes-base.googleSheetsTrigger", "position": [ -460, -180 ], "parameters": { "options": {}, "pollTimes": { "item": [ { "mode": "everyMinute" } ] }, "sheetName": { "__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Blad1" }, "documentId": { "__rl": true, "mode": "list", "value": "1F73a7uuzLAq916w2JFndumv0JhnCAvOTN-Cn_OOP3uA", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "obsidian-n8n" }, "includeInOutput": "both" }, "credentials": { "googleSheetsTriggerOAuth2Api": { "id": "FV58wiwivBMosfix", "name": "Google Sheets Trigger account" } }, "typeVersion": 1, "notes": "This googleSheetsTrigger node performs automated tasks as part of the workflow." }, { "id": "4c9bfed8-a758-40b9-9c74-53bedc1d1aa3", "name": "Execute Workflow", "type": "n8n-nodes-base.executeWorkflow", "position": [ 240, -620 ], "parameters": { "options": {}, "workflowId": { "__rl": true, "mode": "id", "value": "={{ $workflow.id }}" } }, "typeVersion": 1.1, "notes": "This executeWorkflow node performs automated tasks as part of the workflow." }, { "id": "6e9d4a5a-9583-4b61-aea1-dd4892230e7c", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ -520, -660 ], "parameters": { "width": 960, "height": 240, "content": "## Form setup\n\n- Customize your form fields. \n- The dropdown field will auto-update with values from your data source. \n- Other form fields can be added as needed (limited to one dropdown field).\n- Connect to your workflow that processes the submitted form data.\n\n### Form requires production mode for testing" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "41c364f4-5b1f-42fd-841b-a6f99b585804", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [ -520, -400 ], "parameters": { "width": 440, "height": 400, "content": "## Data source setup\n\n- Connect to your Google Sheet containing dropdown values\n- Node can be replaced with any other data source (API, database)\n- Set timing trigger" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "cda8f803-1773-4df7-90b9-4d8cd0469cd8", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [ -60, -400 ], "parameters": { "width": 260, "height": 400, "content": "## Data formatting\n\n- Extracts needed data from source\n- Renames field to 'value' (do not change this name)" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "e9594ad1-3bb8-4da6-95b3-cb610a17c1bb", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [ 220, -400 ], "parameters": { "height": 400, "content": "## Nested properties\n\n- Transforms the data to the desired format" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "806a2502-5c6c-435c-a20e-8ca0eee92822", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [ 480, -400 ], "parameters": { "height": 400, "content": "## Get Workflow \n\n- Gets the current workflow data" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "385c3e64-9893-4e3f-b789-abbf079fa8b1", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [ 740, -400 ], "parameters": { "height": 400, "content": "## Add Dropdown Values \n- Replaces the nested parameters of the Dropdown Form Field with the nested properties sourced from the data." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "f43324fc-6790-445b-a72b-ae4afb051101", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [ 1000, -400 ], "parameters": { "height": 400, "content": "## Update Form \n\n- Replaces the current workflow’s JSON with the updated JSON containing the new Dropdown values." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "317694bd-590f-4eb4-a53f-f4d5d2d1ab16", "name": "Write JSON", "type": "n8n-nodes-base.code", "position": [ 280, -180 ], "parameters": { "jsCode": "const inputArray = items.map(item => item.json);\n\nconst output = [\n {\n nodes: [\n {\n parameters: {\n formFields: {\n values: [\n {\n fieldOptions: {\n values: inputArray.map(entry => ({ option: entry.value }))\n }\n }\n ]\n }\n }\n }\n ]\n }\n];\n\n// Return the transformed output\nreturn output.map(item => ({ json: item }));" }, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow." }, { "id": "08b3c0b3-3df3-40d9-80ce-bd7c763fdbdb", "name": "Replace values", "type": "n8n-nodes-base.set", "position": [ 820, -180 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "38ef2b43-b903-4e96-b098-9da2d8c1c153", "name": "={{ \n (() => {\n const nodeIndex = $json.nodes.findIndex(\n node => node.parameters?.formFields?.values.some(\n value => value.fieldType === 'dropdown' && value.fieldOptions?.values\n )\n );\n\n if (nodeIndex === -1) return 'No matching node found';\n\n const valueIndex = $json.nodes[nodeIndex].parameters.formFields.values.findIndex(\n value => value.fieldType === 'dropdown' && value.fieldOptions?.values\n );\n\n if (valueIndex === -1) return `nodes[${nodeIndex}].parameters.formFields.values - No matching dropdown value found`;\n\n return `nodes[${nodeIndex}].parameters.formFields.values[${valueIndex}].fieldOptions.values`;\n })()\n}}", "type": "array", "value": "={{ $('Write JSON').item.json.nodes[0].parameters.formFields.values[0].fieldOptions.values }}" } ] }, "includeOtherFields": true }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "07635565-f8ea-4fac-b93c-069fbe065ce8", "name": "Get all values", "type": "n8n-nodes-base.googleSheets", "position": [ -240, -180 ], "parameters": { "options": {}, "sheetName": { "__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Blad1" }, "documentId": { "__rl": true, "mode": "list", "value": "1F73a7uuzLAq916w2JFndumv0JhnCAvOTN-Cn_OOP3uA", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "obsidian-n8n" } }, "credentials": { "googleSheetsOAuth2Api": { "id": "3Pu0wlfxgNYzVqY6", "name": "Google Sheets account" } }, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow." }, { "id": "9ce7bf73-211a-4f5b-b39d-81a2d513a3ef", "name": "Format to 'values'", "type": "n8n-nodes-base.set", "position": [ 20, -180 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "e18aa12e-f277-4257-ba27-9262cc7b866a", "name": "value", "type": "string", "value": "={{ $json.title }}" } ] } }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "error-7ca63492", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [ 1000, 400 ], "parameters": { "message": "Workflow execution error", "options": {} } } ], "active": true, "pinData": {}, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "versionId": "d69a3011-97a6-44e9-9b7e-c8e9a248964a", "connections": { "0b874994-c123-44f8-b0f5-0b365b57d945": { "main": [ [ { "node": "error-handler-0b874994-c123-44f8-b0f5-0b365b57d945-10cbba97", "type": "main", "index": 0 } ] ] }, "07635565-f8ea-4fac-b93c-069fbe065ce8": { "main": [ [ { "node": "error-handler-07635565-f8ea-4fac-b93c-069fbe065ce8-6076147f", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: Form with Dynamic Dropdown Field. This workflow integrates 9 different services: stickyNote, formTrigger, googleSheetsTrigger, code, n8n. It contains 18 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Form with Dynamic Dropdown Field. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }