10.05.2009, 20:27 | #1 |
Участник
|
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 |
MCITP
|
Цитата:
Сообщение от 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 знания из нужной таблицы ? Или умней сделать как-то по-дугому? Думаю придётся делать через временню таблицу, или через два табПэйджа (один, для ненужной таблицы, скрывать)..
__________________
Zhirenkov Vitaly |
|
10.05.2009, 22:21 | #3 |
Дмитрий Ерин
|
Цитата:
PS: если мое описание покажется сумбурным, посмотрите для примера отношения на таблице LedgerJournalTrans |
|
10.05.2009, 23:34 | #4 |
Участник
|
Не греть голову, а в зависимости от типа показывать/скрывать соответствующие контролы. Делалось неоднократно именно в таких случаях - надежный и проверенный способ.
__________________
Денис Балуев. |
|
11.05.2009, 10:40 | #5 |
Участник
|
|
|
11.05.2009, 10:44 | #6 |
Участник
|
Цитата:
Сообщение от Ruff
Вообще говоря, делать такие проверки (значения поля с константой) в коде - моветон. Я бы рекомендовал следующее:
PS: если мое описание покажется сумбурным, посмотрите для примера отношения на таблице LedgerJournalTrans То есть не от конкретного знаечния вендора зависит, а от того, есть ли в T2 для него записи. |
|
11.05.2009, 12:09 | #7 |
MCITP
|
А чем вам тогда мэп поможет - не совсем понятно?
__________________
Zhirenkov Vitaly |
|
11.05.2009, 23:17 | #8 |
Участник
|
Смысл - скрыть от пользователя и программиста из какой таблицы берутся поля и в какую таблицу сохраняются и сделать универсальный способ работы с этими данными в системе, чтобы программисту постоянно не писать запросы, проверяющие есть ли данные в одной таблице, и если ли нету, искать в другой таблице, то же с update . Хочу всю логику инкапсулировать в мапе. Можно было бы многое сделать то же с помощью временных таблиц, возможно, но мэп позволит точней работать с полями + универсальность вызовов не зависимо от того с буфером из какой таблицы работаешь.
Какие за/против? |
|
12.05.2009, 00:15 | #9 |
MCITP
|
Цитата:
Сообщение от IKA
Смысл - скрыть от пользователя и программиста из какой таблицы берутся поля и в какую таблицу сохраняются и сделать универсальный способ работы с этими данными в системе, чтобы программисту постоянно не писать запросы, проверяющие есть ли данные в одной таблице, и если ли нету, искать в другой таблице, то же с update . Хочу всю логику инкапсулировать в мапе. Можно было бы многое сделать то же с помощью временных таблиц, возможно, но мэп позволит точней работать с полями + универсальность вызовов не зависимо от того с буфером из какой таблицы работаешь.
Какие за/против? Но это не совсем ваш случай, мне кажется... Обычно в map-е объединяют однотипные таблицы из разных модулей (типа CustVendTrans). Вы же пытаетесь объединить 2 таблицы одной и той же сущности, которые ещё и каким-то крайне странным образом зависимы ("То есть не от конкретного знаечния вендора зависит, а от того, есть ли в T2 для него записи.") - А если нет и там, и там? - А если в Т2 нет, но я хочу добавить? - ... Мне кажется Вы пытаетесь лечить последствия неправильного дизайна. Просто забыли вовремя в нужном месте добавить поле "типа записи". И лечить лучше болезнь, если есть возможность, а не симптом...
__________________
Zhirenkov Vitaly |
|
12.05.2009, 01:03 | #10 |
Участник
|
Согласна, дизайн извращенный, смысл в том, что есть несколько компаний, и все они должны видеть одни и те же данные про вердора, пока не захотят их изменить в своей конкретной компании. то есть все остальные компании так и будут видеть общие данные, а эта конкретная компания будет видеть свои в соответствующих полях. Поэтому есть запись в shared таблице и есть таблица, которая держит записи переопределенные в конкретной компании, поля могут переопределяться не все, а только около 2 десятков.Записей shared около 300 000, переопределяться будут изредка, поэтому дублировать записи по всем компаниям не вариант. Было несколько дизайнов, по разным причинам остановились на этом, тк позволяет скрыть то, что за мэпом скрыто и можно будет менять нижележащую архитектуру, не меняя каждое место, где используется эта функциональность.
Буду рада, если получу ответ на изначальный вопрос относительно того, как лучше использовать мэп на форме - через link active и заполнение по нему значений или как-ниудь по-другому. Ну и комментарии предложений по дизайну тоже, может, кто-то делал подобное и знает про достоинства/недостатки разных вариантов. Мэп хорош, как говорилось, тем, что инкапсулирует логику, поэтому девелопить проще, и количсество ошибок меньше и можно нижележащую архитектуру менять, не меняя код по всей системе, но с другой стороны, я думаю, что может оказать влияние на производительность, тк вместо запросов придется в части случаев комбинировать запрос и операции с мэпом(как , например. на форме в изначальном моем вопросе). |
|
13.05.2009, 17:51 | #11 |
Участник
|
Цитата:
Сообщение от IKA
Согласна, дизайн извращенный, смысл в том, что есть несколько компаний, и все они должны видеть одни и те же данные про вердора, пока не захотят их изменить в своей конкретной компании. то есть все остальные компании так и будут видеть общие данные, а эта конкретная компания будет видеть свои в соответствующих полях. Поэтому есть запись в shared таблице и есть таблица, которая держит записи переопределенные в конкретной компании, поля могут переопределяться не все, а только около 2 десятков.Записей shared около 300 000, переопределяться будут изредка, поэтому дублировать записи по всем компаниям не вариант. Было несколько дизайнов, по разным причинам остановились на этом, тк позволяет скрыть то, что за мэпом скрыто и можно будет менять нижележащую архитектуру, не меняя каждое место, где используется эта функциональность.
. Такие поля называются подстановкой. Хотите программисту работу облегчить - напишите в базовой таблице edit-методы, работающие с подстановкой (1 вариант), скрывайте/показывайте контролы, проверяя методом isCustom правомерность того или иного действия (2 вариант)
__________________
Денис Балуев. |
|
Теги |
datasource, map |
|
|