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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.11.2008, 09:58   #1  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Здравствуйте!
Имеется функция проверки соответствия XML-файла XSD-схеме.
<div class='CALtop'>C/AL</div><div class='CAL'>

_dom Automation 'Microsoft XML, v6.0'.DOMDocument60
_sch Automation 'Microsoft XML, v6.0'.XMLSchemaCache60

_xml_path Text 250
_type Code 20
_version Code 20
_error_reason Text 1024


//_xsd_path - путь к XSD-файлу
//_xml_path - путь к XML-файлу
//_error_reason - возврат по ссылке текста ошибки


CLEAR(_dom);
CREATE(_dom);
_dom.async := FALSE;
CLEAR(_sch);
CREATE(_sch);
_sch.add(_namespace, _xsd_path);
_dom.schemas := _sch;
_dom.load(_xml_path);
CLEAR(_error_reason);
IF _dom.parseError.errorCode <> 0 THEN
BEGIN
_error_reason := _dom.parseError.reason;
END;
EXIT(_dom.parseError.errorCode);
</div>

На получении описания ошибки в переменную _error_reason вылетает ошибка
---------------------------
Microsoft Business Solutions-Navision
---------------------------
Длина текстовой строки превосходит размер буфера строки.

---------------------------
ОК
---------------------------
т.е. длина строки превышает 1024 символа и на сколько я понимаю в принципе навиженом ничего сделать не получится. Как можно обойти ситуацию и скажем обрезать сообщение до 1024 символов, но без жутких извращений типа написания какой-то внешеней программы через которую навижен будет общаться с Microsoft XML?
Старый 04.11.2008, 20:42   #2  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от grif Посмотреть сообщение
Здравствуйте!
Имеется функция проверки соответствия XML-файла XSD-схеме.

На получении описания ошибки в переменную _error_reason вылетает ошибка
---------------------------
Microsoft Business Solutions-Navision
---------------------------
Длина текстовой строки превосходит размер буфера строки.

---------------------------
ОК
---------------------------
т.е. длина строки превышает 1024 символа и на сколько я понимаю в принципе навиженом ничего сделать не получится. Как можно обойти ситуацию и скажем обрезать сообщение до 1024 символов, но без жутких извращений типа написания какой-то внешеней программы через которую навижен будет общаться с Microsoft XML?
Если просто обрезать, то MAXSTRLEN, иначе в циклической процедуре найти последнее вхождение тега, который закрыт (вроде легко, но пока не соображу как) и остальное обрезать. Если есть SQL. то можно поытаться разпарсить, а потом передать в НАВ.
Старый 05.11.2008, 08:58   #3  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
функции обрезания строки вызывают ту же ошибку
Старый 05.11.2008, 09:37   #4  
online
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Попробуйте вместо

_error_reason := _dom.parseError.reason;

Использовать

_BigText.addtext(_dom.parseError.reason);
_BigText.GETSUBTEXT(_error_reason,1,1024);
Старый 05.11.2008, 10:38   #5  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от grif Посмотреть сообщение
функции обрезания строки вызывают ту же ошибку
Не понял. А как Вы её используете?? Почему она выдает ошибку, если у Вас есть строка _error_reason, а MAXSTRLEN определит просто её длину строки в 1024. А совместно с функцией COPYSTR Вы просто скопируете строку нужной длины.
Старый 05.11.2008, 10:49   #6  
grif is offline
grif
Участник
Аватар для grif
 
236 / 10 (1) +
Регистрация: 31.08.2006
Цитата:
Сообщение от apanko Посмотреть сообщение
Попробуйте вместо

_error_reason := _dom.parseError.reason;

Использовать

_BigText.addtext(_dom.parseError.reason);
_BigText.GETSUBTEXT(_error_reason,1,1024);
к сожалению так тоже не работает, но вариант интересный

Цитата:
Сообщение от RedFox Посмотреть сообщение
Не понял. А как Вы её используете?? Почему она выдает ошибку, если у Вас есть строка _error_reason, а MAXSTRLEN определит просто её длину строки в 1024. А совместно с функцией COPYSTR Вы просто скопируете строку нужной длины.
ну так я и использовал COPYSTR. Видимо ожидается что в неё передастся строка не более 1024 символов
Старый 05.11.2008, 18:06   #7  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от grif Посмотреть сообщение
ну так я и использовал COPYSTR. Видимо ожидается что в неё передастся строка не более 1024 символов
Стоп.. вспомнил, что есть проблемы с длиной строки переменной в версиях до 5.0 (точнее создать её можно без проблем, а вот работать с ними не получается из-за "проблемы в движке"). Ссылку дать не могу - не помню точно где слышал.
Попробуйте сократить размер до 250 и поссмотреть результат. Если что - бейте на 4 строки и ...
 


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

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

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