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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.05.2009, 20:27   #1  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
MAP в качестве datasource формы
Есть 2 таблицы Т1 и Т2, у них есть с 2 десятка одинаковых полей и с десяток разных.
Есть форма, на ней основной datasource основан на Т1 и в зависимости от текущего значения поля vendAccount записи этого основного DS, нужно в некоторых полях формы показывать данные либо из Т1 или из Т2 .

Допустим, vendAccount = 001 , то в поля формы F1....F20 отображаться значения из Т1 , vendAccount = 002 , то в те же поля формы F1....F20 отображаться уже значения из Т2.

Хочу положить на форму map , в котором замаппены эти 20 полей из T1 и T2. Как это лучше сделать? Просто указать этот map в качестве DS2 формы и на linkActive заполнять присваивать строке map знания из нужной таблицы ? Или умней сделать как-то по-дугому?
Старый 10.05.2009, 21:40   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от IKA Посмотреть сообщение
Есть 2 таблицы Т1 и Т2, у них есть с 2 десятка одинаковых полей и с десяток разных.
Есть форма, на ней основной datasource основан на Т1 и в зависимости от текущего значения поля vendAccount записи этого основного DS, нужно в некоторых полях формы показывать данные либо из Т1 или из Т2 .

Допустим, vendAccount = 001 , то в поля формы F1....F20 отображаться значения из Т1 , vendAccount = 002 , то в те же поля формы F1....F20 отображаться уже значения из Т2.

Хочу положить на форму map , в котором замаппены эти 20 полей из T1 и T2. Как это лучше сделать? Просто указать этот map в качестве DS2 формы и на linkActive заполнять присваивать строке map знания из нужной таблицы ? Или умней сделать как-то по-дугому?
А вы пробовали указать Map в датасорсе формы?
Думаю придётся делать через временню таблицу, или через два табПэйджа (один, для ненужной таблицы, скрывать)..
__________________
Zhirenkov Vitaly
Старый 11.05.2009, 10:40   #3  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Цитата:
Сообщение от ZVV Посмотреть сообщение
А вы пробовали указать Map в датасорсе формы?
Думаю придётся делать через временню таблицу, или через два табПэйджа (один, для ненужной таблицы, скрывать)..
AX2009 - можно выбрать map в качестве DS формы.
вопрос - как потом с ним работать...
Старый 10.05.2009, 22:21   #4  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Сообщение от IKA Посмотреть сообщение
Допустим, vendAccount = 001 , то в поля формы F1....F20 отображаться значения из Т1 , vendAccount = 002 , то в те же поля формы F1....F20 отображаться уже значения из Т2.
Вообще говоря, делать такие проверки (значения поля с константой) в коде - моветон. Я бы рекомендовал следующее:
  • создать свой Enum, который будет отвечать за выбор этих двух таблиц. Что-то типа MyVendType::T1 и MyVendType::T2 (с осмысленными названиями, разумеется);
  • добавить в таблицу T1 поле с типом MyVendType и единовременно (job-ом) заполнить это поле на основе поля vendAccount в соответствии с Вашей логикой. При этом не забыть модифицировать код, выполняемый при добавлении записей в таблицу (инициализация поля MyVendType);
  • добавить к таблице T1 два отношения (relation): одно с самой собой, а второе - с таблицей T2. Эти отношения должны иметь тип связи "поле фиксировано" и строиться на поле MyVendType. (В первом случае связь будет MyVendType == 0, во втором - MyVendType == 1);
  • добавить в упомянутые отношения связи по первичным ключам (однозначно идентифицирующие запись);
  • на форме создать три источника данных: родительский T1 и два подчиненных: T1 и T2, и привязать их к разным TabPage, как советовал ZVV выше.
Получилось на первый взгляд громоздко, но зато: 1) не навешиваются доп. действия на linkActive (может я не прав, но имхо, нагружать этот метод - это совсем крайний случай), и 2) используется стандартный механизм динамического выбора источника данных (если это можно так назвать).

PS: если мое описание покажется сумбурным, посмотрите для примера отношения на таблице LedgerJournalTrans
Старый 10.05.2009, 23:34   #5  
denny is offline
denny
Участник
 
