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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.01.2002, 05:19   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
<h3>Различные типы связей (LinkType) для FormDataSource</h3>Для согласованного отображения данных связанных таблиц на форме Axapta предоставляет возможность связывать FormDataSource, указывающие на эти таблицы. Под согласованным отображением могут пониматься следующие два случая:<ol><li>Автоматическая фильтрация зависимого FormDataSource при выборе записи в основном.</li>
<li>Совместное отображение данных двух и более FormDataSource в одном FormGridControl.</li></ol>Рассмотрим оба случая.

<b>Автоматическая фильтрация</b>
Рассмотрим для примера таблицы Заказы и Строки заказа.

<center></center>
Таблицы связаны по полю SalesId (первичный ключ в таблице "Заказы", внешний - в таблице "Строки заказа"). В форме "Заказы" (Главное меню - Заказы - Заказ) отображаются данные этих двух таблиц. При выборе записи в таблице "Заказы" (верхний список в форме) содержимое списка "Строк заказа" фильтруется так, что в списке остаются только строки, относящиеся к выбранному заказу.

В рассмотренном примере фильтруется зависимый FormDataSource. В Axapta существует возможность фильтрации основного FormDataSource на основании данных зависимого. Например, изменив только тип связи в предыдущем примере, можно добиться того, что на форме будут отображаться только заказы, для которых существуют строки, или заказы, для которых строк не существует.

<b>Совместное отображение данных</b>
Теперь рассмотрим форму "Создать строки", в которой создаются строки заказа (форма "Заказы", кнопка-меню "Функции" - "Создать строки"). В простейшем варианте (при отключенной складской аналитике) в форме в одном FormGridControl отображаются данные таблиц InventTable (номенклатурные единицы) и InventSum (запасы в наличии). Они связаны по полю ItemId (первичный ключ в таблице InventTable, внешний - в InventSum). Если в этой форме отключить фильтр, то список будет состоять из записей таблицы InventSum, для которых определен внешний ключ, и в одной строке с ними будут выводится соответствующие записи таблицы InventTable.

<center></center>
Изменяя тип связи, можно вывести в списке и записи, для которых внешний ключ не определен.

<h4>Создание связанных FormDataSource</h4>Для того, чтобы связать FormDataSource следует определить связи либо на таблицах, на которые они будут ссылаться, либо на используемых в этих таблицах Extended Data Types. Затем в зависимом FormDataSource следует указать основную таблицу в качестве JoinedSource и выбрать тип связи (LinkType). В некоторых случаях нужно также указать тип связи у основного FormDataSource, но это не обязательно. Рассмотрим различные типы связи, которые можно указать в зависимом FormDataSource

<ul><li><b>Passive, Active, Delayed</b>
Эти типы связи служат для автоматической фильтрации. Разница между ними лишь в том, в какой момент эта фильтрация выполняется. Если тип связи Active, фильтрация зависимого FormDataSource производится сразу же после выбора записи в основном FormDataSource. В случае Delayed фильтрация будет производиться после некоторой задержки. Такой механизм удобен при прокрутке записей основной таблицы (не будет дополнительной задержки на фильтрацию при быстром переходе от одной записи к другой). Если тип связи Passive, то фильтрация не будет производиться до того, как из кода будет вызван метод active (он должен быть вызван у основного FormDataSource).
</li>
<li><b>InnerJoin</b>
При совместном выводе записей таблиц в одном FormGridControl выводятся все записи зависимой таблицы, для которых определен внешний ключ. В одной строке с ними выводятся соответствующие записи основной таблицы.
</li>
<li><b>OuterJoin</b>
Выводятся все записи зависимой таблицы, независимо от того, определен для них внешний ключ или нет. Если внешний ключ определен, то в строку выводятся соответствующие данные из основной таблицы, иначе столбцы остаются пустыми.
</li>
<li><b>ExistJoin, NotExistJoin</b>
Эти типы связей могут использоваться для фильтрации основной таблицы. В зависимом FormDataSource записи не выбираются, а основной фильтруется так, что в нем остаются либо те записи, для которых существуют (Exist) записи с соответствующим внешним ключом в зависимом FormDataSource, либо те записи, первичный ключ которых не встречается (NotExist) среди записей зависимой таблицы.</li></ul>

<h4>Фильтрация связанных FormDataSource</h4>Фильтрация одного из связанных FormDataSource с помощью SQL запрос не приводит к автоматической фильтрации другого FormDataSource, в отличие от фильтрации с помощью Query.
Вложения
Тип файла: img1065-1 (21.2 Кб, 1532 просмотров)
Тип файла: img1065-2 (12.0 Кб, 1515 просмотров)
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: b_nosoff (0).
Старый 16.05.2004, 13:20   #2  
vic_z is offline
vic_z
Участник
 
26 / 30 (2) +++
Регистрация: 11.12.2003
Полезная статья, но хотелось бы сделать небольшие дополнения и уточнения.
Цитата:
Если тип связи Passive, то фильтрация не будет производиться до того, как из кода будет вызван метод active (он должен быть вызван у основного FormDataSource).
Здесь можно дополнить цитатой из Axapta Developer’s guide (ADG):
“Updates of the child data source must be programmed on the active() method of the master data source”.
Это значит, что в данном случае необходимо программирование метода active() на основном источнике данных.

Цитата:
OuterJoin
Выводятся все записи зависимой таблицы, независимо от того, определен для них внешний ключ или нет. Если внешний ключ определен, то в строку выводятся соответствующие данные из основной таблицы, иначе столбцы остаются пустыми.
Здесь корректировка. ADG:
OuterJoin - Selects records from the main table whether or not they have matching records in the joined table.
Выбрает записи из основной таблицы независимо от того имеются ли соответствующие записи в зависимой таблице.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
FormDataSource.setCurrent olesh DAX: Программирование 9 24.07.2019 11:48
Как вызвать метод для поля в FormDataSource? Maxim Gorbunov DAX: Программирование 3 08.05.2007 11:28
FormDataSource sassas DAX: Функционал 13 05.08.2004 17:25
Гибрид FormTableControl и FormDataSource Андре DAX: Программирование 27 01.10.2003 09:58
Собственный SQL запрос в FormDataSource Alexey DAX: База знаний и проекты 0 20.12.2001 00:35

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

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

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