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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.02.2013, 11:40   #1  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Два поля-lookup. Автоматическая установка значения
Товарищи, добрый день!

СИтуация такая: на форме имеется два поля с выпадающими списками, у которых задан некоторый датасорс и некоторое датафилд. У обоих эти параметры одинаковые. В свою очередь, на низком уровне, эти два поля являются внешними ключами, поэтому собственно и имеются выпадающие списки...

Вопрос такой: как при установке значения в одном поле (при выборе из списка), копировать его во второе? В лоб, т.е.
X++:
<_2>.text(<_1>.text())
не удается...
Старый 08.02.2013, 11:54   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Видимо вы путаете термин "поле" и термин "контролл". На форме находятся контроллы. Если у них одинаковые датасорс и датафилд, то копировать значения не требуется, тк значение хранится в поле таблицы и отображается с помощью контролла, сколько бы их на форме не было
Старый 08.02.2013, 11:58   #3  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Ice,
Цитата:
Сообщение от ice Посмотреть сообщение
Видимо вы путаете термин "поле" и термин "контролл". На форме находятся контроллы.
Да, прошу прощения, какая-то дурацкая привычка

Цитата:
Сообщение от ice Посмотреть сообщение
Если у них одинаковые датасорс и датафилд, то копировать значения не требуется, тк значение хранится в поле таблицы и отображается с помощью контролла, сколько бы их на форме не было
Согласен, но причина в том, что это, как бы сказать, форма для вставки несуществующей пока еще записи в таблице... Вот, забыл сказать сразу. Да, лучше делать такие действия через Grid, но в данной ситуации так нельзя сделать, не предполагается такая функциональность.

Последний раз редактировалось Vasiliusis; 08.02.2013 в 12:03.
Старый 08.02.2013, 12:03   #4  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Согласен, но причина в том, что это, как бы сказать, форма для вставки несуществующей пока еще записи в таблице...
сути дела не меняет, при заполнении значения в одном контролле, и переходе с него на другой, отображаемое значение на всех "одинаковых" контроллах обновятся
Старый 08.02.2013, 12:08   #5  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от ice Посмотреть сообщение
сути дела не меняет, при заполнении значения в одном контролле, и переходе с него на другой, отображаемое значение на всех "одинаковых" контроллах обновятся
Айяйяй соврал соврал! Поля разные, датасорс один, но ссылаются на одну и ту же таблицу! Простите, виноват

А так да, согласен.. ну опыта не более двух недель...
Старый 08.02.2013, 12:12   #6  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Например, такой код не работает
X++:
    ...

    //Ставим борт прилета, если он задан
    if (FlightShedule_AirCraft.text() != "")
    {
        select firstonly * from NVAOMAAirCraft
            where NVAOMAAirCraft.AirCraftNum == FlightShedule_AirCraft.text();

        FlightShedule_AirCraftD.text(NVAOMAAirCraft.AirCraftNum);
        FlightShedule_AirCraftD.modified();

    }

    ...
Старый 08.02.2013, 12:17   #7  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Айяйяй соврал соврал! Поля разные, датасорс один, но ссылаются на одну и ту же таблицу! Простите, виноват

А так да, согласен.. ну опыта не более двух недель...
тогда смотрите в сторону перекрытия методов modified() на поле датасорса, modifiedField() на таблице
За это сообщение автора поблагодарили: Vasiliusis (1).
Старый 08.02.2013, 12:23   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Например, такой код не работает
А в каком методе находится этот код?

Если контролы у вас связаны с датасурсом, то правильнее будет значения менять в полях датасурса, а не в контролах.
Старый 08.02.2013, 12:37   #9  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
ice, спасибо! Такой код написал, он правилен?
X++:
public void modified()
{
    //super();

    ;
    if (!this.getValue())
        this.setValue(FlightShedule_AirCraft.text());
}
Это в методе modified поля датасорса. К modifiedField я не притрагивался

S.Kuskov, по-видимому, так и есть.
Старый 08.02.2013, 12:48   #10  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Неправилен скорее всего.

1) Почему не modifiedField таблицы? Такое поведение требуется только на этоф форме, а не вообще для таблицы? Точно? На формах вообще должно быть минимум кода.
2) Почему FlightShedule_AirCraft.text(), когда есть значение поля в табличной переменной?
3) Почему super закомментировали?

Забудьте вы вообще про контролы и методы типа text. Оперируйте таблицами и полями.
Старый 08.02.2013, 12:58   #11  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
2 Vasiliusis: Старайтесь всегда смотреть как реализовано в стандартных формах и таблицах (ну и других объектах AOT), Axapta очень хороший справочник примеров
Старый 08.02.2013, 13:08   #12  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от oip Посмотреть сообщение
Неправилен скорее всего.

1) Почему не modifiedField таблицы? Такое поведение требуется только на этоф форме, а не вообще для таблицы? Точно? На формах вообще должно быть минимум кода.
2) Почему FlightShedule_AirCraft.text(), когда есть значение поля в табличной переменной?
3) Почему super закомментировали?

