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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.01.2005, 13:20   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Запрет редактирования поля
Привет всем.

Мне нужно запретить редактирование поля на гриде, при этом оставив возможность выбора значения из списка (lookup)
Посмотрел постинг
http://www.axforum.info/forums/showt...EF%E8%F1%EA%E0

но, если так сделать, то значение все равно вводить можно, просто оно не принимается, если было введено вручную

Может есть способ запретить именно ручной ввод?

Спасибо за ответы
Старый 24.01.2005, 13:37   #2  
maxsmirnov is offline
maxsmirnov
экс-модератор
 
268 / 25 (1) +++
Регистрация: 08.07.2003
Адрес: Москва
поставьте validate(true) на релейшн по которому срабатывает лукап, и тогда, если руками будет введено значение, отсутствующее в лукапе, выкинется ошибка.

или вам не это надо?
Старый 24.01.2005, 13:39   #3  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Можно попробовать извращенный способ вот такого плана: stringedit с allowEdit=false, рядом с ним обычную кнопку, по которой вызывать лукап.
__________________
Андрей.
Старый 24.01.2005, 13:44   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
да, это действительно извращение.
И мне надо на гриде. туда кнопки не добавляют.
Старый 24.01.2005, 13:56   #5  
maxsmirnov is offline
maxsmirnov
экс-модератор
 
268 / 25 (1) +++
Регистрация: 08.07.2003
Адрес: Москва
а зачем вам, извините за любопытство, сабж?

в смысле, чем вам не подходит стандартное в таких случаях решение - давать пользователю вводить все что угодно, а в modified или validateWrite проверять и ругаться?
Старый 24.01.2005, 13:56   #6  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
Thumbs up
>Мне нужно запретить редактирование поля на гриде, при этом оставив возможность выбора значения из списка (lookup)

Сделай его Enum )))
Старый 24.01.2005, 13:58   #7  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
и заполнять этот BaseEnum эелентами каждый раз перед лукапом? А если там код номенклатуры, к примеру - ОЧЕНЬ много записей.

Не покатит. Нужно какой то изврат - простой до уникальности. Если такое вообще можно сделать...
Старый 24.01.2005, 14:01   #8  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
перекрыть textChange() на контроле и написать в нем this.text("");

Добавление:
правда, в гриде это плохо работает...
__________________
Андрей.
Старый 24.01.2005, 14:07   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
да, идея прекрасная, только в гриде действительно что-то не хочет.

to maxsmirnov :
нужно это, чтобы учесть RLS. Если написать значение, которое не попадает в список лукапа из-за RLS, вручную, то он его пропускает.
Старый 24.01.2005, 14:22   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
И еще,
я вот пока так оставил, пока ничего нового не придумаю

PHP код:
if (retret = (this.valueStr() == "")? true:false
Но если выбираем значение через лукап, то при переходе на другой элемент формы все равно слышим звук, который оповещает о том, что значение не прошло проверку. Хотя после этого он нормально обрабатывает его значение.

Поборол, добавил boolean lookupCalled;
И его делаю true при лукапе и false после validate. Изврат, но звук пропал.
Старый 24.01.2005, 14:28   #11  
maxsmirnov is offline
maxsmirnov
экс-модератор
 
268 / 25 (1) +++
Регистрация: 08.07.2003
Адрес: Москва
Цитата:
Изначально опубликовано kashperuk
нужно это, чтобы учесть RLS. Если написать значение, которое не попадает в список лукапа из-за RLS, вручную, то он его пропускает.
имхо, ограничение прав на уровне интерфейса - вещь крайне ненадежная, я, к примеру, не могу поручится, что в версии 4.0 не появится других способов ввода (помимо ввода текста и лукапа)

собственно, и сейчас есть еще такая вещь как шаблон записи!

так что рекомендую вам проверять введенные значения в validateWrite.
Старый 24.01.2005, 14:40   #12  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
> заполнять этот BaseEnum эелентами каждый раз перед лукапом?

Зачем?
1 раз заполнил - потом синхронизируй со справочником.
Можно поле спрятать, а писать в него по выбранному значению Enum перекрыв write.

Какая задача - такое и решение
Старый 25.02.2005, 13:55   #13  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Можно еще такой экзотический способ, но зато без кодирования.

Делаете рядом 2 поля:
первое - нормального размера, но отключаете кнопку лукапа (LookupButton=Never) и запрещаете ввод (AllowEdit=No).
второе - маленькое, например width=14 (чтобы была видна только кнопка лукапа), а чтобы в поле не были видны первые 1-2 буквы значения - можно поиграться цветами фона и штрифта (не пробовал) либо поменять шрифт на экзотический (я например поставил MV Boli, там вместо русских букв всегда квадратик какой-то, но получилось стильно ) )
Ничего кодировать не надо - поля-то имеют один источник данных, так что в первом автоматом отображается то, что выбрали во втором через лукап.
Старый 19.04.2007, 21:15   #14  
konfet is offline
konfet
Снова балуюсь косаптой :)
 
