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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.04.2007, 20:28   #1  
konfet is offline
konfet
Снова балуюсь косаптой :)
 
143 / 50 (2) ++++
Регистрация: 23.04.2003
Адрес: Moscow
Казалось бы, простая задача...
Задача: есть некая таблица Table1. У нее есть поле VendAccount - ссылка на поставщика (AccountNum из VendAccount).
В форме Form1, которая "имеет дело" с данными Table1, есть, разумеется, датасурс Table1.
Пользователь хочет видеть в форме Form1 не только код, но и наименование и другие атрибуты поставщика - поля из VendTable. Это не должны быть дисплей-методы: наименование поставщика - должно меняться пользователем непосредственно в форме Form1.
Вешаем на форму Form1 подчиненный к Table1 датасурс VendTable; LinkType = OuterJoin.
В методе init() датасурса VendTable формы пишем код, который актуализует именно нужный нам релейшен между таблицами VendTable и Table1:
X++:
    qbds = qbds.addDataSource(tableNum(VendTable));
    qbds.addLink(fieldNum(Table1, VendAccount), fieldNum(VendTable, AccountNum));
    qbds.joinMode(joinMode::OuterJoin);
    this.query(q);
Теперь добавляем на форму контролы, ссылающиеся на датасурс VendTable - например, наименование поставщика.
Все работает замечательно - датасурсы связываются, мы можем менять в форме наименование поставщика, соответствующего текущей записи в датасурсе Table1.
Но: когда мы меняем Table1.VendAccount - то есть собственно поставщика - связанная запись в датасурсе VendTable не меняется. То есть, изменили код ПОСТ-1 на ПОСТ-2 - а наименование осталось "Поставщик 1".
Проблема была решена так: перекрыт метод modified() на поле Table1.VendAccount (в датасурсе VendTable формы), следующим образом:

X++:
public void modified()
{
    ;
    super();
    element.lock();
    buffer.data(Table1);
    Table1.doUpdate();
    Table1_ds.research();
    if (Table1)
    {
        Table1_ds.findRecord(buffer);
    }
    element.unlock();
}
После этого, запись на подчиненном датасурсе VendTable стала позиционироваться на новом поставщике сразу после изменения Table1.VendAccount.
Но что-то мне подсказывает, что данное решение является безграмотным и можно достичь этой цели - перепозиционирования записи в подчиненном датасурсе при изменении поля записи родительского датасурса - БЕЗ research() или executeQuery().

Вопрос к уважаемым гуру: я прав или неправ?
__________________
Бесты и регарды!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Задача: запретить удалять строки разнесённых журналов. jeky DAX: Программирование 12 28.01.2009 22:22
Задача оптимизации rusalaudinov DAX: Программирование 62 16.11.2007 08:22
Задача оптимизации загрузки производственых мощностей SevA DAX: Программирование 23 01.11.2004 18:12
Простая загадка Wamr DAX: Программирование 5 18.07.2003 18:10
Нешуточная задача Wamr DAX: Программирование 8 02.04.2003 10:23

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 12:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.