SuiteCRM:在标准模块内执行自定义验证的推荐方法?
SuiteCRM: recommended way to perform custom validation inside a standard module?
我们有一个 SuiteCRM 实例,它已通过批量导入加载了来自内部应用程序的帐户。
现在我们需要使内部应用程序与 SuiteCRM 保持同步,以便当某人 inserts/modifies 来自 SuiteCRM 的帐户时,应用程序也应验证更改。
实现这一目标的推荐方法是什么?如果应用程序拒绝,我是否应该使用 after_save 挂钩并以某种方式阻止 SuiteCRM 保存数据?
最好的方案是同时进行验证、JS(使用 addToValidate)和 before_save 挂钩(如果未验证,您不想保存它)。
对于 JS 部分,您可以使用
addToValidateCallback("EditView", "name", "varchar", required, "invalid name", function(a,b)
{
return customValidationThatReturnsTrueFalse();
})
返回 false 将阻止表单。
为了更安全的验证,您应该在 before_save
挂钩中进行相同的验证。
在 mrbarletta 的 客户端进行扩展,我最终覆盖了 check_form
函数,通过对内部应用程序的 AJAX 调用来执行我的整个表单验证。
该函数的基本版本:
// Overriding check_form() from jssource/src_files/include/javascript/sugar_3.js
function check_form(formname) {
if (typeof(siw) != 'undefined' && siw && typeof(siw.selectingSomething) != 'undefined' && siw.selectingSomething)
return false;
if (validate_form(formname, '')) {
// SuiteCRM thinks the form is OK, let's hear my internal application
if (my_ajax_validation_call(formname)) {
return true;
} else {
alert("The internal application couldn't accept the data");
}
}
return false;
}
(为了包含使用 SuiteCRM 的扩展框架的自定义脚本,我做了 this)
我们有一个 SuiteCRM 实例,它已通过批量导入加载了来自内部应用程序的帐户。
现在我们需要使内部应用程序与 SuiteCRM 保持同步,以便当某人 inserts/modifies 来自 SuiteCRM 的帐户时,应用程序也应验证更改。
实现这一目标的推荐方法是什么?如果应用程序拒绝,我是否应该使用 after_save 挂钩并以某种方式阻止 SuiteCRM 保存数据?
最好的方案是同时进行验证、JS(使用 addToValidate)和 before_save 挂钩(如果未验证,您不想保存它)。
对于 JS 部分,您可以使用
addToValidateCallback("EditView", "name", "varchar", required, "invalid name", function(a,b)
{
return customValidationThatReturnsTrueFalse();
})
返回 false 将阻止表单。
为了更安全的验证,您应该在 before_save
挂钩中进行相同的验证。
在 mrbarletta 的 check_form
函数,通过对内部应用程序的 AJAX 调用来执行我的整个表单验证。
该函数的基本版本:
// Overriding check_form() from jssource/src_files/include/javascript/sugar_3.js
function check_form(formname) {
if (typeof(siw) != 'undefined' && siw && typeof(siw.selectingSomething) != 'undefined' && siw.selectingSomething)
return false;
if (validate_form(formname, '')) {
// SuiteCRM thinks the form is OK, let's hear my internal application
if (my_ajax_validation_call(formname)) {
return true;
} else {
alert("The internal application couldn't accept the data");
}
}
return false;
}
(为了包含使用 SuiteCRM 的扩展框架的自定义脚本,我做了 this)