EMC SI VCE ComputeChassis Discovery Data Source

EMC.SI.VCE.ComputeChassis.DiscoveryDataSource (DataSourceModuleType)

This data source discovers VCE ComputeChassis.

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsEMC.SI.MonitoringAccount
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Default

Overrideable Parameters:

IDParameterTypeSelector
IntervalSecondsint$Config/IntervalSeconds$
SyncTimestring$Config/SyncTime$
TimeoutSecondsint$Config/TimeoutSeconds$
DebugLevelint$Config/DebugLevel$

Source Code:

<DataSourceModuleType ID="EMC.SI.VCE.ComputeChassis.DiscoveryDataSource" Accessibility="Internal" RunAs="ESILib!EMC.SI.MonitoringAccount" Batching="false">
<Configuration>
<xsd:element name="IntervalSeconds" type="xsd:integer"/>
<xsd:element name="SyncTime" type="xsd:string"/>
<xsd:element name="ComputerID" type="xsd:string"/>
<xsd:element name="ESIServiceHost" type="xsd:string"/>
<xsd:element name="Port" type="xsd:integer"/>
<xsd:element name="ProxyServer" type="xsd:string"/>
<xsd:element name="BypassList" type="xsd:string"/>
<xsd:element name="IgonreCertificateErrors" type="xsd:boolean"/>
<xsd:element name="HTTPStoHTTPFallBack" type="xsd:boolean"/>
<xsd:element name="UserName" type="xsd:string"/>
<xsd:element name="Password" type="xsd:string"/>
<xsd:element name="VCESystemId" type="xsd:string"/>
<xsd:element name="VBlockId" type="xsd:string"/>
<xsd:element name="TimeoutSeconds" type="xsd:int"/>
<xsd:element name="DebugLevel" type="xsd:int"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
<OverrideableParameter ID="DebugLevel" Selector="$Config/DebugLevel$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime>$Config/SyncTime$</SyncTime>
<ScriptName>DiscoverVCEComputeChassis.js</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Config/ComputerID$ $Config/ESIServiceHost$ $Config/Port$ $Config/VCESystemId$ $Config/VBlockId$ $Config/ProxyServer$ $Config/BypassList$ $Config/IgonreCertificateErrors$ $Config/HTTPStoHTTPFallBack$ $Config/UserName$ $Config/Password$ $Config/DebugLevel$</Arguments>
<ScriptBody><Script>
SCRIPT_NAME = "DiscoverVCEComputeChassis"
var EVENT_TYPE_LOG = 4;
var LOG_LEVEL = EVENT_TYPE_LOG;
var EVENT_TYPE_ERROR = 1;
var EVENT_TYPE_WARNING = 2;
var EVENT_TYPE_INFORMATION = 4;
var ALERT_DATA_TYPE = 0;
var EVENT_DATA_TYPE = 1;
var PERF_DATA_TYPE = 2;
var STATE_DATA_TYPE = 3;
var TRACING_ID = 100;
var ARGUMENT_COUNT_ERROR_ID = 101;
var ARGUMENT_COUNT_ERROR_MSG = "Expected %0 arguments. But there were %1 arguments. Exiting script.";
var ESISERVICE_OK = 102;
var NULL_ERROR_ID = 103;
var ESISERVICE_NOT_FOUND_ERROR_ID = 103;
var ESISERVICE_HTTP_CONNECTION_ERROR_ID = 104;
var ESISERVICE_HTTP_CONNECTION_NO_HEALTHSTATEDETAILS = 105;
var REQUESTED_ENTITY_DATA_NOT_RETURNED_ID = 106;
var ESISERVICE_NOT_FOUND_ERROR_MSG = "An ESI Service did not respond.";
var ESISERVICE_HTTP_CONNECTION_ERROR_MSG = "ESI Service connection attempt failed with error. ";
var ACCESS_DENIED_ID = 105;
var EXPECTED_ARGUMENT_COUNT = 0;
var oAPI;
try {
oAPI = new ActiveXObject("Mom.ScriptAPI");
} catch (e) {
throw {
Code: 1,
Message: "Cannot create Mom.ScriptAPI" + " Error Code: " + e.Code + " Error Message: " + e.Message
};
}
function CheckArgument() {
if (WScript.Arguments.Unnamed.Count != EXPECTED_ARGUMENT_COUNT) {
var parameters = new Array(EXPECTED_ARGUMENT_COUNT, WScript.Arguments.Unnamed.Count);
LogEvent(ARGUMENT_COUNT_ERROR_ID, EVENT_TYPE_ERROR, FormatText(ARGUMENT_COUNT_ERROR_MSG, parameters));
WScript.Quit(-1);
}
}
function RecordLogEvent(Module, ArgumentsCol, ResponseCol, Comment) {
if (DebugLevel == undefined || DebugLevel &lt; 2)
return;
var outp = "";
if (Module != undefined) {
outp = outp + "Workflow : " + Module + "\n";
}
if (Comment != undefined) {
outp = outp + "Comment : " + Comment + "\n";
}
if (ArgumentsCol != undefined) {
for (var idx = 0; idx &lt; ArgumentsCol.length; idx++) {
outp = outp + "Arg:" + idx + " Val:" + ArgumentsCol(idx) + "\n";
}
outp = outp + "\n=============\n";
}
if (DebugLevel &gt; 2) {
if (ResponseCol != undefined) {
var count = ResponseCol.length;
if (count &gt; 6)
count = 6;
outp = outp + "\n Response collection count : " + ResponseCol.length + ". Only first " + count.toString() + " elements will be displayed.\n";
for (var idx = 0; idx &lt; count; idx++) {
outp = outp + " Resp:" + idx;
var esiProperties = ResponseCol[idx];
for (var propertyName in esiProperties) {
var propertyValue;
propertyValue = esiProperties[propertyName];
outp = outp + "\r\n" + propertyName + ":" + propertyValue;
}
}
outp = outp + "\n=============\n";
}
}
if (outp.length &gt; 0) {
LogEvent(
TRACING_ID,
EVENT_TYPE_INFORMATION,
" ESIServiceHost " + ESIServiceHost + " Port : " + Port + " TRACE : " + outp);
}
}
function parseBoolean(value) {
if (value == undefined)
return undefined;
if (typeof (value) == "boolean")
return value;
switch (String(value).toLowerCase()) {
case "true":
return true;
case "false":
return false;
default:
return undefined;
}
}
function FormatText(text, parameters) {
if (null == text || null == parameters)
return text;
var index;
for (index in parameters) {
text = text.replace("%" + index, parameters[index]);
}
return text;
}
function LogEvent(errorId, errorLevel, errorDescription) {
if (errorLevel &lt;= LOG_LEVEL) {
oAPI.LogScriptEvent(SCRIPT_NAME, errorId, errorLevel, errorDescription);
}
}
function LogConnectionError(ESIServiceHost, Port, Code, Message) {
LogEvent(
ESISERVICE_HTTP_CONNECTION_ERROR_ID,
EVENT_TYPE_ERROR,
ESISERVICE_HTTP_CONNECTION_ERROR_MSG + " " + " ESIServiceHost " + ESIServiceHost + " Port : " + Port + " Error Code: " + Code + " Error Message: " + Message);
}
function LogManagedEntityConnectionError(ManagedEntityId, ESIServiceHost, Port, Code, Message) {
LogEvent(
ESISERVICE_HTTP_CONNECTION_ERROR_ID,
EVENT_TYPE_ERROR,
ESISERVICE_HTTP_CONNECTION_ERROR_MSG + " " + ManagedEntityId + " ESIServiceHost " + ESIServiceHost + " Port : " + Port + " Error Code: " + Code + " Error Message: " + Message);
}

