{"id":"48","name":"Workflow management","nodes":[{"name":"On clicking 'execute'","type":"n8n-nodes-base.manualTrigger","position":[240,300],"parameters":{},"typeVersion":1,"id":"node-1e39f4b1"},{"name":"Function","type":"n8n-nodes-base.function","position":[570,300],"parameters":{"functionCode":"//console.log(items[0].json.data);\nlet data = items[0].json.data;\nitems = data.map(i => {\n//  console.log({json:i});\n  return {json:i};\n});\n//console.log(items);\nreturn items;"},"typeVersion":1,"id":"node-417ecd6b"},{"name":"SplitInBatches","type":"n8n-nodes-base.splitInBatches","position":[760,300],"parameters":{"options":{},"batchSize":1},"typeVersion":1,"id":"node-c96bfac7"},{"name":"IF","type":"n8n-nodes-base.if","position":[2090,570],"parameters":{"conditions":{"boolean":[{"value1":"={{$node[\"SplitInBatches\"].context[\"noItemsLeft\"]}}","value2":true}]}},"typeVersion":1,"id":"node-29788593"},{"name":"NoOp","type":"n8n-nodes-base.noOp","position":[2270,550],"parameters":{},"typeVersion":1,"id":"node-44b2d6e0"},{"name":"Airtable","type":"n8n-nodes-base.airtable","position":[1100,200],"parameters":{"table":"Workflows","operation":"list","application":"<YOUR_APP_ID>","additionalOptions":{"fields":[],"filterByFormula":"=workflowId={{$node[\"Get Workflow Details\"].json[\"data\"][\"id\"]}}"}},"credentials":{"airtableApi":"n8n management demo"},"typeVersion":1,"alwaysOutputData":true,"id":"node-46b15162"},{"name":"Airtable1","type":"n8n-nodes-base.airtable","position":[1750,130],"parameters":{"id":"={{$node[\"Airtable\"].json[\"id\"]}}","table":"Workflows","options":{"typecast":true},"operation":"update","application":"<YOUR_APP_ID>"},"credentials":{"airtableApi":"n8n management demo"},"typeVersion":1,"id":"node-96251166"},{"name":"Airtable2","type":"n8n-nodes-base.airtable","position":[1750,320],"parameters":{"table":"Workflows","options":{"typecast":true},"operation":"append","application":"<YOUR_APP_ID>"},"credentials":{"airtableApi":"n8n management demo"},"typeVersion":1,"id":"node-61b6ce15"},{"name":"Set","type":"n8n-nodes-base.set","position":[1590,130],"parameters":{"values":{"string":[{"name":"workflowId","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"id\"]}}"},{"name":"name","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"name\"]}}"},{"name":"errorWorkflowId","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"settings\"][\"errorWorkflow\"]}}"},{"name":"createdAt","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"createdAt\"]}}"},{"name":"updatedAt","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"updatedAt\"]}}"},{"name":"nodes","value":"={{$node[\"Prepare data\"].json[\"fields\"][\"nodes\"]}}"},{"name":"timezone","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"settings\"][\"timezone\"]}}"},{"name":"CRON_details","value":"={{$node[\"Prepare data\"].json[\"fields\"][\"CRON_details\"]}}"},{"name":"rawData","value":"={{$node[\"Prepare data\"].json[\"fields\"][\"rawData\"]}}"}],"boolean":[{"name":"isActive","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"active\"]}}"},{"name":"isCRON","value":"={{$node[\"Prepare data\"].json[\"fields\"][\"isCRON\"]}}"},{"name":"saveManualExecutions","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"settings\"][\"saveManualExecutions\"]}}"},{"name":"isTrigger","value":"={{$node[\"Prepare data\"].json[\"fields\"][\"isTrigger\"]}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"id":"node-1ab7ec7d"},{"name":"Set1","type":"n8n-nodes-base.set","position":[1590,320],"parameters":{"values":{"string":[{"name":"workflowId","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"id\"]}}"},{"name":"name","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"name\"]}}"},{"name":"errorWorkflowId","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"settings\"][\"errorWorkflow\"]}}"},{"name":"createdAt","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"createdAt\"]}}"},{"name":"updatedAt","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"updatedAt\"]}}"},{"name":"nodes","value":"={{$node[\"Prepare data1\"].json[\"fields\"][\"nodes\"]}}"},{"name":"timezone","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"settings\"][\"timezone\"]}}"},{"name":"CRON_details","value":"={{$node[\"Prepare data1\"].json[\"fields\"][\"CRON_details\"]}}"},{"name":"rawData","value":"={{$node[\"Prepare data1\"].json[\"fields\"][\"rawData\"]}}"}],"boolean":[{"name":"isActive","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"active\"]}}"},{"name":"isCRON","value":"={{$node[\"Prepare data1\"].json[\"fields\"][\"isCRON\"]}}"},{"name":"saveManualExecutions","value":"={{$node[\"Get Workflow Details\"].json[\"data\"][\"settings\"][\"saveManualExecutions\"]}}"},{"name":"isTrigger","value":"={{$node[\"Prepare data1\"].json[\"fields\"][\"isTrigger\"]}}"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"id":"node-a989fc39"},{"name":"Get All Workflows","type":"n8n-nodes-base.httpRequest","position":[410,300],"parameters":{"url":"{{ $env.BASE_URL }}","options":{"fullResponse":false},"headerParametersUi":{"parameter":[{"name":"Authorization","value":"<TOKEN>"}]},"allowUnauthorizedCerts":true},"typeVersion":1,"id":"node-0d024bf6"},{"name":"Prepare data","type":"n8n-nodes-base.function","position":[1430,130],"parameters":{"functionCode":"let data = $node[\"Get Workflow Details\"].json[\"data\"];\nlet file = $node[\"Get file link\"].json[\"link\"];\nlet nodes = new Set(data[\"nodes\"].map(i => i.type));\nlet nodes2 = [...nodes];\n//console.log(...nodes);\nlet data2 = data[\"nodes\"].map(i => i.name);\nif(nodes2.includes('n8n-nodes-base.cron')){\n  console.log('Cron found!');\n//  console.log(data);\n  let cron_node = data[\"nodes\"].filter(i => i.type == 'n8n-nodes-base.cron');\n  //console.log(cron_node[0].parameters.triggerTimes.item);\n  items[0].json[\"fields\"][\"isCRON\"]=true;\n  items[0].json[\"fields\"][\"nodes\"]=[...nodes];\n  items[0].json[\"fields\"][\"CRON_details\"]=cron_node[0].parameters.triggerTimes.item;\n  items[0].json[\"fields\"][\"rawData\"]=[{url:file ,filename: 'workflow_'+data[\"id\"]+'__'+data[\"updatedAt\"]+'.json'}];\n} else {  \n  //console.log('Cron not found!');\n  items[0].json[\"fields\"][\"isCRON\"]=false;\n  items[0].json[\"fields\"][\"nodes\"]=[...nodes];\n  items[0].json[\"fields\"][\"rawData\"]=[{url:file ,filename: 'workflow_'+data[\"id\"]+'__'+data[\"updatedAt\"]+'.json'}];\n}\nif(nodes2.some(i => {\n  let regExp = new RegExp(/n8n-nodes-base\\.[\\w]+Trigger/);\n  if(i=='n8n-nodes-base.webhook'){\n    return true;\n  }\n  if(regExp.test(i)){\n    return true;\n  }\n  return false;\n})){\n  items[0].json[\"fields\"][\"isTrigger\"]=true;  \n} else {\n  items[0].json[\"fields\"][\"isTrigger\"]=false;\n}\n  \n//console.log(items);\nreturn items;\n"},"typeVersion":1,"id":"node-4bfb64cd"},{"name":"Prepare data1","type":"n8n-nodes-base.function","position":[1430,320],"parameters":{"functionCode":"let data = $node[\"Get Workflow Details\"].json[\"data\"];\nlet file = $node[\"Get file link\"].json[\"link\"];\nlet nodes = new Set(data[\"nodes\"].map(i => i.type));\nlet nodes2 = [...nodes];\n//console.log(data);\nlet data2 = data[\"nodes\"].map(i => i.name);\nif(nodes2.includes('n8n-nodes-base.cron')){\n  //console.log('Cron found!');\n  let cron_node = data[\"nodes\"].filter(i => i.type == 'n8n-nodes-base.cron');\n  items[0].json={\n    fields:{\n      isCRON:true,\n      nodes:[...nodes],\n      CRON_details:cron_node[0].parameters.triggerTimes.item,\n      rawData:[{url:file ,filename: 'workflow_'+data[\"id\"]+'__'+data[\"updatedAt\"]+'.json'}]\n    }\n  };\n} else {  \n  //console.log('Cron not found!');\n  items[0].json={\n    fields:{\n      isCRON:false,\n      nodes:[...nodes],\n      rawData:[{url:file ,filename: 'workflow_'+data[\"id\"]+'__'+data[\"updatedAt\"]+'.json'}]\n    }\n  };\n}\nif(nodes2.some(i => {\n  let regExp = new RegExp(/n8n-nodes-base\\.[\\w]+Trigger/);\n  if(i=='n8n-nodes-base.webhook'){\n    return true;\n  }\n  if(regExp.test(i)){\n    return true;\n  }\n  return false;\n})){\n  items[0].json[\"fields\"][\"isTrigger\"]=true;  \n} else {\n  items[0].json[\"fields\"][\"isTrigger\"]=false;\n}\n//console.log(items);\nreturn items;\n\n"},"typeVersion":1,"id":"node-d1945cb6"},{"name":"Cron","type":"n8n-nodes-base.cron","position":[250,510],"parameters":{"triggerTimes":{"item":[{"mode":"everyHour","minute":15},{"mode":"everyHour","minute":45}]}},"typeVersion":1,"id":"node-f99f4930"},{"name":"Move Binary Data","type":"n8n-nodes-base.moveBinaryData","position":[1000,-10],"parameters":{"mode":"jsonToBinary","options":{"keepSource":true}},"typeVersion":1,"id":"node-8221fcc4"},{"name":"Dropbox","type":"n8n-nodes-base.dropbox","position":[1140,-10],"parameters":{"path":"=/workflows/workflow_{{$node[\"Get Workflow Details\"].json[\"data\"][\"id\"]}}/workflow_{{$node[\"Get Workflow Details\"].json[\"data\"][\"id\"]}}__{{$node[\"Get Workflow Details\"].json[\"data\"][\"updatedAt\"]}}.json","binaryData":true},"credentials":{"dropboxApi":"My n8n backups"},"typeVersion":1,"id":"node-369d07de"},{"name":"Get Workflow Details","type":"n8n-nodes-base.httpRequest","position":[840,-10],"parameters":{"url":"{{ $env.BASE_URL }}","options":{},"headerParametersUi":{"parameter":[{"name":"Authorization","value":"<TOKEN>"}]},"allowUnauthorizedCerts":true},"typeVersion":1,"id":"node-05299dcd"},{"name":"Get file link","type":"n8n-nodes-base.httpRequest","position":[1290,-10],"parameters":{"url":"{{ $env.BASE_URL }}","options":{},"requestMethod":"POST","bodyParametersUi":{"parameter":[{"name":"path","value":"={{$node[\"Dropbox\"].json[\"path_lower\"]}}"}]},"headerParametersUi":{"parameter":[{"name":"Authorization","value":"<TOKEN>"}]}},"typeVersion":1,"continueOnFail":true,"alwaysOutputData":true,"id":"node-c0e50932"},{"name":"IF Airtable record exists?","type":"n8n-nodes-base.if","position":[1270,200],"parameters":{"conditions":{"boolean":[{"value1":"={{$node[\"Airtable\"].json[\"id\"] != \"\" && $node[\"Airtable\"].json[\"id\"] != null && $node[\"Airtable\"].json[\"id\"] != undefined}}","value2":true}]}},"typeVersion":1,"id":"node-d119b76a"},{"id":"error-b2edf571","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"active":true,"settings":{"errorWorkflow":null,"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3},"connections":{},"meta":{"instanceId":"workflow-cdbb3bdc","versionId":"1.0.0","createdAt":"2025-09-29T07:07:44.287530","updatedAt":"2025-09-29T07:07:44.287569","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"description":"Production-ready workflow: Workflow management. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}