Здраствуйте,
Никак немогу решить експорт в хмл . Дело в том что надо заполнить <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-ей Аксаптой ? Как решать ето ?
Заранее спасибо ! С уважением, Римантас