12.07.2009, 13:26 | #1 |
Участник
|
BinData oбработка исключений / catch exception, AX 4
Добрый день,
Есть код: X++: BinData tmpBinData = new BinData(); str text; ; tmpBinData.setAsciiData(text); Error:Invalid character in ASCII string. All characters must be >= 0 and <= 255. Ошибку надо поймать, и вместо неё отобразить нужную для пользователя информацию. X++: try { tmpBinData.setAsciiData(text); } catch { throw error(""); } Второй параметр _codePage = 65001 к setAsciiData() не подходит, так как ошибка должна быть. Единственное что пока придумал, сделать так: X++: TextBuffer tb = new TextBuffer(); int i; int charIntValue; char char; ; tb.appendText(text); for(i=0; i< tb.size(); i++) { char = tb.subStr(i, 1); charIntValue = System.Convert::ToInt16(System.Convert::ToChar(char)); if(charIntValue < 0 || charIntValue > 255) throw error(""); } tmpBinData.setAsciiData(text): Вопрос такой, можно ли как то отловить это исключение, в момент его появления используя try/catch. Или может возможно решить эту проблему менее громоздким способом. |
|
12.07.2009, 17:28 | #2 |
Участник
|
Здравствуйте.
Скажите, а откуда вы получаете text? Если вы рассчитываете, что в этой переменной все символы из 1252 (8-ми битные), то может стоит лучше контролировать сам ввод информации. Если все таки не выходит, попробуйте использовать классы .NET System.Encoding - вроде там есть средства контроля символов в строке.
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
|
За это сообщение автора поблагодарили: rDenis (1). |
12.07.2009, 17:50 | #3 |
Участник
|
Эта проверка стоит в в варианте класса PDFViewer метод appendTextToPage(). То есть приходится работать с тем, что подается при генерации pdf.
Спасибо за наводку на System.Encoding , я уже бегло просмотрел что там есть, сейчас попробую углубиться. |
|
12.07.2009, 23:24 | #4 |
Участник
|
Через for медленно идет . Сделал так:
X++: BinData tmpBinData = new BinData(); System.Text.Encoding e = System.Text.Encoding::GetEncoding(1252, new System.Text.EncoderExceptionFallback(), new System.Text.DecoderExceptionFallback()); Binary bi; ; try { bi = e.GetBytes(text); } catch(Exception::CLRError) { throw error(""); } tmpBinData.setAsciiData(text); plumbum спасибо за направление поиска |
|
13.07.2009, 14:07 | #5 |
Участник
|
Ага, не за что
я ж даже namespace не тот указал
__________________
http://www.axdevposts.blogspot.com Пришел, уведел.... отойди, дай другому увидеть! |
|
Теги |
ax4.0, try/catch, исключения |
|
|