Показать сообщение отдельно
Старый 24.11.2008, 15:57   #3  
petergunn is offline
petergunn
Участник
 
118 / 274 (10) ++++++
Регистрация: 30.08.2005
Адрес: Tyumen
Итого
По результатам первичного переноса решения из Ax 3.0 публикую изменения внесенные в функционал Dynamics Ax 4.0 для отображения сравнения по 2-м верхним слоям:

SysCompare\initContext()
X++:
    ...
    this.setCombo(comboBox1,
                  _context.comparableList(SysCompareType::Text1), comparableMap1, _context.comparableItemDefault(SysCompareType::Text1));

    this.setCombo(comboBox2, _context.comparableList(SysCompareType::Text2), comparableMap2, _context.comparableItemDefault(SysCompareType::Text2));

    //comboBox1.selection(0);
    //  --> petergunn, Tools_000003_SysCompareDefaultLayer
    if( comboBox1.valueStr() == comboBox2.valueStr() )  //  если значения box'ов равны - в первом box'е пытаемся взять слой ниже
        comboBox1.selection( max( 0, comboBox1.selection() - 1 ) ) ;
    //  <-- petergunn, Tools_000003_SysCompareDefaultLayer
    ...

SysTreeNodeCompareContext\parmSysTreenode1():
X++:
public SysTreeNode parmSysTreenode1(SysTreeNode _sysTreenode1 = sysTreenode1)
{
    ;
    sysTreenode1 = _sysTreenode1;
    //  --> petergunn, Tools_000003_SysCompareDefaultLayer
    if( !prmisdefault( _sysTreenode1 ) )
        default1 = sysTreenode1 ? sysTreeNode1.comparableName() : '' ;
    //  <-- petergunn, Tools_000003_SysCompareDefaultLayer
    return sysTreenode1;
}
SysTreeNodeCompareContext\parmSysTreenode2():
X++:
public SysTreeNode parmSysTreenode2(SysTreeNode _sysTreenode2 = sysTreenode2)
{
    ;
    sysTreenode2 = _sysTreenode2;
    //  --> petergunn, Tools_000003_SysCompareDefaultLayer
    if( !prmisdefault( _sysTreenode2 ) )
        default2 = sysTreenode2 ? sysTreeNode2.comparableName() : '' ;
    //  <-- petergunn, Tools_000003_SysCompareDefaultLayer
    return sysTreenode2;
}
SysTreeNodeCompareContext\parmTreeNode1():
X++:
public TreeNode parmTreeNode1(TreeNode _treeNode1 = treeNode1)
{
    ;
    treeNode1 = _treeNode1;
    //  --> petergunn, Tools_000003_SysCompareDefaultLayer
    if( !prmisdefault( _treeNode1 ) && !sysTreeNode1 )
        default1 = treeNode1 ? SysTreeNode::newTreenode( treeNode1 ).comparableName() : '' ;
    //  <-- petergunn, Tools_000003_SysCompareDefaultLayer
    return treeNode1;
}
SysTreeNodeCompareContext\parmTreeNode2():
X++:
public TreeNode parmTreeNode2(TreeNode _treenode2 = treenode2)
{
    ;
    treenode2 = _treenode2;
    //  --> petergunn, Tools_000003_SysCompareDefaultLayer
    if( !prmisdefault( _treenode2 ) && !sysTreeNode2 )
        default2 = treeNode2 && treeNode2.applObjectLayerMask() ? SysTreeNode::newTreenode( treeNode2 ).comparableName() : '' ;
    //  <-- petergunn, Tools_000003_SysCompareDefaultLayer
    return treenode2;
}
В реализации метода SysTreeNodeCompareContext\parmTreeNode2() сделано небольшое 'допущение': если treeNode2.applObjectLayerMask() == 0 то в этом случае узел был инициализирован в результате импорта из XPO файла, для него должно бы возвращаться значение SysTreeNodeVirtualXPO::newTreenode( treeNode2 ).comparableName().
С другой стороны при импорте из XPO второй список сравнения содержит 1 значение ( вида '\ObjName (xpo)' ), позиционирование будет установлено на него даже в случае если функция вернет ''.

'Полный' вариант модифицированного метода изначально выглядел так - SysTreeNodeCompareContext\parmTreeNode2():
X++:
public TreeNode parmTreeNode2(TreeNode _treenode2 = treenode2)
{
    ;
    treenode2 = _treenode2;
    //  --> petergunn, Tools_000003_SysCompareDefaultLayer
    if( !prmisdefault( _treenode2 ) && !sysTreeNode2 )
    {
        if( treeNode2 )
            default2 = treeNode2.applObjectLayerMask() ? SysTreeNode::newTreenode( treeNode2 ).comparableName() : SysTreeNodeVirtualXPO::newTreenode( treeNode2 ).comparableName() ;
        else default2 = '' ;
    }	    	
    //  <-- petergunn, Tools_000003_SysCompareDefaultLayer
    return treenode2;
}
Проект с модифицированными классами прилагаю.
P.S. ногами сильно не пинать , проект пока носит характер отладочной версии и содержит 2 варианта модификации класса SysTreeNodeCompareContext - разделены значением макроопределения #debugVersion
Вложения
Тип файла: zip SharedProject_DAX40_SysCompareDefaultLayer.zip (16.7 Кб, 65 просмотров)