Опубликован: 25.09.2009 | Доступ: свободный | Студентов: 911 / 86 | Оценка: 3.72 / 2.78 | Длительность: 10:50:00
Лекция 7:

Работа с отчетами в Oracle Forms

< Лекция 6 || Лекция 7: 12 || Лекция 8 >
Аннотация: В этой лекции слушатель немного ознакомится со средой создания отчетов Oracle Reports, научится запускать отчеты и передавать параметры из приложения в отчет. В лекции будут рассмотрены различные способы запуска отчетов.

Oracle Reports Developer (Построитель отчетов) – это мощное средство для проектирования отчетов в составе среды Oracle Developer. Оно позволяет структурировать и форматировать информацию на основе разных стилей, как из базы данных, так и из файловой системы, а также комбинировать ее с текстом и графикой для представления в отчетах на бумаге и в веб-среде, используя Oracle AS Services. Oracle Reports предполагает создание отчетов, работающих как в архитектуре "клиент-сервер", так и в Web, для построения которых можно использовать Java-апплеты или Java-скрипты. Также вы получаете возможность получения различных типов выходных отчетов в форматах Adobe Acrobat Reader (*.pdf), Microsoft Excel (*.xls), HTML и многих других.

В этой главе мы рассмотрим, как Forms можно связать с построителем отчетов и какие для этого предусмотрены возможности. Между двумя этими продуктами, как, впрочем, и между остальными продуктами Oracle Developer, существует тесная взаимосвязь и гибкий обмен данными. Обмениваясь данными с Reports, вы делаете это аналогично тому, как вы бы это делали, передавая параметры в другую форму. Далее будут рассмотрены темы:

  • Запуск Oracle Reports из Oracle Forms.
  • Передача параметров из Oracle Forms в Oracle Reports.

Запуск Oracle Reports из Oracle Forms

В Oracle Forms в зависимости от версии Reports можно запустить через две различные процедуры:

  • RUN_PRODUCT ;
  • WEB.SHOW_DOCUMENT.

Сначала мы с вами рассмотрим процедуру RUN_PRODUCT, которая предназначена в первую очередь для запуска отчетов из версий Forms 6i и ниже. Эта процедура поддерживается для совместимости и в более поздних версиях Forms. С помощью этой процедуры вы можете запускать отчет, передавать в него параметры и группы записей. Ниже приведен синтаксис этой процедуры, который может быть оформлен в двух вариантах, отличающихся двумя выделенными параметрами.

Синтаксис процедуры RUN_PRODUCT

RUN_PRODUCT (PRODUCT IN NUMBER, DOCUMENT IN VARCHAR2, COMMMODE IN NUMBER, 
            EXECMODE IN NUMBER, LOCATION IN NUMBER, PARAMLIST_ID IN PARAMLIST, 
            DISPLAY IN VARCHAR2);
RUN_PRODUCT (PRODUCT IN NUMBER, DOCUMENT IN VARCHAR2, 
           COMMMODE IN NUMBER, EXECMODE IN NUMBER, 
           LOCATION IN NUMBER, PARAMLIST_NAME IN VARCHAR2, 
           DISPLAY IN VARCHAR2);

Описание принимаемых параметров:

PRODUCT – имя запускаемого продукта, им может быть Graphics, Forms или Reports;

DOCUMENT – имя исполняемого модуля, который должен быть исполнен вызываемым продуктом;

COMMODE – определяет тип (режим) запуска, который будет использован для вызываемого продукта. Вы можете устанавливать один из нижеперечисленных режимов:

  • SYNCHRONOUS (синхронный) – указывает на то, что управление будет передано форме только после закрытия вызываемого продукта;
  • ASYNCHRONOUS (асинхронный) – указывает на то, что управление форме будет возвращено немедленно после отображения модуля, то есть вы можете работать одновременно и с запущенным модулем, и с формой;

EXECMODE – определяет режим выполнения вызываемого продукта. Если вызывается Reports или Graphics, то режим можно устанавливать BATCH или RUNTIME ; если вы запускаете Forms, то режим выполнения всегда RUNTIME ;

LOCATION – определяет место размещения вызываемого модуля, им может быть файловая система ( FILESYSTEM ) или База Данных (DB);

PARAMLIST_NAME OR PARAMLIST_ID – определяет список параметров, передаваемых вызываемому продукту. В качестве принимаемого параметра вы можете указать имя списка параметров или его идентификатор. Если вы не предаете никаких параметров, то можно написать NULL ;

DISPLAY – определяет имя элемента диаграммы (block_name.chart_ item_name), в который будет выводится график, сгенерированный Graphic Builder. Этот параметр определяется, только если вы вызываете Graphic Builder, во всех остальных случаях этот параметр должен быть NULL.

