In the XSI SDK, when a method or command returns an array, it returns a safe array.
So, in JScript, you have to use VBArray.toArray() to convert the safe array to a JScript array.
When you go in the other direction, and pass in an array, the XSI SDK automatically converts the JScript array to a safe array. That’s good, because you can’t build safe arrays in JScript, or convert JScript arrays to safe arrays.
Unfortunately for me, a customer came across a case where PPGItem.SetAttribute wouldn’t work with a JScript. Sure, it was with an undocumented attribute, but still…
I knew the JScript attribute was the problem because I could set the attribute in VBScript, but not JScript.
So I came up with a hack to get a safe array in JScript. I used ExecuteScriptCode to call a VBScript function that returned a safe array, which I could then pass to SetAttribute.
var s = "function a( val )\n" + "a = Array( val )\n" + "end function"; var sa = Application.ExecuteScriptCode( s, "VBScript", "a", val );
Another way to get a safe array in JScript is to use the Scripting.Dictionary. The Items method returns a safe array:
d = new ActiveXObject("Scripting.Dictionary"); d.Add( 0, val ) var sa = d.Items();