На странице академии есть пример создания кнопки в совмещенном режиме https://academy.terrasoft.ru/documents/technic-sdk/7-12/kak-dobavit-kno… , но не написано что для того что бы работа этот пример нужно что бы колонка основного контакта была выведена в списке контрагентов. По этой причине если пользователь сменит набор колонов - работать такой пример не будет.

Вопрос в том как заставить работать эту кнопку если в списке контрагентов нет колонки основного контакта?

Нравится

3 комментария
            getGridDataColumns: function() {
                var baseGridDataColumns = this.callParent(arguments);
                var gridDataColumns = {
                    "PrimaryContact": {path: "PrimaryContact"},
                    "Contact": {path: "Contact"},
                    //...
                    "ProcessElementId": {
                        path: "ProcessElementId",
                        dataValueType: 0
                    }
                };
                return Ext.apply(baseGridDataColumns, gridDataColumns);

Попробуйте вот так

Дмитрий А.,

вопрос о страние редактирования а не о реестре или детали с реестром, этот способ не годится для страниц редактирования

Видимо идей не укого нет

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

 Добрый день!

Возник вопрос, как на странице раздела можно изменить значение поля на странице редактирования по нажатии кнопки?

Добавил в совмещенном режиме в раздел "Активности" кнопку "завершить", добавил метод обработчик нажатия, необходимо чтобы при прохождении всех проверок изменялся Статус и результат активности. Все изменения должны быть выполнены на клиенте и отобразиться сразу

 

//Метод-обработчик нажатия кнопки завершить
				doneActivityClick: function(){
					var activeRow = this.get("ActiveRow");
				if (activeRow) {
					var cOwnerId = $("#ActivityPageV2OwnerLookupEdit-link-el").attr('href').split('ViewModule.aspx#CardModuleV2/ContactPageV2/edit/')[1].toUpperCase();
					var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "Activity"
					});
					esq.addColumn("Opportunity.Owner.Id","OpportunityOwnerId");
					esq.addColumn("Opportunity.UsrSaleAgreemAmountPlan", "OpportunityCountAgreem");
					esq.addColumn("Opportunity.UsrSalePriseSum","OpportunityPriseSum");
					esq.addColumn("Opportunity.UsrObjCountPlan","UsrObjCountPlan");
					esq.getEntity(activeRow, function(result) {
										if (!result.success) {
										// обработка/логирование ошибки, например
										this.showInformationDialog("Ошибка запроса данных");
										return;
										}
										var oSumPrise = result.entity.get("OpportunityPriseSum");
										var oOwnerId = result.entity.get("OpportunityOwnerId");
										var oCountAgreem = result.entity.get("OpportunityCountAgreem");
										var oCountObj =result.entity.get("UsrObjCountPlan");
										var mesSumPrise= (oSumPrise<=0)?"Планируемая премия\n":"";
										var mesCountAgreem=(oCountAgreem<=0)?"Планируемое количество договоров\n":"";
										var mesCountOdj= (oCountObj<=0)?"Количество объектов\n":"";
										if (cOwnerId!=oOwnerId.toUpperCase()) {
											this.showInformationDialog("Ответственный по задаче отличается от ответственного по активности");
										}
										else{
											if (oCountAgreem<=0 || oSumPrise<=0|| oCountObj<=0){
												this.showInformationDialog("Заполните поля в продаже:\n"+mesSumPrise+mesCountAgreem+mesCountOdj);
											}
											//завершение задачи
											else{
												var newStatus ={
													displayValue: "Завершена",
													value: "4BDBB88F-58E6-DF11-971B-001D60E938C6"
												};
												var newResult ={
													displayValue: "Реализовано",
													value: "BB360D72-1AD7-4BBC-BADC-AABC0E334A74"
												};
											// как установить в данные поля значения?
												this.set("Status", newStatus);
												this.set("Result", newResult );
												this.set("ButtonEnabled", false);
 
											//сохраняем все изменения
											var cardModuleSandboxId = this.getCardModuleSandboxId();
											var resultMes =	this.sandbox.publish("OnCardAction", "save", [cardModuleSandboxId]);
 
											}
										}
				},this);
 
				}//if(activeRow)
 
				}

 

Нравится

1 комментарий

Добрый день, Владислав!

Используя this.set() отобразить изменения сразу, Вы можете проверить это добавив обработчик кнопки в котором без проверок измените значения полей, в результате при нажатии на кнопку изменения сразу отобразятся. 

Судя из Вашего кода, значения не меняются так как this содержит другую область видимости.

Потому, рекомендую передать внешний скоуп используя bind:

...
esq.getEntity(activeRow, function(result) {
...
				}.bind(this));
...

 

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