jsn / ServiceNow, simplified.
AustraliaREFERENCE GUIDE

SegmentHandler API - Scoped

On this page

SegmentHandler API- Scoped

Script include providing a chainable API for building an IDoc payload for a specific operation.

This 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.

Role required: sn_erp_integration.erp_user

The SegmentHandler class:

  • Owns the root data object and the IDoc segment schema.

  • Enables creating top-level segments. For example, E1EDK01, E1EDP01, and so on.

For handling lower-level instances of a segment, such as a header or item, refer to SegmentHandle API - Scoped.

See also sn_erp_integration API - Scoped, Global.

Parent Topic:Server API reference

SegmentHandler - SegmentHandler(String operationId)

Instantiates a new SegmentHandler object bound to an IDoc operation.

<table id=“table_qlv_2gw_3hc” class=“parameters”><thead><tr><th>

Name

</th><th>

Type

</th><th>

Description

</th></tr></thead><tbody><tr><td>

operationId

</td><td>

String

</td><td>

The sys_id of a configured ERP model operation.Table: ERP model operation [sn_erp_integration_model_operation]

</td></tr></tbody> </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.

let obj = new sn_erp_integration.SegmentHandler('460d3ff2ff5de210d3a2fffffffffff8');

obj.addSegment("E1EDK01")
    .addField("BELNR", "1000")
    .addField("CURCY", "USD")
    .endSegment()
    .addSegment("E1EDP01")
    .addField("MENGE", "50")
    .addField("POSEX", "0010")
    .addSegment("E1EDP20")
    .addField("AMENG", "10")
    .addField("WMENG", "5")
    .addSegment("E1EDP19")
    .addField("IDTNR", "MAT01")
    .endSegment()
    .endSegment()
    .endSegment();

gs.info(JSON.stringify(obj.getData(), null, 2));

Output:

{
  "data": {
    "E1EDK01": [{
      "BELNR": "1000",
      "CURCY": "USD"
    }],
      "E1EDP01": [{
        "MENGE": "50",
        "POSEX": "0010",
        "E1EDP20": [{
          "AMENG": "10",
          "WMENG": "5",
          "E1EDP19": [{
            "IDTNR": "MAT01"
          }]
        }]
      }]
  }
}

SegmentHandler - addSegment(String segmentName, Object values)

Adds a predefined top-level segment of the type segmentName to the payload.

Note: The segment must be defined in the operation.

Name Type Description segmentName String Name of the top-level segment. values Object Optional implementation in place of the addField() method. Type Description Object SegmentHandle for the new segment instance.

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.

let obj = new sn_erp_integration.SegmentHandler('460d3ff2ff5de210d3a2fffffffffff8');

obj.addSegment("E1EDK01")
    .addField("BELNR", "1000")
    .addField("CURCY", "USD")
    .endSegment()
    .addSegment("E1EDP01")
    .addField("MENGE", "50")
    .addField("POSEX", "0010")
    .addSegment("E1EDP20")
    .addField("AMENG", "10")
    .addField("WMENG", "5")
    .addSegment("E1EDP19")
    .addField("IDTNR", "MAT01")
    .endSegment()
    .endSegment()
    .endSegment();

gs.info(JSON.stringify(obj.getData(), null, 2));

Output:

{
  "data": {
    "E1EDK01": [{
      "BELNR": "1000",
      "CURCY": "USD"
    }],
      "E1EDP01": [{
        "MENGE": "50",
        "POSEX": "0010",
        "E1EDP20": [{
          "AMENG": "10",
          "WMENG": "5",
          "E1EDP19": [{
            "IDTNR": "MAT01"
          }]
        }]
      }]
  }
}

SegmentHandler - getData()

Gets the built segment payload.

Name Type Description None    

<table id=“table_rkt_53x_3hc” class=“returns”><thead><tr><th>

Type

</th><th>

Description

</th></tr></thead><tbody><tr><td>

Object

</td><td>

Object containing segment data.

</td></tr><tr><td>

data

</td><td>

Wrapper for the payload object containing all top-level and nested segments.{ data: <payloadObject> }

The exact structure depends on the configured schema, but the pattern (arrays of segments with nested arrays) is the same.

Data type: Object

</td></tr></tbody> </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.

let obj = new sn_erp_integration.SegmentHandler('460d3ff2ff5de210d3a2fffffffffff8');

obj.addSegment("E1EDK01")
    .addField("BELNR", "1000")
    .addField("CURCY", "USD")
    .endSegment()
    .addSegment("E1EDP01")
    .addField("MENGE", "50")
    .addField("POSEX", "0010")
    .addSegment("E1EDP20")
    .addField("AMENG", "10")
    .addField("WMENG", "5")
    .addSegment("E1EDP19")
    .addField("IDTNR", "MAT01")
    .endSegment()
    .endSegment()
    .endSegment();

gs.info(JSON.stringify(obj.getData(), null, 2));

Output:

{
  "data": {
    "E1EDK01": [{
      "BELNR": "1000",
      "CURCY": "USD"
    }],
      "E1EDP01": [{
        "MENGE": "50",
        "POSEX": "0010",
        "E1EDP20": [{
          "AMENG": "10",
          "WMENG": "5",
          "E1EDP19": [{
            "IDTNR": "MAT01"
          }]
        }]
      }]
  }
}

Keep exploring.

Find another answer, or bring this documentation into your own tools.