|
22.01.2008, 12:59 | #1 |
Участник
|
Есть ли у кого-нибудь такая штучечка?
Есть большой xpo в нём много объектов.
Делаю импорт. Изменений в нём я знаю что мало. Переберать сравнением каждый объект, чтоб увидеть изменения не хочется. Так вот вопрос: Может у кого нибудь есть такая доработка и он ей поделится. Так чтоб галочку какую-нибудь отжать или что-то в этом роде и система как-нибудь показала только те объекты, которые изменены. Может штатное средство есть. Я не нашёл. Не хочется садится за программирование. А очень нужно. |
|
22.01.2008, 13:15 | #2 |
Участник
|
Попробуйте загрузить проект в USP, а затем создать новый проект, используя сравнение слоев, корый будет содержать только измененнные в USP объекты
|
|
22.01.2008, 13:20 | #3 |
Участник
|
|
|
22.01.2008, 13:26 | #4 |
Moderator
|
Есть такая разработка.
http://www.systomatics.com/Projects/...cts/proj13.htm
__________________
Андрей. |
|
|
За это сообщение автора поблагодарили: zemlyn (2), Logger (2), gl00mie (5), miklenew (2), alex55 (1), zZ_TOP_Zz (1). |
22.01.2008, 16:19 | #5 |
Участник
|
Спасибо. То что доктор прописал.
Правда она щас у меня то виснет, то не виснет. Не пойму из-за объёма или из-за определённых объектов. Методом научного тыка. Найду проблему отпишусь. |
|
12.08.2009, 15:00 | #6 |
Moderator
|
Цитата:
Сообщение от Dron AKA andy
Есть такая разработка.
http://www.systomatics.com/Projects/...cts/proj13.htm
__________________
Андрей. |
|
12.08.2009, 17:34 | #7 |
Участник
|
Вариант решения.
Писал на коленке на 3.0, перевел на 4.0
\Classes\SysImportElements\compareNodes X++: private boolean compareNodes(FormTreeControl _formTreeControl, FormTreeItem _formTreeItem) { TreeNode treeNodeAOT; TreeNode treeNodeImport = NULL; int exportId; int flag = (#impGetCompareNode + #impKeepIds); boolean ret; ; if (_formTreeItem && _formTreeItem.stateBold()) { select firstonly tmpImportAot where tmpImportAot.TreeNodePath == _formTreeItem.data(); if (tmpImportAot) { treeNodeAOT = infolog.findNode(tmpImportAot.TreeNodePath); if (treeNodeAot) { ret = true; exportId = infolog.startImport(filename, flag); treeNodeImport = infolog.getImportedNode( exportId, tmpImportAot.UtilFileType, tmpImportAot.UtilElementType, tmpImportAot.treeNodeName, tmpImportAot.FilePos, flag); ret = SysCompare::silentCompare(SysTreeNode::newTreenode(treeNodeAOT), SysTreeNode::newTreenode(treeNodeImport)); infolog.endImport(exportId, 1); } } } return ret; } X++: public void markDifferentObjects(FormTreeControl _ftc) { int idx; FormTreeControl t = _ftc; FormTreeItem i; TreeItemIdx treeItemIdx; boolean checked, res; ; i = t.getItem(t.getRoot()); SysFormTreeControl::expandTree(t, i.idx()); while (i) { // KDV анализируем только конечные узлы дерева (листы - объекты АОТ): if (! strFind(i.data(), '\\', strLen(i.data()), -1)) { // KDV сравниваем последний слой в АОТ и слой XPO: res = this.compareNodes(t, i); if (res) SysFormTreeControl::deselectedTreeItem_checkBox(t, i.idx()); else SysFormTreeControl::selectedTreeItem_checkBox(t, i.idx()); while select forUpdate firstonly tmpImportAot where tmpImportAot.TreeNodePath == i.data() { tmpImportAot.Import = ! res; tmpImportAot.update(); } } else SysFormTreeControl::deselectedTreeItem_checkBox(t, i.idx()); i = t.getItem(t.getNextVisible(i.idx())); } } X++: void markDifferentObjects()
{
;
sysImportElements.markDifferentObjects(AOTtree);
tmpImportLabel_ds.executeQuery();
} \Forms\SysImportDialog\Designs\Design\[Group:BottomGrp]\[ButtonGroup:ButtonGroup]\Button:MarkDifferentObjects\Methods\clicked X++: void clicked()
{
element.markDifferentObjects();
} |
|
|
За это сообщение автора поблагодарили: Dron AKA andy (4), Small Den (1), Logger (5), leva (1), (1). |
17.08.2009, 16:11 | #8 |
Участник
|
|
|
22.01.2008, 17:08 | #9 |
Moderator
|
Да, у меня на объемных проектах тоже подвисает...
Может быть, не хватает ресурсов компа.
__________________
Андрей. |
|
22.01.2008, 17:28 | #10 |
Участник
|
А подскажите, после нажатия на кнопку Keep Diffrence открывается много формочек Сравнение.
Дальше неизмененённые объекты из дерева пропадают. А формочки Сравнение так и должны (все!) остаться открытыми? |
|
22.01.2008, 17:37 | #11 |
Moderator
|
У меня никаких формочек не открывается. АХ 3.0SP3 CU1.
__________________
Андрей. |
|
22.01.2008, 19:41 | #12 |
NavAx
|
В аксапте есть ссылка на интересный продукт, очень удобно, даже для очень больших проектов.
http://www.araxis.com/ |
|
|
За это сообщение автора поблагодарили: Logger (2), Aleksey_M (2). |
13.08.2009, 18:57 | #13 |
Moderator
|
Доработал вариант Denicce под себя: нужно, чтобы неизмененные объекты удалялись из дерева, а оставались только содержащие изменения.
Соответственно, вместо \Classes\SysImportElements\markDifferentObjects предлагается \Classes\SysImportElements\deleteEqualObjects: X++: public void deleteEqualObjects(FormTreeControl _ftc) { FormTreeControl treeControl = _ftc; FormTreeItem treeItem; Set itemIdxSet = new Set(Types::Integer); void deleteNodeWithEmptyParents(FormTreeItem _treeItem) { TreeItemIdx idx; TreeItemIdx childIdx; int i; boolean parentIsEmpty; if (_treeItem) { idx = _treeItem.idx(); itemIdxSet.add(idx); while select forUpdate firstonly tmpImportAot where tmpImportAot.TreeNodePath == _treeItem.data() { tmpImportAot.Import = false; tmpImportAot.update(); } parentIsEmpty = true; childIdx = treeControl.getChild(treeControl.getParent(idx)); while (childIdx) { if (!itemIdxSet.in(childIdx)) { parentIsEmpty = false; break; } childIdx = treeControl.getNextSibling(childIdx); } if (parentIsEmpty) deleteNodeWithEmptyParents(treeControl.getItem(treeControl.getParent(idx))); } } itemIdxSet = new Set(Types::Integer); treeItem = treeControl.getItem(treeControl.getRoot()); if (treeItem) { SysFormTreeControl::expandTree(treeControl, treeItem.idx()); while (treeItem) { // KDV анализируем только конечные узлы дерева (листы - объекты АОТ): if (! strFind(treeItem.data(), '\\', strLen(treeItem.data()), -1)) { // KDV сравниваем последний слой в АОТ и слой XPO: if (this.compareNodes(treeControl, treeItem)) deleteNodeWithEmptyParents(treeItem); } treeItem = treeControl.getItem(treeControl.getNextVisible(treeItem.idx())); } SysFormTreeControl::deleteTreeItem(treeControl, itemIdxSet); } }
__________________
Андрей. Последний раз редактировалось Dron AKA andy; 25.08.2009 в 12:14. |
|
|
За это сообщение автора поблагодарили: Small Den (1), Denicce (1), gl00mie (3), (1). |
14.08.2009, 10:28 | #14 |
Участник
|
а compareNodes_NV это мой compareNodes?
|
|
24.08.2009, 18:09 | #15 |
Участник
|
Цитата:
Сообщение от Dron AKA andy
нужно, чтобы неизмененные объекты удалялись из дерева, а оставались только содержащие изменения. Соответственно, вместо \Classes\SysImportElements\markDifferentObjects предлагается \Classes\SysImportElements\deleteEqualObjects:
X++: void deleteNodeWithEmptyParents(FormTreeItem _treeItem) { TreeItemIdx idx = _treeItem.idx(); TreeItemIdx childIdx; int i; boolean parentIsEmpty; // ... if (parentIsEmpty) deleteNodeWithEmptyParents(treeControl.getItem(treeControl.getParent(idx))); } |
|
14.08.2009, 11:25 | #16 |
Moderator
|
Да
Исправил в своем сообщении.
__________________
Андрей. |
|
17.08.2009, 13:12 | #17 |
Гость
|
Полезная штука! Выложите пожалуйста в виде .XPO
Кстати, на 2009 будет работать? |
|
17.08.2009, 14:39 | #18 |
Участник
|
В таком виде легче себе перенести, благо не так много изменений. Плюс не затрагиваются ваши изменения указанных объектов.
Думаю, на девятке тоже работать будет, но я не проверял. |
|
17.08.2009, 17:17 | #19 |
Гость
|
Потестил - вобщем работает с существенными ограничениями...
Если класс выгружен только с измененного слоя - неверно отмечает, что он изменен. Если таблица выгружена только с измененного слоя - валится в throw error 'InventQualityOrderTable' does not have property 'ConfigurationKey'. Если класс выгружен полностью и нажать на метод от Dron AKA andy выпадает в стек трейс (оригинальный метод отрабатывает корректно) |
|
18.08.2009, 10:48 | #20 |
Участник
|
Вариант для 3.0.
\Classes\SysImportElements\compareNodes X++: private boolean compareNodes(FormTreeControl _formTreeControl, FormTreeItem _formTreeItem) { TreeNode treeNodeAOT; TreeNode treeNodeImport = NULL; int exportId; int flag = (#impGetCompareNode + #impKeepIds); boolean ret; ; if (_formTreeItem && _formTreeItem.stateBold()) { select firstonly tmpImportAot where tmpImportAot.TreeNodePath == _formTreeItem.data(); if (tmpImportAot) { treeNodeAOT = infolog.findNode(tmpImportAot.TreeNodePath); if (treeNodeAot) { ret = true; exportId = infolog.startImport(filename, flag); treeNodeImport = infolog.getImportedNode( exportId, tmpImportAot.UtilFileType, tmpImportAot.UtilElementType, tmpImportAot.treeNodeName, tmpImportAot.FilePos, flag); ret = new SysCompare(true).compareTreenodes(treeNodeAOT, treeNodeImport); infolog.endImport(exportId, 1); } } } return ret; } |
|
|
За это сообщение автора поблагодарили: olesh (1), gl00mie (5). |
Теги |
araxis, ax2009, ax3.0, ax4.0, xpo, документация, законченный пример, импорт, инструменты, полезное, разработка, сравнение, сравнение систем, сравнение слоев |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|