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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.03.2011, 15:44   #1  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Значение n-ой колонки списка ComboBox
Добрый день.
Подскажите, как можно получить соответствующее значение из НЕпервой колонки списка ComboBox после выбора некоторой строки из этого списка.
Т.е. например есть поле со списком. В поле отображается ФИО. В списке отображаются и ФИО и должность. После выбора из списка другого ФИО хотелось бы без дополнительных запросов, прямо из списка, используя какое-либо его свойство, получить должность из второй колонки строки выбранного ФИО. Возможно ли это?
Спасибо.
Старый 15.03.2011, 16:26   #2  
CDR is offline
CDR
MCTS
MCBMSS
 
236 / 175 (6) ++++++
Регистрация: 27.11.2003
В контроле ComboBox нет колонок. Возможно, имеется ввиду ListView?
__________________
Dynamics AX Experience
Старый 15.03.2011, 16:28   #3  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Если lookup перекрыт на контроле или используется какая-нибудь lookup форма, то можно так:
X++:
public void lookup()
{
    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tableNum(EmplTable), this);
    query                   query = new query();
    queryBuildDatasource    qbds;
    ;

    sysTableLookup.addLookupfield(fieldNum(EmplTable, <1>));
    sysTableLookup.addLookupfield(fieldNum(EmplTable, <2>), true); // true - указывает что после выбора нужно вернуть значение этой колонки

    qbds = query.addDataSource(tablenum(EmplTable));
    sysTableLookup.parmQuery(query);
    sysTableLookup.performFormLookup();
}
Но на контроле перекрывать lookup не очень хорошо, если используется edt - создайте для нее lookup форму и напишите свой lookup.
Старый 15.03.2011, 16:34   #4  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Прошу прощения, речь шла именно о lookup-выпадающих списках, ComboBox тут не причём.
Цитата:
sysTableLookup.addLookupfield(fieldNum(EmplTable, <поле2>), true); // true - указывает что после выбора нужно вернуть значение этой колонки
А как мне обратиться потом к контролу, на котором лукап перекрыт описанным способом, чтобы получить значение колонки?
Старый 15.03.2011, 16:37   #5  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Поставьте ему свойство autodeclaration = true, и обращайтесь из любого места формы <нужное значение> = <имя контрола с перекрытым методом>.text();
Старый 15.03.2011, 16:43   #6  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Тогда получается, что я не смогу получить значение первой колонки, а мне нужны значения и первой колонки (сохраняется в поле, к которому прикреплён лукап), и второй колонки с должностью.
Старый 15.03.2011, 16:47   #7  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
Тогда получается, что я не смогу получить значение первой колонки, а мне нужны значения и первой колонки (сохраняется в поле, к которому прикреплён лукап), и второй колонки с должностью.
если я правильно понял - у вас перекрыт лукап.
если так, то почему бы не навесить на этот контрл Modified? не выход?
Старый 15.03.2011, 16:43   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Скорее всего имелся в виду самый обычный lookup c гридом из нескольких полей. Если так то ответ нет, стандартно такое сделать не получиться. Стандартный механизм работы c lookup окнами не предаставляет доступ программисту к процессу получения значения из lookup формы. Можно запрограммировать передачу значения, но вот запрограммировать получение этого значения на основной форме не выйдет.
К том уже, если я правильно вас понял, при таком подходе вы принуждаете пользователя пользоваться lookup'ом, и лишаете ручного ввода. Не создавайте себе лишних проблем. Инициализируйте второе поле в методе modifiedField первого.
Старый 18.03.2011, 14:22   #9  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
? извлечение через FormRun?
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Скорее всего имелся в виду самый обычный lookup c гридом из нескольких полей. Если так то ответ нет, стандартно такое сделать не получиться. Стандартный механизм работы c lookup окнами не предаставляет доступ программисту к процессу получения значения из lookup формы. Можно запрограммировать передачу значения, но вот запрограммировать получение этого значения на основной форме не выйдет.
Позволю себе не согласиться с данным утверждением.
Если речь идет об обычном lookup - то получить значения курсора выбранной в lookup позиции в вызывающей форме в большинстве случаев все-же возможно, для этого нужно лишь получить экземпляр FormRun этой lookup формы, а дальше извлечь из него текущий курсор необходимого источника данных.

