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