我们有一个SuiteCRM实例,该实例已通过批量导入从内部应用程序加载了帐户。
现在,我们需要使内部应用程序与SuiteCRM保持同步,以便当有人从SuiteCRM插入/修改帐户时,更改也应由应用程序验证。
推荐的方法是什么?如果应用程序拒绝数据,我是否应该使用after_save挂钩并以某种方式阻止SuiteCRM保存数据?
答案 0 :(得分:1)
最佳方案是同时进行JS,JS(使用addToValidate)和before_save钩子验证(如果未验证,则不希望保存它)。
对于JS部分,您可以使用类似
addToValidateCallback("EditView", "name", "varchar", required, "invalid name", function(a,b)
{
return customValidationThatReturnsTrueFalse();
})
返回false将阻止该表格。
为了获得更安全的验证,您应该在before_save
挂钩中进行相同的验证。
答案 1 :(得分:0)
在mrbarletta的answer上进行了扩展,客户端最终覆盖了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)