0

ユーザーがコミット ステージを「Upside」または「Commit」から「Funnel」に戻そうとすると、エラーをスローする Opportunity モジュールでフィールド検証を作成しようとしています。record.jsユーザーが編集した機会を保存しようとすると、検証関数が実行されます。選択したコミット ステージと、データベースに保存されている商談のコミット ステージを比較します。選択したコミット ステージが「Funnel」で、保存されたコミット ステージが「Upside」または「Commit」の場合、検証エラーがスローされます。検証エラーがスローされると、コミット ステージ フィールドが強調表示され、ポップアップにエラー メッセージが表示されます。

の検証コードはrecord.js次のようになります。

initialize: function (options) {
    this._super('initialize', [options]);
    app.error.errorName2Keys['check_commit_stages'] = 'ERROR_CHECK_COMMIT_STAGES';
    this.model.addValidationTask('check_commit_stages', _.bind(this._doValidateCommitStages, this));
},

_doValidateCommitStages: function(fields, errors, callback) {
    console.log('Validating commit stages in record.js');

    let CommitStageSelected = this.model.get('commit_stage_c');
    let OpportunityId = this.model.get('id');
    let OpportunityBean = app.data.createBean('Opportunities');
    OpportunityBean.set('id', OpportunityId);
    let CommitStageSaved = '';
    OpportunityBean.fetch({success: function(model, data){
            CommitStageSaved = OpportunityBean.get('commit_stage_c');
            console.log('selected commit stage: ' + CommitStageSelected);
            console.log('saved commit stage: ' + CommitStageSaved);

            let SavedStageUpsideOrCommit = 
            ("Upside" == CommitStageSaved || "Commit" == CommitStageSaved);

            if ("Funnel" == CommitStageSelected && SavedStageUpsideOrCommit) {
                errors['commit_stage_c'] = errors['commit_stage_c'] || {};
                errors['commit_stage_c'].check_commit_stages = true;

                app.alert.show('message-id', {
                    level: 'error',
                    messages: 'Commit Stage cannot be changed from Upside or from Commit to Funnel',
                    autoClose: false
                });
            }

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

問題は、商談が既に保存された後に検証エラーがスローされることです。「保存済み」という「成功」ポップアップが表示された後、検証エラー メッセージを含む「エラー」ポップアップが表示されます。コミット ステージ フィールドが強調表示されません。

おそらく関数が原因で、検証タスクの実行に時間がかかりすぎてOpportunityBean.fetch、検証タスクがエラーをスローする前にレコードが保存されると思います。保存を遅らせるか、Bean からのデータ取得を高速化する方法はありますか? それとも、問題はまったく別のものですか?

4

2 に答える 2