RepExample_ReadMe.doc
Цитата: Программа ввода параметров для отчета Oracle Reports 6.i
Пример реализации программы ввода параметров с использованием MS Visual C++ 6.0 - проект “ExtRepExample”, поставляется с дистрибутивом ТС. Для установки проекта выберите тип установки «Все модули» - компонент «Примеры пользовательских отчетов».
В программу ввода параметров передается командная строка в виде:
<имя mailslot><пробел><имя текущей базы данных Oracle>
Второй параметр может использоваться для обращения к текущей базе Oracle.
Примечание. Проект «ExtRepExample» включает два варианта реализации – для Oracle Reports 6.i и для Crystal Reports 8.0. Варианты разделяются условной компиляцией. Для варианта Oracle Reports 6.i выберите вариант компиляции Win32 Release или Win32 Debug, иначе: Win32 ReleaseCrystal или Win32 DebugCrystal.
Программа формирует строку параметров для запуска отчета Oracle Reports в виде:
<параметр N1>=<значение 1><пробел><параметр N2>=<значение 2><пробел>…
<параметр Nk>=<значение k>
Например,
P_USER_ID=56 P_GROUP_TREE=’1.,2.’
К строке параметров, сформированной в программе ввода параметров, ТС добавляет еще три параметра:
Параметр отчета Значение параметра Тип параметра
P_nMod Номер модульной роли модуля отчетов Число 20
P_nRep Номер функциональной роли отчета Число 20
P_SURNAME Имя текущего пользователя Строка 50
Примечание. Все объекты базы данных, используемые в отчете, должны быть указаны с привязкой к схеме базы данных, например, таблица smcard должна участвовать в отчете под именем «supermag.smcard». При создании собственного отчета используйте файл примера в качестве шаблона, иначе создайте в отчете параметры P_nMod и P_nRep в полном соответствии с описанием и определите триггер BEFORE PARAMETER FORM следующим образом:
function BeforePForm return boolean is
res number;
begin
dbms_session.set_role('SUPERMAG_USER');
if supermag.core.getproc is null then
res := supermag.Core.StartSMApp();
end if;
supermag.SmBeginAction(:P_nMod,:P_nRep, NULL, NULL, NULL, NULL);
return (TRUE);
exception when others then
supermag.core.logsysevent('Rep_BeforePForm: ' || SQLERRM);
raise;
end;