93 / 29 (1) +++
Регистрация: 16.11.2003
Адрес: Novosibirsk
Не греть голову, а в зависимости от типа показывать/скрывать соответствующие контролы. Делалось неоднократно именно в таких случаях - надежный и проверенный способ.
__________________
Денис Балуев.
Старый 11.05.2009, 10:44   #6  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Цитата:
Сообщение от Ruff Посмотреть сообщение
Вообще говоря, делать такие проверки (значения поля с константой) в коде - моветон. Я бы рекомендовал следующее:
  • создать свой Enum, который будет отвечать за выбор этих двух таблиц. Что-то типа MyVendType::T1 и MyVendType::T2 (с осмысленными названиями, разумеется);
  • добавить в таблицу T1 поле с типом MyVendType и единовременно (job-ом) заполнить это поле на основе поля vendAccount в соответствии с Вашей логикой. При этом не забыть модифицировать код, выполняемый при добавлении записей в таблицу (инициализация поля MyVendType);
  • добавить к таблице T1 два отношения (relation): одно с самой собой, а второе - с таблицей T2. Эти отношения должны иметь тип связи "поле фиксировано" и строиться на поле MyVendType. (В первом случае связь будет MyVendType == 0, во втором - MyVendType == 1);
  • добавить в упомянутые отношения связи по первичным ключам (однозначно идентифицирующие запись);
  • на форме создать три источника данных: родительский T1 и два подчиненных: T1 и T2, и привязать их к разным TabPage, как советовал ZVV выше.
Получилось на первый взгляд громоздко, но зато: 1) не навешиваются доп. действия на linkActive (может я не прав, но имхо, нагружать этот метод - это совсем крайний случай), и 2) используется стандартный механизм динамического выбора источника данных (если это можно так назвать).

PS: если мое описание покажется сумбурным, посмотрите для примера отношения на таблице LedgerJournalTrans
Спасибо, но логика скорей там такая, что, если данные в T2 есть, то показывать данные для вендора из нее, если нет, то в тех же полях показывать данные из T1.
То есть не от конкретного знаечния вендора зависит, а от того, есть ли в T2 для него записи.
Старый 11.05.2009, 12:09   #7  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от IKA Посмотреть сообщение
Спасибо, но логика скорей там такая, что, если данные в T2 есть, то показывать данные для вендора из нее, если нет, то в тех же полях показывать данные из T1.
То есть не от конкретного знаечния вендора зависит, а от того, есть ли в T2 для него записи.
А чем вам тогда мэп поможет - не совсем понятно?
__________________
Zhirenkov Vitaly
Старый 11.05.2009, 23:17   #8  
IKA is offline
IKA
Участник
 
359 / 65 (3) ++++
Регистрация: 15.03.2006
Цитата:
Сообщение от ZVV Посмотреть сообщение
А чем вам тогда мэп поможет - не совсем понятно?
Смысл - скрыть от пользователя и программиста из какой таблицы берутся поля и в какую таблицу сохраняются и сделать универсальный способ работы с этими данными в системе, чтобы программисту постоянно не писать запросы, проверяющие есть ли данные в одной таблице, и если ли нету, искать в другой таблице, то же с update . Хочу всю логику инкапсулировать в мапе. Можно было бы многое сделать то же с помощью временных таблиц, возможно, но мэп позволит точней работать с полями + универсальность вызовов не зависимо от того с буфером из какой таблицы работаешь.
Какие за/против?
Старый 12.05.2009, 00:15   #9  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от IKA Посмотреть сообщение
Смысл - скрыть от пользователя и программиста из какой таблицы берутся поля и в какую таблицу сохраняются и сделать универсальный способ работы с этими данными в системе, чтобы программисту постоянно не писать запросы, проверяющие есть ли данные в одной таблице, и если ли нету, искать в другой таблице, то же с update . Хочу всю логику инкапсулировать в мапе. Можно было бы многое сделать то же с помощью временных таблиц, возможно, но мэп позволит точней работать с полями + универсальность вызовов не зависимо от того с буфером из какой таблицы работаешь.
Какие за/против?
Да я примерно понимаю для чего обычно используют мэпы...
Но это не совсем ваш случай, мне кажется... Обычно в map-е объединяют однотипные таблицы из разных модулей (типа CustVendTrans). Вы же пытаетесь объединить 2 таблицы одной и той же сущности, которые ещё и каким-то крайне странным образом зависимы ("То есть не от конкретного знаечния вендора зависит, а от того, есть ли в T2 для него записи.")
- А если нет и там, и там?
- А если в Т2 нет, но я хочу добавить?
- ...
Мне кажется Вы пытаетесь лечить последствия неправильного дизайна. Просто забыли вовремя в нужном месте добавить поле "типа записи".
И лечить лучше болезнь, если есть возможность, а не симптом...
__________________
Zhirenkov Vitaly
Теги
datasource, map

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обновление DataSource из формы Печать\Новый отчет. Poleax DAX: Программирование 19 13.04.2011 09:28
Types::Record в качестве ключа для класса Map Gad DAX: Программирование 12 11.07.2007 10:54
Как программно добавить DataSource в процессе работы формы Владимир Максимов DAX: Программирование 1 29.11.2006 18:28
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Как получить доступ к текущей строке в DataSource формы Maxim Gorbunov DAX: База знаний и проекты 0 28.11.2001 13:46

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

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

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