Добрый день!
Необходимо заблокировать возможность изменение поля Состояние (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]); } });
Нравится
Сергей, добрый день!
Такого признака, на какой из страниц выполняется правило, в системе нет.
Но Вы можете отказаться от возможности редактирования записи в карточке просмотра. В таком случае на карточке просмотра не будет возможности редактировать запись, а все колонки будут только на просмотр.
Для этого в соответствующей схеме настроек раздела необходимо добавить следующий код:
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), добавляющий кнопку редактирования в навигационную панель.