|
![]() |
#1 |
Участник
|
к сожалению нет доступа к базе данных.
А возможные виновники не смогли обяснить, кроме как убить некоторые из записей эскуелем. Таблица SysSRTablePermissions, она за что отвечает? Похоже орлы только из UserGroupInfo удалили (группы не имеют юзеров, не имеют прав).
__________________
The Variable men power. |
|
![]() |
#2 |
Участник
|
А почему этих "горе таблиц" (UserGroupInfo) нет в дата dictionary?
__________________
The Variable men power. |
|
![]() |
#3 |
Талантливый разгвоздяй
|
Нагуглил решение проблемы, т. к. и сам с ней столкнулся.
Выкладываю вольный перевод статьи Certain User groups cannot be deleted in Dynamics AX: Цитата:
Иногда, когда я пытаюсь удалить определенные группы пользователей в Dynamics AX 4.0 или Dynamics AX 2009 я замечаю, что группы пользователей удаляются из грида, но на самом деле не удаляются.
Когда наживаю кнопку Удалить первое, что я замечаю, так это то, что удаление занимает довольно много времени и в течение всего этого времени клиент Dynamics AX висит (не отвечает). После завершения операции и возвращения клиента AX к жизни, группа пользователей больше не отображается в гриде, но при обновлении грида или закрытия и повторного открытия формы Пользователи удаленная группа снова отображается. Причина, по которой определенные группы пользователей не могут быть удалены -- это некорректные записи в таблице SysSRSTablePermissions. В этой таблице хранится одна запись для каждого домена, группы пользователей и AX Secure View. Если таблица, на которой основана SSRS Secure View, была удалена из AOT, то может так случиться, что соответствующая ей запись все еще находится в этой системной таблице. Во время удаления группы пользователей SSRS Secure Views тоже обновляются. Если во время этой синхронизации SSRS Secure Views, окажется, что таблица не найдена в AOT, то процесс синхронизации прерывается. Прерывание сопровождается командой ttsabort и транзакция целиком откатывается. Поэтому группа пользователей не удаляется. Для того, чтобы все-таки удалить такую "проблемную" группу пользователей, необходимо удалить некорректные записи в таблице SysSRSTablePermissions. Следуя указанным ниже шагам, все записи в таблице SysSRSTablePermissions обновляются для выбранной группы пользователей:
X++: static void CheckSRSTablePermissions(Args _args) { SysGroup groupName; SysSRSTablePermissions srsp; DictTable dictTable; int validTables = 0; int invalidTables = 0; ; ////////////////////////////////////////////// //This is the name of the group to check for// groupName = 'Group1'; ////////////////////////////////////////////// info(strFmt('CheckSRSTablePermissions: Checking SRS Tables for Group \'%1\'!', groupName)); while select srsp where srsp.GroupId == groupName { dictTable = new DictTable(srsp.TabId); dictTable) { invalidTables++; warning(strFmt('Tha Table with the ID 0x%1 does not exit!', int2hex(srsp.TabId,4))); } else validTables++; } if(validTables + invalidTables > 0) info(strFmt('CheckSRSTablePermissions: %1 Tables are valid, %2 Tables are invalid', validTables, invalidTables)); else warning('CheckSRSTablePermissions: No Tables were found!'); }
X++: static void CheckSRSTablePermissions(Args _args) { SysGroup groupName; SysSRSTablePermissions srsp; DictTable dictTable; int validTables = 0; int invalidTables = 0; ; while select srsp { dictTable = new DictTable(srsp.TabId); if (!dictTable) { invalidTables++; warning(strFmt('Таблица с ID %1 не существует для группы %2!', srsp.TabId, srsp.GroupId)); } else validTables++; } if(validTables + invalidTables > 0) info(strFmt('CheckSRSTablePermissions: %1 Tables are valid, %2 Tables are invalid', validTables, invalidTables)); else warning('CheckSRSTablePermissions: No Tables were found!'); } В таблице SysSRSTablePermissions хранятся права доступа к таблицам для проверки прав доступа пользователя, когда он строит отчеты с помощью Report Builder в SSRS. И соответсвенно, для каждой группы пользователей эти права определяются именно в таблице SysSRSTablePermissions. Очевидно, никто не ломал целостность данных нарочно, а произошло это случайно, как описано в указанной выше статье "it can happen" ![]() Последний раз редактировалось Kabardian; 05.12.2011 в 12:45. |
|
|
За это сообщение автора поблагодарили: Bega (2), gl00mie (3), someOne (3). |
Теги |
права доступа |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|