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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.12.2001, 17:14   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Метод Merge
У таблицы есть метод Merge, который вызывается когда две записи объединяются. Не могли бы Вы объяснить, что здесь имеется в виду ?
Когда и каким образом происходит объединение записей ?
Старый 21.12.2001, 20:21   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
К сожалению, не успел проверить, поэтому пишу как есть в Справке.
<hr>
<b>Синтаксис</b><pre> void merge(common mergeInto)</pre>
<b>Описание</b>
Этот метод переместит всех потомков, принадлежащих выбранной записи (той, у которой вызывается метод merge), в запись, которая передается как параметр. Запись mergeInto должна существовать. После успешного перемещения запись mergeFrom удаляется. Если возникает ситуация создания записи с уже существующим ключом, происходит ошибка времени выполнения и ttsabort.
<hr>
Не знаю, насколько это тебе поможет. Как я понял, потомки определяются по внешнему ключу.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 07.07.2009, 11:45   #3  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
merge() на таблице, входящей в виртуальную компанию, отработает только по текущей компании или на всех компаниях, входящих в виртуальную ?
P.S. Вопрос снят, отрабатывает правильно по всем, испытание "на кошках" подтвердило - "кошки" живы
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 07.07.2009 в 12:31.
Старый 07.07.2009, 12:13   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
насколько я знаю, метод merge является устаревшим и уже давно не поддерживается.
__________________
полезное на axForum, github, vk, coub.
Старый 07.07.2009, 13:42   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
merge() на таблице, входящей в виртуальную компанию, отработает только по текущей компании или на всех компаниях, входящих в виртуальную ?
P.S. Вопрос снят, отрабатывает правильно по всем, испытание "на кошках" подтвердило - "кошки" живы
С виртуальными компаниями поосторожнее.
Метод RenamePrimaryKey() глючит на связках таблиц при использовании dataareaId. Например, если у вас справочник клиентов в виртуальной компании, то при переименовании первичного ключа, в строках журнала главной книги ссылки могу не переименоваться.

Полагаю, что merge тоже может быть не свободен от этого бага, но я не проверял.
Старый 07.07.2009, 14:35   #6  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от mazzy Посмотреть сообщение
насколько я знаю, метод merge является устаревшим и уже давно не поддерживается.
Будем писать свое тогда ...


Цитата:
Сообщение от Logger Посмотреть сообщение
Например, если у вас справочник клиентов в виртуальной компании, то при переименовании первичного ключа, в строках журнала главной книги ссылки могу не переименоваться.
Может или не переименуется точно ?
Или переименуется, но не во всех компаниях?
Ибо "барабашки нет" (c) mazzy

Переименование первичного ключа, равно как и объединение записей должно происходить в 2 итерации :
  1. Коррекция данных в таблицах по прямому наличию в них полей с EDT изменяемого первичного ключа
  2. Коррекция данных в таблицах по Relations на поле таблицы, ассоциированное с этим EDT, при условии, что ссылочное поле корректируемой таблицы не принадлежит этому EDT
Эти две итерации должны быть включены в цикл прохода по всем компаниям, входящих в виртуальную.
В этом случае при описанном случае пропуск строк ОЖ с типом счета "клиент" при переименовании виртуального справочника клиентов в принципе не должен происходить.
Почему происходит такое? Рискну предположить, что либо вообще вторую итерацию не задействуют, либо задействуют, но не по всем компаниям, входящим в виртуальную
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 07.07.2009, 15:52   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Может или не переименуется точно ?
Или переименуется, но не во всех компаниях?
Ибо "барабашки нет" (c) mazzy

Переименование первичного ключа, равно как и объединение записей должно происходить в 2 итерации :
  1. Коррекция данных в таблицах по прямому наличию в них полей с EDT изменяемого первичного ключа
  2. Коррекция данных в таблицах по Relations на поле таблицы, ассоциированное с этим EDT, при условии, что ссылочное поле корректируемой таблицы не принадлежит этому EDT
Гарантировать не могу
Ну вы сами попробуйте.

Барабашки конечно нет, а глюк есть.

Глючит обработка п.2 из вашей схемы. Т.е. ядро пытается для каждой компании из набора компаний составляющих виртуальную компанию выполнить запрос перекодирующий счет и коррсчет в строках журнала ГК, но при генерации запроса на основе relation влезает условие по Ledgerjournaltrans.companyId==CustTable.dataareaID подставляя в запрос код виртуальной компании (вместо реальной, так как в ledgerjournalTrans хранятся ссылки не на виртуальную компанию, а на реальные компании) из-за этого записи остаются необновленными.
Старый 07.07.2009, 18:26   #8  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Реальный баг

Игнорирование в п.2 Relations по компании на нашу таблицу, входящую в виртуальную компанию и по которой мы хотим сделать merge()/renamePrimaryKey() должно помочь вроде ...
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 07.07.2009, 19:27   #9  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от mazzy
...метод merge является устаревшим и уже давно не поддерживается...
А насколько это достоверно и в чем заключается неподдержка?

Насколько я помню его еще до 2.5 убрали из пользовательского интерфейса. Т.к. в общем случае он работать не может, т.к. потенциально может привести к нарушению уникальности индексов в связанных таблицах. Думаю что именно поэтому его убрали из пользовательского интерфейса и оставили доступным для программистов, которые понимают что делают.
__________________
С уважением,
glibs®
Теги
merge, renameprimarykey

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как вызвать метод для поля в FormDataSource? Maxim Gorbunov DAX: Программирование 3 08.05.2007 11:28
Axapta Lessons: Merge Customer Records Blog bot DAX Blogs 0 28.10.2006 18:22
Дисплей метод таблицы который вызывается из ГРИДА 3oppo DAX: Программирование 10 23.05.2006 06:47
display метод с параметром Андре DAX: Программирование 5 11.01.2006 19:04
Передача массива VARIANTов в Automation метод Maximin DAX: Программирование 0 09.10.2002 19:31

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

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

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