Once you’ve deployed the custom property, it needs to be supported until you’ve removed it from all content which uses it.
The primary difference between a custom property and a customparamset is structure. Customparamsets are a generic custom property for end users to do quick and dirty stuff. They have very little support for PPGLayouts and cannot be identified from script code as all CustomParamSets have the same ‘type’ (customparamset). The only way you can identify them is by name or by comparing parameters. That is why the self installing CustomProperty was invented.
I’ve never heard of wanting to migrate from CustomProperty to CustomParamSet, so this is a bit odd.
Matt
In that case you definitely don’t want to migrate to a customparamset. You want to convert to a more intelligently designed custom property.
I don’t see the need for storing the PPGLayout code as a string as _DefineLayout() or _OnInit() could house that code. You can also load PPGLogic from an external file, so really no need to go the generic property route in terms of implementation.
If you store the PPGLogic externally in a file, you can dynamically call different logic files depending on what you want to display. The callbacks can then be married to what is displayed. This is useful for one-to-many relationships like this or in cases where the data gets embedded into assets and you don’t want to have to run a batch process to update them each time the custom property is revised. Modify the external logic file and the next time the asset is loaded and viewing content, it’ll use the latest version of the logic file to display the information.
The code to choose what to display can be provided as a function/callback embedded in the external logic file and called from _OnInit(). Just make sure to call PPG.Refresh() at the end.