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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.02.2006, 21:57   #1  
Gorlum is offline
Gorlum
Участник
 
15 / 10 (1) +
Регистрация: 08.06.2005
Enum: глюк?
Создаю перечисляемый тип MyEnum, например, с двумя элементами - "Один", "Два"
Создаю таблицу с полем типа MyEnum.
Добавляю в таблицу несколько записей с тем и другим значением в этом поле.
Открываю обозреватель таблицы, по правой кнопке делаю "Найти" и ввожу значение
"Од*". Фильтр не срабатывает, в обозревателе по-прежнему видны все записи таблицы. Если строку поиска задать как "Один", то фильтр срабатывает и виды записи только со значением "Один".
Почему не работает строка поиска с символом "*" ?
Если для полей типа enum такое не возможно, то как можно выйти из ситуации?
Старый 08.02.2006, 22:36   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Gorlum
Почему не работает строка поиска с символом "*" ?
Если для полей типа enum такое не возможно, то как можно выйти из ситуации?
Да, это глюк.
Перечисляйте все возможные случаи в строке поиска.
Это удобно сделать не из краткой формы поиска, а из полной формы редактирования критериев.
__________________
полезное на axForum, github, vk, coub.
Старый 09.02.2006, 11:12   #3  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Возможно не совсем в тему и быть может уже когда-то упоминалось.

- Поиск "Найти" не поддерживает поиск со строгим cравнением (>=).
Всё это из-за того, что подобные условия (>=) невозможно впихнуть в .addRange на программном уровне, а функциональность "Найти" как раз и построена на... ну как это сказать... на технологии добавления рейнджей. Инами словами как пользователю, так и программисту необходимо заменять строгие сравнения на нестрогие.

- Если в систему каким-то образом попали значения начинающиеся с восклицательного знака(например "!test_1"), то функциональность "Найти" при поиске уже пользователю не поможет.
Иными словами, если пользователь будет озадачен поиском такого значения и введёт "Найти" !test_1, система вернёт ему весь список, что собственно и логично. В данном случае система будет интерпретировать запрос как "найти все значения НЕ равные test_1"
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 09.02.2006, 11:17   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Думаю это не глюк - это фича. Попробуйте ввести "од" и у вас отфильтруются записи с элементом "Один". Т.е. ищет по вхождению с начала лейбла

Могу предложить небольшую модификацию формы SysFormSearch, метод GetText() для использования шаблонов в поиске по enum полям
X++:
str 80 getText()
{
    str 80 text = findEdit.text();
    DictField   dictField;
    DictType    dictType;
    DictEnum    dictEnum;
    enumId      enumId;
    int         i;
    str         pattern;
    boolean     found;
    int         scanPos, scanInq, scanAst;
    str 1       scanChar;
    ;
    if (strscan(text, "*", 1, strlen(text)) > 0 || strscan(text, "?", 1, strlen(text)) > 0)
    {
        dictField = new DictField(_dataset, fieldext2id(_field));
        if (dictField && dictField.baseType() == Types::Enum)
        {
            enumId = 0;
            if (dictField.Type() == Types::UserType)
            {
                dictType = new DictType(dictField.typeId());
                if (dictType)
                    enumId = dictType.enumId();
            }
            else
                enumId = dictField.enumId();
            if (enumId)
            {
                dictEnum = new DictEnum(enumId);
                if (dictEnum)
                {
                    pattern = "";
                    i = 1;
                    while (strscan(text, "*", i, strlen(text)) || strscan(text, "?", i, strlen(text)))
                    {
                        scanInq = strscan(text, "?", i, strlen(text));
                        scanAst = strscan(text, "*", i, strlen(text));
                        scanChar = scanInq && (!scanAst || scanInq < scanAst) ? "" : "*";
                        scanPos = scanInq && (!scanAst || scanInq < scanAst) ? scanInq : scanAst;
                        pattern += (substr(text, i, scanPos-i) + "." + scanChar);
                        i = scanPos + 1;
                    }
                    if (i <= strlen(text))
                        pattern += substr(text, i, strlen(text));

                    found = false;
                    for (i=0; i < dictEnum.values(); i++)
                    {
                        if (match(pattern, dictEnum.index2Label(i)))
                        {
                            text = dictEnum.index2Label(i);
                            found = true;
                            break;
                        }
                    }
                    if (!found)
                    {
                        for (i=0; i < dictEnum.values(); i++)
                        {
                            if (match(pattern, dictEnum.index2Symbol(i)))
                            {
                                text = dictEnum.index2Symbol(i);
                                break;
                            }
                        }
                    }
                }
            }
        }
    }
    return text;
}
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: wb (3).
Старый 09.02.2006, 12:12   #5  
_AnK_ is offline
_AnK_
Участник
Аватар для _AnK_
Ex AND Project
 
