Hi Community,
I am trying to add a field validation via javascript code using the below article.
https://academy.creatio.com/docs/developer/getting_started/develop_appl…
While I am trying the validation, I am getting an error in the console as in the screenshot below. It says "Cannot read properties of undefined (reading 'invalidMessage')." I am initiating a null value in the method as described in the above article. What am I missing here? I cannot add validation to any fields because of this error. I have also added my code snippet below.
onEntityInitialized: function() {
this.callParent(arguments);
this.onBooleanChange();
this.changeColor();
this.setYearEnd();
this.setNumberOfDaysInApplicationCreationStage();
this.accountHolderValidator();
},
setValidationConfig: function() {
this.callParent(arguments);
//this.addColumnValidator("BEALMDateofBirth", this.dateOfBirthValidator);
this.addColumnValidator("BEALMAccountHolderType", this.accountHolderValidator);
},
accountHolderValidator: function() {
var invalidMessage = "";
var lead = this.get("BEALMLead").value;
var scope = this;
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Lead"
});
esq.addColumn("Id");
esq.addColumn("BEALMIsPAHExist");
var esqFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Id", lead);
esq.filters.add("esqFilter", esqFilter);
esq.getEntityCollection(function (result) {
if (result.success) {
var isPAHExist = result.collection.collection.items[0].values.BEALMIsPAHExist;
if (isPAHExist == true) {
invalidMessage = this.get("Resources.Strings.BEALMInvalidAccountHolderMessage");
}
else {
invalidMessage = "";
}
return {
invalidMessage: invalidMessage
};
}
});
},
Please help to resolve this issue.
Thank you
Cheers!

Like
There are two issues:
1) You're not including the scope in your ESQ so in the callback it no longer knows what "this" is. Change to this:
esq.getEntityCollection(function (result) {
// stuff here
}, this); // <- notice passing this scope 2) Regardless of the missing "this" scope, this will not work since the ESQ is asynchronous. You'll need to use asyncValidate instead. I have an article on how to do that here: https://customerfx.com/article/asynchonous-validation-on-pages-in-creat…
Ryan
There are two issues:
1) You're not including the scope in your ESQ so in the callback it no longer knows what "this" is. Change to this:
esq.getEntityCollection(function (result) {
// stuff here
}, this); // <- notice passing this scope 2) Regardless of the missing "this" scope, this will not work since the ESQ is asynchronous. You'll need to use asyncValidate instead. I have an article on how to do that here: https://customerfx.com/article/asynchonous-validation-on-pages-in-creat…
Ryan
Hi Ryan,
Thank you very much for the support. That worked like a charm.