{"revision":"c10276e953456835cdbb1f3a60d58ae1980be353","document":{"id":913,"path":"api-reference/server-api-reference/SegmentHandleAPIScoped.md","title":"SegmentHandle API - Scoped","bundle":null,"doc_type":null,"release":"australia","body":"\n# SegmentHandle API- Scoped\n\nMethods for handling a single instance of a segment, such as a header or item. This class is defined in the SegmentHandler script include.\n\nThe [SegmentHandler](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/server-api-reference/SegmentHandlerAPIScoped.md) script include requires the Zero Copy Connector for ERP \\(com.sn\\_erp\\_integration\\) store application and is provided within the sn\\_erp\\_integration namespace. For more information, refer to [Zero Copy Connector for ERP](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/integrate-applications/erp-integration-overview.md).\n\nRole required: sn\\_erp\\_integration.erp\\_user\n\nUse the methods in this class for the following tasks:\n\n-   Add fields to that specific segment instance.\n-   Add nested/child segments under the instance.\n-   Chain back to parent or root using the `endSegment()` or `root()` methods.\n\n**Parent Topic:**[Server API reference](https://raw.githubusercontent.com/ServiceNow/ServiceNowDocs/australia/markdown/australia/api-reference/server-api-reference/api-server.md)\n\n## SegmentHandle - addField\\(String fieldName, String value\\)\n\nAdds a predefined field on the current segment instance to the payload.\n\n|Name|Type|Description|\n|----|----|-----------|\n|fieldName|String|The name of the field to be added to the segment.|\n|value|String|The value of the field to be added to the segment.|\n\n|Type|Description|\n|----|-----------|\n|Object|Current SegmentHandle object for chaining.|\n\nThe following example shows how to create a segment payload. Use explicit variables when you want to keep references to specific segments.\n\n-   Multiple obj.addSegment\\(\"E1EDK01\"\\) calls generate multiple header segments.\n-   Nested segments are created from the correct parent handle \\(p01, p20, and so on\\).\n-   Handles like k01\\_1, k01\\_2, p01 can be reused later to add more fields or children.\n\n```\nvar obj = new SegmentHandler('460d3ff2ff5de210d3a2fffffffffff8');\n\n// Create first E1EDK01\nlet k01_1 = obj.addSegment(\"E1EDK01\")\n    .addField(\"BELNR\", \"1000\")\n    .addField(\"CURCY\", \"USD\");\n\n// Create another E1EDK01 \nlet k01_2 = obj.addSegment(\"E1EDK01\")\n    .addField(\"BELNR\", \"2000\")\n    .addField(\"CURCY\", \"EUR\");\n\n// Create E1EDP01 with nested segments\nlet p01 = obj.addSegment(\"E1EDP01\")\n    .addField(\"MENGE\", \"50\")\n    .addField(\"POSEX\", \"0010\");\n\nlet p20 = p01.addSegment(\"E1EDP20\")\n    .addField(\"AMENG\", \"10\")\n    .addField(\"WMENG\", \"5\");\n\np20.addSegment(\"E1EDP19\")\n    .addField(\"IDTNR\", \"MAT01\");\n\ngs.info(JSON.stringify(obj.getData(), null, 2));\n```\n\nOutput:\n\n```\n{\n  \"data\": {\n    \"E1EDK01\": [{\n      \"BELNR\": \"1000\",\n      \"CURCY\": \"USD\"\n    }],\n      \"E1EDP01\": [{\n        \"MENGE\": \"50\",\n        \"POSEX\": \"0010\",\n        \"E1EDP20\": [{\n          \"AMENG\": \"10\",\n          \"WMENG\": \"5\",\n          \"E1EDP19\": [{\n            \"IDTNR\": \"MAT01\"\n          }]\n        }]\n      }]\n  }\n}\n```\n\n## SegmentHandle - addSegment\\(String segmentName, Object values\\)\n\nAdds a predefined nested child segment to the payload.\n\n|Name|Type|Description|\n|----|----|-----------|\n|segmentName|String|Name of a segment nested within the current segment.|\n|values|Object|Optional implementation in place of the addField\\(\\) method.|\n\n|Type|Description|\n|----|-----------|\n|Object|Returns a new SegmentHandle for the child segment.|\n\nThe following example shows how to create a segment payload. Use explicit variables when you want to keep references to specific segments.\n\n-   Multiple obj.addSegment\\(\"E1EDK01\"\\) calls generate multiple header segments.\n-   Nested segments are created from the correct parent handle \\(p01, p20, and so on\\).\n-   Handles like k01\\_1, k01\\_2, p01 can be reused later to add more fields or children.\n\n```\nvar obj = new SegmentHandler('460d3ff2ff5de210d3a2fffffffffff8');\n\n// Create first E1EDK01\nlet k01_1 = obj.addSegment(\"E1EDK01\")\n    .addField(\"BELNR\", \"1000\")\n    .addField(\"CURCY\", \"USD\");\n\n// Create another E1EDK01 \nlet k01_2 = obj.addSegment(\"E1EDK01\")\n    .addField(\"BELNR\", \"2000\")\n    .addField(\"CURCY\", \"EUR\");\n\n// Create E1EDP01 with nested segments\nlet p01 = obj.addSegment(\"E1EDP01\")\n    .addField(\"MENGE\", \"50\")\n    .addField(\"POSEX\", \"0010\");\n\nlet p20 = p01.addSegment(\"E1EDP20\")\n    .addField(\"AMENG\", \"10\")\n    .addField(\"WMENG\", \"5\");\n\np20.addSegment(\"E1EDP19\")\n    .addField(\"IDTNR\", \"MAT01\");\n\ngs.info(JSON.stringify(obj.getData(), null, 2));\n```\n\nOutput:\n\n```\n{\n  \"data\": {\n    \"E1EDK01\": [{\n      \"BELNR\": \"1000\",\n      \"CURCY\": \"USD\"\n    }],\n      \"E1EDP01\": [{\n        \"MENGE\": \"50\",\n        \"POSEX\": \"0010\",\n        \"E1EDP20\": [{\n          \"AMENG\": \"10\",\n          \"WMENG\": \"5\",\n          \"E1EDP19\": [{\n            \"IDTNR\": \"MAT01\"\n          }]\n        }]\n      }]\n  }\n}\n```\n\n## SegmentHandle - endSegment\\(\\)\n\nMoves up one level in a schema.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| ||\n\n<table id=\"table_rkt_53x_3hc\" class=\"returns\"><thead><tr><th>\n\nType\n\n</th><th>\n\nDescription\n\n</th></tr></thead><tbody><tr><td>\n\nObject\n\n</td><td>\n\nParent handle or root handler.-   From a child segment, returns the parent SegmentHandle object.\n-   From the top-level segment, returns the parent SegmentHandler object.\n\nUse the root\\(\\) method to return the root SegmentHandler object.\n\n</td></tr></tbody>\n</table>The following example shows how to build a header and item with nested segments in one fluent chain. The structure depends on the configured schema. The schema pattern is arrays of segments with nested arrays.\n\n```\nlet obj = new sn_erp_integration.SegmentHandler('460d3ff2ff5de210d3a2fffffffffff8');\n\nobj.addSegment(\"E1EDK01\")\n    .addField(\"BELNR\", \"1000\")\n    .addField(\"CURCY\", \"USD\")\n    .endSegment()\n    .addSegment(\"E1EDP01\")\n    .addField(\"MENGE\", \"50\")\n    .addField(\"POSEX\", \"0010\")\n    .addSegment(\"E1EDP20\")\n    .addField(\"AMENG\", \"10\")\n    .addField(\"WMENG\", \"5\")\n    .addSegment(\"E1EDP19\")\n    .addField(\"IDTNR\", \"MAT01\")\n    .endSegment()\n    .endSegment()\n    .endSegment();\n\ngs.info(JSON.stringify(obj.getData(), null, 2));\n```\n\nOutput:\n\n```\n{\n  \"data\": {\n    \"E1EDK01\": [{\n      \"BELNR\": \"1000\",\n      \"CURCY\": \"USD\"\n    }],\n      \"E1EDP01\": [{\n        \"MENGE\": \"50\",\n        \"POSEX\": \"0010\",\n        \"E1EDP20\": [{\n          \"AMENG\": \"10\",\n          \"WMENG\": \"5\",\n          \"E1EDP19\": [{\n            \"IDTNR\": \"MAT01\"\n          }]\n        }]\n      }]\n  }\n}\n```\n\n## SegmentHandle - root\\(\\)\n\nGets the root SegmentHandler object, regardless of nesting depth.\n\n|Name|Type|Description|\n|----|----|-----------|\n|None| ||\n\n|Type|Description|\n|----|-----------|\n|Object|SegmentHandler at the root level.|\n\nThe following example shows how to move between levels in a schema.\n\n```\nlet p19 = p20.addSegment(\"E1EDP19\").addField(\"IDTNR\", \"MAT01\");\np19.endSegment()     // back to E1EDP20\n    .endSegment()    // back to E1EDP01\n    .root()          // back to SegmentHandler\n    .addSegment(\"E1EDK01\").addField(\"BELNR\", \"3000\");\n```\n\n"}}