160 / 31 (2) +++
Регистрация: 03.11.2005
Адрес: СПб
Цитата:
Сообщение от Russland
Возможно не совсем в тему и быть может уже когда-то упоминалось.

- Поиск "Найти" не поддерживает поиск со строгим cравнением (>=).
это НЕстрогое неравенство .
Старый 09.02.2006, 12:38   #6  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Не хочу разводить пустые дискуссии...
Просто хотел напомнить, что результат использования конструкцией типа >= <= как в коде, так и "с этой стороны" Аксапты как правило может озадачить человека.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 09.02.2006, 13:10   #7  
Gorlum is offline
Gorlum
Участник
 
15 / 10 (1) +
Регистрация: 08.06.2005
Большое спасибо всем.
AndyD - отдельное спасибо, все работает.
Старый 09.02.2006, 13:56   #8  
vc is offline
vc
Участник
Самостоятельные клиенты AX
Axapta Retail User
 
89 / 23 (1) +++
Регистрация: 03.06.2005
Еще глюк Enum
А мне еще вот что досаждает
PHP код:
SELECT FROM SalesTable
where SalesTable
.SalesStatus == SalesStatus::Delivered 
не работает. Надо писать
PHP код:
SELECT FROM SalesTable where SalesTable.SalesStatus == 
Старый 09.02.2006, 14:00   #9  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
SELECT * FROM SalesTable
where SalesTable.SalesStatus == SalesStatus:elivered

Не работает???
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 09.02.2006, 14:03   #10  
Roman777 is offline
Roman777
NavAx
Аватар для Roman777
NavAx Club
 
320 / 64 (3) ++++
Регистрация: 10.02.2005
Адрес: г. Москва
Вообщето SalesStatus:elivered имеет значение 2 а не 3!
Старый 09.02.2006, 14:04   #11  
DarkBear is offline
DarkBear
Участник
Аватар для DarkBear
 
19 / 13 (1) ++
Регистрация: 15.07.2005
Цитата:
Сообщение от vc
А мне еще вот что досаждает
PHP код:
SELECT FROM SalesTable
where SalesTable
.SalesStatus == SalesStatus::Delivered 
не работает. Надо писать
PHP код:
SELECT FROM SalesTable where SalesTable.SalesStatus == 
Могу предположить что кое-что не в порядке с \AOT\Data Dictionary\Base Enums\SalesStatus.
Там EnumValue случайно не отлично от "3" ???

PS Согласен с Roman777

Последний раз редактировалось DarkBear; 09.02.2006 в 14:06.
Старый 10.02.2006, 07:43   #12  
vc is offline
vc
Участник
Самостоятельные клиенты AX
Axapta Retail User
 
89 / 23 (1) +++
Регистрация: 03.06.2005
Извините, ошибся. (
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить из элемента enum-а код типа (enum-а)? Romb DAX: База знаний и проекты 12 27.06.2013 16:17
Dianne Siebold: Restart AOS When Service WSDL Contains an Enum Blog bot DAX Blogs 0 16.12.2008 06:09
Выбираем Enum, меняется Lookup, как правильней закодить? Shakr DAX: Программирование 23 21.08.2008 09:04
Глюк компилятора Eldar9x DAX: Программирование 5 21.01.2008 14:03
Глюк автоматическое рассопопоставление Logger DAX: Функционал 4 14.07.2006 10:09

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

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

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