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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.10.2009, 18:24   #1  
nano3 is offline
nano3
Участник
 
57 / 24 (1) +++
Регистрация: 21.03.2007
SysDictField.visible() возвращает неверное значение
DAX 2009
Kernel version: 5.0.1000.52
Application version: 5.0.1000.52
SQL 2005

Привет, всем

Запускаю такой вот Job
X++:
static void Job15(Args _args)
{
    SysDictTable    dictTable = new SysDictTable(tablenum(SalesTable));
    SysDictField    sysDictField;
    boolean         visible;
    ;

    sysDictField =  dictTable.fieldObject(11) ;
    visible = sysDictField.visible();
    info(strfmt("%1", visible));
}
результат - false
Хотя св-во visible = Yes

Подскажите, пожалуйста, что делать в этой ситуации, если кто-нибудь с подобным сталкивался. Очень надеюсь, что я просто что-то не заметил, а то уже все перепробовал: SalesTable компилировал, менял св-во поля туда-обратно, удалял индексный файл... вот только с бубном еще не плясал.
Изображения
 
За это сообщение автора поблагодарили: Logger (1).
Старый 29.10.2009, 18:40   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
И все-таки дело в инициализации.

Вот так - работает:
X++:
static void Job5(Args _args)
{
    SysDictField    sysDictField = new SysDictField(tablenum(SalesTable),fieldnum(SalesTable,SalesGroup));
    boolean         visible;
    ;

    visible = sysDictField.visible();
    info(strfmt("%1", visible));

}
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: nano3 (1).
Старый 29.10.2009, 18:43   #3  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
? ConfigurationKey
А у вас включен конфигурационный ключ на EDT поля SalesGroup?
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: nano3 (1).
Старый 29.10.2009, 19:04   #4  
nano3 is offline
nano3
Участник
 
57 / 24 (1) +++
Регистрация: 21.03.2007
точно!!! конфигурационный ключ сволочь был выключен. Спасибо за помощь!
Старый 23.11.2010, 16:00   #5  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Заметил странное поведение sysDictField. (Ax2009 RU5)
При работе на серверной и клиентской части есть различия в поведении...
Например для пользователя, у которого нет прав на ключ PurchTables, но есть право на просмотр таблицы PurchTable, код :
X++:
static server void test2()
{
    SysDictField    sysDictField = new SysDictField(tablenum(PurchTable), fieldnum(PurchTable, PurchId));
    boolean         visible;
    ;
    visible = sysDictField.visible();

    info(strfmt("%1", visible));
}
Возвращает false, а
X++:
static client void test2()
{
    SysDictField    sysDictField = new SysDictField(tablenum(PurchTable), fieldnum(PurchTable, PurchId));
    boolean         visible;
    ;
    visible = sysDictField.visible();

    info(strfmt("%1", visible));
}
Возвращает true

Это, в свою очередь, влияет на работу формы фильтрации SysQueryForm.
Пользователь с такими правами может спокойно работать в форме "Заказ на покупку", создавать и разносить закупки... Но не сможет ничего сортировать и фильтровать через форму фильтрации-сортировки.

Форма фильтрации нормально работает только тогда, когда у пользователя есть право на ключ безопасности той таблицы, по которой производится фильтрация и сортировка (а не на саму таблицу).

В Ax 3.0 все работало корректно, в Ax2009 приходится открывать права на ключ безопасности таблиц целого модуля (чтобы работала сортировка и фильтрация), что не корректно с моей точки зрения.

Поменял в
X++:
SysQueryForm
private static server container findFields(tableId _tableId, TmpSysQueryCompanyRange _tmpCompanyRange)
на

private static client container findFields(tableId _tableId, TmpSysQueryCompanyRange _tmpCompanyRange)

Таким образом все работает корректно.
За это сообщение автора поблагодарили: Logger (2), gl00mie (2), S.Kuskov (5).
Старый 02.03.2020, 18:57   #6  
Maximin is offline
Maximin
NavAx
NavAx Club
 
412 / 346 (12) ++++++
Регистрация: 09.10.2002
Адрес: Москва
В порядке некропостинга.

В AX 4.0 наблюдается то же самое.
И более того, и в 2009 и в 4.0 SysDictField может возвращать разные id() поля.
На сервере, как будто бы поле - контейнерное с единственным элементом и id как у контейнерного > 65535 (взведенный первый бит 1<<16). На клиенте - нормальное, с id < 65535.

Как побочный эффект этого - на форме пользователей наложив фильтр на поле "Имя пользователя" потом невозможно наложить другой фильтр на это же поле в форме расширенного запроса, не перевыбрав поле, которое в той форме теперь называется User Name.
Причина - в том, что при вызове формы расширенного фильтра список полей создается на клиенте, а при сохранении валидация полей работает по заново созданному списку полей (в findFields()) на сервере.

Указанное изменение лечит и это.
__________________
Жизнь прекрасна! Если, конечно, правильно подобрать антидепрессанты...

Последний раз редактировалось Maximin; 02.03.2020 в 19:00.
За это сообщение автора поблагодарили: Logger (1).
Теги
ax2009, ax4.0, sysdictfield, sysqueryform

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка XML в "Таблица" Причина: Ошибочное значение Poleax DAX: Программирование 7 08.10.2009 16:45
теряется значение переменной laxel DAX: Программирование 3 05.02.2009 10:07
Visible для FormListItem petr DAX: Программирование 3 30.09.2008 11:03
Не берется значение контрола Sada DAX: Программирование 11 21.06.2006 10:24
Как при вводе новой записи установить значение поля по умолчанию Zman DAX: Программирование 3 17.01.2005 10:23
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:30.