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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.10.2012, 04:42   #1  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Ошибка TwC при использовании .setTmp()
Создавая вот такой статический метод на классе, получаем ошибку при проверке Bect Practice
X++:
static void Job6(Args _args)
{
    CustTable   custTable;
    ;
    custTable.setTmp();
}
X++:
TwC: Validate data inserted into temporary table is fetched using record level security. Dangerous API xRecord.setTmp used.
Собственно вопрос, в чем тут ошибка и что надо сделать чтобы ее обойти(ну кроме разумеется написать BP Deviation Documented и забить)
Старый 17.10.2012, 05:12   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Попробуйте добавить следующую строку:
X++:
ct.recordLevelSecurity(true);
Так как в коде нету проверки доступа к записям, временная таблица возможно будет заполнена некоторыми данными, которые конкретно выбранный пользователь не имеет доступа просматривать.
Старый 17.10.2012, 05:17   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
В АХ 2012 у меня кстати не получилось воспроизвести такую ошибку, видимо после изменения security framework ее убрали
Старый 17.10.2012, 05:21   #4  
kaw is offline
kaw
Участник
 
122 / 35 (2) +++
Регистрация: 23.03.2004
Адрес: Новосибирск
Microsoft Dynamics AX X++ Security White Paper
Цитата:
New Best Practice Rules
The compiler records a best practices error if the following is used in X++:
• xRecord.setTmp()
• SysTableLookup.parmTmp
This is an intermediary dangerous class::method because it is passed a temporary table, and cannot validate whether RecordLevelSecurity was used when it populates the temporary table.
Старый 17.10.2012, 07:25   #5  
trud is offline
trud
Участник
Лучший по профессии 2017
 
1,038 / 1629 (57) ++++++++
Регистрация: 07.06.2003
Записей в блоге: 1
Цитата:
Сообщение от kashperuk Посмотреть сообщение
В АХ 2012 у меня кстати не получилось воспроизвести такую ошибку, видимо после изменения security framework ее убрали
Ошибка именно из AX2012, CU3. ct.recordLevelSecurity(true); на нее никак не влияет
А вы создавали именно статический метод на классе? просто на джобах к примеру BP вообще не работает

kav, ну с SysTableLookup.parmTmp, допустим понятно, возможно дейтвительно нехорошо выводить в лукапах поля без секьюрити, но что не так просто с xRecord.setTmp(), чем он опасен то. ведь при наполнении его записями все recordLevelSecurity будут работать
Старый 17.10.2012, 07:37   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Тю. Вы ж сами в изначальном посте написали - создаем джоб, компилим с BP, получаем ошибку.
Воспроизвел, //BP Deviation documented добавил, все ОК.

recordLevelSecurity() не влияет, но его стоит использовать при заполнении, так как, насколько я помню, в Х++ по умолчанию recordLevelSecurity в query не включен, то есть выбраны будут все записи.

ct, кстати, я имел ввиду таблицы, из которой заполняются данными, а не ту, которая является временной.
Старый 17.10.2012, 08:19   #7  
kaw is offline
kaw
Участник
 
122 / 35 (2) +++
Регистрация: 23.03.2004
Адрес: Новосибирск
Цитата:
Сообщение от trud Посмотреть сообщение
но что не так просто с xRecord.setTmp(), чем он опасен то. ведь при наполнении его записями все recordLevelSecurity будут работать
Зачем добавили такое ограничение, можем только гадать...
Возможно, отмечаем таблицу Журнал платежей временной, создаем запись, выгружаем в банк-клиент. Записей в системе, кто создал удалил - нет.
В этом случае recordLevelSecurity можно использовать, как проверку на возможность удаления.
Старый 11.12.2013, 12:39   #8  
axotnik88 is offline
axotnik88
Участник
 
82 / 18 (1) ++
Регистрация: 05.06.2012
Мне помогло перед setTmp() - использования //BP Deviation documented
Теги
ax2012

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка в логе при установке клиента AX 2009 sao DAX: Администрирование 9 04.02.2010 11:56
Ошибка при использовании Enum с метками из цифр raz DAX: Программирование 4 21.08.2008 13:41
Ошибка выполнения в наследнике RunBaseBatch при использовании фильтра вида val1,val2 Pavlo AKA Panok DAX: Программирование 3 27.09.2005 18:26
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Ошибка округления в печатной форме и проводках по Заказу при использовании налогов Rafael DAX: Функционал 16 29.01.2002 15:08
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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