var DONE_EVENT = 4400;
var EXPECTED_ARGUMENT_COUNT = 14;
CheckArgument();
var sourceId = WScript.Arguments(0);
var managedEntityId = WScript.Arguments(1);
var ComputerName = WScript.Arguments(2);
var ESIServiceHost = WScript.Arguments(3);
var Port = WScript.Arguments(4);
var VCESystemId = WScript.Arguments(5);
var VBlockId = WScript.Arguments(6);
var ProxyServer = WScript.Arguments(7);
var BypassList = WScript.Arguments(8);
var IgonreCertificateErrors = WScript.Arguments(9);
var HTTPStoHTTPFallBack = WScript.Arguments(10);
var UserName = WScript.Arguments(11);
var Password = WScript.Arguments(12);
var DebugLevel = WScript.Arguments(13);
main();
function main() {
RecordLogEvent(SCRIPT_NAME, WScript.Arguments, undefined, "Input");
var discoveryData = oAPI.CreateDiscoveryData(0, sourceId, managedEntityId);
ESIServiceVersionRequest = new ESIServiceDataRequest();
var ESIServiceResponse;
var Properties = new Array();
Properties[0] = "SerialNumber";
try {
ESIServiceResponse = ESIServiceVersionRequest.GetAllEntities(ESIServiceHost, Port, "false", "VCEComputeChassis", VBlockId, Properties, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password);
if (ESIServiceResponse != undefined) {
RecordLogEvent(SCRIPT_NAME, undefined, ESIServiceResponse, "Response " + managedEntityId.toString());
for (var idx = 0; idx &lt; ESIServiceResponse.length; idx++) {
var ComputeChassis = discoveryData.CreateClassInstance("$MPElement[Name='ESIVCELib!EMC.SI.VCE.ComputeChassis']$");
ComputeChassis.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", ComputerName);
ComputeChassis.AddProperty("$MPElement[Name='ESILib!EMC.SI.ESIService']/ESIServiceHost$", ESIServiceHost);
ComputeChassis.AddProperty("$MPElement[Name='ESILib!EMC.SI.ESIService']/Port$", Port);
ComputeChassis.AddProperty("$MPElement[Name='ESIVCELib!EMC.SI.VCE.StorageSystem']/VCESystemId$", VCESystemId);
ComputeChassis.AddProperty("$MPElement[Name='ESIVCELib!EMC.SI.VCE.VBlock']/VBlockId$", VBlockId);
ComputeChassis.AddProperty("$MPElement[Name='ESIVCELib!EMC.SI.VCE.ComputeChassis']/ComputeChassisId$", ESIServiceResponse[idx]["Id"]);
ComputeChassis.AddProperty("$MPElement[Name='ESILib!EMC.SI.StorageDevice']/DescriptiveId$", ESIServiceResponse[idx]["Caption"]);
ComputeChassis.AddProperty("$MPElement[Name='ESILib!EMC.SI.StorageDevice']/FriendlyClassName$", ESIServiceResponse[idx]["FriendlyClass"]);
ComputeChassis.AddProperty("$MPElement[Name='ESILib!EMC.SI.StorageDevice']/DebugLevel$", DebugLevel);
ComputeChassis.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", ESIServiceResponse[idx]["FriendlyName"]);
ComputeChassis.AddProperty("$MPElement[Name='ESILib!EMC.SI.StorageDevice']/PhysicalPath$", ESIServiceResponse[idx]["PhysicalPath"]);
discoveryData.AddInstance(ComputeChassis);
}
oAPI.Return(discoveryData);
}
} catch (e) {
LogManagedEntityConnectionError(managedEntityId.toString(), ESIServiceHost, Port, e.Code, e.Message);
}
if (DebugLevel != 0) {
LogEvent(
DONE_EVENT,
EVENT_TYPE_INFORMATION,
" ESIServiceHost " + ESIServiceHost + " Port : " + Port);
}
}

