sugarcrm中的现场验证

时间:2013-10-04 14:38:25

标签: sugarcrm

我刚开始使用SugarCRM CE(版本6.5.15(Build 1083))。在添加新字段或模块时,我对易用性印象深刻,但有一个似乎缺少的必不可少的东西:验证用户输入。

我想举例来说检查很多东西:

  • 使用正则表达式检查电子邮件是否具有有效格式
  • 检查是否存在邮政编码(可能会进行网络服务调用以验证邮政编码)
  • 进行计算以查看公民服务号码是否有效

我在工作室中唯一可以做的就是创建一个字段是否需要,似乎没有任何标准的方法来对字段执行验证。

我在google上找到的所有内容都有很多方法可以入侵源代码,例如:http://phpbugs.wordpress.com/2010/01/22/sugarcrm-adding-javascript-validation-on-form-submit/即便如此,我也找不到任何实际验证的示例。

我只是错过了什么?或者是编辑源代码是添加它的唯一方法吗?

4 个答案:

答案 0 :(得分:3)

我不认为CE版本中有“标准”验证。

令我惊讶的是,您无法在某处定义验证并将其附加到字段。我有点期待这个,因为系统的其余部分结构很好(模块,包等等)。

我现在例如创建了一个11支票,这是一个非常具体的检查荷兰银行帐号。为了让这个工作,我做了以下(根据我发现谷歌搜索的例子):

我将银行帐户添加到工作室中的联系人,之后编辑了\ custom \ modules \ Contacts \ metadata \ editviewdefs.php

我添加了以下代码段:

'includes'=> array(
        array('file'=>'custom/modules/Contacts/customJavascript.js')),




array (
         0 =>
          array(
           'customCode' =>
            '<input title="Save [Alt+S]" accessKey="S" onclick="this.form.action.value=\'Save\'; return check_custom_data();" type="submit" name="button" value="'.$GLOBALS['app_strings']['LBL_SAVE_BUTTON_LABEL']>',
          ),
         1 =>
          array(
           'customCode' =>
            '<input title="Cancel [Alt+X]" accessKey="X" onclick="this.form.action.value=\'index\'; this.form.module.value=\''.$module_name.'\'; this.form.record.value=\'\';" type="submit" name="button" value="'.$GLOBALS['app_strings']['LBL_CANCEL_BUTTON_LABEL'].'">'
          )
        ),

在customJavascript.js中我放置了这段代码:

function check_custom_data()
{
    if (!eleven_check(document.getElementById("bankaccount_c").value)){
        alert ('Bank account not valid');
        return false;
    } else {
      return check_form('EditView');
    }

    function eleven_check(bankaccount) {
    bankaccount=bankaccount.replace(/\D/, "");
    charcount=bankaccount.length;
    var som=0;
    for (i=1; i<10; i++) {
        getal=bankaccount.charAt(i-1);
        som+=getal*(10-i);
    } 
    if (som % 11==0 && charcount==9) {
        return true
    } else {
        return false
    }
}

}

此检查现在按我希望的方式工作,但我想知道这是否是添加验证的最佳方式。这种添加验证的方式不适用于PHP验证,例如,如果我想根据一个或另一个原因验证数据库中的某些数据,我将不得不使用ajax调用来完成这项工作。

答案 1 :(得分:0)

电子邮件验证在专业版中,我原以为它也在CE中,但我不是百分百肯定。 另外两个更具体 - 邮政编码验证将取决于您所在的国家/地区,因此难以推出。对于这些,您需要编写自己的自定义验证。

答案 2 :(得分:0)

我知道它已经很晚了,但也许有人需要这个。

您可以在vardef中添加自定义javascript验证作为回调,如下所示:

'validation' => 
array (
  'type' => 'callback',
  'callback' => 'function(formname,nameIndex){if($("#" + nameIndex).val()!=999){add_error_style(formname,nameIndex,"Only 999 is allowed!"); return false;}; return true;}',
),

我在这里记录了它在其他地方没有详细记录:

https://gunnicom.wordpress.com/2015/09/21/suitecrm-sugarcrm-6-5-add-custom-javascript-field-validation/

答案 3 :(得分:-2)

您可以将自定义验证代码添加到以下文件中: ./ custom / modules /.../ clients / base / views / record / record.js

您可以添加验证码。在此示例中,当帐户具有客户类型时,我将验证phone_number是否为空:

记录中的示例代码.JS:

({
    extendsFrom: 'RecordView',
    initialize: function (options) {
        app.view.invokeParent(this, {type: 'view', name: 'record', method: 'initialize', args:[options]});

        //add validation
        this.model.addValidationTask('check_account_type', _.bind(this._doValidateCheckType, this));
    },
    _doValidateCheckType: function(fields, errors, callback) {
        //validate requirements
        if (this.model.get('account_type') == 'Customer' && _.isEmpty(this.model.get('phone_office')))
        {
            errors['phone_office'] = errors['phone_office'] || {};
            errors['phone_office'].required = true;
        }
        callback(null, fields, errors);
    }
})

不要忘记修复重建!

可以找到完整的文档here