So we already have a Service Graph Connector that integrates with SolarWinds and this is working.
I've tried to add the Custom Properties to the mix and the code comes back as success, but the field doesn't show after the Test, this is the code within ServiceNow;
(function execute(inputs, outputs) {
var limit = inputs.Limit;
var npmInstalled = new sn_solarwinds_inte.SolarWindsUtil().getNpmInstalled(inputs.connectionAlias);
var samInstalled = new sn_solarwinds_inte.SolarWindsUtil().getSamInstalled(inputs.connectionAlias);
var comment = "--hardware sam:" + samInstalled + " npm:" + npmInstalled + "\r\n";
var emptyFieldQuery = "'' AS ";
var connectionSelect = "'" + inputs.connectionAlias.sys_id + "' AS ConnectionId, ";
var nodesSelect = "Nodes.InstanceSiteId, Nodes.NodeID, Nodes.IPAddress, Nodes.IPAddressType, Nodes.DynamicIP, Nodes.Caption, Nodes.Category, Nodes.NodeDescription, Nodes.Description, Nodes.DNS, Nodes.SysName, Nodes.Vendor, Nodes.IOSImage, Nodes.IOSVersion, Nodes.CPUCount, Nodes.MachineType, Nodes.IsServer, Nodes.TotalMemory, Nodes.CMTS, Nodes.IP, Nodes.IP_Address, Nodes.LastSync";
var nodesCustomPropertiesSelect = "nodesCustomProperties.Environment";
var hardwareHealthSelect = ((samInstalled == "true" || npmInstalled == "true") ? "HardwareHealth.Manufacturer, HardwareHealth.Model, HardwareHealth.ServiceTag" : (emptyFieldQuery + "Manufacturer, " + emptyFieldQuery + "Model, " + emptyFieldQuery + "ServiceTag"));
var serverInformationSelect = (samInstalled == "true" ? "ServerInformation.HostName" : (emptyFieldQuery + "HostName")) + ", " + (samInstalled == "true" ? "ServerInformation.SystemName" : (emptyFieldQuery + "SystemName")) + ", " + (samInstalled == "true" ? "ServerInformation.Domain" : (emptyFieldQuery + "Domain")) + ", " + (samInstalled == "true" ? "ServerInformation.DNSName" : (emptyFieldQuery + "DNSName")) + ", " + (samInstalled == "true" ? "ServerInformation.DomainRole" : (emptyFieldQuery + "DomainRole")) + ", " + (samInstalled == "true" ? "ServerInformation.AssetType" : (emptyFieldQuery + "AssetType")) + ", " + (samInstalled == "true" ? "ServerInformation.OperatingSystem" : (emptyFieldQuery + "OperatingSystem")) + ", " + (samInstalled == "true" ? "ServerInformation.OSVersion" : (emptyFieldQuery + "OSVersion")) + ", " + (samInstalled == "true" ? "ServerInformation.OSArchitecture" : (emptyFieldQuery + "OSArchitecture")) + ", " + (samInstalled == "true" ? "ServerInformation.ServicePack" : (emptyFieldQuery + "ServicePack")) + ", " + (samInstalled == "true" ? "ServerInformation.OSLanguage" : (emptyFieldQuery + "OSLanguage")) + ", " + (samInstalled == "true" ? "ServerInformation.HardwareSerialNumber" : (emptyFieldQuery + "HardwareSerialNumber")) + ", " + (samInstalled == "true" ? "ServerInformation.ProductNumber" : (emptyFieldQuery + "ProductNumber")) + ", " + (samInstalled == "true" ? "ServerInformation.Manufacturer AS ServerInformationManufacturer" : (emptyFieldQuery + "ServerInformationManufacturer")) + ", " + (samInstalled == "true" ? "ServerInformation.Model AS ServerInformationModel" : (emptyFieldQuery + "ServerInformationModel")) + ", " + (samInstalled == "true" ? "ServerInformation.LastLoggedInUser" : (emptyFieldQuery + "LastLoggedInUser")) + ", " + (samInstalled == "true" ? "ServerInformation.Contact" : (emptyFieldQuery + "Contact")) + ", " + (samInstalled == "true" ? "ServerInformation.ProcessorCount" : (emptyFieldQuery + "ProcessorCount")) + ", " + (samInstalled == "true" ? "ServerInformation.TotalMemoryB" : (emptyFieldQuery + "TotalMemoryB")) + ", " + (samInstalled == "true" ? "ServerInformation.VirtualMemoryB" : (emptyFieldQuery + "VirtualMemoryB")) + ", " + (samInstalled == "true" ? "ServerInformation.PartOfDomain" : (emptyFieldQuery + "PartOfDomain")) + ", " + (samInstalled == "true" ? "ServerInformation.DeviceType" : (emptyFieldQuery + "DeviceType"));
outputs.body = JSON.stringify({"query": comment + "SELECT " + connectionSelect + nodesSelect + ", " + nodesCustomPropertiesSelect + ", " + hardwareHealthSelect + ", " + serverInformationSelect + " FROM Orion.Nodes AS Nodes " + ((samInstalled == "true" || npmInstalled == "true") ? "LEFT OUTER JOIN Orion.HardwareHealth.HardwareInfo AS HardwareHealth ON Nodes.InstanceSiteId = HardwareHealth.InstanceSiteId AND Nodes.NodeId = HardwareHealth.NodeId " : "") + ((samInstalled == "true" || npmInstalled == "true") ? " LEFT OUTER JOIN Orion.NodesCustomProperties AS nodesCustomProperties ON Nodes.NodeId = nodescustomProperties.NodeId" : "") + (samInstalled == "true" ? "LEFT OUTER JOIN Orion.AssetInventory.ServerInformation AS ServerInformation ON Nodes.NodeId = ServerInformation.NodeId AND Nodes.InstanceSiteId = ServerInformation.InstanceSiteId" : "") + " ORDER BY InstanceSiteId, NodeID WITH ROWS " + inputs.Offset + " TO " + limit});
})(inputs, outputs);
Any help would be greatly appreciated, I've been going round and round trying to figure this out for over 3 weeks now 