4

我刚开始第一次使用 SugarCRM CE(版本 6.5.15 (Build 1083))。添加新字段或模块时的易用性给我留下了深刻的印象,但似乎缺少一件非常不可或缺的事情:验证用户输入。

例如,我想检查很多事情:

  • 使用一些正则表达式检查电子邮件地址是否具有有效格式
  • 检查邮政编码是否存在(也许做一个 webswervice 调用来验证它)
  • 计算一下公民服务号是否有效
  • 等等

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

当我在谷歌上搜索时,我能找到的只有很多破解源代码的方法,比如这个: http: //phpbugs.wordpress.com/2010/01/22/sugarcrm-adding-javascript-validation-on- form-submit/ 即便如此,我也没有找到任何实际进行验证的示例。

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

4

4 回答 4

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 调用来完成。

于 2013-10-10T06:29:49.670 回答
0

电子邮件验证在专业版中,我认为它也在 CE 中,但我不是 100% 确定。其他 2 个更具体 - 邮政编码验证将取决于您所在的国家/地区,因此很难推出。对于这些,您需要编写自己的自定义验证。

于 2013-10-06T01:31:27.020 回答
0

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

您可以像这样在 vardefs 中添加自定义 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/

于 2015-09-21T12:01:39.203 回答
-2

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

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

RECORD.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);
    }
})

不要忘记修复和重建!

完整的文档可以在这里找到

于 2014-03-17T08:42:34.610 回答