function ESIServiceDataRequest() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
} catch (e) {
throw {
Code: 1,
Message: "Cannot create WinHttp.WinHttpRequest.5.1" + " Error Code: " + e.Code + " Error Message: " + e.Message
};
}
var xmlDOM;
try {
xmlDOM = new ActiveXObject("Microsoft.XMLDOM");
xmlDOM.async = false;
} catch (e) {
throw {
Code: 1,
Message: "Cannot create Microsoft.XMLDOM" + " Error Code: " + e.Code + " Error Message: " + e.Message
};
}
function ConnectToESIService(ClassName, Method, Parameters, ServerName, Port, Body, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password) {
HTTPREQUEST_PROXYSETTING_PROXY = 2
SecurityMessage = " Please verify in System Center Operations Manager Security settings if run As Accounts with permissions to logon to EMC SI Service are properly assigned to EMC SI Service Monitoring Account Run As Profile. ";
AutoLogonPolicy_Always = 0;
WinHttpRequestOption_UserAgentString = 0;
WinHttpRequestOption_SslErrorIgnoreFlags = 4;
WinHttpRequestOption_SelectCertificate = 5;
WinHttpRequestOption_EnableHttpsToHttpRedirects = 12;
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0;
HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1
HTTPREQUEST_AUTH_COUNT = 3;
ERROR_HTTP_OTHER = -1000;
WINHTTP_SERVER_REQUIRES_AUTHENTICATION = 401;
WINHTTP_PROXY_REQUIRES_AUTHENTICATION = 407;
ERROR_WINHTTP_NOT_FOUND = 404;
ERROR_WINHTTP_BAD_REQUEST = 400;
HttpRequestStatusOK = 200;
DEFAULT_CLASS = "api";
DEFAULT_METHOD = "Service";
DEFAULT_SERVER_NAME = "localhost";
DEFAULT_PORT = "49500";
DEFAULT_ROOT = "Esi";
if (ClassName == undefined) {
ClassName = DEFAULT_CLASS;
}
if (Method == undefined) {
Method = DEFAULT_METHOD;
Parameters = undefined;
}
if (ServerName == undefined) {
ServerName = DEFAULT_SERVER_NAME;
}
if (Port == undefined) {
Port = DEFAULT_PORT;
}
var url = "https://" + ServerName + ":" + Port + "/" + DEFAULT_ROOT + "/" + ClassName + "/" + Method;
if (Parameters != undefined) {
var UrlParams = "?";
for (var par in Parameters) {
if (UrlParams.charAt(UrlParams.length - 1) != '?')
UrlParams += "&amp;";
UrlParams += par + "=" + Parameters[par];
}
if (UrlParams.length &gt; 1) {
url += UrlParams;
}
}
var bRetry = false;
var bIgonreCertificateErrors = parseBoolean(IgonreCertificateErrors);
var bHTTPStoHTTPFallBack = parseBoolean(HTTPStoHTTPFallBack);
var ServerAuthCount = HTTPREQUEST_AUTH_COUNT;
var ProxyAuthCount = HTTPREQUEST_AUTH_COUNT;
var bProxy = false;
if (ProxyServer != undefined &amp;&amp; ProxyServer.length &gt; 0 &amp;&amp; ProxyServer.toLowerCase() != "none") {
var bpList = "";
if (BypassList != undefined &amp;&amp; BypassList.length &gt; 0 &amp;&amp; BypassList.toLowerCase() != "none") {
bpList = BypassList;
}
xmlhttp.SetProxy(HTTPREQUEST_PROXYSETTING_PROXY, ProxyServer, bpList);
bProxy = true;
}
xmlhttp.SetTimeouts(60000, 120000, 90000, 240000);
var HTTPMethod;
if (Body == undefined) {
HTTPMethod = "GET";
} else {
HTTPMethod = "POST";
}
if (bIgonreCertificateErrors != undefined &amp;&amp; bIgonreCertificateErrors == false) {
xmlhttp.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = 0;
} else {
var intSslErrorIgnoreFlags = 13056;
xmlhttp.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = intSslErrorIgnoreFlags;
}
xmlhttp.Option(WinHttpRequestOption_EnableHttpsToHttpRedirects) = bHTTPStoHTTPFallBack;
xmlhttp.SetAutoLogonPolicy(AutoLogonPolicy_Always);
if (UserName != undefined &amp;&amp; UserName.length &gt; 0 &amp;&amp; UserName.toLowerCase() != "none") {
var SetCredentialsFlag;
if (bProxy == false) {
SetCredentialsFlag = HTTPREQUEST_SETCREDENTIALS_FOR_SERVER;
} else {
SetCredentialsFlag = HTTPREQUEST_SETCREDENTIALS_FOR_PROXY;
}
if (Password != undefined &amp;&amp; Password.toLowerCase() == "none") {
Password = undefined;
}
}
var XMLDocResult;
var xmlhttp_status;
var Error_Code = 0;
var Error_Description = "";
do {
try {
xmlhttp.open(HTTPMethod, url, false);
if (UserName != undefined &amp;&amp; UserName.length &gt; 0 &amp;&amp; UserName.toLowerCase() != "none") {
xmlhttp.SetCredentials(UserName, Password, SetCredentialsFlag);
}
xmlhttp.send(Body);
xmlhttp_status = xmlhttp.Status;
Error_Description = xmlhttp.StatusText;
bRetry = false;
} catch (e) {
Error_Code = e.number &amp; 0xFFFF;
Error_Description = e.description;
if (e.name == "Error")
{
xmlhttp_status = Error_Code;
if (bRetry == false) {
if (bHTTPStoHTTPFallBack == true) {
bRetry = true;
url = url.replace("https", "http");
xmlhttp_status = HttpRequestStatusOK;
}
}
} else {
xmlhttp_status = e.number;
}
}
finally {
switch (xmlhttp_status) {
case undefined:
throw {
Code: 255,
Message: "Undefined result code connecting to Esi Service. Error Code : " + Error_Code + " Error Description : " + Error_Description + " url : " + url + "."
};
break;
case HttpRequestStatusOK:
if (bRetry == false)
return xmlhttp.responseText;
break;
case ERROR_WINHTTP_NOT_FOUND:
throw {
Code: xmlhttp_status,
Message: "Incorrect url ( invalid class property or parameters ) connecting to Esi Service. http code : " + xmlhttp_status + " url : " + url + "."
};
break;
case ERROR_WINHTTP_BAD_REQUEST:
throw {
Code: xmlhttp_status,
Message: "Esi Service returned error when processing request. http code : " + xmlhttp_status + " url : " + url + "."
};
break;
case WINHTTP_SERVER_REQUIRES_AUTHENTICATION:
ServerAuthCount--;
if (ServerAuthCount == 0) {
throw {
Code: xmlhttp_status,
Message: "HTTP server requires authentication. http code : " + xmlhttp_status + " url : " + url + "." + SecurityMessage
};
} else {
bRetry = true;
}
break;
case WINHTTP_PROXY_REQUIRES_AUTHENTICATION:
ProxyAuthCount--;
if (ProxyAuthCount == 0) {
throw {
Code: xmlhttp_status,
Message: "HTTP proxy requires authentication. http code : " + xmlhttp_status + " url : " + url + "." + SecurityMessage
};
} else {
bRetry = true;
}
break;
default:
throw {
Code: Error_Code,
Message: "Unspecified WinHttp.WinHttpRequest.5.1 error connecting to Esi Service. http code : " + xmlhttp_status + " url : " + url + " Description : " + Error_Description + "."
};
break;
}
}
} while (bRetry);
}
ESIServiceDataRequest.prototype.SetESIServiceRefreshInterval = function (Interval, ServerName, Port, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password) {
var body = undefined;
var IntervalValue = ApplyRefreshInterval(Interval);
if (IntervalValue != undefined &amp;&amp; IntervalValue &gt; 0) {
body = "SystemRefreshIntervalMinutes=" + IntervalValue.toString();
}
var XMLDoc = ConnectToESIService("api", "ServicePolicies", undefined, ServerName, Port, body, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password);
var Result;
xmlDOM.onreadystatechange = function () {
if (xmlDOM.readyState == 4) {
Result = xmlDOM.text;
}
};
xmlDOM.loadXML(XMLDoc);
return Result;
}
function ApplyRefreshInterval(Interval) {
if (Interval != undefined) {
var values = Interval.split("*");
if (values.length &gt; 1) {
var temp = Interval.match(/\d+/);
if (temp == null || temp == undefined) {
return undefined;
}
return (parseInt(temp));
} else {
return undefined;
}
}
return Interval;
}
ESIServiceDataRequest.prototype.GetAllEntitiesId = function (ServerName, Port, GetSource, Class, Id, PropertyList, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password, Orphaned) {
MetaList = new Array();
MetaList[MetaList.length] = "Id";
return this.GetAllEntitiesEx(ServerName, Port, GetSource, Class, Id, MetaList, PropertyList, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password, Orphaned);
}
ESIServiceDataRequest.prototype.GetAllEntities = function (ServerName, Port, GetSource, Class, Id, PropertyList, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password, Orphaned) {
MetaList = new Array();
MetaList[MetaList.length] = "Id";
MetaList[MetaList.length] = "FriendlyName";
MetaList[MetaList.length] = "FriendlyClass";
MetaList[MetaList.length] = "Caption";
MetaList[MetaList.length] = "PhysicalPath";
MetaList[MetaList.length] = "SnapshotTime";
MetaList[MetaList.length] = "SystemType";
return this.GetAllEntitiesEx(ServerName, Port, GetSource, Class, Id, MetaList, PropertyList, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password, Orphaned);
}
ESIServiceDataRequest.prototype.GetAllEntitiesEx = function (ServerName, Port, GetSource, Class, Id, MetaList, PropertyList, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password, Orphaned)
{
var PropertyString;
var boolGetSource = parseBoolean(GetSource);
if (PropertyList != undefined) {
PropertyString = "";
for (var idx = 0; idx &lt; PropertyList.length; idx++) {
if (PropertyString.length &gt; 1) {
PropertyString = PropertyString + ",";
}
PropertyString = PropertyString + PropertyList[idx];
}
} else {
PropertyString = "noprops";
}
var MetaString = "";
if (MetaList != undefined) {
for (var idx = 0; idx &lt; MetaList.length; idx++) {
if (MetaString.length &gt; 1) {
MetaString = MetaString + ",";
}
MetaString = MetaString + MetaList[idx];
}
}
var ClassName;
var Method;
var Parameters = new Object();
if (PropertyString != undefined &amp;&amp; PropertyString.length &gt; 1) {
Parameters["props"] = PropertyString;
}
if (MetaString != undefined &amp;&amp; MetaString.length &gt; 1) {
Parameters["meta"] = MetaString;
}
if (Class != undefined) {
ClassName = "api";
if (Id == undefined) {
if (Class == "RegisteredSystem") {
Method = "RegisteredSystems";
} else {
Parameters["class"] = Class;
Method = "Entities";
}
} else {
if (boolGetSource != undefined &amp;&amp; boolGetSource == true) {
Parameters["sourceClass"] = Class;
} else {
Parameters["targetClass"] = Class;
}
}
}
if (Id != undefined) {
ClassName = "api";
Parameters["Id"] = Id;
if (boolGetSource != undefined &amp;&amp; boolGetSource == true) {
Method = "RelatedSourceEntities";
} else {
Method = "RelatedTargetEntities";
}
}
var bOrphaned = parseBoolean(Orphaned);
if (bOrphaned != undefined &amp;&amp; bOrphaned == true) {
Parameters["rel"] = "Orphaned";
}
var ResultCollection = [];
var ResultColIndex = 0;
xmlDOM.onreadystatechange = function () {
if (xmlDOM.readyState == 4)
{
if (xmlDOM.childNodes != undefined) {
var DocumentElement = xmlDOM.lastChild;
if ((DocumentElement.nodeName == "Service") || (DocumentElement.nodeName == "RegisteredSystem")) {
var EntityObject = new Object();
for (var x = 0; x &lt; DocumentElement.attributes.length; x++) {
EntityObject[DocumentElement.attributes[x].nodeName] = DocumentElement.attributes[x].nodeValue;
}
ResultCollection[0] = EntityObject;
}
else {
var EntityCollection = DocumentElement.childNodes;
if (EntityCollection != undefined) {
for (var idxEntity = 0; idxEntity &lt; EntityCollection.length; idxEntity++) {
var EntityObject = new Object();
var Properties = EntityCollection[idxEntity].childNodes;
for (var idxProperty = 0; idxProperty &lt; Properties.length; idxProperty++) {
var Name = Properties[idxProperty].nodeName;
var Value;
if (Properties[idxProperty].attributes.length &gt; 0 &amp;&amp; Properties[idxProperty].attributes[0].nodeName == "IsArray" &amp;&amp; Properties[idxProperty].attributes[0].nodeValue == "true") {
var Values = Properties[idxProperty].childNodes;
Value = "";
for (var IdxValues = 0; IdxValues &lt; Values.length; IdxValues++) {
if (Values[IdxValues].nodeName == "Value") {
if (IdxValues &gt; 0) {
Value = Value + ", ";
}
Value = Value + Values[IdxValues].text;
}
}
} else {
Value = Properties[idxProperty].text;
}
EntityObject[Name] = Value;
}
for (var x = 1; x &lt; EntityCollection[idxEntity].attributes.length; x++) {
var Name = EntityCollection[idxEntity].attributes[x].baseName;
EntityObject[Name] = EntityCollection[idxEntity].attributes[x].nodeValue;
}
ResultCollection[ResultColIndex++] = EntityObject;
}
}
}
}
}
}
var XMLDoc = ConnectToESIService(ClassName, Method, Parameters, ServerName, Port, undefined, ProxyServer, BypassList, IgonreCertificateErrors, HTTPStoHTTPFallBack, UserName, Password);
xmlDOM.loadXML(XMLDoc);
return ResultCollection;
}
}

</Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>