Добрый день!
Коллеги, возможно ли запретить определенным пользователям удалять значение справочного поля крестиком?
Например в инсталлмент плане есть поле Инвойс. Крестиком в выделенной записи значение этого поля можно удалять. Можно ли метод, который реагирует на нажатие крестика, переопределить? И как метод называется?
Спасибо!
Нравится
Dima Avdoshin, пользователь должен иметь возможность создавать объект, видеть значение колонки Инвойс, но не иметь возможности ее менять. Когда делаю через запрет на редакт колонки, то не видят ее содержимое. Хотел добавить свою логику на крестик.
Сергей Хоменко,
вариант , который у меня сейчас перед глазами
Для этого тебе надо из своего объекта создать деталь через мастер расставить поля, после мастер создаст карточку для редактирования, на которую ты можешь вешать код. который тебе необходим в твоей логике, это код будет работать и в карточке редактирования справочника и в реестре в справочника
RightUtilities.checkCanExecuteOperation мы проверяем, что у текущего пользователя есть доступ на операцию и сохраняем результат в атрибут, ну или наоборот как в моем случае , если он есть в группе по операциям то не даем редачить.
От результат мы уже управляем логикой доступности, к примеру ты можешь значение атрибута повесить на доступность поля или как я при изменении проверять и отменять изменения
Вместо initModelColumns, можешь вешать другие ивенты, к примеру при выделении записи
Пример
define("qrtqrtTestObj31ff6c52Page", ["RightUtilities"], function(RightUtilities) { return { entitySchemaName: "qrtTestObj", attributes: { "Name": { //dataValueType: Terrasoft.dataValueType.FLOAT, dependencies: [ { columns: ["Name"], methodName: "changeName" } ] }, }, modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/, details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/, methods: { initModelColumns: function() { this.callParent(arguments); this._setColumnsDataModelName(); this._setResourceColumns(); this.console.log("initModelColumns"); var self = this; RightUtilities.checkCanExecuteOperation({ operation: "qrtRulesSalesInInvoice" }, function(result) { self.console.log("RESULT" + result); self.set("qrtSalesRules", result); }, this); }, changeName : function name() { if(!this.isNewMode()) { var isOk = this.get("qrtSalesRules") if(isOk) { this.showInformationDialog("У вас нет права на редактирование этой колонки") //отменяем действие this.onDiscardChangesClick(); } } } }, dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/, diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "name": "Name1cacb119-4c62-4e85-929a-e7a877e24794", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 0, "layoutName": "Header" }, "bindTo": "Name" }, "parentName": "Header", "propertyName": "items", "index": 0 }, { "operation": "insert", "name": "Description5836d8b4-157f-49bf-a943-3e6d3c28cf1e", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 1, "layoutName": "Header" }, "bindTo": "Description" }, "parentName": "Header", "propertyName": "items", "index": 1 } ]/**SCHEMA_DIFF*/ }; });
Dima Avdoshin,
возьму это и попробую. Но было бы все таки проще переопределить ф-ю, которая отрабатывает на нажатие на крестик у колонки детали. Например для той же детали для колонки Products нашел ф-ю
clearSupplyPaymentElementProducts, переопределение которой решает часть задачи без лишних маневров.
Самый простой способ использовать бизнес-правила. БП проверяете со значением булевого атрибута. А атрибуту устанавливаете значение true/false в зависимости от того, входит ли текущий пользователь в коллекцию тех, кому доступ запрещен (коллекцию можно сформировать через справочник, либо в зависимости от группы/роли, либо даже захаркодить(что не рекомендую)). Такое решение будет самым быстрым и легким, на мой взгляд