AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.08.2008, 18:35   #1  
Breeze is offline
Breeze
Участник
 
19 / 10 (1) +
Регистрация: 01.06.2007
Адрес: Омск
Слетает Enum при замене "живого текста" на метку
Доброго времени суток!

Пусть поле типа enum таблицы содержит в свойстве Label "живой текст". Мне необходимо программно заменить этот текст на соответствующую метку из указанного меточного файла. Что я и делаю с помощью класса TreeNode. Ничего кроме свойства Label не изменяется.

Проблема в том, что после этой операции "слетает" свойство EnumType у поля.
Аналогичная ситуация наблюдается для форм, с той разницей что у формы это происходит в дизайне.

Как это можно объяснить?
__________________
Step by step...
Старый 13.08.2008, 00:03   #2  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Код как вы это делаете прилагается?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 13.08.2008, 09:52   #3  
Breeze is offline
Breeze
Участник
 
19 / 10 (1) +
Регистрация: 01.06.2007
Адрес: Омск
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  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
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  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Все-таки через структуру добираться до свойств, на мой взгляд, излишне сложно в данном случае. Как правильно заметил 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  
Breeze is offline
Breeze
Участник
 
19 / 10 (1) +
Регистрация: 01.06.2007
Адрес: Омск
Стойте, при таком решении все метки у полей таблицы будут содержать одно и то же значение. Разве нет?

Структура используется как раз для того, чтобы для каждого поля подставить соответствующую ему метку.

Или я чего-то не понимаю?
__________________
Step by step...
Старый 13.08.2008, 11:47   #7  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Тут предполагается, что в newNode будут перебираться поля таблиц(ы), и соответственно будет меняться свойство "Label" каждого поля.
Метод AOTgetPropertiesExt возвращает структуру, содержащую массив свойств одной ноды АОТ-а. В массиве будет только одна структура с именем "Label", которую собственно нам и надо менять. можно конечно перебирать весь массив и искать все элементы массива со значением элемента структуры "name" равным "Label", но такое свойство будет только одно, так что перебор всего массива теряет смысл
Старый 13.08.2008, 13:34   #8  
Breeze is offline
Breeze
Участник
 
19 / 10 (1) +
Регистрация: 01.06.2007
Адрес: Омск
altap, вы правы. Тем не менее, делаю как вы сказали и свойство enumType все равно слетает
__________________
Step by step...
Старый 13.08.2008, 14:06   #9  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
А прописанный там енум вообще существует?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 13.08.2008, 14:11   #10  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Вот, проверил - все корректно работает, ничего не слетает
Вложения
Тип файла: xpo PrivateProject_LabelChangeTest.xpo (2.3 Кб, 399 просмотров)
Старый 13.08.2008, 14:18   #11  
altap is offline
altap
MCTS
MCBMSS
 
26 / 18 (1) ++
Регистрация: 28.09.2005
Странно, что слетает, а можно увидеть код?
Старый 13.08.2008, 14:43   #12  
Breeze is offline
Breeze
Участник
 
19 / 10 (1) +
Регистрация: 01.06.2007
Адрес: Омск
Цитата:
А прописанный там енум вообще существует?
Да, енум существует, это NoYes

Цитата:
Вот, проверил - все корректно работает, ничего не слетает
DSPIC, ваш джоб у меня тоже работает. Возможно дело в том, что я ищу и пытаюсь заменить текст во всей таблице? Т.е. в названии таблицы, в свойствах полей, названиях групп и тд

Цитата:
Странно, что слетает, а можно увидеть код?
В общем-то код который выполняется приведен выше
__________________
Step by step...
Старый 13.08.2008, 15:06   #13  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Насколько я понимаю, вы пишите нейкий инструмент для автоформирования меток? Я бы посоветовал использовать для этих целей стандартный класс SysBPCheck. Он отлавливает ВСЕ места ВСЕХ элементов где используется текст вместо меток. Наследоваться от него, переопределить методы checkHelpBasics(), checkLabelBasics(). Там вам будет доступен конкретный TreeNode элемента с отсутствующей лейбл, а также позиция в коде(если текст вбит где-то в коде). Но необходимо также учитывать, что методы checkHelpBasics и checkLabelBasics сработают только если в натройках BP стоят галочки на проверку меток.
Старый 13.08.2008, 15:34   #14  
Breeze is offline
Breeze
Участник
 
19 / 10 (1) +
Регистрация: 01.06.2007
Адрес: Омск
Спасибо за совет DSPIC
__________________
Step by step...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фильтрация в форме "В наличии" по агрегатному полю "Физ. наличие" miaa DAX: Программирование 13 29.08.2006 23:45
Использование "like" при работе с классом "QueryBuildRange" poul DAX: Программирование 18 11.08.2006 12:20
Превышение кол-ва в "немедленная поставка" кол-ва "к поставке" Pegiy DAX: Функционал 16 23.03.2004 20:03
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20
"Пустое" значение Enum в веб-форме LedgerVoucher DAX: Программирование 4 25.07.2002 12:35

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:11.