Попробую схематично набросать то что имелось в виду:
1. В classDeclaration определяется переменная для сохранения дескриптора lookup формы:
X++:
public class FormRun extends ObjectRun
{
    FormRun             lookupFormRun ;
}
2. Перекрывается метод performFormLookup нужного поля в котором сохраняем экземпляр вызываемой lookup' формы
X++:
public void performFormLookup(FormRun _form, FormControl _formControl)
{
    super(_form, _formControl);
    lookupFormRun = _form ;
}
3. в modified производится анализ:
X++:
    Common    lookupCursor ;
    ;
    ...
    super()   ;
    
    if( lookupFormRun &&
        lookupFormRun.closedOk() )
    {   // выбор из lookup формы
        lookupCursor = lookupFormRun .dataSource().cursor() ;
        ...
        // обработка данных извлеченного курсора
        ...
    }
    else { // 'ручной' ввод
    ...
    }
    ...
    lookupFormRun = null ;
__________________
Dynamics AX 4.0 SP2
За это сообщение автора поблагодарили: kitty (1), S.Kuskov (1), Player1 (2), Cardagant (1), SuperStar88 (1).
Старый 24.04.2013, 13:15   #10  
kitty is offline
kitty
Участник
 
364 / 26 (1) +++
Регистрация: 24.05.2005
Спасибо за предложенное работающее решение.
Возник такой вопрос:
Метод performFormLookup() вызывается только если лукап перекрыт, тк это метод класса SysTableLookup.

Если же лукап стандартный(автоматически созданный аксаптой по relation на таблице), можно ли как-то добраться до выбранной в нем записи?
Старый 15.03.2011, 16:49   #11  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Изначально так и было сделано.
А вопрос возник из-за проблемы: в списке сотрудников есть полные тёзки, но с разными должностями. В поле, на котором есть лукап с колонками ФИО и Должность, выбирается ФИО. А в другое поле по modified контрола с ФИО выбирается должность. Но должностей по этому ФИО несколько, и выбраться может не та, по которой собственно щёлкнул пользователь при выборе ФИО. Хотя при выборе ФИО пользователь свой выбор уже конкретизировал.
Старый 15.03.2011, 16:59   #12  
Che is offline
Che
Участник
 
92 / 12 (1) ++
Регистрация: 25.01.2010
тоды есть вариант вызывать не лукап а форму (и с нее перехватить курсор). решал уже такую задачку....

если надо могу скинуть пример
Старый 15.03.2011, 18:08   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,437 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
вопрос возник из-за проблемы: в списке сотрудников есть полные тёзки, но с разными должностями. В поле, на котором есть лукап с колонками ФИО и Должность, выбирается ФИО. А в другое поле по modified контрола с ФИО выбирается должность. Но должностей по этому ФИО несколько, и выбраться может не та, по которой собственно щёлкнул пользователь при выборе ФИО. Хотя при выборе ФИО пользователь свой выбор уже конкретизировал.
У вас явная архитектурная ошибка. Если у вас ФИО не является первичным ключём, то как же вы тогда собираетесь использовать его в качестве вторичного? По логике пользователь должен выбирать уникальный код сотрудника, основываясь при этом на значениях ФИО и должности. Тогда в табличном методе modifiedField по уникальному коду вы уже сможете вытащить и ФИО и должность

P.S.: Ещё вспомнилось свойство AliasFor на поле таблицы. Не совсем то конечно, но может пригодиться

Последний раз редактировалось S.Kuskov; 15.03.2011 в 18:18.
Старый 15.03.2011, 18:27   #14  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
375 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Посмотрите использование метода waitAndSearch класса TableLookup_RU
__________________
Sergey Nefedov
Старый 16.03.2011, 11:35   #15  
wolfstein is offline
wolfstein
Axapta Retail User
Axapta Retail User
 
