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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.10.2013, 08:49   #1  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
textChange на форме. Как изменить текст?
Всем добрый день. На форме есть поле типа Range. Нужно из выпадающего списка выбирать значение, оно добавляется к уже существующим в этом поле. Решил улучшить, чтобы между значениями автоматически проставлялась запятая. Перекрыл методы lookup() и textChange() на элементе ppoSlitters. На диалогах RunBase все отлично работает, а вот на форме не хочет, чего-то не хватает. Не подскажите, чего я мог упустить?
X++:
public class FormRun extends ObjectRun
{
    Range                   ppoSlittersBeforeLookup;
}

public void lookup()
{
    SysTableLookup  tableLookup;
    Query           query = new Query();
    ;

    tableLookup = SysTableLookup::newParameters(tableNum(WrkCtrTable), this);
    tableLookup.addLookupfield(fieldNum(WrkCtrTable, WrkCtrId));
    tableLookup.addLookupfield(fieldNum(WrkCtrTable, WrkCtrGroupId));
    tableLookup.addLookupfield(fieldNum(WrkCtrTable, Name));

    query.addDataSource(tablenum(WrkCtrTable));

    tableLookup.parmQuery(query);
    tableLookup.performFormLookup();

    ppoSlittersBeforeLookup = this.text();
}

public void textChange()
{
    str                 text;
    int                 pos;
    ;

    if (ppoSlittersBeforeLookup)
    {
        text = this.text();
        if (text)
        {
            pos = strscan(text, ppoSlittersBeforeLookup, 1, strlen(text));
            if (pos)
            {
                text = strins(text, ',', pos + strlen(ppoSlittersBeforeLookup));
            }
            this.text(text); // <-- этот метод почему-то не отрабатывает на форме, но в диалоге все ок
            this.setSelection(strlen(text), strlen(text));
        }
        ppoSlittersBeforeLookup = '';
    }
}
__________________
// no comments

Последний раз редактировалось dech; 18.10.2013 в 09:14.
Старый 18.10.2013, 09:24   #2  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Попробуйте перекрыть modified у поля и там пропишите element.redraw();

X++:
public boolean modified()
{
    boolean ret;
    ;
    ret = super();  
    element.redraw();
    return ret;
}
Старый 18.10.2013, 10:25   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
К сожалению, это не то, что мне надо. Я в комментарии указал место, которое не работает. В итоге текст становится пустой строкой и при перерисовке используется уже пустая строка.
__________________
// no comments

Последний раз редактировалось dech; 18.10.2013 в 10:27.
Старый 18.10.2013, 12:54   #4  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
А если не this.text(Text), а прям контрол указать ppoSlitters.text(Text) ?

PS: и я super() не увидел в textChange()

Последний раз редактировалось Player1; 18.10.2013 в 12:56.
Старый 18.10.2013, 13:59   #5  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от Player1 Посмотреть сообщение
А если не this.text(Text), а прям контрол указать ppoSlitters.text(Text) ?

PS: и я super() не увидел в textChange()
То же самое поведение.
PS: super() здесь не нужен, и даже если его воткнуть, ничего не изменится.
__________________
// no comments
Старый 18.10.2013, 19:30   #6  
honest is offline
honest
Участник
 
5 / 13 (1) ++
Регистрация: 19.09.2012
Попробуйте добавить в lookup-метод строку this.replaceOnLookup(false).
Старый 21.10.2013, 09:12   #7  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Цитата:
Сообщение от honest Посмотреть сообщение
Попробуйте добавить в lookup-метод строку this.replaceOnLookup(false).
Это учтено изначально и прописано в свойствах элемента.
__________________
// no comments
Старый 22.10.2013, 13:37   #8  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Ребята, очень срочно нужен ответ, у кого есть свободное время, поэкспериментируйте, пожалуйста! Может это баг аксапты? Версия AX 4.0.
__________________
// no comments
Старый 22.10.2013, 13:53   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
У вас контрол с источником данных не связан? Может быть изменить значение не только в контроле но и в связанном поле источника данных?
За это сообщение автора поблагодарили: db (1), dech (1).
Старый 22.10.2013, 14:10   #10  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
сделал ваш пример на форме - один контрол на дизайне и всё. dax2009 ru8 fp19. запятые подставляются. работает в общем
контрол не связан с источником данных
что то вы недоговариваете или всё несколько сложнее

кстати текст из контрола правильнее получать через valueStr(). text() может вернуть пусто или не всё - зависит от видимости или активности контрола

проверьте связанность с ds
проверьте не прыгает ли куда нибудь фокус
напишите valueStr вместо text() там где получаете текущее значение
Старый 22.10.2013, 14:32   #11  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Контрол связан с источником данных. Локальная переменная text принимает верные значения. А через метод valueStr() вроде бы можно только вернуть значение, но не записать... К сожалению DEV-база временно не доступна, как будет возможность - я проверю.
__________________
// no comments
Старый 22.10.2013, 14:42   #12  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Сделал у себя - в переменную ppoSlittersBeforeLookup ничего не добавляется, получается пустой.
Старый 23.10.2013, 05:12   #13  
Romb is offline
Romb
Участник
Аватар для Romb
 
79 / 22 (1) +++
Регистрация: 06.01.2004
pasteText()
Добрый день.
Не помню точных подробностей, но помню что метод контрола pasteText() выручал.
Старый 24.10.2013, 10:04   #14  
Deepoint is offline
Deepoint
Участник
SAP
 
60 / 14 (1) ++
Регистрация: 01.04.2011
Записей в блоге: 1
Получилось сделать, с небольшим допилом. Если, вдруг, кому захочется руками вводить рабочие центры.
Методы формы.
X++:
public class FormRun extends ObjectRun
{
     Range                   ppoSlittersBeforeLookup;
     boolean                 lookup;
}
public void init()
{
    super();
    lookup = false;
}
Методы контрола.
X++:
public boolean modified()
{
    boolean ret;

    ret = super();

    this.textChange();

    element.redraw();

    lookup = false;

    return ret;
}

public void textChange()
{
    str                 text;
    int                 pos;
    ;

    if (ppoSlittersBeforeLookup && lookup)
    {
        text = this.text();
        text = text + ",";

        ppoSlittersBeforeLookup = text + ppoSlittersBeforeLookup;

        this.text(ppoSlittersBeforeLookup);

        ppoSlittersBeforeLookup = '';
    }
    else
    {
        ppoSlittersBeforeLookup = this.text();
    }
}
public void lookup()
{
    SysTableLookup  tableLookup;
    Query           query = new Query();
    ;
    lookup = true;
    tableLookup = SysTableLookup::newParameters(tableNum(WrkCtrTable), this);
    tableLookup.addLookupfield(fieldNum(WrkCtrTable, WrkCtrId));
    tableLookup.addLookupfield(fieldNum(WrkCtrTable, WrkCtrGroupId));
    tableLookup.addLookupfield(fieldNum(WrkCtrTable, Name));

    query.addDataSource(tablenum(WrkCtrTable));

    tableLookup.parmQuery(query);
    tableLookup.performFormLookup();

    ppoSlittersBeforeLookup = this.text();

}
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Подытоги отчетов - как изменить/убрать текст? IKA DAX: Программирование 0 18.07.2013 14:03
Изменить текст меток по всей базе с заданными условиями Cardagant DAX: Программирование 3 23.12.2011 21:06
Возможно ли изменить Fields в датасорсе на форме? andriy_s DAX: Функционал 2 26.03.2010 14:04
Изменить компанию в форме Владимир Максимов DAX: Программирование 18 27.09.2006 12:58
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02

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

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

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