12.08.2008, 18:35 | #1 |
Участник
|
Слетает Enum при замене "живого текста" на метку
Доброго времени суток!
Пусть поле типа enum таблицы содержит в свойстве Label "живой текст". Мне необходимо программно заменить этот текст на соответствующую метку из указанного меточного файла. Что я и делаю с помощью класса TreeNode. Ничего кроме свойства Label не изменяется. Проблема в том, что после этой операции "слетает" свойство EnumType у поля. Аналогичная ситуация наблюдается для форм, с той разницей что у формы это происходит в дизайне. Как это можно объяснить?
__________________
Step by step... |
|
13.08.2008, 00:03 | #2 |
Участник
|
Код как вы это делаете прилагается?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
13.08.2008, 09:52 | #3 |
Участник
|
X++: nodePropStruct = newNode.AOTgetPropertiesExt(); if (nodePropStruct) { propertiesCount = nodePropStruct.value('Entries'); propertyInfoArray = nodePropStruct.value('PropertyInfo'); for (i = 1; i <= propertiesCount; i++) { propertyInfo = propertyInfoArray.value(i); needSaveProp = false; for (j = 1; j <= propertyInfo.fields(); j++) { fieldPropName = propertyInfo.fieldName(j); valueIndexProp = propertyInfo.valueIndex(j); if (j == 1 && valueIndexProp != "Label") break; if (fieldPropName == "value" && propertyInfo.fieldType(j) == Types::String) { valuePropName = any2str(valueIndexProp); labelId = this.prepareToTranslate(valuePropName);//поиск метки if (sysLabelALDAction == GM_SysLabelALDAction::UpdateAction && labelId && SysLabel::isLabelId(labelId) && labelId != valuePropName) { needSave = true; needSaveProp = true; propertyInfo.valueIndex(j, labelId); } } } } if (needSave) { newNode.AOTsetPropertiesExt(nodePropStruct); newNode.AOTSave(); } }
__________________
Step by step... |
|
13.08.2008, 10:09 | #4 |
Участник
|
X++: newNode.AOTsetProperties(setProperty(newNode.AOTgetProperties(), "Label", "@NewLabel"));
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
13.08.2008, 10:54 | #5 |
MCTS
|
Все-таки через структуру добираться до свойств, на мой взгляд, излишне сложно в данном случае. Как правильно заметил Alex_KD, будет красивее и проще так:
X++: newNode.AOTsetProperty("Label", this.prepareToTranslate(newNode.AOTgetProperty("Label"))); newNode.AOTparent().AOTparent().AOTsave(); Последний раз редактировалось altap; 13.08.2008 в 10:58. |
|
13.08.2008, 11:19 | #6 |
Участник
|
Стойте, при таком решении все метки у полей таблицы будут содержать одно и то же значение. Разве нет?
Структура используется как раз для того, чтобы для каждого поля подставить соответствующую ему метку. Или я чего-то не понимаю?
__________________
Step by step... |
|
13.08.2008, 11:47 | #7 |
MCTS
|
Тут предполагается, что в newNode будут перебираться поля таблиц(ы), и соответственно будет меняться свойство "Label" каждого поля.
Метод AOTgetPropertiesExt возвращает структуру, содержащую массив свойств одной ноды АОТ-а. В массиве будет только одна структура с именем "Label", которую собственно нам и надо менять. можно конечно перебирать весь массив и искать все элементы массива со значением элемента структуры "name" равным "Label", но такое свойство будет только одно, так что перебор всего массива теряет смысл |
|
13.08.2008, 13:34 | #8 |
Участник
|
altap, вы правы. Тем не менее, делаю как вы сказали и свойство enumType все равно слетает
__________________
Step by step... |
|
13.08.2008, 14:06 | #9 |
Участник
|
А прописанный там енум вообще существует?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
13.08.2008, 14:11 | #10 |
Боец
|
Вот, проверил - все корректно работает, ничего не слетает
|
|
13.08.2008, 14:18 | #11 |
MCTS
|
Странно, что слетает, а можно увидеть код?
|
|
13.08.2008, 14:43 | #12 |
Участник
|
Цитата:
А прописанный там енум вообще существует?
Цитата:
Вот, проверил - все корректно работает, ничего не слетает
Цитата:
Странно, что слетает, а можно увидеть код?
__________________
Step by step... |
|
13.08.2008, 15:06 | #13 |
Боец
|
Насколько я понимаю, вы пишите нейкий инструмент для автоформирования меток? Я бы посоветовал использовать для этих целей стандартный класс SysBPCheck. Он отлавливает ВСЕ места ВСЕХ элементов где используется текст вместо меток. Наследоваться от него, переопределить методы checkHelpBasics(), checkLabelBasics(). Там вам будет доступен конкретный TreeNode элемента с отсутствующей лейбл, а также позиция в коде(если текст вбит где-то в коде). Но необходимо также учитывать, что методы checkHelpBasics и checkLabelBasics сработают только если в натройках BP стоят галочки на проверку меток.
|
|
13.08.2008, 15:34 | #14 |
Участник
|
Спасибо за совет DSPIC
__________________
Step by step... |
|