Фильтрация по типу страницы Mobile

Добрый день!

Необходимо заблокировать возможность изменение поля Состояние (Status) на странице просмотра конкретного обращения. Когда я применяю фильтрацию, запрет поля происходит сразу на двух страницах (на CasePreviewPage - странице предпросмотра обращения и на CaseEditPage - страницы изменения обращения)



Можно ли каким то образом применить запрет на изменения поля только на странице CasePreviewPage?

Terrasoft.sdk.Model.addBusinessRule("Case", {
	name: "CaseStatusCustomRule",
	ruleType: Terrasoft.RuleTypes.Custom,
	triggeredByColumns: ["Status"],
	events: [
		Terrasoft.BusinessRuleEvents.Load,
		Terrasoft.BusinessRuleEvents.ValueChanged
		],
	executeFn: function(record, rule, column, customData, callbackConfig) {
		let vStatusId = record.get("Status.Id");
		let vSfld = "Status";
		record.changeProperty(vSfld, {
			disabled: true
		});
 
		let vFilter = Ext.create("Terrasoft.Filter", {
			name: "CaseStatus_NextStatus_Filtration",
			modelName: "CaseNextStatus",
			property: "Status",
			assocProperty: "NextStatus",
			operation: Terrasoft.FilterOperations.Any,
			value: vStatusId
		});
		record.changeProperty("Status", {addFilter: vFilter});
 
		Ext.callback(callbackConfig.success, callbackConfig.scope, [true]);
	}
});

 

Нравится

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

Сергей, добрый день!

 

Такого признака, на какой из страниц выполняется правило, в системе нет.

Но Вы можете отказаться от возможности редактирования записи в карточке просмотра. В таком случае на карточке просмотра не будет возможности редактировать запись, а все колонки будут только на просмотр.

 

Для этого в соответствующей схеме настроек раздела необходимо добавить следующий код:

Terrasoft.sdk.Module.setChangeModes("[Объект_раздела]", [Terrasoft.ChangeModes.Read]);

 

Схему настроек раздела можно найти по маске %Mobile[Объект_раздела]ModuleConfig

 

В результате при открытии карточки просмотра все колонки будут только на просмотр.

Но при этом в карточке не будет кнопки редактирования. Для добавления кнопки редактирования записи нужно переопределить карточку просмотра и в ней реализовать свой метод initNavigationButtons(). Для этого (на примере раздела для объекта SNLWARSECTION) нужно создать схему-модуль MobileSNLWARSECTIONPreviewPage и в ней добавить такой код:

 

Terrasoft.LastLoadedPageData = {

                controllerName: "Terrasoft.configuration.SNLWARSECTIONPreviewPageController",

                viewXClass: "Terrasoft.configuration.SNLWARSECTIONPreviewPageView"

};

Ext.define("Terrasoft.configuration.view.SNLWARSECTIONPreviewPage", {

                extend: "Terrasoft.view.BasePreviewPage",

                alternateClassName: "Terrasoft.configuration.SNLWARSECTIONPreviewPageView",

                config: {

                                id: "SNLWARSECTIONPreviewPage"

                }

});

Ext.define("Terrasoft.configuration.controller.SNLWARSECTIONPreviewPage", {

                extend: "Terrasoft.controller.BasePreviewPage",

                alternateClassName: "Terrasoft.configuration.SNLWARSECTIONPreviewPageController",

                statics: {

                                Model: SNLWARSECTION

                },

                config: {

                                refs: {

                                                view: "#SNLWARSECTIONPreviewPage"

                                }

                },

                /**

                * @protected

                * @overridden

                */

                initNavigationButtons: function() {

                                this.callParent(arguments);

                                var view = this.getView();

                                var editButton = view.showEditButton(true);

                                editButton.on("tap", this.onEditButtonTap, this);

                }

});

Ключевое - это view.showEditButton(true), добавляющий кнопку редактирования в навигационную панель.

 

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