SuiteCRM:在标准模块内执行自定义验证的推荐方法?

时间:2018-06-20 13:52:25

标签: validation synchronization suitecrm

我们有一个SuiteCRM实例,该实例已通过批量导入从内部应用程序加载了帐户。
现在,我们需要使内部应用程序与SuiteCRM保持同步,以便当有人从SuiteCRM插入/修改帐户时,更改也应由应用程序验证。
推荐的方法是什么?如果应用程序拒绝数据,我是否应该使用after_save挂钩并以某种方式阻止SuiteCRM保存数据?

2 个答案:

答案 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