Почему нельзя удалять колонку объекта, если он администрируется по колонкам

...и что делать, если вы её уже удалили.

В bpm'online 5.X есть возможность администрировать объекты по колонкам, то есть разрешать или запрещать разным пользователям системы видеть информацию в определённом поле карточки и столбце реестра.
доступ к колонкам

При этом есть неочевидная особенность: если раздать по колонке права, а потом колонку удалить, то при попытке зайти в раздел «Администрирование: Пользователи» произойдёт свал. Примерно такой:

Exception Message: Элемент коллекции с идентификатором "{06CFA7D8-FED3-4D86-A396-B8094793C2AA}" не найден
Exception Type: Terrasoft.Common.ItemNotFoundException
Exception Source: Terrasoft.Core

Exception Stack Trace:
   at Terrasoft.Core.MetaItemCollection`1.GetByUId(Guid uid)
   at Terrasoft.WebApp.SysAdminUnitColumnPermissionsGridPageEventsProcess`1.FillData(DataSourceRequest dataSourceRequest)
   at Terrasoft.WebApp.BaseVirtualGridPageEventsProcess`1.ScriptGridPageRefreshRowExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessScriptTask.InternalExecute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
   at Terrasoft.Core.Process.ProcessScriptTask.Execute(ProcessExecutingContext context, Func`2 internalExecute)
   at Terrasoft.WebApp.BaseVirtualGridPageEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
   at Terrasoft.WebApp.SysAdminUnitColumnPermissionsGridPageEventsProcess`1.ProcessQueue(ProcessExecutingContext context)

 

Дело в том, что информация о правах хранится в таблице SysEntitySchemaColumnRight и при удалении колонки записи о ней автоматически не удаляются. И при заходе в раздел администрирования система рушится при обращении к уже несуществующему полю, пытаясь отобразить дерево прав пользователя.

Чтобы вернуть работоспособность системе, достаточно удалить все записи о колонке. Смотрим Id из сообщения об ошибке и пишем с ним SQL-запрос:

 

DELETE FROM SysEntitySchemaColumnRight WHERE SubjectColumnUId = '06CFA7D8-FED3-4D86-A396-B8094793C2AA'

 

После его запуска система должна заработать нормально.

PS: если строку удалили, а свал всё равно происходит, то, вероятно, удалено несколько полей. Скопируйте Id (а он будет уже другой), запустите delete-скрипт и так до тех пор, пока не заработает.

Нравится

Поделиться

2 комментария

Надо же, кто-то еще использует 5.Х... я думала, всех давно перевели на 7-ку. Или что там у вас актуально, 9-ка? :)

Актуальная версия 7.7. Но кто-то сейчас и Х25 использует.

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