我刚开始使用SugarCRM CE(版本6.5.15(Build 1083))。在添加新字段或模块时,我对易用性印象深刻,但有一个似乎缺少的必不可少的东西:验证用户输入。
我想举例来说检查很多东西:
我在工作室中唯一可以做的就是创建一个字段是否需要,似乎没有任何标准的方法来对字段执行验证。
我在google上找到的所有内容都有很多方法可以入侵源代码,例如:http://phpbugs.wordpress.com/2010/01/22/sugarcrm-adding-javascript-validation-on-form-submit/即便如此,我也找不到任何实际验证的示例。
我只是错过了什么?或者是编辑源代码是添加它的唯一方法吗?
答案 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;}',
),
我在这里记录了它在其他地方没有详细记录:
答案 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