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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.05.2011, 18:44   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5813 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от timaluhs Посмотреть сообщение
Надо копировать строку из таблицы и добавить её в ту же таблицу и изменить значение одного или двух полей.
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Buf2Buf() с последующим изменением только отличающихся полей поможет ?
А по мне так "клонирование" записей с помощью buf2buf() или data() есть зло, потому что такой вариант очень прост в плане реализации (и потому заманчив), но очень непрозрачен и даже опасен в плане последующей поддержки:
  • Обычно рано или поздно оказывается, что какие-то поля копировать не надо вовсе - придется плодить уродские конструкции, очищающие их значения в новой записи.
  • Пропадает возможность использовать логику инициализации новой записи в initValue(), либо эту логику надо как-то продублировать в коде копирования записей (а copy-paste - еще большее зло, чем buf2buf()).
  • Когда в таблицу добавляются новые поля, то при этом нужно каждый раз помнить, что есть такие места кода с buf2buf(), где значения этих новых полей будут безусловно скопированы в другую запись (надо ли их очищать или перебивать на что-то?).
  • Если захочется посмотреть по перекрестным ссылкам, в каких местах приложения заполняется то или иное поле, то фрагменты кода с buf2buf() опять-таки ускользнут из поля зрения...
В общем, из моего скромного опыта новые записи никогда не стоит создавать с помощью buf2buf(), насколько бы они ни были похожи на уже существующие, - это то, что mazzy называет "программистским подходом". Лучше потратить немного времени и написать метод типа initFromXX(), в котором явно скопировать все нужные поля; его код можно сгенерить из списка полей с помощью поиска и замены с регулярными выражениями, так что независимо от числа полей пишется он очень просто. Такой метод куда проще поддерживать, в случае добавления в таблицу новых полей он не создаст побочных эффектов, наконец, он корректно отражается в перекрестных ссылках.

PS. А еще больше "веселых" косяков можно словить в том случае, если перед вставкой новой записи не вызывать validateWrite().
За это сообщение автора поблагодарили: timaluhs (1).
Теги
как правильно, копирование строк

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фильтрование записей при "переходе к основной таблице" demID DAX: Программирование 10 18.11.2015 12:52
Тормозит копирование строк в буфер обмена ivas DAX: Программирование 20 21.08.2007 15:05
При создании строки в закупке статус строки становится "Отменено" AlexUnik DAX: Функционал 4 27.09.2004 16:05
Переход на правильную запись при Переходе к основной таблице. Anais DAX: Программирование 11 29.06.2004 19:16
фильтр по связанной таблице mick_777 DAX: Программирование 13 21.08.2002 16:00

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

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

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