Quantcast
Channel: VMware Communities : All Content - vRealize Automation Tools
Viewing all articles
Browse latest Browse all 9859

Arrays of Composite Types

$
0
0


So CompositeTypes... are pretty compelling.  Seems like they either are similar or actually are Js Object Types as you can use the Object() constructor to create instances that will match up with a CompositeType easily enough. They seem better than working with Properties.

 

I have been doing quite a bit of discovery today, and I managed to get an Array of CTs to be rather workable.  I am sure there are some out there who find my minor skills remedial, but I am sure there are others who would be interested in seeing some of my testing results. Where I am seeing a benefit with these types is: whilst in the execution of a workflow, data from different sources and of different types can be put together and referenced logically as a single object.  An array of these objects allows foreach activities, search activities, database loads, etc to be object.name-referential.   I have no idea if CompositeTypes will always be supported in vRO or if they have a shelf life.  It is interesting nonetheless...

 

I created a single composite type as an Array...

arrayComp.jpg

 

I added a couple of values...

arrayCompvalue.jpg

 

Ran workflow from a single Scriptable Task with the below script with a single input of the arrayComp composite type. .

 

 

// One Array of Composite types defined as an Attribute as
// Array/CompositeType(name:string,notes:string):test) arrayComp
// One DEFAULT Input was added as the first position in the array
// through Attribute Value input.  name:"one",notes:"two"
// Note: Composite Types do not need to have all the same types defined
//(e.g. "string, string" could be "string, object, number, VCAC:VirtualMachine"
//create an object with a third variable to overload Array position 2.
var testing = new Object();
testing.name = "bob";
testing.notes = "slob";
testing.extra = "job-overload"; // overload
arrayComp.push(testing); // load testing object into arrayComp
System.log("Pushed Object into Composite Array with extra value position...");
System.log("arrayComp length = " +arrayComp.length); // Array is 2 CompositeType Units long now
System.log("Listing to show extra value...");
System.log(arrayComp[1].name);
System.log(arrayComp[1].notes);
System.log(arrayComp[1].extra); // This only exists in the second array object
System.log ("Looping through all Composite Types with Sys logs to show extra position is *undefined* in Array position 1...");
for each (Comp in arrayComp)
{  System.log(Comp.name);  System.log(Comp.notes);  System.log(Comp.extra); // only overloaded Composite type maintains extra position  }
//This tests creating an Object with the same mapping as the Composite Type
//...then overwritting the first Compsite Type in the Array with the Objects values
System.log("Test Replacement of one Composite Type in an Array with an Object");   
var replacement = new Object();
replacement.name = "sam";
replacement.notes = "ham";
System.log("Replacing Array position 1 with new value, object overwrite.");
arrayComp[0] = replacement; // Takes Object and overwrites arrayComp[0] slot
for each (Comp in arrayComp)
{  System.log(Comp.name);  System.log(Comp.notes);  System.log(Comp.extra);  }
//Test removing a Composite Type from array and assign to variable to work with individually 
System.log("Pull off last CompositeType into a single Composite variable..."); 
var singleComp  = arrayComp.pop();
System.log("arrayComp length = " +arrayComp.length); // Array is 1 CompositeType Units long now
System.log(singleComp.name);
System.log(singleComp.notes);
System.log(singleComp.extra); // last Array position was overloaded so this exists
//Test assignment of composite type to new array position
System.log("Push Composite type in first array position back into array...");
arrayComp.push(arrayComp[0]);
System.log("arrayComp length = " +arrayComp.length); // Array is 2 CompositeType Units long now
for each (Comp in arrayComp)
{  System.log(Comp.name);  System.log(Comp.notes);  } 
//Test direct assignment
System.log("Direct Assignment...");
arrayComp[1].notes = "Bologna";
for each (Comp in arrayComp)
{  System.log(Comp.name);  System.log(Comp.notes);  }
// Strange behavior noted with above.  Bologna should have only printed in second array position.
// Overload arrayComp[1]
System.log("Strange Behavior...");
arrayComp[1].extra = "WTF-over";
for each (Comp in arrayComp)
{  System.log(Comp.name);  System.log(Comp.notes);  System.log(Comp.extra);  }    
//arrayComp[0] and arrayComp[1] are the same thing (pointer to same place?)... careful with that in the future
// Test push back in the singeComp Composite Type
System.log("Push back in singleComp.");
arrayComp.push(singleComp);
System.log("arrayComp length = " +arrayComp.length); // Array is 3 CompositeType Units long now
for each (Comp in arrayComp)
{  System.log(Comp.name);  System.log(Comp.notes);  System.log(Comp.extra);  } 
// Direct modification of array position 3, *extra* variable
arrayComp[2].extra = "no-job. The end.";
for each (Comp in arrayComp)
{  System.log(Comp.name);  System.log(Comp.notes);  System.log(Comp.extra);  }
// fin

Viewing all articles
Browse latest Browse all 9859

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>