Advanced Custom Validators
//sample custom validator constraints
this.constraints = {
myField = {
UniqueInDB = {
table= "table_name",
column = 'column_name'
}
}
};//sample validator
/**
* UniqueInDB validator. This checks and returns fals if value is already present in DB
*/
component singleton implements="cbvalidation.models.validators.IValidator" accessors="true" {
/**
* Constructor
*/
UniqueInDB function init(){
variables.Name = "UniqueInDBValidator";
return this;
}
/**
* validate
*/
boolean function validate(
required cbvalidation.models.result.IValidationResult validationResult,
required any target,
required string field,
any targetValue,
any validationData
){
//check validationdata
if ( !IsStruct(validationData ) ) {
throw(message="The validator data is invalid: #arguments.validationData#, it must be a struct with keys 'table' = 'tableName' and 'column' = 'columnName'");
}
//check validationdata
if ( !structKeyExists(validationData,"table") || !structKeyExists(validationData,"column") ) {
throw(message="The validator data is invalid: #serializeJSON(validationData)# it must be a struct with keys 'table' = 'tableName' and 'column' = 'columnName'");
}
var myParams = { table =validationData.table, column=validationData.column, columnvalue=targetValue };
var sql = "Select #validationData.column# from #validationData.table# where #validationData.column# = :columnvalue";
var myQuery = queryExecute(sql, myParams);
// This sample only validates NEW records, additional code is necessary for EDITING existing records
if (myQuery.recordcount == 0) {
return true
}
// error messages definieren
var args = {
message="The value #targetValue# is not unique in your database",
field=arguments.field,
validationType=getName(),
validationData=arguments.validationData
};
var error = validationResult.newError(argumentCollection=args).setErrorMetadata({table=validationData.table, column=validationData.column});
validationResult.addError( error );
return false;
}
/**
* getName
*/
string function getName(){
return variables.Name
}
}Last updated
Was this helpful?