onSaved

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

Нравится

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

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

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;
					},

Тогда, если у Вас в системе есть хотя бы один лид, новый создаваться не будет.

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