Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Web Ирбис и Z-Ирбис :  ИРБИС Irbis
 
НОВАЯ ОШИБКА В ИНТЕРПРЕТАТОРЕ ЯЗЫКА ФОРМАТИРОВАНИЯ
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 24, March, 2006 02:15

ЧАСТЬ 1
В последнее время я начал получать письма с просьбами о помощи в борьбе с ошибками WEB IRBIS. В одном из них говорилось о том, что при просмотре библиографических описаний в новом ГОСТе читателей сильно сбивает гиперссылка РЕЦЕНЗИЯ \ РЕФЕРАТ. Она появляется даже в том случае если никакой рецензии или реферата на издание нет, и при щелчке на ней возникает ошибка. Поскольку я временно отказался от использования нового ГОСТА, так как он сильно задерживает вывод, этой проблемой мне заниматься не приходилось.

Естественно, первая мысль которая пришла в голову, что дело в очередной ошибке формата. Я просмотрел код файла Oprimdw.pft и оказалось, что он действительно содержит синтаксическую ошибку(Format Error 99), но условие вывода гиперссылки вполне корректно.

if val(&unifor('J,I470='v903))>0 then '<br><A HREF="', ssinternet2 ,&unifor('+3E',v903),'">Есть рецензия / реферат</A>' fi,

Несколько месяцев назад, в старой версии, была выявлена грубая ошибка, возникавшая при интерпретации функции F(). (http://irbis.gpntb.ru/read.php?f=21&i=854&t=854). Сейчас аналогичная ситуация повторяется с функцией VAL и(или) логическими операторами.

&unifor('J,I470='v903) - не возвращает ничего.
f(val(&unifor('J,I470='v903)), 0, 0) - не возвращает ничего.
val(&unifor('J,I470='v903))>0 возвращает TRUE. Фактически, TRUE возвращает val(‘’)>0 ! ! !

(исправить это можно, написав val(&unifor('J,I470='v903))<>’’ или val(&unifor('J,I470='v903))>=1)

Примечательно, что эта ошибка, проявлявшаяся ВО ВСЕХ выводимых описаниях не была «замечена» и устранена. Из дальнейшего анализа этого формата следует, что разработчиками вообще ни разу не была протестирована его работоспособность.



Отправка отредактированного (24-03-06 02:32)

Re: НОВАЯ ОШИБКА В ИНТЕРПРЕТАТОРЕ ЯЗЫКА ФОРМАТИРОВАНИЯ
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 24, March, 2006 02:16

ЧАСТЬ 2 - ошибки формата
Даже после успешного формирования, гиперссылка оказывается неработоспособной.

1. Функция &unifor('+3E',v903) возвращает шифр в кодировке URI, в то время, как по умолчанию WEB настроен на передачу гиперссылок в кодировке UTF8. Следовательно, необходимо ещё и добавить функцию перекодировки в UTF8. &unifor('+3E',&unifor('+3U'v903))

2. При подаче запроса в неправильной кодировке начались сбои на сервере. Команды прекращают обрабатываться и начинают выводится на страницу в неизменном виде

> Общее количество найденных документов : <--TOTALRECS-->
> Показаны документы с <--BEGINRECS--> по <--ENDRECS-->



Продолжение следует. . . .

PS
Уважаемые коллеги, я непременно отвечу вам по почте, но в том случае, но если ответ на каждый вопрос будет сопряжен со вскрытием подобных ошибок, мне потребуется некоторое время.



Отправка отредактированного (27-03-06 01:07)

Re: НОВАЯ ОШИБКА В ИНТЕРПРЕТАТОРЕ ЯЗЫКА ФОРМАТИРОВАНИЯ
Пользователь: Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 27, March, 2006 01:07

3. В формате ssinternet2.pft однозначно заданы параметры показа, которые в нормальной ситуации должны определяться пользователем.

'/Scripts/irbis64r/cgiirbis_64.dll?Z21ID=',&unifor('Av2225#1'),
'&I21DBN=',&unifor('Av2221#1'),
'&P21DBN=',&unifor('Av33311#1'),
'&S21STN=1&S21REF=10&S21CNR=20',
'&S21FMT=fullw&C21COM=S&S21CNR=20&S21P001=0&S21P02=0&S21P03=I470=&S21STR='

Кроме этого:
S21CNR дважды дублируется
S21P01 записан как S21P001
3331(P21DBN) поле записано как 33311


В норме это должно выглядеть хотя бы так:
'/cgi-bin/irbis32r/cgiirbis_32.exe?Z21ID=',&unifor('Av2225#1'),
'&I21DBN=',&unifor('Av2221#1'),
'&P21DBN=',&unifor('Av3331#1'),
'&S21REF=',&unifor('Av1010#1'),
'&S21FMT=',&unifor('Av1009#1'),
'&S21CNR=',&unifor('Av2224#1'),
'&S21STN=1&C21COM=S&S21P01=0&S21P02=0&S21P03=I470=&S21STR='



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.