Писал на коленке на 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;
}
\Classes\SysImportElements\markDifferentObjects
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()));
}
}
\Forms\SysImportDialog\Methods\markDifferentObjects
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();
}
минус - перед нажатием на кнопку нужно включить "Отобразить подробости". Да не особо шустро работает...