Фильтрация по типу страницы 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), добавляющий кнопку редактирования в навигационную панель.
 

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