ITMS administrators often need to synchronize data between the Symantec Management Platform (SMP) and third-party products. Historically, this required a manual, two-step "middle-man" process: exporting data to an intermediate file (like CSV) and then importing that file into the destination system. Administrators now require a way to perform direct data extraction ("pull") and insertion ("push") between ITMS and third-party REST APIs without intermediate files.
IT Management Suite (ITMS) 8.8.1 and later
Components: Data Connector, Altiris Software Development Kit (ASDK)
The primary integration challenge is that JSON formats are not standardized across products. Since these formats cannot be known at "build time," the conversion logic must be defined by the administrator using XML schemas that tell the Data Connector how to interpret the specific REST peer's data structure.
With our ITMS 8.8.1 Release (See ITMS 8.8.1 Release Notes), Data Connector now supports direct REST API communication, allowing for seamless data exchange between ITMS and external platforms. Because every third-party vendor uses different JSON structures, ITMS utilizes a flexible XML-based mapping system. This system converts external JSON data into internal ITMS data tables (and vice-versa) in real-time.
The solution involves three new core components within the Data Connector: REST Schema Providers, REST Data Sources, and REST Data Destinations.
The Schema Provider acts as the "logic engine" for data transformation.
Once the schema is defined, you must create a Data Source or Destination to execute the call.
Before running live rules, use the built-in Test button to validate your XML mapping.
Finally, use the Data Source in a standard rule to automate the data sync.
For administrators requiring complex mappings, the following logic nodes are supported:
|
Node |
Purpose |
|
<enum> / <iterate> |
Loops through JSON arrays to create multiple rows. |
|
<if> / <switch> |
Applies conditional logic (e.g., if a field is null or empty). |
|
eval attribute |
Applies transformations like math, date formatting, or GUID resolution. |
|
culture / cu |
Overrides locale settings for parsing dates/numbers (e.g., en-US vs de-DE). |
This section provides a deep dive into the XML syntax and advanced transformation logic for the REST Schema Provider. Use these examples as a "cookbook" for handling complex JSON structures and data evaluations.
NOTE: See attached "REST Schema and Evaluations_v2.zip" and "REST Schema – JSON to Data Table Examples_v2.pdf" for more detailed examples and usage.
The following attributes control how the Data Connector UI and the REST API interact:
|
Attribute |
Description |
|
mode |
Determines if the parameter is sent as a URL query or in the POST body. |
|
fixed |
If set to true, the value is locked in the UI and uses the default. |
|
type |
Defines the UI control (e.g., list, bool, advanced). |
|
test |
Specifies the value used when clicking the Test button in the UI. |
|
cu / culture |
Overrides the local machine's locale for parsing dates and numbers. |
These examples demonstrate how to "walk" various JSON structures to populate an ITMS Data Table.
To convert a standard list of objects into rows:
<transform mediaType="application/json">
<enum path="results" type="array">
<column name="AssetID" src="property1" />
<column name="Description" src="property2" />
<newRow/>
</enum>
</transform>
Note: <newRow/> (or <row/>) completes the current row and clears values for the next entry.
When an object contains a nested array (e.g., one computer with multiple software items), use <addRow/> to preserve the outer object's values across multiple rows:
<enum path="results" type="array">
<column name="ComputerName" src="property1" />
<enum path="software_list">
<column name="SoftwareName" src="app_name" />
<addRow/> </enum>
</enum>
If a REST API returns no data for certain fields, use <if> or <switch> to prevent import errors:
<switch src="values">
<case when="null">
<column name="Status" value="No Data Found" />
<newRow/>
</case>
<default>
<enum path="values">
<column name="Status" src="property2" />
<newRow/>
</enum>
</default>
</switch>
The eval attribute allows you to manipulate data during the transformation process.
|
Goal |
Evaluation String |
Description |
|
Math |
eval=":i32:add(~5)" |
Converts value to integer and adds 5. |
|
Date Math |
eval=":date:add(~[1.00:00:00])" |
Adds exactly 1 day to the timestamp. |
|
ITMS Lookup |
eval=":guid:item.Name" |
Takes a GUID from JSON and returns the actual Item Name from the ITMS database. |
|
Formatting |
eval=":item.ToString():lower" |
Resolves an item and forces the output to lowercase. |
|
Rounding |
eval=":datetime:truncate(~sec)" |
Removes milliseconds from a date-time value. |
|
RegEx |
regex=".*-([^\\]+)" result="$1" |
Extracts a specific substring using regular expressions. |
When sending data out to a third-party API, you must wrap the Data Table into JSON objects.
To send a single JSON object for a computer that contains an array of its logged-in users:
<group by="ResourceGuid">
<object>
<property name="resourceId" column="$key" /> <array name="user_logins">
<enumRows>
<object>
<property name="User" column="UserId" />
<property name="LoginTime" column="AuditDate" />
</object>
</enumRows>
</array>
</object>
</group>