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);
...
}
в методе SysCompare\setCombo()
X++:
protected void setCombo(
FormComboBoxControl combo,
List list,
Map map,
str defaultItem
)
4-ым параметром передается строка на которую Axapta пытается установить позиционирование в заполненном списке значений, если таковая будет в этом списке.
X++:
...
if (comparable.comparableName() == defaultItem)
sel = i;
...
combo.setDropSize(list.elements()+1);
combo.selection(sel);
...
При просмотре кода под отладчиком обнаружилось что этот параметр
defaultItem всегда приходит в функцию пустым ('') - позиционирование combo.selection(sel) отрабатывает как combo.selection(0).
Смотрим код используемого метода SysTreeNodeCompareContext\comparableItemDefault():
X++:
public str comparableItemDefault(SysCompareType _type)
{
switch (_type)
{
case SysCompareType::Text1:
return default1;
case SysCompareType::Text2:
return default2;
}
return '';
}
В классе SysTreeNodeCompareContext объявлены 2 строковые переменные default1 и default2, но при этом, судя по коду, они нигде не инициализируются (кроме метода comparableItemDefault() функциональности использующей эти переменные в классе нет, наследников класса тоже не обнаружил) - в результате функция стабильно возвращает ''.
Бага в коде? Или эта
'фича' так и задумывалась

для инициализации на наследниках класса? - хотелось бы взглянуть на реализацию этого класса (и его наследников) в DAX2009.