143 / 50 (2) ++++
Регистрация: 23.04.2003
Адрес: Moscow
Talking
Цитата:
Сообщение от maxsmirnov Посмотреть сообщение
а зачем вам, извините за любопытство, сабж?
Затем, что бараноподобные юзверы, как только видят доступное для ввода поле, скажем, значимый код номенклатуры - тут же лезут руками заполнять его той номенклатурой которую они ХОТЯТ, хотят видеть в данной строке (заявке, накладной и тп)! Будь то новая номенклатура или уже занесенная в справочник! Причем делают это ПОЧТИ ВСЕ.

Понятное дело, проблема снимается после 2-х минут обьяснений... но руководство убеждено, что система должна быть НАСТОЛЬКО интуитивно-понятной, защищенной от дурака и лакированной, что и без этих двухминутных разьяснений все должны сразу "сесть и работать". Без всякого обучения! Так что системное сообщение о том что "запись не найдена в связанной таблице" - не спасает.

Проблема решается на самом деле просто. Перекрывается метод TextChanged() контрола.
Допустим, некая таблица Request имеет поле ItemId с дататипом ItemId. Тогда код этого метода будет выглядеть так:

X++:
public void textChange()
{
    str xTxt;
    ;

    xTxt = this.text();
    if (xTxt)
    {
        element.lock();
        if (Request)
        {
            this.text(Request.ItemId);
        }
        info("Ввод нового товара в этом поле не предусмотрен. Для выбора существующего товара нажмите на кнопку выбора справа от поля.");
        element.unlock();
    }
    else
    {
        super();
    }

}
Юзверу оставлена возможность удалить выбранный в заявке товар (очистив ItemId).
Данный метод плох тем, что для нормальных пользователей закрывает возможность быстрого поиска (вводя в поле "Ауди*" - чтоб сразу открывался отфильтрованный лукап, ограниченный номенклатурами, начинающимися на слово "Ауди". Но увы... бесплатно ничего не бывает
__________________
Бесты и регарды!
За это сообщение автора поблагодарили: kashperuk (3), alex55 (1).
Старый 29.11.2007, 08:09   #15  
player is offline
player
Участник
 
107 / 69 (3) ++++
Регистрация: 25.08.2007
У меня в AX 4.0 SP2 при попытке установить this.text("Some text") внутри TextChange() или же воспользоваться приведенным выше кодом происходит зацикливание (бесконечная рекурсия) поскольку this.text(par) вызывает TextChange()...
Теги
шаблон

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Возможность редактирования поля 1 раз polygris DAX: Программирование 2 26.07.2006 20:16
Поля недоступны для редактирования DreamCreator DAX: Программирование 5 27.10.2005 09:36
Получить значение поля таблицы по номеру (Id) поля Anais DAX: Программирование 2 15.04.2004 13:00
Запред редактирования поля Dimitry DAX: Программирование 7 28.10.2003 09:18
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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