Я пытаюсь создать проверку поля в модуле Opportunity, который выдаст ошибку, когда пользователь попытается изменить этап фиксации с «Upside» или «Commit» обратно на «Funnel». Функция проверки в record.js
запускается, когда пользователь пытается сохранить отредактированную возможность. Он сравнивает выбранный этап фиксации с этапом фиксации, сохраненным в базе данных для возможности. Выдается ошибка проверки, если выбранный этап фиксации - «Воронка», а сохраненный этап фиксации - «Перевернутый» или «Фиксация». Когда выдается ошибка проверки, поле этапа фиксации должно быть выделено, и должно отображаться всплывающее окно с сообщением об ошибке.
Код проверки в 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
, поэтому запись сохраняется до того, как задача проверки успела выдать ошибку. Есть ли способ отложить сохранение или ускорить получение данных из компонента? Или проблема в чем-то совершенно ином?