This article can be
refer as reference only, how can you build your first Management Agent connect
to Service Now. The samples code show how to call the Service Now
REST API from ECMA 2.0
The table for users is sys_user in Service Now or get the
details of table from service now developer.
Service Now API exchange the information in form of JSON (Java Script Object Notation)
To parse JSON object
in C#, use the Newtonsoft JSON library http://www.newtonsoft.com/json
The Code, please make your own adjustment according to your need,
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.IO; | |
using System.Xml; | |
using System.Text; | |
using System.Collections.Specialized; | |
using Microsoft.MetadirectoryServices; | |
using System.Collections.ObjectModel; | |
using System.Collections.Generic; | |
using Newtonsoft.Json; | |
using Newtonsoft.Json.Linq; | |
using System.Net; | |
namespace FimSync_Ezma | |
{ | |
public class EzmaExtension : | |
//IMAExtensible2CallExport, | |
IMAExtensible2CallImport, | |
//IMAExtensible2FileImport, | |
//IMAExtensible2FileExport, | |
//IMAExtensible2GetHierarchy, | |
IMAExtensible2GetSchema, | |
IMAExtensible2GetCapabilities, | |
IMAExtensible2GetParameters | |
//IMAExtensible2GetPartitions | |
{ | |
private int m_importDefaultPageSize = 1200; | |
private int m_importMaxPageSize = 1500; | |
public string Password; | |
public string Username; | |
public string path; | |
// | |
// Constructor | |
// | |
public EzmaExtension() | |
{ | |
// | |
// TODO: Add constructor logic here | |
// | |
} | |
public MACapabilities Capabilities | |
{ | |
get | |
{ | |
MACapabilities myCapabilities = new MACapabilities(); | |
myCapabilities.ConcurrentOperation = true; | |
myCapabilities.ObjectRename = false; | |
myCapabilities.DeleteAddAsReplace = true; | |
myCapabilities.DeltaImport = true; | |
myCapabilities.DistinguishedNameStyle = MADistinguishedNameStyle.None; | |
myCapabilities.ExportType = MAExportType.AttributeUpdate; | |
myCapabilities.NoReferenceValuesInFirstExport = false; | |
myCapabilities.Normalizations = MANormalizations.None; | |
return myCapabilities; | |
} | |
} | |
public int ImportDefaultPageSize | |
{ | |
get | |
{ | |
return m_importDefaultPageSize; | |
} | |
} | |
public int ImportMaxPageSize | |
{ | |
get | |
{ | |
return m_importMaxPageSize; | |
} | |
} | |
public CloseImportConnectionResults CloseImportConnection(CloseImportConnectionRunStep importRunStep) | |
{ | |
return new CloseImportConnectionResults(); | |
} | |
public IList<ConfigParameterDefinition> GetConfigParameters(KeyedCollection<string, ConfigParameter> configParameters, ConfigParameterPage page) | |
{ | |
List<ConfigParameterDefinition> configParametersDefinitions = new List<ConfigParameterDefinition>(); | |
switch (page) | |
{ | |
case ConfigParameterPage.Connectivity: | |
configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("path", "")); | |
configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("Username", "")); | |
configParametersDefinitions.Add(ConfigParameterDefinition.CreateStringParameter("Password", "")); | |
break; | |
//case ConfigParameterPage.Global: | |
// break; | |
//case ConfigParameterPage.Partition: | |
// break; | |
//case ConfigParameterPage.RunStep: | |
// break; | |
} | |
return configParametersDefinitions; | |
} | |
public GetImportEntriesResults GetImportEntries(GetImportEntriesRunStep importRunStep) | |
{ | |
List<CSEntryChange> csentries = new List<CSEntryChange>(); | |
GetImportEntriesResults importReturnInfo; | |
WebClient c = new WebClient(); | |
c.UseDefaultCredentials = true; | |
c.Credentials = new NetworkCredential(this.Username, this.Password); | |
var data = c.DownloadString(this.path); | |
var jObject = Newtonsoft.Json.Linq.JObject.Parse(data); | |
var listResult = jObject["result"]; | |
string name1 = "", email1 = ""; | |
foreach (var result in listResult) | |
{ | |
name1 = result["name"].ToString(); | |
email1 = result["email"].ToString(); | |
CSEntryChange csentry1 = CSEntryChange.Create(); | |
csentry1.ObjectModificationType = ObjectModificationType.Add; | |
csentry1.ObjectType = "Person"; | |
csentry1.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("name", name1)); | |
csentry1.AttributeChanges.Add(AttributeChange.CreateAttributeAdd("email", email1)); | |
csentries.Add(csentry1); | |
} | |
importReturnInfo = new GetImportEntriesResults(); | |
importReturnInfo.MoreToImport = false; | |
importReturnInfo.CSEntries = csentries; | |
return importReturnInfo; | |
} | |
public Schema GetSchema(KeyedCollection<string, ConfigParameter> configParameters) | |
{ | |
Microsoft.MetadirectoryServices.SchemaType personType = Microsoft.MetadirectoryServices.SchemaType.Create("Person", false); | |
//myname = configParameters["myname"].Value; | |
string myattribute = "name"; | |
string myattributes = "email"; | |
if (myattribute == "name") | |
{ | |
personType.Attributes.Add(SchemaAttribute.CreateAnchorAttribute(myattribute, AttributeType.String)); | |
} | |
if (myattributes == "email") | |
{ | |
personType.Attributes.Add(SchemaAttribute.CreateAnchorAttribute(myattributes, AttributeType.String)); | |
} | |
Schema schema = Schema.Create(); | |
schema.Types.Add(personType); | |
return schema; | |
} | |
public OpenImportConnectionResults OpenImportConnection(KeyedCollection<string, ConfigParameter> configParameters, Schema types, OpenImportConnectionRunStep importRunStep) | |
{ | |
this.path = configParameters["path"].Value; | |
this.Username = configParameters["Username"].Value; | |
this.Password = configParameters["Password"].Value; | |
return new OpenImportConnectionResults(); | |
} | |
public ParameterValidationResult ValidateConfigParameters(KeyedCollection<string, ConfigParameter> configParameters, ConfigParameterPage page) | |
{ | |
ParameterValidationResult myResults = new ParameterValidationResult(); | |
return myResults; | |
} | |
}; | |
} |