Забудьте вы вообще про контролы и методы типа text. Оперируйте таблицами и полями.
OIP:
1. Да, этот случай уникален и больше нигде не появляется, ну на данный момент, ибо процесс только пытается быть автоматизирован.. кроме того, в других формах присутсвует только одно поле из этих двух, и именно то, чье значение копируется

2. Я взял из датасорса тогда уж, ибо в таблице вносимой записи еще нет. я правильно понимаю?

3. Тыкался, забыл откомментить

Хороший совет в конце, учту, спасибо!
Старый 08.02.2013, 13:13   #13  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Делюсь кодом, кому надо:

X++:
public void modified()
{
    super();
 
    //Если нужно копировать из прилета
    if (element.GetDoCopyAirCraftA2AirCraftD())
    {
    
        //Сбрасываем индикатор копирования, тем самым предотвращая рекурсию
        element.SetDoCopyAirCraftA2AirCraftD(false);
    
        //Копируем
        if (!this.getValue() || any2str(this.getValue()) != NVAOMAFlightScheduleDS.AirCraft)
            this.setValue(NVAOMAFlightScheduleDS.AirCraft);
    }


}
Старый 08.02.2013, 13:20   #14  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На сколько я понял - это modified контрола, а как вам уже сдесь сказали бизнесс-логику правильнее реализовывать в методах таблиц, ну или в случае если эта логика не относится в целом к таблице, то в методах конкретного датасорса. А методы контролов оставьте для презентационной логики.

Ещё, судя по вашему описанию, значение должно копироваться во второе поле в момент изменения первого поля. Так зачем вы пытаетесь перекрыть метод изменения второго поля, а не первого?
Старый 08.02.2013, 13:22   #15  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
На сколько я понял - это modified контрола, а как вам уже сдесь сказали бизнесс-логику правильнее реализовывать в методах таблиц, ну или в случае если эта логика не относится в целом к таблице, то в методах конкретного датасорса. А методы контролов оставьте для презентационной логики.

Ещё, судя по вашему описанию, значение должно копироваться во второе поле в момент изменения первого поля. Так зачем вы пытаетесь перекрыть метод изменения второго поля, а не первого?
Нет, это метод поля в датасорсе
Старый 08.02.2013, 13:37   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Доступ к значению полей текущего курсора может быть осуществлён, через имя датасурса (без суфикса _ds). Нет необходимости использовать методы getValue и setValue.

И я все же по прежнему не понимаю почему вы инициируете изменение значения поля из его же собственного modified? Зачем эта ненужная рекурсия?
Старый 08.02.2013, 14:45   #17  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Доступ к значению полей текущего курсора может быть осуществлён, через имя датасурса (без суфикса _ds). Нет необходимости использовать методы getValue и setValue.
Да, согласен, я протупил немного...

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
И я все же по прежнему не понимаю почему вы инициируете изменение значения поля из его же собственного modified? Зачем эта ненужная рекурсия?
Мне ice так посоветал, да и как подругому я не знаю А как по-другому? В контроле не вариант, там не работает, я про код выше, самый первый который
Старый 08.02.2013, 14:50   #18  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Мне ice так посоветал, да и как подругому я не знаю А как по-другому? В контроле не вариант, там не работает, я про код выше, самый первый который
я такого не советовал
Перекрывать нужно в поле, которое меняется(меняется вручную на форме), тк перекрытый метод сработает при изменении этого поля
Старый 11.02.2013, 06:59   #19  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от ice Посмотреть сообщение
я такого не советовал
Перекрывать нужно в поле, которое меняется(меняется вручную на форме), тк перекрытый метод сработает при изменении этого поля
Упс... прошу просчения! Да да, уже дошло как нужно, все работает! Спасибо!
Старый 11.02.2013, 17:10   #20  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
OIP:
1. Да, этот случай уникален и больше нигде не появляется, ну на данный момент, ибо процесс только пытается быть автоматизирован.. кроме того, в других формах присутсвует только одно поле из этих двух, и именно то, чье значение копируется
Побольше доверяйте стандартному приложению. Не изобретайте велосипед.

Похожий пример из стандарта: при заполнении наименования номенклатуры заполняется поле "Краткое наименование". Смотрите метод InventTable.modifiedField().
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Имитация выбора значения поля на DS формы. bodeaux DAX: Программирование 8 04.12.2012 10:41
Поля из разных таблиц в динамической Lookup-форме samolalex DAX: Программирование 8 06.06.2011 20:20
LookUp. На основе предыдущего значения. Михаил Петрович DAX: Программирование 4 24.10.2007 12:26
Как перекрыть lookup для поля входящего в группу полей ATimTim DAX: Программирование 2 05.10.2005 11:26
Как получить значения поля из lookup метода в WEB Dronas DAX: Программирование 5 13.01.2005 10:17
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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