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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.01.2007, 10:35   #1  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Thumbs down Специальные символы в метках
Вопрос в следующем - если в Info вывести текст "\t Шла маша \n по шоссе" то все работает, а если этот текст запихнуть в метку - то он оборзиться как есть "\t Шла маша \n по шоссе".
PS причем метки со специальными символами найдены даже в sys слое и они так же не работают
Старый 19.01.2007, 11:33   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Причина проста: при выводе в infolog (да и вообще при использовании в коде) спецсимволы заменяются на их настоящие значения при компиляции (строка будет выглядетя на самом деле так 0x09" Шла маша "0x13" по шоссе").
При вводе значений меток в основном используется интерфейс пользователя. Данные, введенные через него будут восприниматься как есть без замен, т.е. строка так и останется в этом виде: "\t Шла маша \n по шоссе".

Как пример - программное создание метки
X++:
Label    lab = new Label();
str s;
;
SetPrefix("Метка с переносами");
s = "\t Шла маша \n по шоссе";
lab.insert(s);
info(lab.extractString(lab.searchFirst(s)));
__________________
Axapta v.3.0 sp5 kr2
Старый 19.01.2007, 12:14   #3  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Хм, спасибо но кажется нам не подойдет - нужно ж на разных языках выводить
Старый 19.01.2007, 13:20   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Можно ввести через интерфейс, а затем изменить программно
X++:
Label    lab;
str s;
str lang;
int i;
str literal = literalstr("@USR1");
str old
;
SetPrefix("Замена спецсимволов");
for (i=1;i<=xLanguage::languageCount();i++)
{
    lang = xLanguage::index2languageID(i);
    if (lang)
    {
        lab = new Label(lang);
        old = lab.extractString(literal);
        if (old != literal)
        {
            s = strReplace(old, @"\t", "\t");
            s = strReplace(s, @"\n", "\n");
            s = strReplace(s, @"\r", "\r");
            if (s != old)
                lab.modify(literal, s);
            info(literal + "::" + lab.extractString(literal));
        }
    }
}
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: MironovI (2).
Старый 19.01.2007, 16:19   #5  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Сообщение от AndyD Посмотреть сообщение
Можно ввести через интерфейс, а затем изменить программно
Респект и уважуха, я в эту сторону копал, но до такого все равно не допер
Старый 19.01.2007, 22:20   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
а затем изменить программно
Не надо программно!

Есть функции для работы с многострочными метками...
Эх, Аксапту в офисе оставил, не могу проверить.

В общем, посмотрите как метки выводятся в мастерах.
Там есть длинные тексты с переводом строк.
__________________
полезное на axForum, github, vk, coub.
Старый 19.01.2007, 15:22   #7  
e@gle is offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Регистрация: 11.04.2005
Адрес: Минск
А почему бы не использовать strFmt, а сообщение разделить на 2 части?
info(strFmt("\t %1 \n %2", "шла маша", "по шоссе"))
а простые строки легко преобразуются в метку.
Старый 19.01.2007, 16:13   #8  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Цитата:
Сообщение от e@gle Посмотреть сообщение
А почему бы не использовать strFmt, а сообщение разделить на 2 части?
info(strFmt("\t %1 \n %2", "шла маша", "по шоссе"))
а простые строки легко преобразуются в метку.
По воле случая пришлось таки переводить свои русские метки на аглицкий - представляешь что получиться если перевести отдельно два куска приложения..
Старый 19.01.2007, 22:51   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Для вывода используется StringEdit со свойством MultiLine=yes. Сам текст в контроле набирается конкатенацией нескольких меток. Например (так сделано в мастере отчетов)
X++:
    welcomeText.text("@SYS56067" + ' ' +
                     "@SYS56069" + ' ' +
                     "@SYS68308" + '\n\n' +
                     "@SYS68309" + '\n\n' +
                     "@SYS68310");
А на функции для многострочных меток все-таки хотелось бы взглянуть
__________________
Axapta v.3.0 sp5 kr2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Спец символы в AsciiIO и CommaIO PavelSR DAX: База знаний и проекты 1 04.05.2007 11:30
Oracle(сортировка + символы) Swetik DAX: Администрирование 2 01.07.2005 14:05
Специальные символы Sirius DAX: Программирование 4 25.08.2004 12:44
Символы для шаблона ном. серий и вообще edd DAX: Функционал 1 13.02.2003 15:03

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

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

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