Upgrade notes for 10.11 -> 10.12

Version tables and drafts

The 10.12 release addressed an issue with unwanted _version_is_latest_draft, etc. columns on version tables for objects that were not using drafts:


Upgrading may therefore lead to a significant number of database changes that deprecate these columns. In addition, you may wish to check your code for any manual reference to these columns and make additional smoke screen tests around your custom code that uses them:

  • _version_is_draft
  • _version_has_drafts
  • _version_is_latest_draft

Preside session management

The 10.12 release added a Preside implementation of session management to replace native Lucee session management in your Preside applications:

Enabling this feature should work without any further modifications to your code. However, you should check for any direct references in your code to the session scope if you wish to use this feature. Direct session scope should be replaced with use of the session storage proxy: https://docs.preside.org/devguides/sessions.html#using-the-session-storage-plugin.

Persisting validationResult across requests

Finally, due to serialization changes, you may experience issues with the ValidationResult object when persisting across requests if you use something other than rc.validationResult as an exact variable name. For example, you may have some custom validation logic that persists an array to rc.validationResults (note the s):

// ...

var validationResults = [];
var validated = true;

for( var i=1; i<something; i++ ) {
	var result = customValidationLogic( i );
	validationResults.append( result );
	validated = validated && result.validated();

if ( !validated ) {
	setNextEvent( url=pageUrl, persistStruct={ validationResults=validationResults } );

// ...

With the code above, rc.validationResults in the next request will not be serialized/deserialized correctly automatically for you. To fix this, in the resulting page (at pageUrl), you would need to do something along the lines of the following:

rc.validationResults = rc.validationResults ?: [];

// deserialize persisted validation results...
for( var i=1; i<=rc.validationResults.len(); i++ ) {
	var message  = rc.validationResults[ i ].generalMessage ?: "";
	var messages = StructCopy( rc.validationResults[ i ].messages ?: {} );
	var result   = validationEngine.newValidationResult();

	result.setGeneralMessage( message );
	result.setMessages( messages );

	rc.validationResults[ i ] = result;


IF you use persistStruct={ validationResult=validationResult } with a validationResult object, this conversion will be taken care of for you. i.e. the auto-conversion will only happen when you use the exact variable name rc.validationResult.