@n8n-as-code/skills 1.1.3-next.11 → 1.1.3-next.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generatedAt": "2026-03-
|
|
2
|
+
"generatedAt": "2026-03-17T11:31:22.125Z",
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"sourceUrl": "https://docs.n8n.io/llms.txt",
|
|
5
5
|
"totalPages": 1254,
|
|
@@ -8731,6 +8731,66 @@
|
|
|
8731
8731
|
},
|
|
8732
8732
|
{
|
|
8733
8733
|
"id": "page-0091",
|
|
8734
|
+
"title": "Use case",
|
|
8735
|
+
"url": "https://docs.n8n.io/courses/level-two/chapter-5/chapter-5.0/index.md",
|
|
8736
|
+
"urlPath": "courses/level-two/chapter-5/chapter-5.0/index.md",
|
|
8737
|
+
"category": "tutorials",
|
|
8738
|
+
"subcategory": null,
|
|
8739
|
+
"nodeName": null,
|
|
8740
|
+
"nodeType": null,
|
|
8741
|
+
"content": {
|
|
8742
|
+
"markdown": "# Automating a business workflow\n\nRemember [our friend Nathan](../../../level-one/chapter-3/)?\n\n**Nathan 🙋:** Hello, it's me again. My manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.\\\n**You 👩🔧:** More work and responsibility. Congratulations, I guess. What do you need to do now?\\\n**Nathan 🙋:** I got access to all our sales data and I'm now responsible for creating two reports: one for regional sales and one for orders prices. They're based on data from different sources and come in different formats.\\\n**You 👩🔧:** Sounds like a lot of manual work, but the kind that can be automated. Let's do it!\n\n## Workflow design\n\nNow that we know what Nathan wants to automate, let's list the steps he needs to take to achieve this:\n\n1. Get and combine data from all necessary sources.\n1. Sort the data and format the dates.\n1. Write binary files.\n1. Send notifications using email and Discord.\n\nn8n provides [core nodes](../../../../integrations/builtin/node-types/#core-nodes) for all these steps. This use case is somewhat complex. We should build it from three separate workflows:\n\n1. A workflow that merges the company data with external information.\n1. A workflow that generates the reports.\n1. A workflow that monitors errors in the second workflow.\n\n## Workflow prerequisites\n\nTo build the workflows, you will need the following:\n\n- An [Airtable](https://airtable.com/) account and [credentials](../../../../integrations/builtin/credentials/airtable/).\n- A [Google](https://www.google.com/account/about/) account and [credentials](../../../../integrations/builtin/credentials/google/) to access Gmail.\n- A [Discord](https://discord.com/) account and webhook URL (you receive this using email when you sign up for this course).\n\nNext, you will build these three workflows with step-by-step instructions.\n",
|
|
8743
|
+
"excerpt": "# Automating a business workflow Remember [our friend Nathan](../../../level-one/chapter-3/)? **Nathan 🙋:** Hello, it's me again. My manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.\\ **You 👩🔧:** More work and responsibility. Congratulations, I guess. What do you need to do now?\\ **Nathan 🙋:** I got access to all our sales data and I'm now responsible for creating two reports: one for regional sales and one for orders price...",
|
|
8744
|
+
"sections": [
|
|
8745
|
+
{
|
|
8746
|
+
"title": "Automating a business workflow",
|
|
8747
|
+
"level": 1,
|
|
8748
|
+
"content": "Remember [our friend Nathan](../../../level-one/chapter-3/)?\n\n**Nathan 🙋:** Hello, it's me again. My manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.\\\n**You 👩🔧:** More work and responsibility. Congratulations, I guess. What do you need to do now?\\\n**Nathan 🙋:** I got access to all our sales data and I'm now responsible for creating two reports: one for regional sales and one for orders prices. They're based on data from different sources and come in different formats.\\\n**You 👩🔧:** Sounds like a lot of manual work, but the kind that can be automated. Let's do it!"
|
|
8749
|
+
}
|
|
8750
|
+
]
|
|
8751
|
+
},
|
|
8752
|
+
"metadata": {
|
|
8753
|
+
"keywords": [
|
|
8754
|
+
"case",
|
|
8755
|
+
"automating",
|
|
8756
|
+
"business",
|
|
8757
|
+
"workflow",
|
|
8758
|
+
"design",
|
|
8759
|
+
"prerequisites"
|
|
8760
|
+
],
|
|
8761
|
+
"useCases": [],
|
|
8762
|
+
"operations": [],
|
|
8763
|
+
"codeExamples": 0,
|
|
8764
|
+
"complexity": "beginner",
|
|
8765
|
+
"readingTime": "2 min",
|
|
8766
|
+
"contentLength": 1880,
|
|
8767
|
+
"relatedPages": []
|
|
8768
|
+
},
|
|
8769
|
+
"searchIndex": {
|
|
8770
|
+
"fullText": "use case # automating a business workflow\n\nremember [our friend nathan](../../../level-one/chapter-3/)?\n\n**nathan 🙋:** hello, it's me again. my manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.\\\n**you 👩🔧:** more work and responsibility. congratulations, i guess. what do you need to do now?\\\n**nathan 🙋:** i got access to all our sales data and i'm now responsible for creating two reports: one for regional sales and one for orders prices. they're based on data from different sources and come in different formats.\\\n**you 👩🔧:** sounds like a lot of manual work, but the kind that can be automated. let's do it!\n\n## workflow design\n\nnow that we know what nathan wants to automate, let's list the steps he needs to take to achieve this:\n\n1. get and combine data from all necessary sources.\n1. sort the data and format the dates.\n1. write binary files.\n1. send notifications using email and discord.\n\nn8n provides [core nodes](../../../../integrations/builtin/node-types/#core-nodes) for all these steps. this use case is somewhat complex. we should build it from three separate workflows:\n\n1. a workflow that merges the company data with external information.\n1. a workflow that generates the reports.\n1. a workflow that monitors errors in the second workflow.\n\n## workflow prerequisites\n\nto build the workflows, you will need the following:\n\n- an [airtable](https://airtable.com/) account and [credentials](../../../../integrations/builtin/credentials/airtable/).\n- a [google](https://www.google.com/account/about/) account and [credentials](../../../../integrations/builtin/credentials/google/) to access gmail.\n- a [discord](https://discord.com/) account and webhook url (you receive this using email when you sign up for this course).\n\nnext, you will build these three workflows with step-by-step instructions.\n automating a business workflow",
|
|
8771
|
+
"importantTerms": [
|
|
8772
|
+
"workflow",
|
|
8773
|
+
"that",
|
|
8774
|
+
"data",
|
|
8775
|
+
"nathan",
|
|
8776
|
+
"with",
|
|
8777
|
+
"this",
|
|
8778
|
+
"account",
|
|
8779
|
+
"credentials",
|
|
8780
|
+
"from",
|
|
8781
|
+
"discord",
|
|
8782
|
+
"integrations",
|
|
8783
|
+
"builtin",
|
|
8784
|
+
"build",
|
|
8785
|
+
"workflows",
|
|
8786
|
+
"airtable",
|
|
8787
|
+
"https",
|
|
8788
|
+
"google"
|
|
8789
|
+
]
|
|
8790
|
+
}
|
|
8791
|
+
},
|
|
8792
|
+
{
|
|
8793
|
+
"id": "page-0092",
|
|
8734
8794
|
"title": "Workflow 1",
|
|
8735
8795
|
"url": "https://docs.n8n.io/courses/level-two/chapter-5/chapter-5.1/index.md",
|
|
8736
8796
|
"urlPath": "courses/level-two/chapter-5/chapter-5.1/index.md",
|
|
@@ -8794,7 +8854,7 @@
|
|
|
8794
8854
|
}
|
|
8795
8855
|
},
|
|
8796
8856
|
{
|
|
8797
|
-
"id": "page-
|
|
8857
|
+
"id": "page-0093",
|
|
8798
8858
|
"title": "Workflow 2",
|
|
8799
8859
|
"url": "https://docs.n8n.io/courses/level-two/chapter-5/chapter-5.2/index.md",
|
|
8800
8860
|
"urlPath": "courses/level-two/chapter-5/chapter-5.2/index.md",
|
|
@@ -8895,7 +8955,7 @@
|
|
|
8895
8955
|
}
|
|
8896
8956
|
},
|
|
8897
8957
|
{
|
|
8898
|
-
"id": "page-
|
|
8958
|
+
"id": "page-0094",
|
|
8899
8959
|
"title": "Workflow 3",
|
|
8900
8960
|
"url": "https://docs.n8n.io/courses/level-two/chapter-5/chapter-5.3/index.md",
|
|
8901
8961
|
"urlPath": "courses/level-two/chapter-5/chapter-5.3/index.md",
|
|
@@ -8950,66 +9010,6 @@
|
|
|
8950
9010
|
]
|
|
8951
9011
|
}
|
|
8952
9012
|
},
|
|
8953
|
-
{
|
|
8954
|
-
"id": "page-0094",
|
|
8955
|
-
"title": "Use case",
|
|
8956
|
-
"url": "https://docs.n8n.io/courses/level-two/chapter-5/chapter-5.0/index.md",
|
|
8957
|
-
"urlPath": "courses/level-two/chapter-5/chapter-5.0/index.md",
|
|
8958
|
-
"category": "tutorials",
|
|
8959
|
-
"subcategory": null,
|
|
8960
|
-
"nodeName": null,
|
|
8961
|
-
"nodeType": null,
|
|
8962
|
-
"content": {
|
|
8963
|
-
"markdown": "# Automating a business workflow\n\nRemember [our friend Nathan](../../../level-one/chapter-3/)?\n\n**Nathan 🙋:** Hello, it's me again. My manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.\\\n**You 👩🔧:** More work and responsibility. Congratulations, I guess. What do you need to do now?\\\n**Nathan 🙋:** I got access to all our sales data and I'm now responsible for creating two reports: one for regional sales and one for orders prices. They're based on data from different sources and come in different formats.\\\n**You 👩🔧:** Sounds like a lot of manual work, but the kind that can be automated. Let's do it!\n\n## Workflow design\n\nNow that we know what Nathan wants to automate, let's list the steps he needs to take to achieve this:\n\n1. Get and combine data from all necessary sources.\n1. Sort the data and format the dates.\n1. Write binary files.\n1. Send notifications using email and Discord.\n\nn8n provides [core nodes](../../../../integrations/builtin/node-types/#core-nodes) for all these steps. This use case is somewhat complex. We should build it from three separate workflows:\n\n1. A workflow that merges the company data with external information.\n1. A workflow that generates the reports.\n1. A workflow that monitors errors in the second workflow.\n\n## Workflow prerequisites\n\nTo build the workflows, you will need the following:\n\n- An [Airtable](https://airtable.com/) account and [credentials](../../../../integrations/builtin/credentials/airtable/).\n- A [Google](https://www.google.com/account/about/) account and [credentials](../../../../integrations/builtin/credentials/google/) to access Gmail.\n- A [Discord](https://discord.com/) account and webhook URL (you receive this using email when you sign up for this course).\n\nNext, you will build these three workflows with step-by-step instructions.\n",
|
|
8964
|
-
"excerpt": "# Automating a business workflow Remember [our friend Nathan](../../../level-one/chapter-3/)? **Nathan 🙋:** Hello, it's me again. My manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.\\ **You 👩🔧:** More work and responsibility. Congratulations, I guess. What do you need to do now?\\ **Nathan 🙋:** I got access to all our sales data and I'm now responsible for creating two reports: one for regional sales and one for orders price...",
|
|
8965
|
-
"sections": [
|
|
8966
|
-
{
|
|
8967
|
-
"title": "Automating a business workflow",
|
|
8968
|
-
"level": 1,
|
|
8969
|
-
"content": "Remember [our friend Nathan](../../../level-one/chapter-3/)?\n\n**Nathan 🙋:** Hello, it's me again. My manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.\\\n**You 👩🔧:** More work and responsibility. Congratulations, I guess. What do you need to do now?\\\n**Nathan 🙋:** I got access to all our sales data and I'm now responsible for creating two reports: one for regional sales and one for orders prices. They're based on data from different sources and come in different formats.\\\n**You 👩🔧:** Sounds like a lot of manual work, but the kind that can be automated. Let's do it!"
|
|
8970
|
-
}
|
|
8971
|
-
]
|
|
8972
|
-
},
|
|
8973
|
-
"metadata": {
|
|
8974
|
-
"keywords": [
|
|
8975
|
-
"case",
|
|
8976
|
-
"automating",
|
|
8977
|
-
"business",
|
|
8978
|
-
"workflow",
|
|
8979
|
-
"design",
|
|
8980
|
-
"prerequisites"
|
|
8981
|
-
],
|
|
8982
|
-
"useCases": [],
|
|
8983
|
-
"operations": [],
|
|
8984
|
-
"codeExamples": 0,
|
|
8985
|
-
"complexity": "beginner",
|
|
8986
|
-
"readingTime": "2 min",
|
|
8987
|
-
"contentLength": 1880,
|
|
8988
|
-
"relatedPages": []
|
|
8989
|
-
},
|
|
8990
|
-
"searchIndex": {
|
|
8991
|
-
"fullText": "use case # automating a business workflow\n\nremember [our friend nathan](../../../level-one/chapter-3/)?\n\n**nathan 🙋:** hello, it's me again. my manager was so impressed with my first workflow automation solution that she entrusted me with more responsibility.\\\n**you 👩🔧:** more work and responsibility. congratulations, i guess. what do you need to do now?\\\n**nathan 🙋:** i got access to all our sales data and i'm now responsible for creating two reports: one for regional sales and one for orders prices. they're based on data from different sources and come in different formats.\\\n**you 👩🔧:** sounds like a lot of manual work, but the kind that can be automated. let's do it!\n\n## workflow design\n\nnow that we know what nathan wants to automate, let's list the steps he needs to take to achieve this:\n\n1. get and combine data from all necessary sources.\n1. sort the data and format the dates.\n1. write binary files.\n1. send notifications using email and discord.\n\nn8n provides [core nodes](../../../../integrations/builtin/node-types/#core-nodes) for all these steps. this use case is somewhat complex. we should build it from three separate workflows:\n\n1. a workflow that merges the company data with external information.\n1. a workflow that generates the reports.\n1. a workflow that monitors errors in the second workflow.\n\n## workflow prerequisites\n\nto build the workflows, you will need the following:\n\n- an [airtable](https://airtable.com/) account and [credentials](../../../../integrations/builtin/credentials/airtable/).\n- a [google](https://www.google.com/account/about/) account and [credentials](../../../../integrations/builtin/credentials/google/) to access gmail.\n- a [discord](https://discord.com/) account and webhook url (you receive this using email when you sign up for this course).\n\nnext, you will build these three workflows with step-by-step instructions.\n automating a business workflow",
|
|
8992
|
-
"importantTerms": [
|
|
8993
|
-
"workflow",
|
|
8994
|
-
"that",
|
|
8995
|
-
"data",
|
|
8996
|
-
"nathan",
|
|
8997
|
-
"with",
|
|
8998
|
-
"this",
|
|
8999
|
-
"account",
|
|
9000
|
-
"credentials",
|
|
9001
|
-
"from",
|
|
9002
|
-
"discord",
|
|
9003
|
-
"integrations",
|
|
9004
|
-
"builtin",
|
|
9005
|
-
"build",
|
|
9006
|
-
"workflows",
|
|
9007
|
-
"airtable",
|
|
9008
|
-
"https",
|
|
9009
|
-
"google"
|
|
9010
|
-
]
|
|
9011
|
-
}
|
|
9012
|
-
},
|
|
9013
9013
|
{
|
|
9014
9014
|
"id": "page-0095",
|
|
9015
9015
|
"title": "Overview",
|
|
@@ -9419,109 +9419,6 @@
|
|
|
9419
9419
|
},
|
|
9420
9420
|
{
|
|
9421
9421
|
"id": "page-0100",
|
|
9422
|
-
"title": "Expressions for data transformation",
|
|
9423
|
-
"url": "https://docs.n8n.io/data/expressions-for-transformation/index.md",
|
|
9424
|
-
"urlPath": "data/expressions-for-transformation/index.md",
|
|
9425
|
-
"category": "data",
|
|
9426
|
-
"subcategory": null,
|
|
9427
|
-
"nodeName": null,
|
|
9428
|
-
"nodeType": null,
|
|
9429
|
-
"content": {
|
|
9430
|
-
"markdown": "# Expressions for data transformation\n\nYou can use expression transformation functions anywhere expressions are supported in n8n.\n\nHowever, if your main goal is to transform data using expressions without performing any other operations, use the **Edit Fields (Set)** node. This node is designed specifically for data transformation, providing a clean interface to:\n\n- Add new fields with expression-based values\n- Modify existing field values using transformation functions\n- Remove or rename fields\n\nThis keeps your workflow organized by separating data transformation from business logic, making it easier to understand and maintain.\n\n**Best practice**: Instead of adding complex expressions to multiple parameters across different nodes, use Edit Fields to prepare your data first, then pass the transformed data to subsequent nodes.\n\nSee [Expression reference](../expression-reference/) for more information and examples.\n\n### Example: Get data from webhook body\n\nConsider the following scenario: you have a webhook trigger that receives data through the webhook body. You want to extract some of that data for use in the workflow.\n\nYour webhook data looks similar to this:\n\n```\n[\n {\n \"headers\": {\n \"host\": \"n8n.instance.address\",\n ...\n },\n \"params\": {},\n \"query\": {},\n \"body\": {\n \"name\": \"Jim\",\n \"age\": 30,\n \"city\": \"New York\"\n }\n }\n]\n```\n\nIn the next node in the workflow, you want to get just the value of `city`. You can use the following expression:\n\n```\n{{$json.body.city}}\n```\n\nThis expression:\n\n1. Accesses the incoming JSON-formatted data using n8n's custom `$json` variable.\n1. Finds the value of `city` (in this example, \"New York\"). Note that this example uses JMESPath syntax to query the JSON data. You can also write this expression as `{{$json['body']['city']}}`.\n\n### Using expressions in credentials\n\nYou can also use expressions in credential fields. When you reference data using expressions (for example, `{{$json.body.city}}` or `{{ $('Webhook').item.json.headers.authorization }}`), n8n evaluates the expression within the context of the current workflow execution.\n\nThis means that:\n\n- Expressions in credentials can access data available in the current execution context, including data from previous nodes.\n- Each workflow execution has its own data context.\n- Expressions are evaluated per execution, so different executions don't share data.\n\nFor example, if a webhook node receives an access token and you reference it in a credential field using an expression, the value is resolved using the execution data of that specific workflow run.\n\n## Example: Writing longer JavaScript as expressions\n\nYou can do things like variable assignments or multiple statements in an expression, but you need to wrap your code using the syntax for an Immediately Invoked Function Expression (IIFE).\n\nThe following code use the Luxon date and time library to find the time between two dates in months. We surround the code in both the handlebar brackets for an expression and the IIFE syntax.\n\n```\n{{(()=>{\n let end = DateTime.fromISO('2017-03-13');\n let start = DateTime.fromISO('2017-02-13');\n let diffInMonths = end.diff(start, 'months');\n return diffInMonths.toObject();\n})()}}\n```\n\n## Common issues\n\nHere are some common errors and issues related to [expressions](../expressions/) and steps to resolve or troubleshoot them.\n\n### The 'JSON Output' in item 0 contains invalid JSON\n\nThis error occurs when you use JSON mode but don't provide a valid JSON object. Depending on the problem with the JSON object, the error sometimes displays as `The 'JSON Output' in item 0 does not contain a valid JSON object`.\n\nTo resolve this, make sure that the code you provide is valid JSON:\n\n- Check the JSON with a [JSON validator](https://jsonlint.com/).\n- Check that your JSON object doesn't reference undefined input data. This may occur if the incoming data doesn't always include the same fields.\n\n### Can't get data for expression\n\nThis error occurs when n8n can't retrieve the data referenced by an expression. Often, this happens when the preceding node hasn't been run yet.\n\nAnother variation of this may appear as `Referenced node is unexecuted`. In that case, the full text of this error will tell you the exact node that isn't executing in this format:\n\n> An expression references the node '<node-name>', but it hasn't been executed yet. Either change the expression, or re-wire your workflow to make sure that node executes first.\n\nTo begin troubleshooting, test the workflow up to the named node.\n\nFor nodes that use JavaScript or other custom code, you can check if a previous node has executed before trying to use its value by checking the following:\n\n```\n$(\"<node-name>\").isExecuted\n```\n\nAs an example, this JSON references the parameters of the input data. This error will display if you test this step without connecting it to another node:\n\n```\n{\n \"my_field_1\": {{ $input.params }}\n}\n```\n\n### Invalid syntax\n\nThis error occurs when you use an expression that has a syntax error.\n\nFor example, the expression in this JSON includes a trailing period, which results in an invalid syntax error:\n\n```\n{\n \"my_field_1\": \"value\",\n \"my_field_2\": {{ $('If').item.json. }}\n}\n```\n\nTo resolve this error, check your [expression syntax](../expressions/) to make sure it follows the expected format.\n",
|
|
9431
|
-
"excerpt": "# Expressions for data transformation You can use expression transformation functions anywhere expressions are supported in n8n. However, if your main goal is to transform data using expressions without performing any other operations, use the **Edit Fields (Set)** node. This node is designed specifically for data transformation, providing a clean interface to: - Add new fields with expression-based values - Modify existing field values using transformation functions - Remove or rename fields...",
|
|
9432
|
-
"sections": [
|
|
9433
|
-
{
|
|
9434
|
-
"title": "Expressions for data transformation",
|
|
9435
|
-
"level": 1,
|
|
9436
|
-
"content": "You can use expression transformation functions anywhere expressions are supported in n8n.\n\nHowever, if your main goal is to transform data using expressions without performing any other operations, use the **Edit Fields (Set)** node. This node is designed specifically for data transformation, providing a clean interface to:\n\n- Add new fields with expression-based values\n- Modify existing field values using transformation functions\n- Remove or rename fields\n\nThis keeps your workflow organized by separating data transformation from business logic, making it easier to understand and maintain.\n\n**Best practice**: Instead of adding complex expressions to multiple parameters across different nodes, use Edit Fields to prepare your data first, then pass the transformed data to subsequent nodes.\n\nSee [Expression reference](../expression-reference/) for more information and examples."
|
|
9437
|
-
}
|
|
9438
|
-
]
|
|
9439
|
-
},
|
|
9440
|
-
"metadata": {
|
|
9441
|
-
"keywords": [
|
|
9442
|
-
"expressions",
|
|
9443
|
-
"data",
|
|
9444
|
-
"transformation",
|
|
9445
|
-
"example:",
|
|
9446
|
-
"from",
|
|
9447
|
-
"webhook",
|
|
9448
|
-
"body",
|
|
9449
|
-
"using",
|
|
9450
|
-
"credentials",
|
|
9451
|
-
"writing",
|
|
9452
|
-
"longer",
|
|
9453
|
-
"javascript",
|
|
9454
|
-
"common",
|
|
9455
|
-
"issues",
|
|
9456
|
-
"'json",
|
|
9457
|
-
"output'",
|
|
9458
|
-
"item",
|
|
9459
|
-
"contains",
|
|
9460
|
-
"invalid",
|
|
9461
|
-
"json",
|
|
9462
|
-
"can't",
|
|
9463
|
-
"expression",
|
|
9464
|
-
"syntax"
|
|
9465
|
-
],
|
|
9466
|
-
"useCases": [
|
|
9467
|
-
"Get data from webhook body",
|
|
9468
|
-
"you have a webhook trigger that receives data through the webhook body. You want to extract some of that data for use in the workflow.",
|
|
9469
|
-
"Writing longer JavaScript as expressions"
|
|
9470
|
-
],
|
|
9471
|
-
"operations": [],
|
|
9472
|
-
"codeExamples": 6,
|
|
9473
|
-
"complexity": "intermediate",
|
|
9474
|
-
"readingTime": "5 min",
|
|
9475
|
-
"contentLength": 5366,
|
|
9476
|
-
"relatedPages": []
|
|
9477
|
-
},
|
|
9478
|
-
"searchIndex": {
|
|
9479
|
-
"fullText": "expressions for data transformation # expressions for data transformation\n\nyou can use expression transformation functions anywhere expressions are supported in n8n.\n\nhowever, if your main goal is to transform data using expressions without performing any other operations, use the **edit fields (set)** node. this node is designed specifically for data transformation, providing a clean interface to:\n\n- add new fields with expression-based values\n- modify existing field values using transformation functions\n- remove or rename fields\n\nthis keeps your workflow organized by separating data transformation from business logic, making it easier to understand and maintain.\n\n**best practice**: instead of adding complex expressions to multiple parameters across different nodes, use edit fields to prepare your data first, then pass the transformed data to subsequent nodes.\n\nsee [expression reference](../expression-reference/) for more information and examples.\n\n### example: get data from webhook body\n\nconsider the following scenario: you have a webhook trigger that receives data through the webhook body. you want to extract some of that data for use in the workflow.\n\nyour webhook data looks similar to this:\n\n```\n[\n {\n \"headers\": {\n \"host\": \"n8n.instance.address\",\n ...\n },\n \"params\": {},\n \"query\": {},\n \"body\": {\n \"name\": \"jim\",\n \"age\": 30,\n \"city\": \"new york\"\n }\n }\n]\n```\n\nin the next node in the workflow, you want to get just the value of `city`. you can use the following expression:\n\n```\n{{$json.body.city}}\n```\n\nthis expression:\n\n1. accesses the incoming json-formatted data using n8n's custom `$json` variable.\n1. finds the value of `city` (in this example, \"new york\"). note that this example uses jmespath syntax to query the json data. you can also write this expression as `{{$json['body']['city']}}`.\n\n### using expressions in credentials\n\nyou can also use expressions in credential fields. when you reference data using expressions (for example, `{{$json.body.city}}` or `{{ $('webhook').item.json.headers.authorization }}`), n8n evaluates the expression within the context of the current workflow execution.\n\nthis means that:\n\n- expressions in credentials can access data available in the current execution context, including data from previous nodes.\n- each workflow execution has its own data context.\n- expressions are evaluated per execution, so different executions don't share data.\n\nfor example, if a webhook node receives an access token and you reference it in a credential field using an expression, the value is resolved using the execution data of that specific workflow run.\n\n## example: writing longer javascript as expressions\n\nyou can do things like variable assignments or multiple statements in an expression, but you need to wrap your code using the syntax for an immediately invoked function expression (iife).\n\nthe following code use the luxon date and time library to find the time between two dates in months. we surround the code in both the handlebar brackets for an expression and the iife syntax.\n\n```\n{{(()=>{\n let end = datetime.fromiso('2017-03-13');\n let start = datetime.fromiso('2017-02-13');\n let diffinmonths = end.diff(start, 'months');\n return diffinmonths.toobject();\n})()}}\n```\n\n## common issues\n\nhere are some common errors and issues related to [expressions](../expressions/) and steps to resolve or troubleshoot them.\n\n### the 'json output' in item 0 contains invalid json\n\nthis error occurs when you use json mode but don't provide a valid json object. depending on the problem with the json object, the error sometimes displays as `the 'json output' in item 0 does not contain a valid json object`.\n\nto resolve this, make sure that the code you provide is valid json:\n\n- check the json with a [json validator](https://jsonlint.com/).\n- check that your json object doesn't reference undefined input data. this may occur if the incoming data doesn't always include the same fields.\n\n### can't get data for expression\n\nthis error occurs when n8n can't retrieve the data referenced by an expression. often, this happens when the preceding node hasn't been run yet.\n\nanother variation of this may appear as `referenced node is unexecuted`. in that case, the full text of this error will tell you the exact node that isn't executing in this format:\n\n> an expression references the node '<node-name>', but it hasn't been executed yet. either change the expression, or re-wire your workflow to make sure that node executes first.\n\nto begin troubleshooting, test the workflow up to the named node.\n\nfor nodes that use javascript or other custom code, you can check if a previous node has executed before trying to use its value by checking the following:\n\n```\n$(\"<node-name>\").isexecuted\n```\n\nas an example, this json references the parameters of the input data. this error will display if you test this step without connecting it to another node:\n\n```\n{\n \"my_field_1\": {{ $input.params }}\n}\n```\n\n### invalid syntax\n\nthis error occurs when you use an expression that has a syntax error.\n\nfor example, the expression in this json includes a trailing period, which results in an invalid syntax error:\n\n```\n{\n \"my_field_1\": \"value\",\n \"my_field_2\": {{ $('if').item.json. }}\n}\n```\n\nto resolve this error, check your [expression syntax](../expressions/) to make sure it follows the expected format.\n expressions for data transformation",
|
|
9480
|
-
"importantTerms": [
|
|
9481
|
-
"data",
|
|
9482
|
-
"this",
|
|
9483
|
-
"json",
|
|
9484
|
-
"expression",
|
|
9485
|
-
"expressions",
|
|
9486
|
-
"node",
|
|
9487
|
-
"that",
|
|
9488
|
-
"error",
|
|
9489
|
-
"your",
|
|
9490
|
-
"using",
|
|
9491
|
-
"workflow",
|
|
9492
|
-
"example",
|
|
9493
|
-
"transformation",
|
|
9494
|
-
"syntax",
|
|
9495
|
-
"fields",
|
|
9496
|
-
"webhook",
|
|
9497
|
-
"body",
|
|
9498
|
-
"city",
|
|
9499
|
-
"reference",
|
|
9500
|
-
"value",
|
|
9501
|
-
"when",
|
|
9502
|
-
"execution",
|
|
9503
|
-
"code",
|
|
9504
|
-
"nodes",
|
|
9505
|
-
"following",
|
|
9506
|
-
"item",
|
|
9507
|
-
"object",
|
|
9508
|
-
"check",
|
|
9509
|
-
"with",
|
|
9510
|
-
"from",
|
|
9511
|
-
"name",
|
|
9512
|
-
"context",
|
|
9513
|
-
"resolve",
|
|
9514
|
-
"invalid",
|
|
9515
|
-
"occurs",
|
|
9516
|
-
"valid",
|
|
9517
|
-
"make",
|
|
9518
|
-
"sure",
|
|
9519
|
-
"input"
|
|
9520
|
-
]
|
|
9521
|
-
}
|
|
9522
|
-
},
|
|
9523
|
-
{
|
|
9524
|
-
"id": "page-0101",
|
|
9525
9422
|
"title": "Expressions versus data nodes",
|
|
9526
9423
|
"url": "https://docs.n8n.io/data/expressions/index.md",
|
|
9527
9424
|
"urlPath": "data/expressions/index.md",
|
|
@@ -9601,7 +9498,7 @@
|
|
|
9601
9498
|
}
|
|
9602
9499
|
},
|
|
9603
9500
|
{
|
|
9604
|
-
"id": "page-
|
|
9501
|
+
"id": "page-0101",
|
|
9605
9502
|
"title": "Approaches for transforming data",
|
|
9606
9503
|
"url": "https://docs.n8n.io/data/transforming-data/index.md",
|
|
9607
9504
|
"urlPath": "data/transforming-data/index.md",
|
|
@@ -9657,6 +9554,109 @@
|
|
|
9657
9554
|
]
|
|
9658
9555
|
}
|
|
9659
9556
|
},
|
|
9557
|
+
{
|
|
9558
|
+
"id": "page-0102",
|
|
9559
|
+
"title": "Expressions for data transformation",
|
|
9560
|
+
"url": "https://docs.n8n.io/data/expressions-for-transformation/index.md",
|
|
9561
|
+
"urlPath": "data/expressions-for-transformation/index.md",
|
|
9562
|
+
"category": "data",
|
|
9563
|
+
"subcategory": null,
|
|
9564
|
+
"nodeName": null,
|
|
9565
|
+
"nodeType": null,
|
|
9566
|
+
"content": {
|
|
9567
|
+
"markdown": "# Expressions for data transformation\n\nYou can use expression transformation functions anywhere expressions are supported in n8n.\n\nHowever, if your main goal is to transform data using expressions without performing any other operations, use the **Edit Fields (Set)** node. This node is designed specifically for data transformation, providing a clean interface to:\n\n- Add new fields with expression-based values\n- Modify existing field values using transformation functions\n- Remove or rename fields\n\nThis keeps your workflow organized by separating data transformation from business logic, making it easier to understand and maintain.\n\n**Best practice**: Instead of adding complex expressions to multiple parameters across different nodes, use Edit Fields to prepare your data first, then pass the transformed data to subsequent nodes.\n\nSee [Expression reference](../expression-reference/) for more information and examples.\n\n### Example: Get data from webhook body\n\nConsider the following scenario: you have a webhook trigger that receives data through the webhook body. You want to extract some of that data for use in the workflow.\n\nYour webhook data looks similar to this:\n\n```\n[\n {\n \"headers\": {\n \"host\": \"n8n.instance.address\",\n ...\n },\n \"params\": {},\n \"query\": {},\n \"body\": {\n \"name\": \"Jim\",\n \"age\": 30,\n \"city\": \"New York\"\n }\n }\n]\n```\n\nIn the next node in the workflow, you want to get just the value of `city`. You can use the following expression:\n\n```\n{{$json.body.city}}\n```\n\nThis expression:\n\n1. Accesses the incoming JSON-formatted data using n8n's custom `$json` variable.\n1. Finds the value of `city` (in this example, \"New York\"). Note that this example uses JMESPath syntax to query the JSON data. You can also write this expression as `{{$json['body']['city']}}`.\n\n### Using expressions in credentials\n\nYou can also use expressions in credential fields. When you reference data using expressions (for example, `{{$json.body.city}}` or `{{ $('Webhook').item.json.headers.authorization }}`), n8n evaluates the expression within the context of the current workflow execution.\n\nThis means that:\n\n- Expressions in credentials can access data available in the current execution context, including data from previous nodes.\n- Each workflow execution has its own data context.\n- Expressions are evaluated per execution, so different executions don't share data.\n\nFor example, if a webhook node receives an access token and you reference it in a credential field using an expression, the value is resolved using the execution data of that specific workflow run.\n\n## Example: Writing longer JavaScript as expressions\n\nYou can do things like variable assignments or multiple statements in an expression, but you need to wrap your code using the syntax for an Immediately Invoked Function Expression (IIFE).\n\nThe following code use the Luxon date and time library to find the time between two dates in months. We surround the code in both the handlebar brackets for an expression and the IIFE syntax.\n\n```\n{{(()=>{\n let end = DateTime.fromISO('2017-03-13');\n let start = DateTime.fromISO('2017-02-13');\n let diffInMonths = end.diff(start, 'months');\n return diffInMonths.toObject();\n})()}}\n```\n\n## Common issues\n\nHere are some common errors and issues related to [expressions](../expressions/) and steps to resolve or troubleshoot them.\n\n### The 'JSON Output' in item 0 contains invalid JSON\n\nThis error occurs when you use JSON mode but don't provide a valid JSON object. Depending on the problem with the JSON object, the error sometimes displays as `The 'JSON Output' in item 0 does not contain a valid JSON object`.\n\nTo resolve this, make sure that the code you provide is valid JSON:\n\n- Check the JSON with a [JSON validator](https://jsonlint.com/).\n- Check that your JSON object doesn't reference undefined input data. This may occur if the incoming data doesn't always include the same fields.\n\n### Can't get data for expression\n\nThis error occurs when n8n can't retrieve the data referenced by an expression. Often, this happens when the preceding node hasn't been run yet.\n\nAnother variation of this may appear as `Referenced node is unexecuted`. In that case, the full text of this error will tell you the exact node that isn't executing in this format:\n\n> An expression references the node '<node-name>', but it hasn't been executed yet. Either change the expression, or re-wire your workflow to make sure that node executes first.\n\nTo begin troubleshooting, test the workflow up to the named node.\n\nFor nodes that use JavaScript or other custom code, you can check if a previous node has executed before trying to use its value by checking the following:\n\n```\n$(\"<node-name>\").isExecuted\n```\n\nAs an example, this JSON references the parameters of the input data. This error will display if you test this step without connecting it to another node:\n\n```\n{\n \"my_field_1\": {{ $input.params }}\n}\n```\n\n### Invalid syntax\n\nThis error occurs when you use an expression that has a syntax error.\n\nFor example, the expression in this JSON includes a trailing period, which results in an invalid syntax error:\n\n```\n{\n \"my_field_1\": \"value\",\n \"my_field_2\": {{ $('If').item.json. }}\n}\n```\n\nTo resolve this error, check your [expression syntax](../expressions/) to make sure it follows the expected format.\n",
|
|
9568
|
+
"excerpt": "# Expressions for data transformation You can use expression transformation functions anywhere expressions are supported in n8n. However, if your main goal is to transform data using expressions without performing any other operations, use the **Edit Fields (Set)** node. This node is designed specifically for data transformation, providing a clean interface to: - Add new fields with expression-based values - Modify existing field values using transformation functions - Remove or rename fields...",
|
|
9569
|
+
"sections": [
|
|
9570
|
+
{
|
|
9571
|
+
"title": "Expressions for data transformation",
|
|
9572
|
+
"level": 1,
|
|
9573
|
+
"content": "You can use expression transformation functions anywhere expressions are supported in n8n.\n\nHowever, if your main goal is to transform data using expressions without performing any other operations, use the **Edit Fields (Set)** node. This node is designed specifically for data transformation, providing a clean interface to:\n\n- Add new fields with expression-based values\n- Modify existing field values using transformation functions\n- Remove or rename fields\n\nThis keeps your workflow organized by separating data transformation from business logic, making it easier to understand and maintain.\n\n**Best practice**: Instead of adding complex expressions to multiple parameters across different nodes, use Edit Fields to prepare your data first, then pass the transformed data to subsequent nodes.\n\nSee [Expression reference](../expression-reference/) for more information and examples."
|
|
9574
|
+
}
|
|
9575
|
+
]
|
|
9576
|
+
},
|
|
9577
|
+
"metadata": {
|
|
9578
|
+
"keywords": [
|
|
9579
|
+
"expressions",
|
|
9580
|
+
"data",
|
|
9581
|
+
"transformation",
|
|
9582
|
+
"example:",
|
|
9583
|
+
"from",
|
|
9584
|
+
"webhook",
|
|
9585
|
+
"body",
|
|
9586
|
+
"using",
|
|
9587
|
+
"credentials",
|
|
9588
|
+
"writing",
|
|
9589
|
+
"longer",
|
|
9590
|
+
"javascript",
|
|
9591
|
+
"common",
|
|
9592
|
+
"issues",
|
|
9593
|
+
"'json",
|
|
9594
|
+
"output'",
|
|
9595
|
+
"item",
|
|
9596
|
+
"contains",
|
|
9597
|
+
"invalid",
|
|
9598
|
+
"json",
|
|
9599
|
+
"can't",
|
|
9600
|
+
"expression",
|
|
9601
|
+
"syntax"
|
|
9602
|
+
],
|
|
9603
|
+
"useCases": [
|
|
9604
|
+
"Get data from webhook body",
|
|
9605
|
+
"you have a webhook trigger that receives data through the webhook body. You want to extract some of that data for use in the workflow.",
|
|
9606
|
+
"Writing longer JavaScript as expressions"
|
|
9607
|
+
],
|
|
9608
|
+
"operations": [],
|
|
9609
|
+
"codeExamples": 6,
|
|
9610
|
+
"complexity": "intermediate",
|
|
9611
|
+
"readingTime": "5 min",
|
|
9612
|
+
"contentLength": 5366,
|
|
9613
|
+
"relatedPages": []
|
|
9614
|
+
},
|
|
9615
|
+
"searchIndex": {
|
|
9616
|
+
"fullText": "expressions for data transformation # expressions for data transformation\n\nyou can use expression transformation functions anywhere expressions are supported in n8n.\n\nhowever, if your main goal is to transform data using expressions without performing any other operations, use the **edit fields (set)** node. this node is designed specifically for data transformation, providing a clean interface to:\n\n- add new fields with expression-based values\n- modify existing field values using transformation functions\n- remove or rename fields\n\nthis keeps your workflow organized by separating data transformation from business logic, making it easier to understand and maintain.\n\n**best practice**: instead of adding complex expressions to multiple parameters across different nodes, use edit fields to prepare your data first, then pass the transformed data to subsequent nodes.\n\nsee [expression reference](../expression-reference/) for more information and examples.\n\n### example: get data from webhook body\n\nconsider the following scenario: you have a webhook trigger that receives data through the webhook body. you want to extract some of that data for use in the workflow.\n\nyour webhook data looks similar to this:\n\n```\n[\n {\n \"headers\": {\n \"host\": \"n8n.instance.address\",\n ...\n },\n \"params\": {},\n \"query\": {},\n \"body\": {\n \"name\": \"jim\",\n \"age\": 30,\n \"city\": \"new york\"\n }\n }\n]\n```\n\nin the next node in the workflow, you want to get just the value of `city`. you can use the following expression:\n\n```\n{{$json.body.city}}\n```\n\nthis expression:\n\n1. accesses the incoming json-formatted data using n8n's custom `$json` variable.\n1. finds the value of `city` (in this example, \"new york\"). note that this example uses jmespath syntax to query the json data. you can also write this expression as `{{$json['body']['city']}}`.\n\n### using expressions in credentials\n\nyou can also use expressions in credential fields. when you reference data using expressions (for example, `{{$json.body.city}}` or `{{ $('webhook').item.json.headers.authorization }}`), n8n evaluates the expression within the context of the current workflow execution.\n\nthis means that:\n\n- expressions in credentials can access data available in the current execution context, including data from previous nodes.\n- each workflow execution has its own data context.\n- expressions are evaluated per execution, so different executions don't share data.\n\nfor example, if a webhook node receives an access token and you reference it in a credential field using an expression, the value is resolved using the execution data of that specific workflow run.\n\n## example: writing longer javascript as expressions\n\nyou can do things like variable assignments or multiple statements in an expression, but you need to wrap your code using the syntax for an immediately invoked function expression (iife).\n\nthe following code use the luxon date and time library to find the time between two dates in months. we surround the code in both the handlebar brackets for an expression and the iife syntax.\n\n```\n{{(()=>{\n let end = datetime.fromiso('2017-03-13');\n let start = datetime.fromiso('2017-02-13');\n let diffinmonths = end.diff(start, 'months');\n return diffinmonths.toobject();\n})()}}\n```\n\n## common issues\n\nhere are some common errors and issues related to [expressions](../expressions/) and steps to resolve or troubleshoot them.\n\n### the 'json output' in item 0 contains invalid json\n\nthis error occurs when you use json mode but don't provide a valid json object. depending on the problem with the json object, the error sometimes displays as `the 'json output' in item 0 does not contain a valid json object`.\n\nto resolve this, make sure that the code you provide is valid json:\n\n- check the json with a [json validator](https://jsonlint.com/).\n- check that your json object doesn't reference undefined input data. this may occur if the incoming data doesn't always include the same fields.\n\n### can't get data for expression\n\nthis error occurs when n8n can't retrieve the data referenced by an expression. often, this happens when the preceding node hasn't been run yet.\n\nanother variation of this may appear as `referenced node is unexecuted`. in that case, the full text of this error will tell you the exact node that isn't executing in this format:\n\n> an expression references the node '<node-name>', but it hasn't been executed yet. either change the expression, or re-wire your workflow to make sure that node executes first.\n\nto begin troubleshooting, test the workflow up to the named node.\n\nfor nodes that use javascript or other custom code, you can check if a previous node has executed before trying to use its value by checking the following:\n\n```\n$(\"<node-name>\").isexecuted\n```\n\nas an example, this json references the parameters of the input data. this error will display if you test this step without connecting it to another node:\n\n```\n{\n \"my_field_1\": {{ $input.params }}\n}\n```\n\n### invalid syntax\n\nthis error occurs when you use an expression that has a syntax error.\n\nfor example, the expression in this json includes a trailing period, which results in an invalid syntax error:\n\n```\n{\n \"my_field_1\": \"value\",\n \"my_field_2\": {{ $('if').item.json. }}\n}\n```\n\nto resolve this error, check your [expression syntax](../expressions/) to make sure it follows the expected format.\n expressions for data transformation",
|
|
9617
|
+
"importantTerms": [
|
|
9618
|
+
"data",
|
|
9619
|
+
"this",
|
|
9620
|
+
"json",
|
|
9621
|
+
"expression",
|
|
9622
|
+
"expressions",
|
|
9623
|
+
"node",
|
|
9624
|
+
"that",
|
|
9625
|
+
"error",
|
|
9626
|
+
"your",
|
|
9627
|
+
"using",
|
|
9628
|
+
"workflow",
|
|
9629
|
+
"example",
|
|
9630
|
+
"transformation",
|
|
9631
|
+
"syntax",
|
|
9632
|
+
"fields",
|
|
9633
|
+
"webhook",
|
|
9634
|
+
"body",
|
|
9635
|
+
"city",
|
|
9636
|
+
"reference",
|
|
9637
|
+
"value",
|
|
9638
|
+
"when",
|
|
9639
|
+
"execution",
|
|
9640
|
+
"code",
|
|
9641
|
+
"nodes",
|
|
9642
|
+
"following",
|
|
9643
|
+
"item",
|
|
9644
|
+
"object",
|
|
9645
|
+
"check",
|
|
9646
|
+
"with",
|
|
9647
|
+
"from",
|
|
9648
|
+
"name",
|
|
9649
|
+
"context",
|
|
9650
|
+
"resolve",
|
|
9651
|
+
"invalid",
|
|
9652
|
+
"occurs",
|
|
9653
|
+
"valid",
|
|
9654
|
+
"make",
|
|
9655
|
+
"sure",
|
|
9656
|
+
"input"
|
|
9657
|
+
]
|
|
9658
|
+
}
|
|
9659
|
+
},
|
|
9660
9660
|
{
|
|
9661
9661
|
"id": "page-0103",
|
|
9662
9662
|
"title": "Referencing data",
|
|
@@ -91253,7 +91253,7 @@
|
|
|
91253
91253
|
"page-0081",
|
|
91254
91254
|
"page-0086",
|
|
91255
91255
|
"page-0097",
|
|
91256
|
-
"page-
|
|
91256
|
+
"page-0100",
|
|
91257
91257
|
"page-0105",
|
|
91258
91258
|
"page-0108",
|
|
91259
91259
|
"page-0130",
|
|
@@ -91310,7 +91310,7 @@
|
|
|
91310
91310
|
"page-0086",
|
|
91311
91311
|
"page-0097",
|
|
91312
91312
|
"page-0099",
|
|
91313
|
-
"page-
|
|
91313
|
+
"page-0100",
|
|
91314
91314
|
"page-0105",
|
|
91315
91315
|
"page-0106",
|
|
91316
91316
|
"page-0108",
|
|
@@ -92160,7 +92160,7 @@
|
|
|
92160
92160
|
"expression": [
|
|
92161
92161
|
"page-0002",
|
|
92162
92162
|
"page-0006",
|
|
92163
|
-
"page-
|
|
92163
|
+
"page-0102",
|
|
92164
92164
|
"page-0112",
|
|
92165
92165
|
"page-0131",
|
|
92166
92166
|
"page-0676",
|
|
@@ -92173,7 +92173,7 @@
|
|
|
92173
92173
|
"errors": [
|
|
92174
92174
|
"page-0002",
|
|
92175
92175
|
"page-0089",
|
|
92176
|
-
"page-
|
|
92176
|
+
"page-0094",
|
|
92177
92177
|
"page-0110",
|
|
92178
92178
|
"page-0211",
|
|
92179
92179
|
"page-0213",
|
|
@@ -92278,7 +92278,7 @@
|
|
|
92278
92278
|
"page-0071",
|
|
92279
92279
|
"page-0097",
|
|
92280
92280
|
"page-0098",
|
|
92281
|
-
"page-
|
|
92281
|
+
"page-0100",
|
|
92282
92282
|
"page-0106",
|
|
92283
92283
|
"page-0130",
|
|
92284
92284
|
"page-0143",
|
|
@@ -92346,7 +92346,7 @@
|
|
|
92346
92346
|
"page-0002",
|
|
92347
92347
|
"page-0050",
|
|
92348
92348
|
"page-0100",
|
|
92349
|
-
"page-
|
|
92349
|
+
"page-0102",
|
|
92350
92350
|
"page-0638",
|
|
92351
92351
|
"page-1197"
|
|
92352
92352
|
],
|
|
@@ -92380,8 +92380,8 @@
|
|
|
92380
92380
|
"page-0086",
|
|
92381
92381
|
"page-0087",
|
|
92382
92382
|
"page-0088",
|
|
92383
|
-
"page-0091",
|
|
92384
92383
|
"page-0092",
|
|
92384
|
+
"page-0093",
|
|
92385
92385
|
"page-0095",
|
|
92386
92386
|
"page-0096",
|
|
92387
92387
|
"page-0097",
|
|
@@ -92488,7 +92488,7 @@
|
|
|
92488
92488
|
],
|
|
92489
92489
|
"webhook": [
|
|
92490
92490
|
"page-0002",
|
|
92491
|
-
"page-
|
|
92491
|
+
"page-0102",
|
|
92492
92492
|
"page-0153",
|
|
92493
92493
|
"page-0170",
|
|
92494
92494
|
"page-0216",
|
|
@@ -92550,7 +92550,7 @@
|
|
|
92550
92550
|
"page-0003",
|
|
92551
92551
|
"page-0012",
|
|
92552
92552
|
"page-0027",
|
|
92553
|
-
"page-
|
|
92553
|
+
"page-0102",
|
|
92554
92554
|
"page-0231",
|
|
92555
92555
|
"page-0345",
|
|
92556
92556
|
"page-0371",
|
|
@@ -92705,10 +92705,10 @@
|
|
|
92705
92705
|
"page-0039",
|
|
92706
92706
|
"page-0068",
|
|
92707
92707
|
"page-0077",
|
|
92708
|
-
"page-
|
|
92708
|
+
"page-0093",
|
|
92709
92709
|
"page-0096",
|
|
92710
92710
|
"page-0097",
|
|
92711
|
-
"page-
|
|
92711
|
+
"page-0102",
|
|
92712
92712
|
"page-0110",
|
|
92713
92713
|
"page-0132",
|
|
92714
92714
|
"page-0144",
|
|
@@ -93004,7 +93004,7 @@
|
|
|
93004
93004
|
"file": [
|
|
93005
93005
|
"page-0003",
|
|
93006
93006
|
"page-0051",
|
|
93007
|
-
"page-
|
|
93007
|
+
"page-0093",
|
|
93008
93008
|
"page-0155",
|
|
93009
93009
|
"page-0195",
|
|
93010
93010
|
"page-0199",
|
|
@@ -93674,7 +93674,7 @@
|
|
|
93674
93674
|
],
|
|
93675
93675
|
"files": [
|
|
93676
93676
|
"page-0003",
|
|
93677
|
-
"page-
|
|
93677
|
+
"page-0093",
|
|
93678
93678
|
"page-0134",
|
|
93679
93679
|
"page-0155",
|
|
93680
93680
|
"page-0201",
|
|
@@ -94164,7 +94164,7 @@
|
|
|
94164
94164
|
"page-0013",
|
|
94165
94165
|
"page-0014",
|
|
94166
94166
|
"page-0022",
|
|
94167
|
-
"page-
|
|
94167
|
+
"page-0102",
|
|
94168
94168
|
"page-0136",
|
|
94169
94169
|
"page-0151",
|
|
94170
94170
|
"page-0153",
|
|
@@ -94520,7 +94520,7 @@
|
|
|
94520
94520
|
"page-0067",
|
|
94521
94521
|
"page-0068",
|
|
94522
94522
|
"page-0097",
|
|
94523
|
-
"page-
|
|
94523
|
+
"page-0102",
|
|
94524
94524
|
"page-0134",
|
|
94525
94525
|
"page-0136",
|
|
94526
94526
|
"page-0141",
|
|
@@ -99470,7 +99470,7 @@
|
|
|
99470
99470
|
"page-0059",
|
|
99471
99471
|
"page-0071",
|
|
99472
99472
|
"page-0077",
|
|
99473
|
-
"page-
|
|
99473
|
+
"page-0093",
|
|
99474
99474
|
"page-0567",
|
|
99475
99475
|
"page-1181"
|
|
99476
99476
|
],
|
|
@@ -99652,7 +99652,7 @@
|
|
|
99652
99652
|
"expressions": [
|
|
99653
99653
|
"page-0021",
|
|
99654
99654
|
"page-0100",
|
|
99655
|
-
"page-
|
|
99655
|
+
"page-0102",
|
|
99656
99656
|
"page-0110",
|
|
99657
99657
|
"page-0131",
|
|
99658
99658
|
"page-0515",
|
|
@@ -99999,7 +99999,7 @@
|
|
|
99999
99999
|
],
|
|
100000
100000
|
"common": [
|
|
100001
100001
|
"page-0027",
|
|
100002
|
-
"page-
|
|
100002
|
+
"page-0102",
|
|
100003
100003
|
"page-0106",
|
|
100004
100004
|
"page-0131",
|
|
100005
100005
|
"page-0132",
|
|
@@ -100658,7 +100658,7 @@
|
|
|
100658
100658
|
],
|
|
100659
100659
|
"other": [
|
|
100660
100660
|
"page-0049",
|
|
100661
|
-
"page-
|
|
100661
|
+
"page-0100",
|
|
100662
100662
|
"page-0106",
|
|
100663
100663
|
"page-0202",
|
|
100664
100664
|
"page-1162",
|
|
@@ -100715,7 +100715,7 @@
|
|
|
100715
100715
|
],
|
|
100716
100716
|
"writing": [
|
|
100717
100717
|
"page-0050",
|
|
100718
|
-
"page-
|
|
100718
|
+
"page-0102",
|
|
100719
100719
|
"page-1153",
|
|
100720
100720
|
"page-1247"
|
|
100721
100721
|
],
|
|
@@ -100792,7 +100792,7 @@
|
|
|
100792
100792
|
],
|
|
100793
100793
|
"javascript": [
|
|
100794
100794
|
"page-0051",
|
|
100795
|
-
"page-
|
|
100795
|
+
"page-0102",
|
|
100796
100796
|
"page-0132",
|
|
100797
100797
|
"page-0615",
|
|
100798
100798
|
"page-0695"
|
|
@@ -101760,7 +101760,7 @@
|
|
|
101760
101760
|
],
|
|
101761
101761
|
"item": [
|
|
101762
101762
|
"page-0059",
|
|
101763
|
-
"page-
|
|
101763
|
+
"page-0102",
|
|
101764
101764
|
"page-0109",
|
|
101765
101765
|
"page-0110",
|
|
101766
101766
|
"page-0111",
|
|
@@ -101998,7 +101998,7 @@
|
|
|
101998
101998
|
],
|
|
101999
101999
|
"body": [
|
|
102000
102000
|
"page-0068",
|
|
102001
|
-
"page-
|
|
102001
|
+
"page-0102",
|
|
102002
102002
|
"page-0703",
|
|
102003
102003
|
"page-0824"
|
|
102004
102004
|
],
|
|
@@ -102123,7 +102123,7 @@
|
|
|
102123
102123
|
],
|
|
102124
102124
|
"automating": [
|
|
102125
102125
|
"page-0073",
|
|
102126
|
-
"page-
|
|
102126
|
+
"page-0091"
|
|
102127
102127
|
],
|
|
102128
102128
|
"(real": [
|
|
102129
102129
|
"page-0073"
|
|
@@ -102133,7 +102133,7 @@
|
|
|
102133
102133
|
],
|
|
102134
102134
|
"case": [
|
|
102135
102135
|
"page-0073",
|
|
102136
|
-
"page-
|
|
102136
|
+
"page-0091",
|
|
102137
102137
|
"page-1162",
|
|
102138
102138
|
"page-1180"
|
|
102139
102139
|
],
|
|
@@ -102298,11 +102298,11 @@
|
|
|
102298
102298
|
],
|
|
102299
102299
|
"transforming": [
|
|
102300
102300
|
"page-0086",
|
|
102301
|
-
"page-
|
|
102301
|
+
"page-0101"
|
|
102302
102302
|
],
|
|
102303
102303
|
"different": [
|
|
102304
102304
|
"page-0087",
|
|
102305
|
-
"page-
|
|
102305
|
+
"page-0093",
|
|
102306
102306
|
"page-0144",
|
|
102307
102307
|
"page-0668",
|
|
102308
102308
|
"page-0680"
|
|
@@ -102335,7 +102335,7 @@
|
|
|
102335
102335
|
],
|
|
102336
102336
|
"merging": [
|
|
102337
102337
|
"page-0088",
|
|
102338
|
-
"page-
|
|
102338
|
+
"page-0092",
|
|
102339
102339
|
"page-0144",
|
|
102340
102340
|
"page-0668",
|
|
102341
102341
|
"page-1216"
|
|
@@ -102385,37 +102385,8 @@
|
|
|
102385
102385
|
"page-1176",
|
|
102386
102386
|
"page-1178"
|
|
102387
102387
|
],
|
|
102388
|
-
"generating": [
|
|
102389
|
-
"page-0092"
|
|
102390
|
-
],
|
|
102391
|
-
"reports": [
|
|
102392
|
-
"page-0092"
|
|
102393
|
-
],
|
|
102394
|
-
"part": [
|
|
102395
|
-
"page-0092",
|
|
102396
|
-
"page-0643",
|
|
102397
|
-
"page-1240"
|
|
102398
|
-
],
|
|
102399
|
-
"sources": [
|
|
102400
|
-
"page-0092",
|
|
102401
|
-
"page-0680"
|
|
102402
|
-
],
|
|
102403
|
-
"regional": [
|
|
102404
|
-
"page-0092"
|
|
102405
|
-
],
|
|
102406
|
-
"sales": [
|
|
102407
|
-
"page-0092"
|
|
102408
|
-
],
|
|
102409
|
-
"total": [
|
|
102410
|
-
"page-0092",
|
|
102411
|
-
"page-0167"
|
|
102412
|
-
],
|
|
102413
|
-
"monitoring": [
|
|
102414
|
-
"page-0093",
|
|
102415
|
-
"page-0208"
|
|
102416
|
-
],
|
|
102417
102388
|
"business": [
|
|
102418
|
-
"page-
|
|
102389
|
+
"page-0091",
|
|
102419
102390
|
"page-0314",
|
|
102420
102391
|
"page-0526",
|
|
102421
102392
|
"page-0527",
|
|
@@ -102426,11 +102397,11 @@
|
|
|
102426
102397
|
"page-1197"
|
|
102427
102398
|
],
|
|
102428
102399
|
"design": [
|
|
102429
|
-
"page-
|
|
102400
|
+
"page-0091",
|
|
102430
102401
|
"page-1176"
|
|
102431
102402
|
],
|
|
102432
102403
|
"prerequisites": [
|
|
102433
|
-
"page-
|
|
102404
|
+
"page-0091",
|
|
102434
102405
|
"page-0137",
|
|
102435
102406
|
"page-0138",
|
|
102436
102407
|
"page-0195",
|
|
@@ -102703,6 +102674,35 @@
|
|
|
102703
102674
|
"page-1227",
|
|
102704
102675
|
"page-1229"
|
|
102705
102676
|
],
|
|
102677
|
+
"generating": [
|
|
102678
|
+
"page-0093"
|
|
102679
|
+
],
|
|
102680
|
+
"reports": [
|
|
102681
|
+
"page-0093"
|
|
102682
|
+
],
|
|
102683
|
+
"part": [
|
|
102684
|
+
"page-0093",
|
|
102685
|
+
"page-0643",
|
|
102686
|
+
"page-1240"
|
|
102687
|
+
],
|
|
102688
|
+
"sources": [
|
|
102689
|
+
"page-0093",
|
|
102690
|
+
"page-0680"
|
|
102691
|
+
],
|
|
102692
|
+
"regional": [
|
|
102693
|
+
"page-0093"
|
|
102694
|
+
],
|
|
102695
|
+
"sales": [
|
|
102696
|
+
"page-0093"
|
|
102697
|
+
],
|
|
102698
|
+
"total": [
|
|
102699
|
+
"page-0093",
|
|
102700
|
+
"page-0167"
|
|
102701
|
+
],
|
|
102702
|
+
"monitoring": [
|
|
102703
|
+
"page-0094",
|
|
102704
|
+
"page-0208"
|
|
102705
|
+
],
|
|
102706
102706
|
"section": [
|
|
102707
102707
|
"page-0095"
|
|
102708
102708
|
],
|
|
@@ -102755,7 +102755,7 @@
|
|
|
102755
102755
|
],
|
|
102756
102756
|
"approaches": [
|
|
102757
102757
|
"page-0097",
|
|
102758
|
-
"page-
|
|
102758
|
+
"page-0101"
|
|
102759
102759
|
],
|
|
102760
102760
|
"generate": [
|
|
102761
102761
|
"page-0097",
|
|
@@ -102853,36 +102853,41 @@
|
|
|
102853
102853
|
],
|
|
102854
102854
|
"versus": [
|
|
102855
102855
|
"page-0099",
|
|
102856
|
-
"page-
|
|
102856
|
+
"page-0100",
|
|
102857
102857
|
"page-0710"
|
|
102858
102858
|
],
|
|
102859
|
-
"
|
|
102859
|
+
"transform": [
|
|
102860
102860
|
"page-0100",
|
|
102861
|
+
"page-0638",
|
|
102862
|
+
"page-1197"
|
|
102863
|
+
],
|
|
102864
|
+
"example:": [
|
|
102865
|
+
"page-0102",
|
|
102861
102866
|
"page-0132",
|
|
102862
102867
|
"page-0215"
|
|
102863
102868
|
],
|
|
102864
102869
|
"longer": [
|
|
102865
|
-
"page-
|
|
102870
|
+
"page-0102",
|
|
102866
102871
|
"page-0132",
|
|
102867
102872
|
"page-0566",
|
|
102868
102873
|
"page-1211"
|
|
102869
102874
|
],
|
|
102870
102875
|
"'json": [
|
|
102871
|
-
"page-
|
|
102876
|
+
"page-0102"
|
|
102872
102877
|
],
|
|
102873
102878
|
"output'": [
|
|
102874
|
-
"page-
|
|
102879
|
+
"page-0102"
|
|
102875
102880
|
],
|
|
102876
102881
|
"contains": [
|
|
102877
|
-
"page-
|
|
102882
|
+
"page-0102"
|
|
102878
102883
|
],
|
|
102879
102884
|
"invalid": [
|
|
102880
|
-
"page-
|
|
102885
|
+
"page-0102",
|
|
102881
102886
|
"page-0558",
|
|
102882
102887
|
"page-0708"
|
|
102883
102888
|
],
|
|
102884
102889
|
"json": [
|
|
102885
|
-
"page-
|
|
102890
|
+
"page-0102",
|
|
102886
102891
|
"page-0131",
|
|
102887
102892
|
"page-0515",
|
|
102888
102893
|
"page-0641",
|
|
@@ -102895,7 +102900,7 @@
|
|
|
102895
102900
|
"page-1176"
|
|
102896
102901
|
],
|
|
102897
102902
|
"can't": [
|
|
102898
|
-
"page-
|
|
102903
|
+
"page-0102",
|
|
102899
102904
|
"page-0512",
|
|
102900
102905
|
"page-0519",
|
|
102901
102906
|
"page-0566",
|
|
@@ -102905,14 +102910,9 @@
|
|
|
102905
102910
|
"page-1021"
|
|
102906
102911
|
],
|
|
102907
102912
|
"syntax": [
|
|
102908
|
-
"page-
|
|
102913
|
+
"page-0102",
|
|
102909
102914
|
"page-1174"
|
|
102910
102915
|
],
|
|
102911
|
-
"transform": [
|
|
102912
|
-
"page-0101",
|
|
102913
|
-
"page-0638",
|
|
102914
|
-
"page-1197"
|
|
102915
|
-
],
|
|
102916
102916
|
"linked": [
|
|
102917
102917
|
"page-0105"
|
|
102918
102918
|
],
|