powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Открыть документ на определенной странице
3 сообщений из 3, страница 1 из 1
Открыть документ на определенной странице
    #36015417
AlexProOra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу запрос вида "Иванов Сергей Сергеевич", отбираю документы содержащие данный текст.
После открытия документа видим первую страницу, хочется автоматически показать ту страницу в которой этот текст встречается (а не перелистывать или использовать встроенный поисковик).
Документы могут быть: word, excel.

P.S. если еще и подсветить поисковую фразу, готов поставить пиво в Москве.
С Уважением,
Алексей.
...
Рейтинг: 0 / 0
Открыть документ на определенной странице
    #36016259
AlexProOra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ух, сам с собой это уже модно... :)

1. проанализировал возможности поисковиков, в google и yandex набрал "CTX_DOC.FILTER" при переходе на страницу документации оракла, всегда отображается начало страницы, далее Ctrl+F вводим "CTX_DOC.FILTER" находим место в тексте. Нда, опыт монстров поиска ничего положительного не дал.

2. используя "CTX_DOC.FILTER" конвертирую документы word, excel в HTML, потом показываю их в Textarea из получившегося CLOB (дальше думал используя jScript в Textarea подсветить поисковые фразы + установить на них фокус) но опять грабли - Textarea не может отображать больше 32000 символов, а документы у меня по 10-300 страниц..
(причем если поместить в Textarea большой CLOB сразу получаем 404 ошибку).

3. видимо придется выводить содержимое CLOB в цикле через htp.prn()

P.S. как дальше жить? :((
...
Рейтинг: 0 / 0
Открыть документ на определенной странице
    #36037303
MegaPortalDeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Любит народ маяться.

Используйте ctx_doc.markup, он и подсвечивает и позволяет переходить между встреченными поисковыми фразами.
Небольшой пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
procedure markup_archive_document(
  p_masterthingid in number,
  p_thingid in number,
  p_siteid in number,
  p_language in varchar2 default portal.wwsbr_global.browserlanguage,
  p_text_query in varchar2
 ) IS
  l_clob clob;
  l_amt number :=  4000 ;
  l_pos number :=  1 ;
  l_size number;
  l_buf varchar2( 32000 );
  -- переменные для представления первичного ключа
  -- для таблицы wwdoc_document$
  l_subscriber constant wwv_docinfo.subscriber_id%type :=  1 ;
  l_name wwv_docinfo.name%type;
  l_textkey varchar2( 1024 );
 BEGIN
  -- получим ключ для таблицы wwdoc_document$
  l_name := get_filename(
   p_masterthingid => p_masterthingid,
   p_thingid => p_thingid,
   p_siteid => p_siteid,
   p_language => p_language);
  -- проверим, имеет ли текущий пользователь права
  -- на просмотр этого документа
  if not check_rights(
   p_masterthingid => p_masterthingid,
   p_thingid => p_thingid,
   p_siteid => p_siteid,
   p_language => p_language
            ) then
   raise SECURITY_EXCEPTION;
  end if;
   -- преобразуем ключ в строковое представление
  l_textkey := ctx_doc.pkencode(l_subscriber, l_name);
  
   ctx_doc.markup(index_name => 'WWSBR_DOC_CTX_INDX',
                 textkey => l_textkey,
                 restab => l_clob,
                 text_query => p_text_query,
                 tagset => 'HTML_NAVIGATE');
 
  l_size := dbms_lob.getlength(l_clob);
  l_pos :=  1 ;
  while l_size >  0  loop
   dbms_lob.read(l_clob, l_amt, l_pos, l_buf);
   l_pos := l_pos + l_amt;
   l_size := l_size - l_amt;
   htp.prn(l_buf);
  end loop;
  dbms_lob.freetemporary(l_clob);
  -- был просмотр документа - отметим это
  wpdoc.wwv_docaccessdb.adddocaccesshit (p_masterthingid => p_masterthingid,
                                   p_thingid => p_thingid,
                                   p_accesseduser => portal.wwctx_api.get_user,
                                   p_workstation => OWA_UTIL.get_cgi_env('REMOTE_ADDR'));  
  EXCEPTION
   WHEN SECURITY_EXCEPTION THEN
    htp.p('Forbidden!');
   WHEN OTHERS THEN
    htp.p(SQLERRM);
    htp.p(dbms_utility.format_error_backtrace);
 END;

...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Открыть документ на определенной странице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]