Here’s a simple self-installing property that shows how to use a “hidden” parameter to store a collection as a comma-separated string. I say the parameter is “hidden” because it is not shown on the property page (PPG).
function XSILoadPlugin( in_reg ) { in_reg.Author = "blairs"; in_reg.Name = "SaveCollectionPlugin"; in_reg.Major = 1; in_reg.Minor = 0; in_reg.RegisterProperty("SaveCollection"); return true; } function XSIUnloadPlugin( in_reg ) { var strPluginName; strPluginName = in_reg.Name; Application.LogMessage(strPluginName + " has been unloaded.",siVerbose); return true; } function SaveCollection_Define( in_ctxt ) { var oCustomProperty; oCustomProperty = in_ctxt.Source; // Used to store the list of passes as a comma-separated string oCustomProperty.AddParameter2("Passes",siString,"",null,null,null,null,siClassifUnknown,siPersistable | siKeyable); return true; } function SaveCollection_DefineLayout( in_ctxt ) { var oLayout,oItem; oLayout = in_ctxt.Source; oLayout.Clear(); oLayout.AddButton("Set"); oLayout.AddButton("Get"); return true; } // Save a list of passes in the Passes parameter function SaveCollection_Set_OnClicked( ) { Application.LogMessage("SaveCollection_Test_OnClicked called",siVerbose); PPG.Passes.Value = ActiveProject.ActiveScene.Passes.GetAsText(); } // Get the list of passes from the Passes parameter function SaveCollection_Get_OnClicked( ) { Application.LogMessage("SaveCollection_Test_OnClicked called",siVerbose); // Split the string into an array var x = PPG.Passes.Value.split(","); for ( var i = 0; i < x.length; i++ ) { LogMessage( x[i] ); } }