Summary
Occasionally, you may need to list all available properties in a property sheet or associated with an intrinsic (/my…).
A couple of use cases for this:
- You do not know the name of a property and do not have access to XPath
- You are retrieving the values of properties stored in a property sheet in a previous step.
Solution
Use a JavaScript expansion and a ‘for’ loop to get the properties.
$[/javascript
for (var propName in ) {
// do something
}
]
Example 1 - list all properties on an object
The following JavaScript will echo all of the properties of the /myWorkspace property sheet in a command shell.
$[/javascript
var props = "echo all props:";
for (var propName in myWorkspace) {
var props = props + "\necho " + propName + " = " + myWorkspace[propName];
}
props;
]
Example 2 - list all properties on a property sheet
The following JavaScript will echo all of the properties on a property sheet in a command shell.
$[/javascript
var props = ""; // Initialize output variable
for (var propName in myProject.anyPropertysheet.properties) {
var props = props + "echo " + propName + " = " + myProject.anyPropertysheet.properties[propName].value + "\n";
} // Populate variable with list of echo commands
props; // Printout list of commands
]
Example 3 - recursively list all custom properties on a property sheet
The following JavaScript will show an entire hierarchy of properties and property sheets.
$[/javascript
// Define a recursive function that will show an entire hierarchy of
// properties and property sheets
// To start, you can pass any object or property sheet
//
// It only displays properties from the "custom property sheet" of
// an object, not its intrinsic properties
function showProperties(ecObject)
{
var retVal = '';
// Use "properties" to get a list of all properties in an object
for (var propertyName in ecObject.properties) {
// Get the property (which may be a property sheet)
var currentProperty = ecObject.properties[propertyName];
// If the property has .value defined, it's a value.
if (typeof (currentProperty.value) != 'undefined') {
retVal += propertyName + ' - ' + currentProperty.value + '\n';
} else {
// It is a nested sheet - Display the sheet via recursive call
retVal += '*** Property Sheet ' + propertyName + ' ***\n';
retVal += showProperties(currentProperty);
retVal += '*** End of ' + propertyName + ' ***\n';
}
}
return (retVal);
}
// Sample calls
var str = '';
startingObjectOrSheet = server.settings;
str += showProperties(startingObjectOrSheet)
var startingObjectOrSheet = projects['Electric Cloud'].schedules.SentryMonitor;
str += showProperties(startingObjectOrSheet)
str;
]
0 Comments