В базовой версии карточки на методе onSaved создается лид, я хочу чтобы после сохранения записи лид не создавался. Создал замещающую страницу, если переопределить метод и не вызвать базовый, то работать не будет, если вызвать базовый, я так понимаю он вызывается метод onSaved на всех базовых. Как правильно переопределить метод\убрать создания лида после сохранения записи?
Нравится
Здравствуйте, Сергей!
Переопределите метод, который создает лид.
onSaved создает Лид. Если его переопределить без вызова this.callParent(arguments), то сохранение уже не работает, а если с вызовом this.callParent(arguments), то будет вызываться базовый метод onSaved где создается Лид. Как быть?
Сергей, создание лида, скорее всего вынесено в отдельный метод, который вызывается в базовом onSaved. Я предлагаю переопределить этот самый метод. Если это не так, то подскажите, где именно (в каком модуле) это реализовано или приведите исходный код, тогда я смогу полее детально подсказать.
OpportunityPageV2, пакет CodeLeadOpportunity. Код:
/** * Дополнительная обработка после сохранения сущности * @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); }
Будет немного костыльно, но можно переопределить getLeadCountESQ, например:
getLeadCountESQ: function() { var leadEsq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Lead" }); leadEsq.addAggregationSchemaColumn("Id", this.Terrasoft.AggregationType.COUNT, "Count"); return leadEsq; },
Тогда, если у Вас в системе есть хотя бы один лид, новый создаваться не будет.