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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2008, 12:51   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Lookup, Company, FeatureKey
Как это кратко сформулировать - не знаю. Поэтому такое "корявое" название темы. Речь идет об Axapta 2.5.

Есть таблица Table1 на которую наложен свой Feature Key. Одно из полей этой таблицы содержит код записи другой таблицы из другой компании. Естесственно, это поле сделано на базе EDT у которого создана форма указанная в FormHelp.

При инициализации формы для Lookup (в методе init) определяется из какой компании надо брать данные и делается настройка

Table_ds.company("Компания")

В общем, все это работает.

Однако если пользователь не имеет прав доступа к основной таблице Table1 в той компании, в которой осуществляется выбор значения LookUp, то выбранное значение не записывается. Т.е. Lookup успешно отработал, выбрал значение, но не записал его! Причем без каких-либо сообщений об ошибках.

Аналогичное поведение наблюдается и в том случае, если вместо EDT использовать Relation с дополнительным полем.

Как обойти эту проблему без назначения прав доступа на таблицу в подчиненной компании?

В принципе, если перекрыть Lookup на форме, в которой редактируется Table1, и вручную создать SysTableLookup внутри ChangeCompany(), то проблема снимается. Но хотелось бы решить задачу на уровне EDT, поскольку этот EDT уже используется много где.

Замена DataSource на временную таблицу в форме Lookup тоже не очень хорошо, поскольку количество записей около 3 тысяч. А наполение даже 2 полей для такой таблицы - это уже заметная задержка для пользователя.
Старый 12.03.2008, 19:25   #2  
DocSerzh is offline
DocSerzh
Участник
 
51 / 22 (0) +++
Регистрация: 28.06.2004
Однако если пользователь не имеет прав доступа к основной таблице Table1 в той компании, в которой осуществляется выбор значения LookUp, то выбранное значение не записывается. Т.е. Lookup успешно отработал, выбрал значение, но не записал его! Причем без каких-либо сообщений об ошибках.
ээ... как то не очень понял.. это как?

у EDT перекрыть FormHelp не пойдет?
Старый 12.03.2008, 19:32   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Собственно, он и так перекрыт. Весь вопрос в том, как именно наполнить данными ту форму, которая указана в FormHelp.

Как я уже написал, сейчас это делается при помощи явного указания компании для таблицы-источника через Table_ds.company("Компания"), что и вызывает описанную проблему.
Старый 12.03.2008, 19:39   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от DocSerzh Посмотреть сообщение
Однако если пользователь не имеет прав доступа к основной таблице Table1 в той компании, в которой осуществляется выбор значения LookUp, то выбранное значение не записывается. Т.е. Lookup успешно отработал, выбрал значение, но не записал его! Причем без каких-либо сообщений об ошибках.
ээ... как то не очень понял.. это как?
Для примера, представь, что в форме заказа тебе надо выбрать другого клиента. Жмешь на кнопку со стрелочкой, раскрывается LookUp со списком доступных клиентов. Выбираешь нужного клиента и ожидаешь, что этот код окажется записан в текущей записи SalesTable. Так вот, именно изменение поля в SalesTable и не происходит. Бурный процесс при полном отсутствии результата.

Разумеется, речь идет не о клиентах и заказах. Это просто пример.
Старый 13.03.2008, 11:41   #5  
DocSerzh is offline
DocSerzh
Участник
 
51 / 22 (0) +++
Регистрация: 28.06.2004
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Для примера, представь, что в форме заказа тебе надо выбрать другого клиента.
Не, это я понял.. Просто не увидел причины, по которой
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Однако если пользователь не имеет прав доступа к основной таблице Table1 в той компании, в которой осуществляется выбор значения LookUp, то выбранное значение не записывается. Т.е. Lookup успешно отработал, выбрал значение, но не записал его! Причем без каких-либо сообщений об ошибках.
Под рукой 2.5 нет, но в 3.0 явно указывал в аналогичном случае
changeCompany перед вызовом формы lookap'a ... все работает...
Если просто в поле ввести что то руками, валидность значения происходит?
Старый 13.03.2008, 11:58   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от DocSerzh Посмотреть сообщение
Под рукой 2.5 нет, но в 3.0 явно указывал в аналогичном случае
changeCompany перед вызовом формы lookap'a ... все работает...
Ну да, если перекрыть lookup-формы все работает. Но это означает перелопатить вообще все формы в поисках тех мест, где используется нужный мне EDT и перекрыть во всех найденных формах lookup.

При этом, нет никакой гарантии, что я найду ВСЕ места. И не забуду, что надо опять-таки перекрывать lookup, если будут создавать новые формы.

Проблема-то возникает именно в том случае, если НЕТ changeCompany(). Изменение компании осуществляется в форме, указанной в реквизите FormHelp нужного EDT. И это изменение осуществляется командой вида Table_ds.company("Компания")

Цитата:
Сообщение от DocSerzh Посмотреть сообщение
Если просто в поле ввести что то руками, валидность значения происходит?
Конечно работает. Ведь нет никакого переключения между компаниями. Проблема-то совсем не в этом.
Старый 18.03.2008, 14:54   #7  
DocSerzh is offline
DocSerzh
Участник
 
51 / 22 (0) +++
Регистрация: 28.06.2004
Чем борьба закончилась то?
Старый 18.03.2008, 15:14   #8  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Записываю во временную таблицу.

Т.е. в качестве источник данных для LookUp-формы вместо постоянной таблицы сделал временную (MyTab.setTmp()) и вручную ее наполняю при инициализации формы.

Пользователям проще подождать 1..2 секунды, чем все время дергаться из-за выскакивающих сообщений "Переход к компании ...". Ну, и мне проще, не надо морочится с правами доступа.
Теги
ax2.5, ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
gatesasbait: How to define a custom lookup form for an extended datatype Blog bot DAX Blogs 0 09.07.2008 22:05
Создание Lookup формы Maxim Gorbunov DAX: База знаний и проекты 9 26.06.2007 16:44
Нагло глючит lookup Sada DAX: Программирование 1 08.06.2006 10:32
Lookup в Lookup'е TasmanianDevil DAX: Программирование 2 06.04.2006 07:28
Динамические Lookup формы. Андрей Василюк DAX: База знаний и проекты 0 07.12.2001 07:07
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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