如何阻止用户在默认保存时输入重复记录

时间:2019-10-29 11:30:45

标签: sugarcrm suitecrm

我有一个自定义模块,其中有一个电子邮件字段。现在,如果电子邮件已经在数据库中,我想停止用户。

我要在保存按钮上停止用户并显示错误。就像必填字段为空时一样。

我试图获得一些帮助,但听不懂。

1 个答案:

答案 0 :(得分:0)

注意:在发布此信息后,我意识到您正在使用suitecrm,该答案不适用于此答案,但是如果使用Sugar的任何人有此问题,我都会保留。

有两种方法可以完成此操作,因此我将尽力按照我推荐的顺序进行介绍。如果您使用的是Sugar Post 7.0.0版本,则将适用。

1)第一条方法是手动创建电子邮件地址关系。这种方法将使用开箱即用的功能,这将确保您的系统仅跟踪单个电子邮件地址。如果这样可以满足您的需求,您可以阅读本食谱文章,如果有任何疑问,请告诉我:

https://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_9.2/Cookbook/Adding_the_Email_Field_to_a_Bean/

2)使用自定义字段的第二种方法是使用字段验证。可以在此处找到有关现场验证的文档:

https://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_9.2/Cookbook/Adding_Field_Validation_to_the_Record_View/index.html

我要关注的代码示例是:

https://support.sugarcrm.com/Documentation/Sugar_Developer/Sugar_Developer_Guide_9.2/Cookbook/Adding_Field_Validation_to_the_Record_View/#Method_1_Extending_the_RecordView_and_CreateView_Controllers

以您的示例为例,我想您会这样做:

为您的错误消息创建语言密钥:

./ custom / Extension / application / Ext / Language / en_us.error_email_exists_message.php

<?php

$app_strings['ERROR_EMAIL_EXISTS_MESSAGE'] = 'This email already exists.';

为记录创建创建自定义控制器(您可能还希望在record.js中执行此操作):

./ custom / modules // clients / base / views / create / create.js

({
    extendsFrom: 'RecordView', 

    initialize: function (options) {

        this._super('initialize', [options]);

        //reference your language key here
        app.error.errorName2Keys['email_exists'] = 'ERROR_EMAIL_EXISTS_MESSAGE';

        //add validation tasks
        this.model.addValidationTask('check_email', _.bind(this._doValidateEmail, this));
    },

    _doValidateEmail: function(fields, errors, callback) {

        var emailAddress = this.model.get('your_email_field');

        //this may take some time so lets give the user an alert message
        app.alert.show('email-check', {
            level: 'process',
            title: 'Checking for existing email address...'
        });

        //make an api call to a custom (or stock) endpoint of your choosing to see if the email exists
        app.api.call('read', app.api.buildURL("your_custom_endpoint/"+emailAddress), {}, {
            success: _.bind(function (response) {
                //dismiss the alert
                app.alert.dismiss('email-check');

                //analyze your response here
                if (response == '<email exists>') {
                    errors['your_email_field'] = errors['your_email_field'] || {};
                    errors['your_email_field'].email_exists = true;
                }

                callback(null, fields, errors);
            }, this),
            error: _.bind(function (response) {
                //dismiss the alert
                app.alert.dismiss('email-check');

                //throw an error alert
                app.alert.show('email-check-error', {
                    level: 'error',
                    messages: "There was an error!",
                    autoClose: false
                });

                callback(null, fields, errors);
            })
        });
    },
})

很明显,这不是一个完整的示例,但是它应该可以帮助您实现大部分目标。希望这会有所帮助!