|
17.10.2012, 04:42 | #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. |
|
17.10.2012, 05:12 | #2 |
Участник
|
Попробуйте добавить следующую строку:
X++: ct.recordLevelSecurity(true); |
|
17.10.2012, 05:17 | #3 |
Участник
|
В АХ 2012 у меня кстати не получилось воспроизвести такую ошибку, видимо после изменения security framework ее убрали
|
|
17.10.2012, 07:25 | #4 |
Участник
|
Цитата:
А вы создавали именно статический метод на классе? просто на джобах к примеру BP вообще не работает kav, ну с SysTableLookup.parmTmp, допустим понятно, возможно дейтвительно нехорошо выводить в лукапах поля без секьюрити, но что не так просто с xRecord.setTmp(), чем он опасен то. ведь при наполнении его записями все recordLevelSecurity будут работать |
|
17.10.2012, 08:19 | #5 |
Участник
|
Цитата:
Возможно, отмечаем таблицу Журнал платежей временной, создаем запись, выгружаем в банк-клиент. Записей в системе, кто создал удалил - нет. В этом случае recordLevelSecurity можно использовать, как проверку на возможность удаления. |
|
11.12.2013, 12:39 | #6 |
Участник
|
Мне помогло перед setTmp() - использования //BP Deviation documented
|
|
17.10.2012, 05:21 | #7 |
Участник
|
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:37 | #8 |
Участник
|
Тю. Вы ж сами в изначальном посте написали - создаем джоб, компилим с BP, получаем ошибку.
Воспроизвел, //BP Deviation documented добавил, все ОК. recordLevelSecurity() не влияет, но его стоит использовать при заполнении, так как, насколько я помню, в Х++ по умолчанию recordLevelSecurity в query не включен, то есть выбраны будут все записи. ct, кстати, я имел ввиду таблицы, из которой заполняются данными, а не ту, которая является временной. |
|
Теги |
ax2012 |
|
|