Кнопка "Добавить" запись в разделе с несколькими страницами редактирования
В разделе есть несколько типов страницы редактирования. Как установить условия на видимость кнопки добавления для одного из типов? В каком модуле определены данные кнопки? Заранее спасибо!
Нравится
В diff схемы реестра раздела добавляем
{
"operation": "merge",
"name": "SeparateModeAddRecordButton",
"parentName": "SeparateModeActionButtonsLeftContainer",
"propertyName": "items",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"caption": {"bindTo": "AddRecordButtonCaption"},
"click": false,
"visible": {"bindTo": "IsAddRecordButtonVisible"},
"classes": {
"textClass": ["actions-button-margin-right"],
"wrapperClass": ["actions-button-margin-right"]
},
"controlConfig": {
"menu": {
"items": {
"bindTo": "EditPages",
"bindConfig": {
"converter": function(editPages) {
if (editPages.getCount() === 0) {
return null;
}
var operationHash = {
"38d26ca1-ab6a-474c-950d-f9ac9b630967": "CanAbilityToAdd1", //здесь guid это id справочника по которому определяется страница редактирования
"2495b17d-2465-41cb-b625-ac36d9aef931": "CanAbilityToAdd2"
};
var allowedPages = [];
if (this.get("CanAbilityToAdd1")) {
allowedPages.push("CanAbilityToAdd1");
}
if (this.get("CanAbilityToAdd2")) {
allowedPages.push("CanAbilityToAdd2");
}
for (var key in operationHash) {
var hashItem = departmentToOperationHash[key];
if (allowedPages.indexOf(hashItem) === -1) {
editPages.collection.remove(editPages.collection.getByKey(key));
}
}
return editPages;
}
}
}
}
}
}
}
}
В init добавляем к примеру проверку на доступ по операции, либо другую функциональность
initCanAbilityToAdd1: function() {
RightUtilities.checkCanExecuteOperation({
operation: "CanAbilityToAdd1"
}, function(result) {
this.set("CanAbilityToAdd1", result);
}, this);
},
Добрый вечер.
Кнопки для добавления разных типов записей генерируются автоматически в зависимости от информации в таблице SysModuleEdit и поля TypeColumnValue в этой таблице.
Названия пунктов меню для разных страниц редактирования берутся из поля ActionKindCaption.
Более подробную информацию посмотрите в этом посте.
Пользовательскими настройками (без внесения дополнительных изменений в программный код) настроить видимость пункта меню в кнопке [Добавить] этого сделать не получится.
Базовая логика добавления пунктов меню для кнопки [Добавить] раздела реализована в схеме 'BaseDataView' пакета NUI.
Для реализации Вашей задачи Вы можете попробовать внести изменения в методы, которые отвечают за добавление пунктов меню в кнопку [Добавить] в Вашем разделе.
Надежда, ещё есть радикальный пользовательский способ: включить администрирование по записям для объекта справочника типов этого раздела и убрать у ненужного типа права на чтение для всех (кроме администраторов). Так нельзя будет выбрать этот тип при создании записи в разделе. Но нужно убедиться, корректно ли в этом случае будут видимы существующие записи с этим типом в разделе.
Зверев Александр,
Не уверенна, что разграничение прав доступа, как-то повлияет на видимость пункта меню кнопки [Добавить] для этого типа.
Алла, я не вижу картинки в начальном сообщениии, но подозреваю, что речь о меню, выпадающем из-под зелёной кнопки добавления в разделе. Вот очень старая тема, где тоже такое предлагали, но и не только это.
В diff схемы реестра раздела добавляем
{
"operation": "merge",
"name": "SeparateModeAddRecordButton",
"parentName": "SeparateModeActionButtonsLeftContainer",
"propertyName": "items",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
"caption": {"bindTo": "AddRecordButtonCaption"},
"click": false,
"visible": {"bindTo": "IsAddRecordButtonVisible"},
"classes": {
"textClass": ["actions-button-margin-right"],
"wrapperClass": ["actions-button-margin-right"]
},
"controlConfig": {
"menu": {
"items": {
"bindTo": "EditPages",
"bindConfig": {
"converter": function(editPages) {
if (editPages.getCount() === 0) {
return null;
}
var operationHash = {
"38d26ca1-ab6a-474c-950d-f9ac9b630967": "CanAbilityToAdd1", //здесь guid это id справочника по которому определяется страница редактирования
"2495b17d-2465-41cb-b625-ac36d9aef931": "CanAbilityToAdd2"
};
var allowedPages = [];
if (this.get("CanAbilityToAdd1")) {
allowedPages.push("CanAbilityToAdd1");
}
if (this.get("CanAbilityToAdd2")) {
allowedPages.push("CanAbilityToAdd2");
}
for (var key in operationHash) {
var hashItem = departmentToOperationHash[key];
if (allowedPages.indexOf(hashItem) === -1) {
editPages.collection.remove(editPages.collection.getByKey(key));
}
}
return editPages;
}
}
}
}
}
}
}
}
В init добавляем к примеру проверку на доступ по операции, либо другую функциональность
initCanAbilityToAdd1: function() {
RightUtilities.checkCanExecuteOperation({
operation: "CanAbilityToAdd1"
}, function(result) {
this.set("CanAbilityToAdd1", result);
}, this);
},
Да, Алла права, похоже, права на запись в справочнике типов не влияют, ведь выпадающий список формируется по объекту «Страница редактирования». А он общий для всех разделов. В таком случае лучше воспользоваться доработкой по предложению Евгения.
Уже зарегистрирована идея добавить возможность контролировать какой тип страницы редактирования используется какой ролью.
Полозюков Евгений Петрович,
пытаюсь сделать что-то подобное, все проверила 10 раз, но отладчик выдает:
Uncaught (in promise) TypeError: RightUtilities.checkCanExecuteOperation is not a function
А Вы добавили в начале в квадратных скобках и параметрах ссылку на RightUtilities? Посмотреть, как это сделано, можно в других схемах, где её используют:
define("SysOperationAuditSectionV2", ["BaseFiltersGenerateModule", "SysOperationAudit", "SysOperationAuditArch", "RightUtilities"], function(BaseFiltersGenerateModule, SysOperationAudit, SysOperationAuditArch, RightUtilities) { return {
Зверев Александр, да, была проблема с последовательностью схем и параметров, передаваемых в схему)
Алла Савельева,
Спасибо, что подсказали на тему замещения BaseDataView. Натолкнули на верный путь!
Если кому то поможет, вот проверка на доступ к просмотру указанного типа страницы. Очень коряво, но я учусь и это работает)
define("ActivitySectionV2", ["ConfigurationConstants","RightUtilities","ProcessModuleUtilities","BaseDataView"], function(ConfigurationConstants,RightUtilities,ProcessModuleUtilities) { return { entitySchemaName: "Activity", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, attributes: { "UsrCanManageItTask": { dataValueType: this.Terrasoft.DataValueType.BOOLEAN, type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, value: false } }, diff: /**SCHEMA_DIFF*/[ ]/**SCHEMA_DIFF*/, methods: { init: function() { this.getUserSettingsOperationRight(); window.console.log("Инициализация"); this.callParent(arguments); window.console.log("Права"); }, initEditPages: function() { window.console.log("Определение кнопок начало"); var enabledEditPages = new this.Terrasoft.Collection(); this.callParent(arguments); var editPages = this.get("EditPages"); window.console.log("Получение страниц"); var flag = this.get("UsrCanManageItTask"); this.Terrasoft.each(editPages.getItems(), function(item) { window.console.log("Проверка типа"); window.console.log(item.get("Id")); //window.console.log(ConfigurationConstants.Activity.Type.Email);ConfigurationConstants.Activity.Type.Call if (item.get("Id") !== "e2831dec-cfc0-df11-b00f-001d60e938c6" && item.get("Id") !== "e1831dec-cfc0-df11-b00f-001d60e938c6") { if (item.get("Id") !== "f5921924-3e81-4a5f-ae4c-5a6f1b6e7661") { enabledEditPages.add(item); //window.console.log("ок"); } else { if (flag) { enabledEditPages.add(item); //window.console.log("ок"); } } } }); window.console.log("Проверка типа конец"); this.set("EnabledEditPages", enabledEditPages); window.console.log("Определение кнопок конец"); }, getFilters: function() { window.console.log("Добавление фильтра"); var filters = this.callParent(arguments); if (!this.get("UsrCanManageItTask")) { filters.add("NotItTask", this.Terrasoft.createColumnFilterWithParameter( this.Terrasoft.ComparisonType.NOT_EQUAL, "Type", "f5921924-3e81-4a5f-ae4c-5a6f1b6e7661" )); window.console.log("Добавление фильтра"); } return filters; }, getUserSettingsOperationRight: function() { //debugger; var operationsToRequest = ["UsrCanManageItTask"]; //operationsToRequest.push("UsrCanManageItTask"); window.console.log("Права"); RightUtilities.checkCanExecuteOperations(operationsToRequest, function(result) { if (result) { this.set("UsrCanManageItTask", result.UsrCanManageItTask); window.console.log("Права на ит-задачи: "+result.UsrCanManageItTask); } }, this); } } }; });