ユーザーがコミット ステージを「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 からのデータ取得を高速化する方法はありますか? それとも、問題はまったく別のものですか?