Generic Command Executer Provider (XML)

ComTrade.EMC.Documentum.xPloreIndexServer.Windows.PA.Xml.Generic.CommandExecuter.Provider (ProbeActionModuleType)

Command executer provider gets data as table from XML with filter data ability.
For parameter separation use !!Next!!
When in XSL you need to use */ for matching for example descendant::*/ use *\/ to avoid end of block comment in JavaScript.
All script filenames must have .js extension.

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityPublic
RunAsDefault
InputTypeSystem.BaseData
OutputTypeSystem.CommandOutput

Member Modules:

ID Module Type TypeId RunAs 
PA ProbeAction System.CommandExecuterProbe Default

Source Code:

<ProbeActionModuleType ID="ComTrade.EMC.Documentum.xPloreIndexServer.Windows.PA.Xml.Generic.CommandExecuter.Provider" Accessibility="Public" Batching="false" PassThrough="false">
<Configuration>
<xsd:element minOccurs="1" name="ScriptFilename" type="xsd:string"/>
<xsd:element minOccurs="0" name="RegPath" type="xsd:string"/>
<xsd:element minOccurs="0" name="RegKey" type="xsd:string"/>
<xsd:element minOccurs="0" name="XmlFilename" type="xsd:string"/>
<xsd:element minOccurs="1" name="XslFilter" type="xsd:string"/>
<xsd:element minOccurs="1" name="ValueProperties" type="xsd:string"/>
<xsd:element minOccurs="1" name="ValuePropertyValues" type="xsd:string"/>
<xsd:element minOccurs="1" name="TargetComputer" type="xsd:string"/>
</Configuration>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="PA" TypeID="System!System.CommandExecuterProbe">
<ApplicationName>%windir%\system32\cscript.exe</ApplicationName>
<WorkingDirectory/>
<CommandLine>//NoLogo $File/$Config/ScriptFilename$$ "$Config/RegPath$" "$Config/RegKey$" "$Config/XmlFilename$" "$Config/TargetComputer$"</CommandLine>
<TimeoutSeconds>300</TimeoutSeconds>
<RequireOutput>true</RequireOutput>
<Files>
<File>
<Name>$Config/ScriptFilename$</Name>
<Contents><Script>
function extractMultiLineString(f) {
return f.toString().
replace(/^[^\/]+\/\*!?/, '').
replace(/\*\/[^\/]+$/, '').
replace(/\*\\\//g, '*/');
};
var trim = function (str) {
return str.replace(/^\s+|\s+$/g,"");
};
var xslText = extractMultiLineString(function() {/*!$Config/XslFilter$*/});
var arrNames = '$Config/ValueProperties$'.split(/!!Next!!/);
var aValues = '$Config/ValuePropertyValues$';
var arrValues = [];
var startPos = 0;
var aInd = aValues.indexOf("!!Next!!", startPos);
if (aInd &lt; 0) {
arrValues[0] = aValues;
} else {
var pInd = 0;
while (aInd &gt; 0) {
arrValues[pInd] = aValues.substr(startPos, aInd - startPos);
pInd++;
startPos = aInd + 8;
aInd = aValues.indexOf("!!Next!!", startPos);
}
arrValues[pInd] = aValues.substr(startPos);
}
CTRegistry = function(sHostname) {
var m_ErrorCode = 0;
var m_ErrorDescription = "";
var M_HKEY_CLASSES_ROOT = 0x80000000;
var M_HKEY_CURRENT_USER = 0x80000001;
var M_HKEY_LOCAL_MACHINE = 0x80000002;
var M_HKEY_USERS = 0x80000003;
var M_HKEY_CURRENT_CONFIG = 0x80000005;
var M_HKEY_DYN_DATA = 0x80000006; // Windows 95 / 98 only;
var M_REG_SZ = 1;
var M_REG_EXPAND_SZ = 2;
var M_REG_BINARY = 3;
var M_REG_DWORD = 4;
var M_REG_DWORD_BIG_ENDIAN = 5;
var M_REG_LINK = 6;
var M_REG_MULTI_SZ = 7;
var M_REG_RESOURCE_LIST = 8;
var M_REG_FULL_RESOURCE_DESCRIPTOR = 9;
var M_REG_RESOURCE_REQUIREMENTS_LIST = 10;
var M_REG_QWORD = 11;
var M_REG_KEY_QUERY_VALUE = 0x0001;
var M_REG_KEY_SET_VALUE = 0x0002;
var M_REG_KEY_CREATE_SUB_KEY = 0x0004;
var M_REG_KEY_DELETE = 0x00010000;
var m_RegProviderName ='StdRegProv';
var m_ObjWmiService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + sHostname + "\\root\\default");
var m_ObjRegistry = m_ObjWmiService.Get(m_RegProviderName);
var ResetErrors = function() {
m_ErrorCode = 0;
m_ErrorDescription = "";
};
this.HKEY_CLASSES_ROOT = function() {
return M_HKEY_CLASSES_ROOT;
};
this.HKEY_CURRENT_USER = function() {
return M_HKEY_CURRENT_USER;
};
this.HKEY_LOCAL_MACHINE = function() {
return M_HKEY_LOCAL_MACHINE;
};
this.HKEY_USERS = function() {
return M_HKEY_USERS;
};
this.HKEY_CURRENT_CONFIG = function() {
return M_HKEY_CURRENT_CONFIG;
};
this.HKEY_DYN_DATA = function() {
return M_HKEY_DYN_DATA;
};
this.REG_SZ = function() {
return M_REG_SZ;
};
this.REG_EXPAND_SZ = function() {
return M_REG_EXPAND_SZ;
};
this.REG_BINARY = function() {
return M_REG_BINARY;
};
this.REG_DWORD = function() {
return M_REG_DWORD;
};
this.REG_DWORD_BIG_ENDIAN = function() {
return M_REG_DWORD_BIG_ENDIAN;
};
this.REG_LINK = function() {
return M_REG_LINK;
};
this.REG_MULTI_SZ = function() {
return M_REG_MULTI_SZ;
};
this.REG_RESOURCE_LIST = function() {
return M_REG_RESOURCE_LIST;
};
this.REG_FULL_RESOURCE_DESCRIPTOR = function() {
return M_REG_FULL_RESOURCE_DESCRIPTOR;
};
this.REG_RESOURCE_REQUIREMENTS_LIST = function() {
return M_REG_RESOURCE_REQUIREMENTS_LIST;
};
this.REG_QWORD = function() {
return M_REG_QWORD;
};
this.REG_KEY_QUERY_VALUE = function() {
return M_REG_KEY_QUERY_VALUE;
};
this.REG_KEY_SET_VALUE = function() {
return M_REG_KEY_SET_VALUE;
};
this.REG_KEY_CREATE_SUB_KEY = function() {
return M_REG_KEY_CREATE_SUB_KEY;
};
this.REG_KEY_DELETE = function() {
return M_REG_KEY_DELETE;
};
this.GetStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.sValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.GetExpandedStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetExpandedStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.sValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
var trim = function (str) {
return str.replace(/^\s+|\s+$/g,"");
};
this.GetBinaryValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'GetBinaryValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = "";
for (var k = 0; k &lt; out_params.uValue.toArray().length; ++k) {
var tVal = out_params.uValue(k).toString(16);
if (tVal.length == 1) {
tVal = "0" + tVal;
}
oValue[0] += tVal + " ";
}
oValue[0] = trim(oValue[0]);
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.GetDwordValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetDWORDValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.uValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.GetQwordValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetQWORDValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oValue[0] = out_params.uValue;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.GetMultiStringValue = function ( sHive, sRegKey, sKeyName, oValue) {
try {
oValue.length = 0;
ResetErrors();
var func_name = 'GetMultiStringValue';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.sValueName = sKeyName;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sValue.toArray().length; ++k) {
oValue[k] = out_params.sValue(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.CheckPermission = function ( sHive, sRegKey, oPermission, oGranted) {
try {
ResetErrors();
oGranted.length = 0;
var func_name = 'CheckAccess';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
in_params.uRequired = oPermission;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
oGranted[0] = out_params.bGranted;
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.EnumerateValues = function ( sHive, sRegKey, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
oValue[k] = out_params.sNames(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.EnumerateSubKeys = function ( sHive, sRegKey, oValue) {
try {
ResetErrors();
oValue.length = 0;
var func_name = 'EnumKey';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
oValue[k] = out_params.sNames(k);
}
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.RegKeyExists = function ( sHive, sRegKey) {
try {
ResetErrors();
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
return true;
}
else {
return false;
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
};
this.RegValueExists = function ( sHive, sRegKey, sRegValue) {
try {
ResetErrors();
var tmpA = sRegValue.toLowerCase();
var func_name = 'EnumValues';
var in_params = m_ObjRegistry.Methods_(func_name).InParameters.SpawnInstance_();
in_params.hDefKey = sHive;
in_params.sSubKeyName = sRegKey;
var out_params = m_ObjWmiService.ExecMethod(m_RegProviderName, func_name, in_params);
if (out_params.ReturnValue == 0) {
for (var k = 0; k &lt; out_params.sNames.toArray().length; ++k) {
if (out_params.sNames(k).toLowerCase() == tmpA) {
return true;
}
}
}
}
catch (e) {
m_ErrorCode = e.number;
m_ErrorDescription = e.description;
return false;
}
return false;
};
this.ErrorCode = function() {
return m_ErrorCode;
};
this.ErrorDescription = function() {
return m_ErrorDescription;
};
this.destroy = function() {
m_ObjRegistry = null;
m_ObjWmiService = null;
};
};
CTXmlDiff = function () {
var piErrorCode = 0;
var psErrorDescription = "";
var poMasterXml = new ActiveXObject("Microsoft.XMLDOM");
var poReferenceXml = new ActiveXObject("Microsoft.XMLDOM");
poMasterXml.setProperty("SelectionLanguage", "XPath");
poReferenceXml.setProperty("SelectionLanguage", "XPath");
var poFileSystem = new ActiveXObject("Scripting.FileSystemObject");
var poKeys = [];
var psReferenceFilename = "";
var psMasterFilename = "";
var psFilepath = "";
var psXslContent = "";

this.createDifference = function () {
if ((psMasterFilename.length &gt; 0) &amp;&amp; (psReferenceFilename.length &gt; 0) &amp;&amp; (psFilepath.length &gt; 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sReferenceFile = psFilepath + "/" + psReferenceFilename;
var sMasterFileLock = sMasterFile + ".lck";
var sReferenceFileLock = sReferenceFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length &gt; 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
if (this.load(sReferenceFile, sReferenceFileLock, poReferenceXml, 100)) {
var diffNodes = "&lt;Collection&gt;\n";
var oMasterNodes = poMasterXml.selectNodes("//DataItem");
var oReferenceNodes = poReferenceXml.selectNodes("//DataItem");
var k, n, m;
for (k = 0; k &lt; oMasterNodes.length; k++) {
var isFound = false;
for (n = 0; n &lt; oReferenceNodes.length; n++) {
var isMathced = 0;
for (m = 0; m &lt; poKeys.length; m++) {
var pMnds = oMasterNodes(k).selectSingleNode("Property[@Name='" + poKeys[m] + "']");
if (pMnds) {
var pRnds = oReferenceNodes[n].selectSingleNode("Property[@Name='" + poKeys[m] + "']");
if (pRnds) {
if (pMnds.text == pRnds.text) {
isMathced++;
}
}
}
}
if (isMathced == poKeys.length) {
isFound = true;
}
if (isFound) {
break;
}
}
if (isFound == false) {
diffNodes += oMasterNodes(k).xml + "\n";
}
}
diffNodes += "&lt;/Collection&gt;";
var oNewXml = new ActiveXObject("Microsoft.XMLDOM");
oNewXml.setProperty("SelectionLanguage", "XPath");
if (oNewXml.loadXML(diffNodes)) {
if (oNewXml.documentElement.hasChildNodes()) {
poMasterXml.save(sReferenceFile);
}
if (arguments.length &gt; 0) {
var oApi = arguments[0];
var nds = oNewXml.selectNodes("//DataItem");
if (nds &amp;&amp; (nds.length &gt; 0)) {
var nCount;
for (nCount = 0; nCount &lt; nds.length; nCount++) {
var oBag = oApi.CreatePropertyBag();
if (nds[nCount] &amp;&amp; nds[nCount].hasChildNodes()) {
var nChilds;
for (nChilds = 0; nChilds &lt; nds[nCount].childNodes.length; nChilds++) {
oBag.AddValue(nds[nCount].childNodes[nChilds].attributes[0].value, nds[nCount].childNodes[nChilds].text);
}
}
oApi.AddItem(oBag);
oBag = null;
}
} else {
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
} else {
piErrorCode = 1;
psErrorDescription = oNewXml.parseError.reason;
if (arguments.length &gt; 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
oNewXml = null;
return diffNodes;
} else {
if (arguments.length &gt; 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
poMasterXml.save(sReferenceFile);
}
}
}
}
if (arguments.length &gt; 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
if (arguments.length &gt; 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
}
return null;
};
this.createMasterPropertyBag = function () {
if ((psMasterFilename.length &gt; 0) &amp;&amp; (psFilepath.length &gt; 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length &gt; 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
if (arguments.length &gt; 0) {
var oApi = arguments[0];
var nds = poMasterXml.selectNodes("//DataItem");
if (nds &amp;&amp; (nds.length &gt; 0)) {
var nCount;
for (nCount = 0; nCount &lt; nds.length; nCount++) {
var oBag = oApi.CreatePropertyBag();
if (nds[nCount] &amp;&amp; nds[nCount].hasChildNodes()) {
var nChilds;
for (nChilds = 0; nChilds &lt; nds[nCount].childNodes.length; nChilds++) {
oBag.AddValue(nds[nCount].childNodes[nChilds].attributes[0].value, nds[nCount].childNodes[nChilds].text);
}
}
oApi.AddItem(oBag);
oBag = null;
}
} else {
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
return poMasterXml.xml;
}
} else {
if (arguments.length &gt; 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
} else {
if (arguments.length &gt; 0) {
var oApi = arguments[0];
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
}
}
return null;
};
this.setXslContent = function (sXslContent) {
psXslContent = sXslContent;
};
this.setReferenceFilename = function (sFilename) {
psReferenceFilename = sFilename;
};
this.setMasterFilename = function (sFilename) {
psMasterFilename = sFilename;
};
this.setFilepath = function (sFilepath) {
psFilepath = sFilepath;
};
this.load = function (sXmlFile, sLockFile, oXml, iRepeatCount) {
try {
if (!poFileSystem.FileExists(sXmlFile)) {
throw new Error(4, "File '" + sXmlFile + "' not found.");
}
oXml.async = false;
var fileLock = null;
do {
try {
fileLock = poFileSystem.OpenTextFile(sLockFile, 8, true);
break;
} catch (e) {
iRepeatCount--;
WScript.Sleep(100);
}
} while (iRepeatCount &gt; 0);
if (iRepeatCount &lt; 1) {
throw new Error(5, "Could not acquire lock for reading file '" + sLockFile + "'.");
}
var flc = "&lt;xmlfile /&gt;";
var fl = poFileSystem.OpenTextFile(sXmlFile, 1);
if (fl) {
if (!fl.AtEndOfStream) {
flc = fl.ReadAll();
}
fl.Close();
} else {
throw new Error(5, "Error loading data file '"+ sXmlFile + "'. ");
}
if (fileLock) {
WScript.Sleep(300);
fileLock.Close();
}
if (!oXml.loadXML(flc)) {

throw new Error(6, "Error loading data file '" + sXmlFile + "'. Error code: " + oXml.parseError.reason);
}
return true;
} catch (exc) {
piErrorCode = exc.number;
psErrorDescription = exc.description;
}
return false;
};
this.loadXml = function (sXmlContent, oXml) {
try {
if (oXml.loadXML(sXmlContent)) {
return true;
} else {
throw new Error(6, "Error loading XML content Error code: " + oXml.parseError.reason);
}
} catch (e) {
piErrorCode = e.number;
psErrorDescription = e.description;
return false;
}
};
this.destroy = function () {
poMasterXml = null;
poReferenceXml = null;
poFileSystem = null;
poKeys.length = 0;
poKeys = null;
};

var resetErrors = function () {
piErrorCode = 0;
psErrorDescription = "";
};
this.applyXslTransformation = function (sXslText, oXml) {
var rtVal = this.xslTransformation(sXslText, oXml);
if (rtVal) {
return this.loadXml(rtVal, oXml);
}
return false;
};
this.xslTransformation = function (sXslText, oXml) {
try {
resetErrors();
var oXsl = new ActiveXObject("Microsoft.XMLDOM");
oXsl.setProperty("SelectionLanguage", "XPath");
oXsl.async = false;
if (oXsl.loadXML(sXslText)) {
var rtVal = oXml.transformNode(oXsl);
return rtVal;
} else {
throw new Error(1, oXsl.parseError.reason);
}
} catch (e) {
piErrorCode = e.number;
psErrorDescription = e.description;
}
return null;
};
this.applyPropertyBagXslThenCreatePropertyBag = function (sXslText, oXml, oApi) {
try {
resetErrors();
var sTransXml = this.xslTransformation(sXslText, oXml);
if (sTransXml) {
var oTempXml = new ActiveXObject("Microsoft.XMLDOM");
oTempXml.setProperty("SelectionLanguage", "XPath");
oTempXml.async = false;
if (oTempXml.loadXML(sTransXml)) {
var nds = oTempXml.selectNodes("//DataItem");
if (nds &amp;&amp; (nds.length &gt; 0)) {
var k;
for (k = 0; k &lt; nds.length; k++) {
var oBag = oApi.CreatePropertyBag();
if (nds[k] &amp;&amp; nds[k].hasChildNodes()) {
var n;
for (n = 0; n &lt; nds[k].childNodes.length; n++) {
oBag.AddValue(nds[k].childNodes[n].attributes[0].value, nds[k].childNodes[n].text);
}
}
oApi.AddItem(oBag);
oBag = null;
}
} else {
var oBag = oApi.CreatePropertyBag();
oApi.AddItem(oBag);
oBag = null;
}
} else {
var sReason = oTempXml.parseError.reason;
throw new Error(2, sReason);
}
return true;
}
} catch (e) {
piErrorCode = e.number;
psErrorDescription = e.description;
}
return false;
};

this.addKey = function (sKey) {
poKeys[poKeys.length] = sKey;
};
this.clearKeys = function () {
poKeys.length = 0;
};
this.errorCode = function () {
return piErrorCode;
};
this.errorDescription = function () {
return psErrorDescription;
};
this.makeTextTable = function (oXml, sValueProperty, sPropertyValue) {
var xstText = '&lt;xsl:stylesheet version="1.0"\n' +
' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;\n' +
' &lt;xsl:output method="text"/&gt;\n' +
' &lt;xsl:strip-space elements="*"/&gt;\n' +
' &lt;xsl:variable name="newline" select="' + "'&amp;#10;'" + '"/&gt;\n' +
' &lt;xsl:template match="DataItem[1]"&gt;\n' +
' &lt;xsl:for-each select="Property"&gt;\n' +
' &lt;xsl:variable name="maxWidthA"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="paddingA"&gt;\n' +
' &lt;xsl:value-of select="$maxWidthA - string-length(@Name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="@Name"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$paddingA"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;xsl:call-template name="matchDataItems"&gt;\n' +
' &lt;xsl:with-param name="pnode" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template match="DataItem"&gt;\n' +
' &lt;xsl:call-template name="matchDataItems"&gt;\n' +
' &lt;xsl:with-param name="pnode" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="matchDataItems"&gt;\n' +
' &lt;xsl:param name="pnode"/&gt;\n' +
' &lt;xsl:for-each select="$pnode/Property[@Name=' + "'" + sValueProperty + "'" + ']"&gt;\n' +
' &lt;xsl:if test="child::node() = '+ "'"+ sPropertyValue +"'" + '"&gt;\n' +
' &lt;xsl:call-template name="getData"&gt;\n' +
' &lt;xsl:with-param name="cnode" select=".." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="getData"&gt;\n' +
' &lt;xsl:param name="cnode"/&gt;\n' +
' &lt;xsl:for-each select="$cnode/Property"&gt;\n' +
' &lt;xsl:variable name="maxWidth"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="string"&gt;\n' +
' &lt;xsl:for-each select="child::node()"&gt;\n' +
' &lt;xsl:value-of select="translate(., '+ "'&amp;#x20;&amp;#x9;&amp;#xD;&amp;#xA;', ' '" + ')"/&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="padding"&gt;\n' +
' &lt;xsl:value-of select="$maxWidth - string-length($string)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="$string"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$padding"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="calcWidth"&gt;\n' +
' &lt;xsl:param name="name" /&gt;\n' +
' &lt;xsl:for-each select="//Property[@Name = $name]"&gt;\n' +
' &lt;xsl:sort select="string-length(child::node())" order="descending" data-type="number"/&gt;\n' +
' &lt;xsl:if test="position() = 1"&gt;\n' +
' &lt;xsl:variable name="var1"&gt;\n' +
' &lt;xsl:value-of select="string-length(child::node())"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="var2"&gt;\n' +
' &lt;xsl:value-of select="string-length($name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$var1 &amp;gt; $var2"&gt;\n' +
' &lt;xsl:value-of select="$var1"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="$var2"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="append-pad"&gt;\n' +
' &lt;xsl:param name="length" select="0"/&gt;\n' +
' &lt;xsl:if test="$length != 0"&gt;\n' +
' &lt;xsl:value-of select="' + "'&amp;#32;'" + '"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$length - 1"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:template&gt;\n' +
'&lt;/xsl:stylesheet&gt;\n';
return this.xslTransformation(xstText, oXml);
};

this.makeTextTablePropertyBag = function (oApi, oXml, sValueProperty, sPropertyValue) {
var trTextTable = this.makeTextTable(oXml, sValueProperty, sPropertyValue);
var oBag = oApi.CreatePropertyBag();
oBag.AddValue(sValueProperty, sPropertyValue);
if (trTextTable) {
oBag.AddValue("Result", "\n\r" + trTextTable);
} else {
oBag.AddValue("Result", " ");
}
oApi.AddItem(oBag);
oBag = null;
};
this.makeTextTableEx = function (oXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
var xstText = '&lt;xsl:stylesheet version="1.0"\n' +
' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;\n' +
' &lt;xsl:output method="text"/&gt;\n' +
' &lt;xsl:strip-space elements="*"/&gt;\n' +
' &lt;xsl:variable name="newline" select="' + "'&amp;#10;'" + '"/&gt;\n' +
' &lt;xsl:template match="DataItem[1]"&gt;\n' +
' &lt;xsl:for-each select="Property"&gt;\n' +
' &lt;xsl:variable name="maxWidthA"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="paddingA"&gt;\n' +
' &lt;xsl:value-of select="$maxWidthA - string-length(@Name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="@Name"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$paddingA"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;xsl:call-template name="matchDataItems"&gt;\n' +
' &lt;xsl:with-param name="pnode" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template match="DataItem"&gt;\n' +
' &lt;xsl:call-template name="matchDataItems"&gt;\n' +
' &lt;xsl:with-param name="pnode" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="matchDataItems"&gt;\n' +
' &lt;xsl:param name="pnode"/&gt;\n' +
' &lt;xsl:for-each select="$pnode/Property[@Name=' + "'" + sValueProperty1 + "'" + ']"&gt;\n' +
' &lt;xsl:if test="child::node() = '+ "'"+ sPropertyValue1 +"'" + '"&gt;\n' +
' &lt;xsl:call-template name="matchNextDataItems"&gt;\n' +
' &lt;xsl:with-param name="npnode" select=".." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="matchNextDataItems"&gt;\n' +
' &lt;xsl:param name="npnode"/&gt;\n' +
' &lt;xsl:for-each select="$npnode/Property[@Name=' + "'" + sValueProperty2 + "'" + ']"&gt;\n' +
' &lt;xsl:if test="child::node() = '+ "'"+ sPropertyValue2 +"'" + '"&gt;\n' +
' &lt;xsl:call-template name="getData"&gt;\n' +
' &lt;xsl:with-param name="cnode" select=".." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="getData"&gt;\n' +
' &lt;xsl:param name="cnode"/&gt;\n' +
' &lt;xsl:for-each select="$cnode/Property"&gt;\n' +
' &lt;xsl:variable name="maxWidth"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="string"&gt;\n' +
' &lt;xsl:for-each select="child::node()"&gt;\n' +
' &lt;xsl:value-of select="translate(., '+ "'&amp;#x20;&amp;#x9;&amp;#xD;&amp;#xA;', ' '" + ')"/&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="padding"&gt;\n' +
' &lt;xsl:value-of select="$maxWidth - string-length($string)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="$string"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$padding"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="calcWidth"&gt;\n' +
' &lt;xsl:param name="name" /&gt;\n' +
' &lt;xsl:for-each select="//Property[@Name = $name]"&gt;\n' +
' &lt;xsl:sort select="string-length(child::node())" order="descending" data-type="number"/&gt;\n' +
' &lt;xsl:if test="position() = 1"&gt;\n' +
' &lt;xsl:variable name="var1"&gt;\n' +
' &lt;xsl:value-of select="string-length(child::node())"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="var2"&gt;\n' +
' &lt;xsl:value-of select="string-length($name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$var1 &amp;gt; $var2"&gt;\n' +
' &lt;xsl:value-of select="$var1"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="$var2"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="append-pad"&gt;\n' +
' &lt;xsl:param name="length" select="0"/&gt;\n' +
' &lt;xsl:if test="$length != 0"&gt;\n' +
' &lt;xsl:value-of select="' + "'&amp;#32;'" + '"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$length - 1"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:template&gt;\n' +
'&lt;/xsl:stylesheet&gt;\n';
return this.xslTransformation(xstText, oXml);
};
var createTableXsl = function(arrNames, arrValues) {
if (arrNames &amp;&amp; arrValues &amp;&amp; (arrNames.length != arrValues.length)) {
return null;
}
var xslValue = '&lt;xsl:stylesheet version="1.0"\n' +
' xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;\n' +
' &lt;xsl:output method="text"/&gt;\n' +
' &lt;xsl:strip-space elements="*"/&gt;\n' +
' &lt;xsl:variable name="newline" select="' + "'&amp;#10;'" + '"/&gt;\n' +
' &lt;xsl:template match="DataItem[1]"&gt;\n' +
' &lt;xsl:for-each select="Property"&gt;\n' +
' &lt;xsl:variable name="maxWidthA"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="paddingA"&gt;\n' +
' &lt;xsl:value-of select="$maxWidthA - string-length(@Name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="@Name"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$paddingA"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;xsl:call-template name="matchDataItems0"&gt;\n' +
' &lt;xsl:with-param name="pnode0" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template match="DataItem"&gt;\n' +
' &lt;xsl:call-template name="matchDataItems0"&gt;\n' +
' &lt;xsl:with-param name="pnode0" select="."/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:template&gt;\n';
for (var k = 0; k &lt; arrNames.length - 1; k++) {
xslValue += ' &lt;xsl:template name="matchDataItems' + k + '"&gt;\n' +
' &lt;xsl:param name="pnode'+ k + '"/&gt;\n' +
' &lt;xsl:for-each select="$pnode'+ k + '/Property[@Name=' + "'" + arrNames[k] + "'" + ']"&gt;\n';
if (arrValues[k].length &gt; 0) {
xslValue += ' &lt;xsl:if test="child::node() = '+ "'"+ arrValues[k] +"'" + '"&gt;\n';
} else {
xslValue += ' &lt;xsl:if test="not(child::node())"&gt;\n';
}
xslValue += ' &lt;xsl:call-template name="matchDataItems'+ (k + 1) +'"&gt;\n' +
' &lt;xsl:with-param name="pnode'+(k+1)+'" select=".." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n';
}
k = arrNames.length - 1;
xslValue += ' &lt;xsl:template name="matchDataItems' + k +'"&gt;\n' +
' &lt;xsl:param name="pnode'+ k + '"/&gt;\n';
if (k == 0 &amp;&amp; arrNames[0] == '') {
xslValue += ' &lt;xsl:call-template name="getData"&gt;\n' +
' &lt;xsl:with-param name="cnode" select="." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n';
} else {
xslValue += ' &lt;xsl:for-each select="$pnode' + k + '/Property[@Name=' + "'" + arrNames[k] + "'" + ']"&gt;\n' +
' &lt;xsl:if test="child::node() = '+ "'"+ arrValues[k] +"'" + '"&gt;\n' +
' &lt;xsl:call-template name="getData"&gt;\n' +
' &lt;xsl:with-param name="cnode" select=".." /&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n';
}
xslValue += ' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="getData"&gt;\n' +
' &lt;xsl:param name="cnode"/&gt;\n' +
' &lt;xsl:for-each select="$cnode/Property"&gt;\n' +
' &lt;xsl:variable name="maxWidth"&gt;\n' +
' &lt;xsl:call-template name="calcWidth"&gt;\n' +
' &lt;xsl:with-param name="name" select="@Name"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="string"&gt;\n' +
' &lt;xsl:for-each select="child::node()"&gt;\n' +
' &lt;xsl:value-of select="translate(., '+ "'&amp;#x20;&amp;#x9;&amp;#xD;&amp;#xA;', ' '" + ')"/&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="padding"&gt;\n' +
' &lt;xsl:value-of select="$maxWidth - string-length($string)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:value-of select="$string"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$padding"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;xsl:text&gt;&amp;#32;&lt;/xsl:text&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;xsl:value-of select="$newline"/&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="calcWidth"&gt;\n' +
' &lt;xsl:param name="name" /&gt;\n' +
' &lt;xsl:for-each select="//Property[@Name = $name]"&gt;\n' +
' &lt;xsl:sort select="string-length(child::node())" order="descending" data-type="number"/&gt;\n' +
' &lt;xsl:if test="position() = 1"&gt;\n' +
' &lt;xsl:variable name="var1"&gt;\n' +
' &lt;xsl:value-of select="string-length(child::node())"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:variable name="var2"&gt;\n' +
' &lt;xsl:value-of select="string-length($name)"/&gt;\n' +
' &lt;/xsl:variable&gt;\n' +
' &lt;xsl:choose&gt;\n' +
' &lt;xsl:when test="$var1 &amp;gt; $var2"&gt;\n' +
' &lt;xsl:value-of select="$var1"/&gt;\n' +
' &lt;/xsl:when&gt;\n' +
' &lt;xsl:otherwise&gt;\n' +
' &lt;xsl:value-of select="$var2"/&gt;\n' +
' &lt;/xsl:otherwise&gt;\n' +
' &lt;/xsl:choose&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:for-each&gt;\n' +
' &lt;/xsl:template&gt;\n' +
' &lt;xsl:template name="append-pad"&gt;\n' +
' &lt;xsl:param name="length" select="0"/&gt;\n' +
' &lt;xsl:if test="$length != 0"&gt;\n' +
' &lt;xsl:value-of select="' + "'&amp;#32;'" + '"/&gt;\n' +
' &lt;xsl:call-template name="append-pad"&gt;\n' +
' &lt;xsl:with-param name="length" select="$length - 1"/&gt;\n' +
' &lt;/xsl:call-template&gt;\n' +
' &lt;/xsl:if&gt;\n' +
' &lt;/xsl:template&gt;\n' +
'&lt;/xsl:stylesheet&gt;\n';
return xslValue;
};
this.makeTextTableArr = function (oXml, arrValuesProperty, arrValuesPropertyValues) {
var xslText = createTableXsl(arrValuesProperty, arrValuesPropertyValues);
if (xslText) {
return this.xslTransformation(xslText, oXml);
}
return null;
};

this.makeTextTablePropertyBagArr = function (oApi, oXml,arrValuesProperty, arrValuesPropertyValues) {
var trTextTable = this.makeTextTableArr(oXml, arrValuesProperty, arrValuesPropertyValues);
var oBag = oApi.CreatePropertyBag();
if (trTextTable) {
for(var j = 0; j &lt; arrValuesProperty.length; j++) {
oBag.AddValue(arrValuesProperty[j], arrValuesPropertyValues[j]);
}
oBag.AddValue("Result", "\n\r" + trTextTable);
}
oApi.AddItem(oBag);
oBag = null;
};
this.makeTextTablePropertyBagEx = function (oApi, oXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
var trTextTable = this.makeTextTableEx(oXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
var oBag = oApi.CreatePropertyBag();
oBag.AddValue(sValueProperty1, sPropertyValue1);
oBag.AddValue(sValueProperty2, sPropertyValue2);
if (trTextTable) {
oBag.AddValue("Result", "\n\r" + trTextTable);
} else {
oBag.AddValue("Result", " ");
}
oApi.AddItem(oBag);
oBag = null;
};

this.getMasterXmlObject = function () {
return poMasterXml;
};
this.getReferenceXmlObject = function () {
return poReferenceXml;
};
this.makeMasterTextTablePropertyBag = function (oApi, sValueProperty, sPropertyValue) {
if ((psMasterFilename.length &gt; 0) &amp;&amp; (psFilepath.length &gt; 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length &gt; 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
this.makeTextTablePropertyBag(oApi, poMasterXml, sValueProperty, sPropertyValue);
}
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
}
}
};
this.makeMasterTextTable = function (sValueProperty, sPropertyValue) {
if ((psMasterFilename.length &gt; 0) &amp;&amp; (psFilepath.length &gt; 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length &gt; 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
var rtVal = this.makeTextTable(poMasterXml, sValueProperty, sPropertyValue);
if (rtVal) {
WScript.Echo(rtVal);
} else {
if (piErrorCode != 0) {
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
} else {
WScript.Echo(" ");
}
}
}
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
}
}
};
this.makeMasterTextTablePropertyBagEx = function (oApi, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
if ((psMasterFilename.length &gt; 0) &amp;&amp; (psFilepath.length &gt; 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length &gt; 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
this.makeTextTablePropertyBagEx(oApi, poMasterXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
}
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
}
}
};
this.makeMasterTextTableEx = function (sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2) {
if ((psMasterFilename.length &gt; 0) &amp;&amp; (psFilepath.length &gt; 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length &gt; 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
var rtVal = this.makeTextTableEx(poMasterXml, sValueProperty1, sPropertyValue1, sValueProperty2, sPropertyValue2);
if (rtVal) {
WScript.Echo(rtVal);
} else {
if (piErrorCode != 0) {
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
} else {
WScript.Echo(" ");
}
}
}
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
}
}
};
this.makeMasterTextTableArr = function (arrNames, arrValues) {
if ((psMasterFilename.length &gt; 0) &amp;&amp; (psFilepath.length &gt; 0)) {
var sMasterFile = psFilepath + "/" + psMasterFilename;
var sMasterFileLock = sMasterFile + ".lck";
try {
if (this.load(sMasterFile, sMasterFileLock, poMasterXml, 100)) {
if (psXslContent.length &gt; 0) {
if (this.applyXslTransformation(psXslContent, poMasterXml)) {
var rtVal = this.makeTextTableArr(poMasterXml, arrNames, arrValues);
if (rtVal) {
WScript.Echo(rtVal);
} else {
if (piErrorCode != 0) {
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
} else {
WScript.Echo(" ");
}
}
}
}
} else {
if (piErrorCode != 0) {
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
} else {
WScript.Echo(" ");
}
}
} catch (ex) {
piErrorCode = ex.number;
psErrorDescription = ex.description;
WScript.Echo("Error: " + piErrorCode + " - " + psErrorDescription);
}
}
};
};
CTLogger = function (oApi) {
var M_LOGLEVELINFO = 0;
var M_LOGLEVELWARNING = 2;
var M_LOGLEVELERROR = 1;
var m_oMomApi = oApi;
var m_nLogLevel = M_LOGLEVELERROR;
this.LoggingLevel = function(lValue) {
m_nLogLevel = lValue;
};
this.MomAPI = function(lValue) {
m_oMomApi = lValue;
};
this.LOGLEVELINFO = function() {
return M_LOGLEVELINFO;
};
this.LOGLEVELWARNING = function(){
return M_LOGLEVELWARNING;
};
this.LOGLEVELERROR = function() {
return M_LOGLEVELERROR;
};
var WriteStdErr = function (sMessage, nEventId, nSeverity) {
try {
var sMsg = "";
switch (nSeverity)
{
case 0 :
sMsg = "[" + WScript.ScriptName + " - Info]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 1 :
sMsg = "[" + WScript.ScriptName + " - Error]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 2 :
sMsg = "[" + WScript.ScriptName + " - Warning]: EventId: " + nEventId + " Message: " + sMessage;
break;
}
WScript.StdErr.WriteLine(sMsg);
}
catch (e){
}
};
var WriteStdOut = function (sMessage, nEventId, nSeverity) {
try {
var sMsg = "";
switch (nSeverity) {
case 0 :
sMsg = "[" + WScript.ScriptName + " - Info]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 1 :
sMsg = "[" + WScript.ScriptName + " - Error]: EventId: " + nEventId + " Message: " + sMessage;
break;
case 2 :
sMsg = "[" + WScript.ScriptName + " - Warning]: EventId: " + nEventId + " Message: " + sMessage;
break;
}
WScript.StdOut.WriteLine(sMsg);
}
catch (e) {
}
};
var WriteEventLog = function (sMessage, nEventId, nSeverity) {
m_oMomApi.LogScriptEvent(WScript.ScriptName, nEventId, nSeverity, sMessage);
};
var IsNumeric = function (dt) {
var RE = /^-{0,1}\d*\.{0,1}\d+$/;
return (RE.test(dt));
};
var WriteLog = function (sMessage, nEventId, nSeverity) {
try {
if (IsNumeric(nSeverity) &amp;&amp; IsNumeric(nEventId)) {
if ( ! m_oMomApi) {
switch (m_nLogLevel) {
case 0 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
else {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
case 1 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
case 2 :
if (nSeverity == 1) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
else if ( nSeverity == 2) {
WriteStdErr(sMessage, nEventId, nSeverity);
}
break;
}
}
else {
switch (m_nLogLevel) {
case 0 :
WriteEventLog(sMessage, nEventId, nSeverity);
break;
case 1 :
if (nSeverity == 1) {
WriteEventLog(sMessage, nEventId, nSeverity);
}
break;
case 2 :
if (nSeverity &gt; 0) {
WriteEventLog(sMessage, nEventId, nSeverity);
}
break;
}
}
}
}
catch (e) {
}
};
this.WriteError = function (sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELERROR);
};
this.WriteWarning = function (sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELWARNING);
};
this.WriteInfo = function(sMessage, nEventId) {
WriteLog (sMessage, nEventId, M_LOGLEVELINFO);
};
};
var oLog = new CTLogger();
var cEventNo = 15801;
var aRegPath = "SOFTWARE\\ComTrade\\MP for EMC Documentum";
var aRegKey = "InstallDir";
var aFileName = "dmmon-data-new.xml";
var targetComputer = ".";

var tvar = trim(WScript.Arguments(0));
if (tvar.length &gt; 0) {
aRegPath = tvar;
}
tvar = trim(WScript.Arguments(1));
if (tvar.length &gt; 0) {
aRegKey = tvar;
}
tvar = trim(WScript.Arguments(2));
if (tvar.length &gt; 0) {
aFileName = tvar;
}
tvar = trim(WScript.Arguments(3));
if (tvar.length &gt; 0) {
targetComputer = tvar;
}
function getAgentStatus(sHostname, sAgentSvc, sFile, sRegpath, sRegkey, bDiscovery) {
var iPid = 0;
var bFileExists = false;
var bRegistryFound = false;
var bAgentFound = false;
var sError = "";
var iError = 0;
var sFilename = sFile;
var sPath = "";
var sFullPath = sFile;
try {
var oReg = new CTRegistry(sHostname);
var mValue = new Array();
if ((oReg.GetStringValue(oReg.HKEY_LOCAL_MACHINE(), sRegpath, sRegkey, mValue))) {
bRegistryFound = true;
sPath = mValue[0];
sFullPath = sPath + "\\" + sFile;
} else {
sRegpath = sRegpath.replace(/software\\/i, "software\\Wow6432Node\\");
if (oReg.GetStringValue(oReg.HKEY_LOCAL_MACHINE(), sRegpath, sRegkey, mValue)) {
bRegistryFound = true;
sPath = mValue[0];
sFullPath = sPath + "\\" + sFile;
}
}
oReg.destroy();
oReg = null;
mValue = null;
if (bRegistryFound == true) {
var objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\" + sHostname + "\\root\\CIMV2");
var colItems = objWMIService.ExecQuery('SELECT ProcessId FROM Win32_Service Where Name="' + sAgentSvc + '"');
var enumItems = new Enumerator(colItems);
if (enumItems.atEnd() == false) {
if (enumItems.item() != null) {
iPid = enumItems.item().ProcessId;
bAgentFound = true;
}
}
enumItems = null;
colItems = null;
colItems = objWMIService.ExecQuery('Select Name From CIM_DataFile where Name="' + sFullPath.replace(/\//g,"\\").replace(/\\\\/g,"\\").replace(/\\/g, "\\\\") + '"');
enumItems = new Enumerator(colItems);
bFileExists = (enumItems.atEnd() == false) &amp;&amp; (enumItems.item() != null);
enumItems = null;
colItems = null;
objWMIService = null;
}
} catch (er) {
sError = er.description;
iError = er.number;
}
var bContinue = bAgentFound &amp;&amp; bFileExists &amp;&amp; (bDiscovery || (iPid &gt; 0));

return {
'Continue' : bContinue,
'PID' : iPid,
'AgentExists' : bAgentFound,
'FileExists' : bFileExists,
'RegistryExists' : bRegistryFound,
'File' : sFilename,
'FullPath' : sFullPath,
'Path' : sPath,
'ErrorDescription' : sError,
'ErrorNumber' : iError
};
};
var svc_name="dmmp_svc";
var agentStatus = getAgentStatus(targetComputer, svc_name, aFileName, aRegPath, aRegKey, false);
if (agentStatus.Continue == false) {
agentStatus = null;
WScript.Echo("DMMP Agent on node not started or still not have any output generated. Please check the status of EMC Documentum MP Agent on the node.");
WScript.Quit(0);
}

var oXmlDiff = new CTXmlDiff();
oXmlDiff.setFilepath(agentStatus.Path);
oXmlDiff.setMasterFilename(aFileName);
oXmlDiff.setXslContent(xslText);
oXmlDiff.makeMasterTextTableArr(arrNames, arrValues);
if (oXmlDiff.errorCode() != 0) {
oLog.WriteError("Error: "+ oXmlDiff.errorCode() + " - " + oXmlDiff.errorDescription(), cEventNo);
}
oLog = null;
agentStatus = null;
oXmlDiff.destroy();
oXmlDiff = null;
</Script></Contents>
</File>
</Files>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="PA"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.CommandOutput</OutputType>
<InputType>System!System.BaseData</InputType>
</ProbeActionModuleType>