AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.10.2017, 11:39   #1  
SuperStar88 is offline
SuperStar88
Участник
 
79 / 10 (1) +
Регистрация: 11.08.2017
? Безопасность на уровне записей (выбрать все условия)
Здравствуйте!
Такая задача: надо формировать отчёт по договорам. При выводе отчета учитывать ограничения, заданные для групп пользователей по Договорам в Безопасности на уровне записей.

Как я понимаю, один пользователь может быть в нескольких группах. Пытаюсь сделать перебор по группам и если они встречаются в SysRecordLevelSecurity, то в запрос добавлять условия из этой таблицы.

Пока сделал как-то коряво. Подскажите как сделать более правильно.
Вот то, что пока придумал:
X++:
private void parmRContractTable(Args _args)
{
    RContractTable              tmpRContractTable;
    UserGroupList               userGroupList;

    integer                     j;
    Query                       q;
    QueryBuildRange             qbr;
    QueryBuildDataSource        qbds;

    SysQueryRun                 sysRun;
    SysRecordLevelSecurity      sysRecord;
    ;

    tmpRContractTable = _args.record();
    rContractTypes = tmpRContractTable.rContractPartnerType;

    q = new Query();
    qbds = q.addDataSource(tablenum(RContractTable));
    while select userGroupList where userGroupList.userId == curUserId()
    {
        select firstonly sysRecord where
                                 sysRecord.groupId      == userGroupList.groupId  &&
                                 sysRecord.tabId        == tablenum(RContractTable) &&
                                 sysRecord.companyId    == curext();
        if(sysRecord)
        {
            sysRun = new SysQueryRun(sysRecord.restriction);
            sysRun.next();
            for(j=1; j<sysRun.query().dataSourceNo(1).rangeCount(); j++)
            {
                qbr = sysRun.query().dataSourceNo(1).range(j);
                qbds.addRange(qbr.field()).value(qbr.value());
            }
        }
    }

    query = new Query(q);
}
Старый 06.10.2017, 11:45   #2  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,490 / 1060 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
X++:
Query q = new Query();

q.recordLevelSecurity(true);
Не подходит?
За это сообщение автора поблагодарили: mazzy (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Безопасность на уровне записей Andromache DAX: Функционал 44 11.06.2015 16:54
Безопасность на уровне записи minchik DAX: Администрирование 11 19.08.2010 16:06
Влияние настройки доступа на уровне записей longson DAX: Функционал 2 15.01.2008 21:29
Настройка прав доступа на уровне записей Pan DAX: Администрирование 19 12.11.2006 11:10
Безопасность на уровне записей rdv DAX: Функционал 5 27.01.2003 13:16
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:25.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.