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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.04.2009, 22:47   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от Zabr Посмотреть сообщение
Вариант 1: сделать редактируемое поле фильтра прямо на форме - не удается сделать, т.к. не ясно какой расширенный тип данных использовать для выбора группы из выпадающего списка. Ведь таблица UserGroupInfo - системная, и в свойстах тип данных не отображается. В списке расширенных типов ничего подходящего не нашел. Косвенное подтверждение невозможности это сделать - отсутствие в интерфейсе каких-либо мест, где бы группа пользователей именно выбиралась в поле из выпадающего списка, а не перетаскивалась мышкой, как в настройке прав.
Если бы даже такого типа и не было, то кто мешает вам создать собственный?

Цитата:
Сообщение от Zabr Посмотреть сообщение
Вариант 2: использовать стандартный расширенный фильтр. Для этого добавляю на форму еще 2 датасорса: sysuserinfo и usergroupinfo, но ничего не выходит. Как их нужно связать, чтобы можно было использовать стандартный фильтр? В фильтре эти датасорсы видны, только если джойнить их по inner-join, но тогда в гриде полная фигня ("размножаются" записи), а если джойнить другими способами - в расширенном фильтре этих таблиц не видно.
Для работы расширенного фильтра с системными таблицами, придется допилить функционал

Связано это с тем, что для определения названия таблиц используется функция tableId2Name(), которая для системных возвращает пустую строку.

Собственно, допиливание заключается в замене вызова этой функции на использование DictTable, т.е.
X++:
DictTable dt;
...
dt = new DictTable(relatedTableId);
xRefTableRelation.relatedTableName = dt.name();
//вместо
//xRefTableRelation.relatedTableName = tableId2Name(relatedTableId);
Заменять надо в методе updateTableId() таблицы xRefTableRelation (где встречается tableId2Name). После этого, необходимо запустить обновление перекрестных ссылок с включенной галкой "Обновить модель данных"

Для корректной работы формы расширенного фильтра, такую же процедуру необходимо проделать в методе tableLabel() таблицы TmpSysTableField
X++:
static public LabelType tableLabel(TableId _tableId)
{
    LabelType labelType = tableId2pName(_tableId);
    DictTable dt;
    ;

    if (!labelType)
    {
        dt = new DictTable(_tableId);
        labelType = dt.name();
//        labelType = tableId2Name(_tableId);
    }

    return labelType;
}
Вот и все.

Добавлять новые датасорсы на существующие формы не надо. Достаточно будет сделать это стандартным способом: непосредственно в фильтре по правой кнопке мышки
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Zabr (2), sukhanchik (5), Logger (3), plumbum (1).
Теги
aos, баг, законченный пример, поле, программно, тип данных

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Заумный отчет по ОС, как сделать? Бриллиантик DAX: Программирование 13 09.07.2008 16:36
Как программно отправить сообщение группе пользователей demon46 DAX: Функционал 7 01.04.2008 14:57
Фильтр по номенклатурной группе listener DAX: Функционал 1 14.01.2005 17:15
Как сделать фильтр с "ИЛИ"? MIkeFW DAX: Программирование 8 19.01.2004 15:25
Настройка форм для групп пользователей Роман Кошелев DAX: Функционал 14 05.08.2002 16:32

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

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

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