51 / 91 (4) ++++
Регистрация: 05.07.2006
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
Изначально так и было сделано.
А вопрос возник из-за проблемы: в списке сотрудников есть полные тёзки, но с разными должностями. В поле, на котором есть лукап с колонками ФИО и Должность, выбирается ФИО. А в другое поле по modified контрола с ФИО выбирается должность. Но должностей по этому ФИО несколько, и выбраться может не та, по которой собственно щёлкнул пользователь при выборе ФИО. Хотя при выборе ФИО пользователь свой выбор уже конкретизировал.
А может быть тогда на второй контрол-Должность тоже навесить лукап, который будет зависеть от первого контрола-ФИО. Т.е. после выбора ФИО, если по ФИО несколько должностей, то выбирать должность из лукап, если должность по ФИО одна, то подставлять ее по modified.
Старый 16.03.2011, 13:11   #16  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Цитата:
Сообщение от wolfstein Посмотреть сообщение
А может быть тогда на второй контрол-Должность тоже навесить лукап, который будет зависеть от первого контрола-ФИО. Т.е. после выбора ФИО, если по ФИО несколько должностей, то выбирать должность из лукап, если должность по ФИО одна, то подставлять ее по modified.
Этот вариант я рассматривала, но отказалась от него, т.к. в случае нескольких должностей потребуется 2 действия для выбора сотрудника, а не одно.
Цитата:
У вас явная архитектурная ошибка.
Да, к сожаоению, так реализован функционал "Должностные лица".
Спасибо за ответы, буду разбираться с методом waitAndSearch класса TableLookup_RU
Старый 16.03.2011, 13:22   #17  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
А не проще сделать выбор сотрудника в отдельном новом поле и по нему заполнить имя и должность?
__________________
Ivanhoe as is..
Старый 16.03.2011, 14:19   #18  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Да, к сожаоению, так реализован функционал "Должностные лица".
А почему не хотите возвращать recId выбранного значения в лукапе? Или запись в emplTable не позволяет узнать должность сотрудника?
Старый 16.03.2011, 15:08   #19  
DesertBrowser is offline
DesertBrowser
Участник
 
55 / 10 (1) +
Регистрация: 04.08.2010
Цитата:
А не проще сделать выбор сотрудника в отдельном новом поле и по нему заполнить имя и должность?
Можно, но тогда придётся переделывать много форм, и по моим прикидкам трудозатраты будут больше, чем от поиска способа возврата должности. Хотя возможно именно так и придётся сделать
Цитата:
А почему не хотите возвращать recId выбранного значения в лукапе? Или запись в emplTable не позволяет узнать должность сотрудника?
.
По recid можно определить должность в таблице сотрудников. А вернуть recid в лукапе проще, чем должность? Или Вы предлагаете возвращать только recid (что аналогично возврату кода сотрудника)?
Старый 16.03.2011, 15:30   #20  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от DesertBrowser Посмотреть сообщение
Можно, но тогда придётся переделывать много форм, и по моим прикидкам трудозатраты будут больше, чем от поиска способа возврата должности. Хотя возможно именно так и придётся сделать
Зато так правильнее Посмотрите на форуме, официальных лиц уже сколько раз обсуждали, даже автор признает что то, что сейчас в стандарте - очень далеко от BP.

Заодно исправите формы - сейчас методы прописаны на контролах, что вообще неверно. Переделайте на DS, а лучше на таблицу - и будет везде работать.
__________________
Ivanhoe as is..
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
PatrickChua: Change the combobox options in RunbaseBatch class Blog bot DAX Blogs 0 04.05.2009 14:05
Самоблокировка ComboBox контролла Delfins DAX: Программирование 2 17.01.2008 00:17
PatrickChua: Change the combobox options in RunbaseBatch class Blog bot DAX Blogs 0 28.10.2006 18:14
Fred Shen: Change the combobox options in RunbaseBatch class Blog bot DAX Blogs 0 28.10.2006 16:40
ComboBox и Enum ArturK DAX: Программирование 1 01.03.2004 16:19

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

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

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