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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2012, 14:29   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Многоязычность в xml ... Axapta 3.0
Здраствуйте,

Никак немогу решить експорт в хмл . Дело в том что надо заполнить <lt>(литовский), <ru>(руский) и <en>(англиский) разделы . В Аксапте , я ети названия по литовский и по руский - вижу , база дн. Оракл , заданна UTF8 кодировка . Комп ( XP prof ) настроен на литовскую среду ( regional -> advanced ... ) . Делая експорт в хмл , с литоскими названиями все хорошо , но тогда крякообразы появиться в руских названиях . Если поменять ХП кодировки на руские - невижу литовских .
Ещё пробывал и с классой UTF8 :

X++:
Exportfile for AOT version 1.0 or later
Formatversion: 1

***Element: CLS

; Microsoft Business Solutions-Axapta Class: Utf8 krautas Antradienis 2012.10.23
; --------------------------------------------------------------------------------
  CLSVERSION 1
  
  CLASS #Utf8
    PROPERTIES
      Name                #Utf8
      Extends             #
      RunOn               #Called from
    ENDPROPERTIES
    
    METHODS
      Version: 3
      SOURCE #classDeclaration
        #class Utf8
        #{
        #    #define.CP_ACP(0)
        #    #define.CP_UTF8(65001)
        #}
      ENDSOURCE
      SOURCE #Ansi2Utf8
        #static str Ansi2Utf8(str Ansi)
        #{
        #    DLL             _kernelDLL        = new DLL("KERNEL32");
        #    DLLFunction     MultiByteToWideChar  = new DLLFunction(_kernelDLL, "MultiByteToWideChar");
        #    DLLFunction     WideCharToMultiByte  = new DLLFunction(_kernelDLL, "WideCharToMultiByte");
        #    Binary          buf, buf1;
        #    int             len;
        #    str             res;
        #
        #    res = "";
        #    if (Ansi)
        #    {
        #        buf = new Binary(strlen(Ansi));
        #        buf.string(0, Ansi);
        #        buf1 = new Binary( ( strlen(Ansi ) + 1 ) * 2 );
        #        MultiByteToWideChar.returns(ExtTypes::DWord);
        #        MultiByteToWideChar.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
        #                                    ExtTypes::Pointer, ExtTypes::DWord);
        #        if (MultiByteToWideChar.call(#CP_ACP, 0, buf, strlen(Ansi) + 1, buf1, strlen(Ansi) + 1 ))
        #        {
        #            WideCharToMultiByte.returns(ExtTypes::DWord);
        #            WideCharToMultiByte.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
        #                                        ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
        #            len = WideCharToMultiByte.call(#CP_UTF8, 0, buf1, strlen(Ansi) + 1 , buf, 0, 0, 0);
        #
        #            if (len)
        #            {
        #                buf = new Binary(len);
        #                if (WideCharToMultiByte.call(#CP_UTF8, 0, buf1, strlen(Ansi), buf, len - 1, 0, 0))
        #                {
        #                    res = buf.string(0);
        #                }
        #
        #            }
        #        }
        #
        #    }
        #    return res;
        #}
      ENDSOURCE
      SOURCE #Utf2Ansi
        #static str Utf2Ansi(str Utf8)
        #{
        #    DLL             _kernelDLL        = new DLL("KERNEL32");
        #    DLLFunction     MultiByteToWideChar  = new DLLFunction(_kernelDLL, "MultiByteToWideChar");
        #    DLLFunction     WideCharToMultiByte  = new DLLFunction(_kernelDLL, "WideCharToMultiByte");
        #    Binary          buf, buf1;
        #    int             len;
        #    str             res;
        #
        #    res = "";
        #    if (Utf8)
        #    {
        #        buf = new Binary(strlen(Utf8));
        #        buf.string(0, Utf8);
        #        buf1 = new Binary((strlen(Utf8) + 1) * 2);
        #        MultiByteToWideChar.returns(ExtTypes::DWord);
        #        MultiByteToWideChar.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
        #                                    ExtTypes::Pointer, ExtTypes::DWord);
        #        if (MultiByteToWideChar.call(#CP_UTF8, 0, buf, strlen(Utf8) + 1, buf1, strlen(Utf8) + 1))
        #        {
        #            WideCharToMultiByte.returns(ExtTypes::DWord);
        #            WideCharToMultiByte.arg(ExtTypes::DWord, ExtTypes::DWord, ExtTypes::Pointer, ExtTypes::DWord,
        #                                        ExtTypes::Pointer, ExtTypes::DWord, ExtTypes::DWord, ExtTypes::DWord);
        #            len = WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, 0, 0, 0);
        #
        #            if (len)
        #            {
        #                buf = new Binary(len);
        #                if (WideCharToMultiByte.call(#CP_ACP, 0, buf1, strlen(Utf8) + 1, buf, len, 0, 0))
        #                {
        #                    res = buf.string(0);
        #                }
        #
        #            }
        #        }
        #
        #    }
        #    return res;
        #}
      ENDSOURCE
    ENDMETHODS
  ENDCLASS

***Element: END
Но неуспешно ... . Как я понимаю , когда настраиваешь регионал -> адвансед , то тогда поменяеться таблица кодировки - литовская 1257 , руская 1251 . И иметь в переменных в то же самое время - никак неполучаеться ...

Можеть Вы уже столкнулись с такой проблемой раньше , с старой 3-ей Аксаптой ? Как решать ето ?

Заранее спасибо ! С уважением, Римантас
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
XML import . Axapta 3.0 Rimantas DAX: Программирование 2 30.08.2012 09:17
X++: Serializing Axapta Foundation Class instances as XML streams Blog bot DAX Blogs 0 04.06.2009 23:05
Axapta & XML dj_Mage DAX: Программирование 4 11.08.2006 12:42
XML в Axapta axot DAX: Программирование 4 01.11.2002 11:37
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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