23.01.2002, 05:19 | #1 |
Administrator
|
<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.
__________________
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 |
Участник
|
Полезная статья, но хотелось бы сделать небольшие дополнения и уточнения.
Цитата:
Если тип связи Passive, то фильтрация не будет производиться до того, как из кода будет вызван метод active (он должен быть вызван у основного FormDataSource).
“Updates of the child data source must be programmed on the active() method of the master data source”. Это значит, что в данном случае необходимо программирование метода active() на основном источнике данных. Цитата:
OuterJoin
Выводятся все записи зависимой таблицы, независимо от того, определен для них внешний ключ или нет. Если внешний ключ определен, то в строку выводятся соответствующие данные из основной таблицы, иначе столбцы остаются пустыми. OuterJoin - Selects records from the main table whether or not they have matching records in the joined table. Выбрает записи из основной таблицы независимо от того имеются ли соответствующие записи в зависимой таблице. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
FormDataSource.setCurrent | 9 | |||
Как вызвать метод для поля в FormDataSource? | 3 | |||
FormDataSource | 13 | |||
Гибрид FormTableControl и FormDataSource | 27 | |||
Собственный SQL запрос в FormDataSource | 0 |
|