Теперь, когда мы знаем синтаксис процедуры и все необходимые параметры, выполним несколько примеров различной сложности, которые приведены ниже.

  1. Если вы просто хотите запустить отчет без передачи параметров, вам достаточно будет написать в вашей программе одну строчку, как показано в листинге 7.1 "Запуск отчета без передачи параметров".
    Run_Product(REPORTS,'с:\myrep.rep', 
                SYNCHRONOUS, RUNTIME, FILESYSTEM, 
                NULL, NULL);
    Листинг 7.1. Запуск отчета без передачи параметров
  2. Для того чтобы передать параметр в отчет, создайте список параметров и передайте его определение в процедуру, как показано в листинге 7.2 "Запуск и передача параметров в отчет".
    DECLARE pl_id ParamList; 
    BEGIN
     pl_id := Get_Parameter_List('list_data');
     IF NOT Id_Null(pl_id) THEN
      Destroy_Parameter_List( pl_id );
     END IF;
     pl_id := Create_Parameter_List('list_data'); 
     /* Наполняем список параметров различными данными, где 
      :block_name.item_name – значение элемента передаем в параметр p1 Reports
      :parameter.param_name – значение параметра передаем в параметр p2 Reports
      'Rec_group_name' – передаем группу записей в именнованную группу 
      записей Reports 'PARAMFORM' – передаем системный параметр в Reports */
     Add_Parameter(pl_id,'p1',TEXT_PARAMETER,:block_name.item_name);
     Add_Parameter(pl_id,'p2',TEXT_PARAMETER,:parameter.parameter _name);
     Add_Parameter(pl_id,'query_group',DATA_PARAMETER,'Rec_group_name');
     Add_Parameter(pl_id, 'PARAMFORM', TEXT_PARAMETER, 'NO');
     Run_Product(REPORTS, 'c:\my_rep', SYNCHRONOUS, 
           RUNTIME, FILESYSTEM, pl_id, NULL); END;
    Листинг 7.2. Запуск и передача параметров в отчет

    Как показано в листинге 7.2 "Запуск и передача параметров в отчет", вы можете передавать различные типы параметров:

    • значения элементов;
    • значения параметров;
    • значения глобальных переменных;
    • значения групп записей;
    • значения переменных;
    • системные параметры Reports.
    Совет: используйте параметры для передачи значений в лексические параметры Reports, это позволит вам не только передавать значения критерия выборки, но и добавлять другие конструкции к фразе SELECT , такие как WHERE, GROUP BY, ORDER BY, HAVING, CONNECT BY и START WITH.

    Остановимся подробнее на последнем пункте, так как все остальные варианты понятны и были уже рассмотрены ранее. Системные параметры Reports – это те параметры, которые управляют выполнением, отображением и формированием отчета. Используя их определения при добавлении параметра в список, вы тем самым получаете возможность влиять на ход выполнения вызываемого продукта. Далее перечислены основные системные параметры.

    COPIES – определяет число копий, которое будет задано, когда отчет будет отправлен на печать.

    CURRENCY – определяет индикатор денежного символа.

    DESFORMAT – определяет выходной формат отчета. Oracle Reports поддерживает следующие форматы:

    • PDF (Forms9i и выше);
    • HTML;
    • RTF;
    • HTMLCSS;
    • XML (Forms9i и выше);
    • DELIMITED;
    • DELIMITEDDATA;
    • SPREADSHEETS (Forms10g).

    DESNAME – определяет имя выходного драйвера (имя файла, имя принтера, mail пользователя). Например, если вы хотите вывести отчет на матричный принтер, вам необходимо указать имя файла *.prt – dec180.

    DESTYPE – определяет тип вывода отчета. Вы можете определить следующие типы: просмотр, файл, mail, принтер или вывод на просмотр с использованием PostScript.

    MODE – определяет режим запуска отчета: растровый ( BITMAP ) или символьный ( CHARACTERS ).

    ORIENTATION – определяет ориентацию печати, допустимы следующие значения:

    • DEFAULT ;
    • PORTRAIT ;
    • LANDSCAPE.

    PRINTJOB – управляет отображением диалога печати перед запуском отчета.

    THOUSENDS – указывает символ разделитель.

    Используя вышеописанные параметры, вы сможете управлять печатью, например, вывести печать в файл: пример показан в листинге 7.3 "Формирование отчета в файл".

    DECLARE pl_id ParamList; BEGIN
    pl_id := Get_Parameter_List('list_data'); 
    IF NOT Id_Null(pl_id) THEN
     Destroy_Parameter_List( pl_id ); 
    END IF; 
    pl_id := Create_Parameter_List('list_data');
    Add_Parameter(pl_id,'DESNAME',TEXT_PARAMETER,'my_rep.txt'); 
    Add_Parameter(pl_id, 'DESTYPE', TEXT_PARAMETER, 'FILE'); 
    Run_Product(REPORTS, 'c:\my_rep', SYNCHRONOUS, 
        RUNTIME, FILESYSTEM, pl_id, NULL); 
    END;
    Листинг 7.3. Формирование отчета в файл

    Вы можете вывести отчет немедленно на печать без предварительного просмотра или формирования файла, как показано в листинге 7.4 "Формирование отчета на принтер без предварительного просмотра".

    DECLARE 
     pl_id ParamList; 
    BEGIN
     pl_id := Get_Parameter_List('list_data'); 
     IF NOT Id_Null(pl_id) THEN
      Destroy_Parameter_List( pl_id ); 
     END IF; 
     pl_id := Create_Parameter_List('list_data');
     Add_Parameter(pl_id, 'BATCH',TEXT_PARAMETER,'YES');
     Add_Parameter(pl_id, 'DESNAME', TEXT_PARAMETER, 'dec180');
     Add_Parameter(pl_id, 'DESTYPE', TEXT_PARAMETER, 'PRINTER');
     Run_Product(REPORTS, 'c:\my_rep', SYNCHRONOUS, RUNTIME, 
        FILESYSTEM, pl_id, NULL); 
    END;
    Листинг 7.4. Формирование отчета на принтер без предварительного просмотра

    Теперь, когда мы рассмотрели процедуру RUN_PRODUCT и запуск отчета в GUI, перейдем к рассмотрению встроенной подпрограммы WEB. SHOW_DOCUMENT для запуска отчетов в браузере.

