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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.05.2010, 14:05   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Не пользуйтесь этой идеей - это то, что mazzy называет "программистским подходом". Из моего скромного опыта, в долгосрочной перспективе эта идея несет куда больше проблем, чем удобств. Дело в том, что:
  • в приведенном коде как минимум нужно еще проверять длину строковых полей и ArraySize;
  • совпадение названия и базового типа полей в двух произвольных таблицах не означает автоматом, что эти поля содержат одну и ту же информацию;
  • вы не получите перекрестных ссылок, которые помогут выявить, откуда в поля результирующей таблицы попадают значения; при использовании Map'а по крайней мере будут перекрестные ссылки на поля Map'а;
  • вы будете ограничены в именовании полей, могут возникнуть сложности, если в одной таблице поле с каким-то префиксом/суффиксом (кастомизация), а в другой - нет (таблица создана вами, и там достаточно префикса в названии таблицы);
  • копирование не будет сопровождаться вызовом каких-либо обработчиков изменения полей, которые в той или иной таблице могут подтянуть значения связанных полей;
  • самое главное: вы не сможете контролировать, какие именно поля надо копировать, а какие нет.
Зачастую нужно копировать "все поля, кроме таких-то", из-за чего к одной строке вызова buf2buf() или подобного метода добавляется фигова туча строк кода, вычищающего значения полей, которые копировать не надо было, либо которые надо брать из других источников. При этом из-за отсутствия перекрестных ссылок (см. выше) нужно либо самому помнить, что при добавлении нового поля в обе таблицы надо подумать о том, копировать ли его и если копировать, то при каких условиях, либо надо будет решать такие вопросы по факту, исправляя некорректные данные ("ой, а вот тот флажок не должен был копироваться в новые записи"). В общем, я лично для себя решил, что наиболее оптимальный вариант - это использование методов типа initFromXXTable(): такой код и в перекрестные ссылки попадает, и поля явно заданы - не возникнет неожиданных эффектов при создании новых полей, и код можно разбить на несколько методов, скажем, вместо копирования кода клиента или договора сделать отдельные initFromCustTable(), initFromRContractTable() и вызывать их в initFromXXTable(). Первоначальные затраты на написание такого кода выше, но он намного более предсказуем, его куда легче сопровождать и развивать.
За это сообщение автора поблагодарили: Zabr (1).
Теги
законченный пример, как правильно, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptabuilder: How to setup Axapta batch server running as user defined windows service Blog bot DAX Blogs 0 12.04.2007 16:10
axaptabuilder: How to build Axapta application from XPO files stored in Visual Source Safe. Blog bot DAX Blogs 0 12.04.2007 16:10
ALEG: Доступны записи тренингов по Microsoft Dynamics NAV Blog bot DAX Blogs 0 21.03.2007 15:00
Есть стандартный метод который возвращал бы пустую складскую аналитику т.е. "Axapta"? Hidden DAX: Функционал 8 30.05.2006 14:44
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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