Иногда, когда я пытаюсь удалить определенные группы пользователей в 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 обновляются для выбранной группы пользователей:
- Откройте форму Администрирование / Настройка / Группы пользователей
- Выберите группу пользователей, которую необходимо удалить
- Нажмите кнопку Права доступа
- Выполните следующие шаги для всех существующих доменов:
- Выберите домен в списке Домены
- Перейдите на закладку Права доступа
- Выберите любой ключ безопасности и выполните любое изменение уровня доступа (например, измените его с Нет доступа на Просмотр)
- Отмените изменения, которые вы сделали на предыдущем шаге ( например, верните уровень доступа с Просмотр на Нет доступа)
- Сохраните изменения и вернитесь на закладку Обзор
- После перебора всех доменов закройте форму Права групп пользователей
- Теперь в форме Группы пользователей можно продолжить удаление выбранной группы пользователей
Чтобы определить, существуют ли некорректные записи в таблице 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!');
}