|
21.11.2008, 16:32 | #1 |
Участник
|
SysTreeNodeCompareContext
Доброго времени суток.
Коллеги, у кого имеется под рукой AX2009, выложите please проект с классом SysTreeNodeCompareContext (если таковой присутствует в AX2009). Последний раз редактировалось petergunn; 21.11.2008 в 17:45. |
|
24.11.2008, 14:33 | #2 |
Участник
|
Сравнение объектов на слоях. SysCompare. DAX 4.0
Dynamics Ax 4.0 SP2 (application version: 4.0.2501.122 )
Доброго времени суток. Занимался на днях адаптацией решения axaptapedia: SysCompare class по сравнению 2 верхних слоев для Dynamics Ax 4.0. Функционал по заполнению comboBox'ов списком сравниваемых слоев вынесен теперь на метод SysCompare\initContext(): X++: protected void initContext(SysCompareContextProvider _context) { ... 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); ... } X++: protected void setCombo( FormComboBoxControl combo, List list, Map map, str defaultItem ) X++: ...
if (comparable.comparableName() == defaultItem)
sel = i;
...
combo.setDropSize(list.elements()+1);
combo.selection(sel);
... Смотрим код используемого метода SysTreeNodeCompareContext\comparableItemDefault(): X++: public str comparableItemDefault(SysCompareType _type) { switch (_type) { case SysCompareType::Text1: return default1; case SysCompareType::Text2: return default2; } return ''; } Бага в коде? Или эта 'фича' так и задумывалась для инициализации на наследниках класса? - хотелось бы взглянуть на реализацию этого класса (и его наследников) в DAX2009. |
|
24.11.2008, 15:57 | #3 |
Участник
|
Итого
По результатам первичного переноса решения из 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; } 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; } 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; } 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; } С другой стороны при импорте из 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 |
|
25.11.2008, 09:41 | #4 |
Участник
|
Если еще актуально
Class_SysTreenodeCompareContext.xpo |
|
|
За это сообщение автора поблагодарили: petergunn (1). |
25.11.2008, 11:06 | #5 |
Программатор
|
Цитата:
Сообщение от player
Если еще актуально
Вложение 3986 |
|
26.11.2008, 07:01 | #6 |
Участник
|
Это из AX2009
(petergunn: "Коллеги, у кого имеется под рукой AX2009, выложите please проект с классом SysTreeNodeCompareContext") |
|