Войти
 
 
   
 
  
Новости Notes.ру Библиотека Биржа труда Вопрос - ответ Форум Регистрация Поиск О проекте
Разделы
О Notes
Советы
Шаблоны и примеры
Литература
Презентации
 
Всё о задаче AdminP. Часть вторая   Во второй части мы завершаем рассмотрение AdminP. В ней рассмотрены запросы междоменного администрирования и способы управления функциями AdminP с помощью настроек документа сервера, команд консоли сервера, файла Notes.ini и интервалов очистки базы данных. В этой статье предполагается, что вы опытный администратор Domino и прочитали первую часть
О Notes Читать статью
 
Всё о задаче AdminP. Proxy-действия в R5 и Domino 6   Приложение к статье об административном процессе
О Notes Читать статью
 
Всё о задаче AdminP. Часть первая   Перевод классической статьи 2003-его года о задаче административного процесса (AdminP). Очень полезна для понимания работы механизма этой задачи. В первой части статьи описаны компоненты задачи AdminP, как они работают, и как их использование помогает сделать работу администратора Domino проще. Задача AdminP (сакращённо от Administration Process, Административный процесс) работает с базой административных запросов (Administration Requests, admin4.nsf)
О Notes Читать статью
 


Советы

Главная   Библиотека   Советы

Постраничная навигация по представлению в Web


Николай Норкин, CLP R5
Вятские Информационные Технологии
nickanor@mail.ru

Стандартные средства организации навигации по представлению для web-интерфейса предусматривают применение @-формул @DbCommand("Domino"; "ViewNextPage") и @DbCommand("Domino"; "ViewPreviousPage"), что дает возможность "последовательного" доступа к порциям документов: "следующие X" - "предыдущие X".

Для навигации по представлению используются параметры Start= и Count=, передаваемые в URL-запросе на открытие представления ?OpenView:
<протокол>//<хост>/<путь_к_базе>/
<имя_представления>?OpenView&Start=<порядковый_номер_документа>
&Count=<количество_документов>
При опущенном параметре Start представление выводится с начального (первого) документа. Значение Count определяется настройкой Default lines per view page: (Число строк на страницу по умолчанию:) серверного документа (закладка Internet Protocols -> Domino Web Engine). Таким образом, разработчик не имеет возможности контролировать данный параметр для отдельной базы данных. В случае использования встроенного представления(Embedded View) количество выводимых на страницу документов можно указать в свойствах встроенного объекта. Именно по этой причине можно рекомендовать использование встроенного представления, а не размещение в форме поля $$ViewBody.


Настройка количества выводимых на страницу документов во встроенном представлении


Стандартное решение обеспечивает последовательный переход к предыдущей/следующей порции представления


Описываемое решение обеспечивает произвольный доступ ко всем "страницам" представления

Для обработки запроса GET в форме размещается вычисляемое текстовое поле PATH_INFO, одноименное CGI-переменной, со значением PATH_INFO. При открытии браузером страницы представления это поле содержит данные запроса, указанные в URL.
В формуле вычисляемого числового поля Start из строки запроса выделяется подстрока между подстрокой &Start= и следующим символом & (либо концом строки запроса, если последующие параметры пропущены). В случае, если параметр Start отсутствует или не может быть представлен строкой, он принимается равным 1:
a := @Left(@RightBack(PATH_INFO; "&Start=") + "&"; "&");
a1 := @If(a=""; 1; @TextToNumber(a));
@If(@IsError(a1); 1; a1)
Аналогично вычисляется значение поля Count (значение по умолчанию устанавливается равным 30)
a := @Left(@RightBack(PATH_INFO; "&Count=") + "&"; "&");
a1 := @If(a=""; 30; @TextToNumber(a));
@If(@IsError(a1); 30; a1)
Еще один входной параметр - количество документов в представлении. При относительно небольшом количестве (необходимо помнить об ограничении в 32Kб возвращаемой информации для R5) можно использовать функцию @DbColumn с обращением к скрытому столбцу представления. Тогда количество документов, определяемое в вычисляемом числовом поле Total будет определено при применении функции @Elements к результату использования предыдущей функции

Размещение полей в проектируемой базе

Формула вычисляемого текста (вычисляемого текстового поля), определяющего html-код, имеет следующий вид:

REM "Создается избыточный список страниц: с 0 до 999";
ls := "0":"1":"2":"3":"4":"5":"6":"7":"8":"9";
ls1 := @TextToNumber(ls *+ ls *+ ls);
REM "Обрабатывается ситуация, когда для вывода всех документов достаточно одной страницы - Count>=Total";
REM "В качестве результата возвращается пустая строка";
@If(Count>Total; @Return(""); @Success);
REM "Вариант - возвращается строка вида: 1 - <Count> без гиперссылки";
@If(Count>Total; @Return("1 - " + @Text(Count)); @Success);
REM "Получение количества страниц";
a := Total/Count;
a1 := @Integer(a);
REM "Получение числового списка страниц 0 : 1 : 2 : ...";
ls2 := @Subset(ls1; a1);
REM "Получение стартовых и финишных позиций документов страниц";
st := ls2 * Count + 1;
fin := (ls2 + 1) * Count;
REM "Добавление в список последней страницы, которая может содержать меньшее количество документов";
st1 := @If(a1<a; st : ((a1)*Count +1); st);
fin1 := @If(a1<a; fin : Total; fin);
REM "Получение списка заголовков страниц вида '1 - 30' : '31 - 60' : '61 : 77'";
stfin := @Text(st1) + " - " + @Text(fin1);
REM "Формирование списка гипертекстовых ссылок";
out := "<A HREF=\"ViewName!OpenView&Count=" + @Text(Count) + "&Start=" + @Text(st1) + "\">" + stfin + "</A>";
REM "Определение текущей страницы по стартовому параметру";
memb := @Member(@Text(Start); @Text(st1));
REM "Если текущая страница определена";
REM "замена соответствующего элемента списка гиперссылок простым текстом";
curel := @If(memb>0; @Subset(@Subset(out; memb); -1); "");
curelfin := @If(memb>0; @Subset(@Subset(stfin; memb); -1); "");
lst := @Replace(out; curel; curelfin);
REM "Последнее действие - преобразование списка в строку";
@Implode(lst; " . . ")
И последний штрих. Необходимо выполнить для этого текста (текстового поля) действие Текст -> Преобразовать HTML (Pass-thru HTML)


Рис.5. Результат в web-браузере
Читайте также:
Защитите специальные элементы дизайна в web-приложениях (перейти >>>)
 
  Опубликовано — 06/25/2003 |    

Дмитрий, 28.03.2006:
Я тоже проверил, результаты получились подобные... Ну что же, будеи искать :)

Николай Норкин, 28.03.2006:
Мда, проверил... Каждный раз параметр start при использовании команд генерится с учётом защищённых полями Readers документов, т.е. ссылка на следующую страницу получается с учётом прав пользователя: start=30 для того, кто всё видит и start=30+ если пользователь не видит часть документов Тогда так. Применимость приведённого здесь кода ограничивается информацией без разделения доступа. Вместе с тем, предлагаю искать решение проблемы, на которую наступили Спасибо, Дима!

Николай Норкин, 24.03.2006:
Думаю, на выходных я смогу проверить эту странность Правда, на R6.5.3 По идее, ViewNextPage и ViewPreviousPage передают в урле ту же самую ссылку с параметром Start (если отключена генерация js) До понедельника!

Дима, 24.03.2006:
Попытаюсь уточнить. Документов в виде для этого пользователя - 52. Ссылки постраничной навигации разбились на 1-30 и 31-52. С ссылкой 1-30 все понятно, документы отображаются с 1 по 30-ый. Проблема со следующей ссылкой. Вид она имеет такой: "http://URL_TO_HOST/db.nsf/ByName?OpenView&Count=30&Start=31". И при переходе на нее отображаются документы начиная с 7-го и по 36-ой. Странность какая то. Но обращаю внимаение, что когда захожу под пользователем с полным доступом, т.е. он видит все документы в базе, то навигация работает превосходно, например при переходе на страницу 181-199(последняя страница) - отображаются нужные документы. В виде стоит галка "Treat view contents as HTML". Насчет генерируемого домино java-скрипта, если имеется в виду скрипт с "function _doClick(v, o, t)" - то это присутствует но оно имхо никак не мешает работе данного функционала.

Николай Норкин, 24.03.2006:
Дмитрий, добрый день! Можете уточнить: URL запрос имеет в передаваемых параметрах start=31, а показывает, начиная с пятого документа? Можете привести аргументы запроса полностью: нет ли там генерируемого домино java-скрипта?

Дима, 24.03.2006:
Добрый день! Спасибо за решение, отлично работает для плоского вида. Мне понадобилось применить постраничную разбивку для проского вида, в котором находятся документы с ограниченным доступом(с полями типа читатель). Захожу под другим пользователем в вид, перехожу на другую страницу, а мне вместо того чтобы отобразить последних десять документов из 40, показывает с 5-го по 34. Странно как то, может это какая то фича? При этом с параметрами Count и Start - все нормально(Count=30&Start=31). Подозреваю, что если применить ViewNextPage и ViewPreviousPage - то все будет нормально, но как быть с постраничной навигацией тогда? И если залогиниться под пользователем, который видит в виде все документы, то навигация по страницам работает корректно. Вы не пробовали такое ? Тестировалось на Domino6.5.4

Николай Норкин, 09.12.2005:
Саша, привет! Спасибо за команду... Уточни, что имеется в виду под "описанным подходом"? Моё код работает. Или ты про команду?

Александр Чудилин, 09.12.2005:
Еще аспект: описанный подход с категоризированным видом работать не будет.

Александр Чудилин, 09.12.2005:
Смотрим хелп: For Web applications, you can use this function only with the syntax: @DbCommand("Domino";"ViewNextPage") or @DbCommand("Domino";"ViewPreviousPage")
Смотрим почтовый шаблон R6.
Видим: @DbCommand("Domino"; "EndView")
Это ссылка Last Page в виде.
В документации нет ее.



Добавить комментарий
Имя * :
e-mail
Комментарий * :
Код подтверждения * :

Мероприятия
Пресс-релизы
Биржа труда
Последнее на форуме
 
А так же:
Как удалить профиль?
16.04.2016 00:08:51
Скопировать в буфер поле документа
24.05.2015 08:55:52
Импорт DXL-описания документов в Lotus Domino. Одноимённые поля
16.04.2015 16:49:58
 
© LOGOSPHERE.RU