Показать сообщение отдельно
Старый 29.05.2015, 16:31   #52  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
Цитата:
Сообщение от pedrozzz Посмотреть сообщение
Но,таблицы - это не только поля, а еще и группы полей, индексы и прочее. С ними пока не взлетело и нет времени разобраться. Но именно поля работают
Не взлетело потому, что вставка при сравнении использует метод TreeNode.AOTDrop, который не работает с индексами и группами полей.

Кстати говоря, с полями эта правка будет нормально работать только в 2012. Сравнение происходит построчно, без учета прочих метаданных сравниваемого объекта, т.е. текстовое представление объектов (в нашем случае - списков полей) должно быть одинаковым для обоих версий сравниваемых объектов (в нашем случае порядок существующих в обоих версиях полей должен быть одинаковым). Поскольку при вставке полей ядром не учитывается второй параметр AOTDrop - позиция вставки - новое поле всегда вставляется в начало узла Fields таблицы (до сохранения/восстановления), а в нормальном представлении поля отсортированы, то получается забавный результат. Он как раз и лечится правкой метода hasOrdering, которая заставляет при формировании текстового представления сортировать список полей по алфавиту.
В 2009 видимо потребуется уже более тщательное перепиливание, т.к. там нужно учитывать, что поля сортируются по id.

Для того, чтобы индексы и группы не помечались для добавления (ибо не работает), надо немного подправить изменения в canMergeInsertSubnodes:
X++:
public boolean canMergeInsertSubnodes(SysComparable _top, SysCompareContextProvider _context)
{
    //...
    //Добавить в switch
            case UtilElementType::Table:
                if (this.parmTreeNode().treeNodeType().id() == #NT_DBFIELDLIST)

                {
                    return true;
                }
                break;

    //..
}

Последний раз редактировалось makbeth; 29.05.2015 в 16:52.
За это сообщение автора поблагодарили: Ivanhoe (5), gl00mie (3), pedrozzz (3).