Технические вопросы
7.x

onSaved

В базовой версии карточки на методе onSaved создается лид, я хочу чтобы после сохранения записи лид не создавался. Создал замещающую страницу, если переопределить метод и не вызвать базовый, то работать не будет, если вызвать базовый, я так понимаю он вызывается метод onSaved на всех базовых. Как правильно переопределить метод\убрать создания лида после сохранения записи?

Нравится

5 комментариев

Здравствуйте, Сергей!
Переопределите метод, который создает лид.

onSaved создает Лид. Если его переопределить без вызова this.callParent(arguments), то сохранение уже не работает, а если с вызовом this.callParent(arguments), то будет вызываться базовый метод onSaved где создается Лид. Как быть?

Сергей, создание лида, скорее всего вынесено в отдельный метод, который вызывается в базовом onSaved. Я предлагаю переопределить этот самый метод. Если это не так, то подскажите, где именно (в каком модуле) это реализовано или приведите исходный код, тогда я смогу полее детально подсказать.

OpportunityPageV2, пакет CodeLeadOpportunity. Код:
[javascript]
/**
* Дополнительная обработка после сохранения сущности
* @protected
* @overridden
*/
onSaved: function() {
this.callParent(arguments);
var batchQuery = Ext.create("Terrasoft.BatchQuery");
batchQuery.add(this.getLeadCountESQ());
batchQuery.add(this.getOpportunityContactESQ());
batchQuery.execute(function(response) {
if (response && response.success && response.queryResults) {
var leadCountResult = response.queryResults[0];
if (leadCountResult && leadCountResult.rows && leadCountResult.rows.length > 0 &&
leadCountResult.rows[0].Count === 0) {
var insert = Ext.create("Terrasoft.InsertQuery", {
rootSchemaName: "Lead"
});
var account = this.get("Account");
if (account) {
var accountId = account.value;
insert.setParameterValue("QualifiedAccount",
accountId, Terrasoft.DataValueType.GUID);
}
insert.setParameterValue("QualifyStatus",
LeadConfigurationConst.LeadConst.QualifyStatus.WaitingForSale,
Terrasoft.DataValueType.GUID);
var leadType = this.get("LeadType");
if (leadType && leadType.value !== Terrasoft.GUID_EMPTY) {
insert.setParameterValue("LeadType", leadType.value,
Terrasoft.DataValueType.GUID);
}
insert.setParameterValue("Opportunity",
this.get("Id"), Terrasoft.DataValueType.GUID);
var opportunityContactResult = response.queryResults[1];
if (opportunityContactResult && opportunityContactResult.rows &&
opportunityContactResult.rows.length > 0) {
var contact = opportunityContactResult.rows[0];
if (contact.Contact) {
var contactId = contact.Contact.value || contact.Contact;
insert.setParameterValue("QualifiedContact",
contactId, Terrasoft.DataValueType.GUID);
}
}
insert.execute(function() {}, this);
}
}
}, this);
}
[/javascript]

Будет немного костыльно, но можно переопределить getLeadCountESQ, например:
[javascript]
getLeadCountESQ: function() {
var leadEsq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Lead"
});
leadEsq.addAggregationSchemaColumn("Id", this.Terrasoft.AggregationType.COUNT, "Count");
return leadEsq;
},
[/javascript]
Тогда, если у Вас в системе есть хотя бы один лид, новый создаваться не будет.

Показать все комментарии