Запуск отчета с помощью WEB.Show_Document

Встроенная процедура WEB.SHOW_DOCUMENT, как уже было сказано выше, предназначена для запуска отчета в браузере. Эта процедура поддерживается в версиях Forms 6i и выше. Из всех перечисленных в этой главе эта процедура является наиболее удобной и компактной в кодировании, и нижеприведенный синтаксис лишний раз это доказывает.

Синтаксис:

WEB.SHOW_DOCUMENT(URL, DESTINATION);

Параметры:

  • URL – определяет имя ресурса, с которого будет загружен документ. URL в данном случае — это не только адресная строка, но и набор передаваемых параметров, так как в определении URL используются системные параметры ( DESNAME, DESTYPE и другие).
  • DESTINATION – назначение целевого окна. Различают следующие назначения:
    • _SELF – заставляет отчет загружаться в ту же самую структуру или окно, что и первоисточник.
    • _PARENT – заставляет отчет загружаться в родительское окно или frameset, содержащий ссылку гипертекста. Если ссылка находится в окне или верхнем уровне фрейма, то _PARENT отрабатывает аналогично _SELF.
    • _TOP – заставляет отчет загружаться в окно, содержащее гипертекстовую ссылку, заменяя все текущие фреймы, которые отражены в этом окне.
    • _BLANK – загружает отчет в новое неименованное окно.

Строка URL в области определения Reports имеет свою особую специфику, так как является не просто адресной строкой с указанием места расположения ресурса, но и содержит перечень различных параметров. Ниже приведен синтаксис URL с перечислением возможных параметров:

Ошибка! Недопустимый объект гиперссылки.>
&report=<report>.rdf
&desformat=[htmlcss|pdf|xml|delimited|]
&destype=cache&
userid=<user/pw@database>&paramform=[no|yes]

Теперь, когда мы ознакомились с синтаксисом этой процедуры, попробуем ее в действии. В листинге 7.5 "Запуск отчета с помощью процедуры WEB.SHOW_DOCUMENT " приведен пример запуска отчета в Web.

DECLARE
rep_url varchar2(300);
BEGIN
 rep_url:='Ошибка! Недопустимый объект гиперссылки.
   ||'Repsrv&report=my_rep.rdf&desformat=htmlcss&destype=cache '
   ||'&userid=user/pw@database&P_NAME ='
   ||:parameter.param_name
   ||'&paramform=no';
 WEB.SHOW_DOCUMENT(rep_url,'_blank');
END;
Листинг 7.5. Запуск отчета с помощью процедуры WEB.SHOW_DOCUMENT

Как вы уже, наверно, успели заметить, в URL помимо системных параметров можно передавать также и пользовательские параметры. К недостаткам такого метода запуска отчетов можно отнести адресную строку URL, так как при запуске отчета отображается весь гипертекст, в котором указано имя, логин и пароль пользователя. Далее мы еще не раз вернемся к этой процедуре, а также рассмотрим пример, в котором устраним вышеописанный недостаток.

< Лекция 6 || Лекция 7: 12 || Лекция 8 >
Константин Лукин
Константин Лукин

ошибка: FRM47337  Tree node label can not be null

при выполнении скрипта

DECLARE
 Itree ITEM;
 top_node Ftree.Node;
 new_node Ftree.Node;
 i_value VARCHAR2(30);
BEGIN
 Itree := Find_Item('tree_block.tree_item ');
 new_node := Ftree.Add_Tree_Node(Itree, Ftree.ROOT_NODE,
   Ftree.PARENT_OFFSET, Ftree.LAST_CHILD,
   Ftree.EXPANDED_NODE, i_value, NULL, i_value);
END;

Юлия Малыгина
Юлия Малыгина
приведена функция скрытия URL отчета и ее применение, но применения так и нет