Blitz Report Custom Reports Converter

Description

The Blitz Report Custom Reports Converter is a self-service Blitz Upload that lists every concurrent program on your Oracle EBS instance — RDF reports, BI Publisher reports, and other data-extract programs — together with usage statistics. You tick the ones you want migrated to Blitz Report and upload the file. The converter then collects each selected program’s source artifacts (the RDF binary, BI Publisher data definition and RTF templates, package DDL, and custom dependencies) into a single zip file you send to Enginatics for conversion. It can optionally also list your custom database views — useful for extracting the view definitions that Discoverer-migrated or other custom reports are built on.

When to use it

  • You want to migrate your custom Oracle EBS reports to Blitz Report.
  • You want to inventory your conversion candidates quickly, without exporting each one by hand.
  • You want Enginatics to perform the conversion for you.
  • You want to gather the custom database views — for example the views behind Discoverer-migrated reports — that a conversion depends on.

Before you start

  • Blitz Report 3.3.5 or later installed on your instance.
  • The “Blitz Report Custom Reports Converter” upload visible under your responsibility.
  • A 1–5 character Customer Abbreviation agreed with Enginatics (e.g. ACME). It is used to namespace your programs on the Enginatics analysis instance so they don’t collide with other customers’ programs.
  • Your Custom Object Prefix, if your custom objects don’t follow the Oracle-recommended XX prefix. The default is XX. If you use more than one prefix, list them separated by commas, for example XX,APL.

Step 1 — Open the converter

From the Blitz Report launcher, open Blitz Report Custom Reports Converter.

Blitz Report Custom Reports Converter run screen showing the program selection parameters

Step 2 — Set the parameters

Enter your Customer Abbreviation and, if needed, narrow the list with the optional filters. The Custom Object Prefix defaults to XX. Every parameter except the first three is optional — leave one blank to ignore it. Parameters with a Multiple Values checkbox accept several entries at once.

ParameterRequiredDefaultNotes
Customer AbbreviationYes1–5 alphanumeric characters (e.g. ACME), agreed with Enginatics.
Custom Object PrefixYesXXOverride only if your custom objects don’t follow Oracle’s XX convention. Several prefixes can be entered as a comma separated list, for example XX,APL; every one of them is used when collecting your custom dependencies.
Upload ModeYesCreate, UpdateKeep at the default.
ApplicationNoRestrict to one or more EBS applications (General Ledger, Payables, and so on).
Program TypeNoFilter to RDF / BI Publisher / Data Extract / Custom View. Leave blank for all.
Execution MethodNoThe executable’s method — Oracle Reports, PL/SQL Stored Procedure, Host, SQL*Loader and so on. Finer grained than Program Type.
User Concurrent Program NameNoPick one or more programs by their user-visible name.
User Concurrent Program Name (contains)NoSearch on part of the user-visible name. The list of values only suggests values — you can type any text.
Concurrent Program Short NameNoPick one or more programs by their internal short name, which is also the name used for the gathered source files.
Concurrent Program Short Name (contains)NoSearch on part of the short name — handy when your developments share a module abbreviation.
Custom Programs OnlyNoSet to Yes to list only programs whose short name starts with any of the prefixes entered in Custom Object Prefix. Usually the quickest way to isolate your own developments.
Execution File Name (contains)NoSearch on part of the executable file name. Useful to find every program sharing the same report file, which only needs converting once.
Request GroupNoLists the programs a request group can run, whether assigned individually or through one of its applications.
ResponsibilityNoLists the programs a responsibility can run through its request group — a natural way to scope a migration to one department.
Minimum Run CountNo1Hides programs that were never run on your instance. Set to 0 to include them. Does not apply to custom views.
Minimum Distinct UsersNoOnly lists programs run by at least this many different users, which separates widely used reports from one-off developments. Does not apply to custom views.
Last Run Date FromNoRestrict to programs last run on or after this date. Does not apply to custom views.
Last Run Date ToNoRestrict to programs last run on or before this date. Does not apply to custom views.
Include Custom ViewsNoSet to Yes to additionally list custom database views whose name starts with the Custom Object Prefix, so their definitions can be gathered — for example the views that Discoverer-migrated reports are based on. Leave blank to list concurrent programs only.
Custom View prefixNoNarrows the custom views listed to those whose name starts with this text. A comma separated list is accepted here too. Only applies when Include Custom Views is set to Yes.

The program filters — the name and short name searches, Custom Programs Only, Execution Method, Execution File Name, Request Group and Responsibility — apply to concurrent programs only. They never hide custom views, which you control separately with the last two parameters.

Blitz Report Custom Reports Converter run screen showing the program selection parameters

Step 3 — Download the template

Click Run / Download. Blitz Report generates an Excel template with one row per candidate concurrent program, including Application, Program, Short Name, Program Type, Executable, Method, Output Format, Run Count, Distinct Users, and the first/last run dates — everything you need to decide which programs are worth migrating.

Step 4 — Mark “Convert Program = Yes”

Set Convert Program = Yes on each program you want migrated. The Customer Abbreviation and Custom Object Prefix are pre-filled on every row.

Step 5 — Save and upload

Upload the file with the standard Blitz Upload (Validate and Save). The upload request runs and waits for the gather to complete so the result file can report per-program status. As a rough guide: ~3–5 seconds per BI Publisher program, ~5–15 seconds per RDF program, ~1–2 seconds per data-extract program. A batch of 10 programs typically completes in under a minute.

Step 6 — Two outputs to look for

In your concurrent request list, two requests complete:

  1. The upload itself — produces the result Excel file, with a per-row Status, your Convert Program selection, and a Gather Status (e.g. “7 file(s) written”).
  2. The gather — its output is the zip named CONV_<ABBREV>_<batch>_<timestamp>.zip.

Step 7 — Send the zip to Enginatics

Download the zip from the gather request output and send it to Enginatics (or attach it to your support ticket). That’s the end of the customer-side work — we take it from there.

What’s inside the zip

CONV_ACME_5923949_20260519_132951.zip
├── manifest.txt              ← customer abbreviation, prefix, batch id, gather date, program list
├── gather_summary.txt        ← per-program gather status
├── import_reports.sh         ← auto-generated installer Enginatics runs
└── <PROGRAM_SHORT_NAME>/      ← one folder per converted program
     ├── <SHORT>.ldt           ← concurrent program definition
     ├── <SHORT>_ds.ldt        ← BI Publisher data source (BIP only)
     ├── <SHORT>_tpl.ldt       ← BI Publisher template registrations (BIP only)
     ├── *.rtf                  ← BIP template content (BIP only)
     ├── <EXEC_FILE>.rdf       ← Oracle Reports binary (RDF only)
     ├── <EXEC_FILE>_rdf.xml   ← rwconverter XML (RDF only)
     └── <owner>.<object>.<type>.sql   ← DDL of every custom dependency

When you select a custom view, its folder holds the view definition (<owner>.<view>.view.sql) and the DDL of everything it depends on. Views built on Oracle Discoverer (Noetix) sources additionally include a noetix/ sub-folder with the underlying Noetix view stack.

Common questions

What is “Customer Abbreviation” for?
When Enginatics receives your zip, your programs are installed on our analysis instance namespaced with your abbreviation, so multiple customers’ programs never collide. We agree the abbreviation with you upfront.

Why “Custom Object Prefix”? My custom packages don’t start with XX.
Oracle recommends prefixing custom objects with XX, but not everyone follows it. This tells the converter what prefix to look for when collecting your custom dependencies. If your custom code uses CUST_, enter CUST. If you identify your custom objects with more than one prefix, enter them all as a comma separated list, for example XX,APL — a single run then collects the dependencies under every prefix, so there is no need for separate passes.

What is Include Custom Views for?
Set it to Yes when a report you’re converting is built on a custom database view — a common pattern for Oracle Discoverer migrations. The converter then also lists your custom views (those whose name starts with the Custom Object Prefix); tick the ones you need and their definitions, together with everything they depend on, are gathered into the same zip.

There are thousands of programs on my instance. How do I find the ones worth converting?
Start with Custom Programs Only = Yes, which keeps only the programs whose short name starts with your Custom Object Prefix. From there, Minimum Run Count and Minimum Distinct Users separate the reports people actually use from one-off developments, and Last Run Date From / To narrow to a period. If a particular department is being migrated first, Responsibility or Request Group lists just the programs they can run.

Why does the upload run for a little while?
It waits for the gather to finish so the result file can show per-program status. Batches with many RDF reports take a few minutes; smaller batches complete in under a minute.

What if I select a report by mistake?
Run the upload again with a corrected selection. Each run produces its own zip — just send us the right one.

How does Enginatics use the zip?
We install your custom programs and their dependencies on our analysis instance, then run our automated converter to produce Blitz Reports, validate and test them, and tune their performance. You receive the resulting Blitz Reports back.

Troubleshooting

SymptomCauseWhat to do
“Invalid Customer Abbreviation” on submitNon-alphanumeric, or more than 5 charactersRe-run with 1–5 alphanumeric characters (e.g. ACME).
“Invalid Custom Object Prefix” on submitDoesn’t start with a letter, or uses unsupported charactersUse 1–10 characters starting with a letter (A–Z, 0–9, underscore). When entering several prefixes, separate them with commas and apply the same rule to each one.
Rows show “0 file(s) written” in Gather StatusYour custom objects don’t use the prefix you entered, or they use a further prefix you haven’t listedRe-run with the correct Custom Object Prefix, adding any additional prefixes as a comma separated list.
A row shows Status = ErrorThe program could not be processed (e.g. it no longer exists)Check the Message column on that row.
select
null action_,
null status_,
null message_,
cast(null as varchar2(240)) gather_status,
null modified_columns_,
cast(null as varchar2(10)) convert_program,
x.application,
x.program,
x.short_name,
x.program_type,
x.executable,
x.method,
x.execution_file_name,
x.output_format,
x.run_count,
x.distinct_users,
x.last_run_date,
x.first_run_date,
x.created_by,
x.creation_date,
x.concurrent_program_id,
x.application_id,
upper(:customer_abbreviation) customer_abbreviation,
upper(:custom_prefix) custom_prefix,
cast(null as number) request_id_,
rownum upload_row
from
(
select
fav.application_name application,
fcpv.user_concurrent_program_name program,
fcpv.concurrent_program_name short_name,
case
when exists (select null from xdo_ds_definitions_b xddb where xddb.data_source_code=fcpv.concurrent_program_name and xddb.application_short_name=fav.application_short_name) then 'BI Publisher'
when fev.execution_method_code='P' then 'RDF'
else 'Data Extract'
end program_type,
fev.executable_name executable,
xxen_util.meaning(fev.execution_method_code,'CP_EXECUTION_METHOD_CODE',0) method,
fev.execution_file_name,
xxen_util.meaning(fcpv.output_file_type,'CP_OUTPUT_FILE_TYPE',0) output_format,
nvl(stats.run_count,0) run_count,
nvl(stats.distinct_users,0) distinct_users,
xxen_util.client_time(stats.last_run_date) last_run_date,
xxen_util.client_time(stats.first_run_date) first_run_date,
xxen_util.user_name(fcpv.created_by) created_by,
xxen_util.client_time(fcpv.creation_date) creation_date,
fcpv.concurrent_program_id,
fcpv.application_id
from
fnd_application_vl fav,
fnd_concurrent_programs_vl fcpv,
fnd_executables_vl fev,
(
select
fcr.concurrent_program_id,
fcr.program_application_id,
count(*) run_count,
count(distinct fcr.requested_by) distinct_users,
max(fcr.actual_start_date) last_run_date,
min(fcr.actual_start_date) first_run_date
from
fnd_concurrent_requests fcr
group by
fcr.concurrent_program_id,
fcr.program_application_id
) stats
where
3=3 and
fav.application_id=fcpv.application_id and
fcpv.executable_application_id=fev.application_id and
fcpv.executable_id=fev.executable_id and
fcpv.concurrent_program_id=stats.concurrent_program_id(+) and
fcpv.application_id=stats.program_application_id(+) and
nvl(fcpv.enabled_flag,'Y')='Y'
union all
select
dv.owner application,
dv.view_name program,
dv.view_name short_name,
'Custom View' program_type,
null executable,
'View' method,
null execution_file_name,
null output_format,
to_number(null) run_count,
to_number(null) distinct_users,
to_date(null) last_run_date,
to_date(null) first_run_date,
null created_by,
xxen_util.client_time(do.created) creation_date,
to_number(null) concurrent_program_id,
to_number(null) application_id
from
dba_views dv,
dba_objects do
where
2=2 and
:include_custom_views='Y' and
dv.owner=do.owner and
dv.view_name=do.object_name and
do.object_type='VIEW'
) x
where
1=1
Parameter NameSQL textValidation
Customer Abbreviation
 
Char
Custom Object Prefix
 
Char
Upload Mode
:p_upload_mode like '%' || xxen_upload.action_update
LOV
Application
x.application=:application
LOV
Program Type
x.program_type=:program_type
LOV
Execution Method
fev.execution_method_code=xxen_util.lookup_code(:execution_method,'CP_EXECUTION_METHOD_CODE',0)
LOV
User Concurrent Program Name
fcpv.user_concurrent_program_name=:program_name
LOV
User Concurrent Program Name (contains)
upper(fcpv.user_concurrent_program_name) like '%'||upper(:program_name_contains)||'%'
LOV
Concurrent Program Short Name
fcpv.concurrent_program_name=:short_name
LOV
Concurrent Program Short Name (contains)
upper(fcpv.concurrent_program_name) like '%'||upper(:short_name_contains)||'%'
LOV
Custom Programs Only
regexp_like(fcpv.concurrent_program_name,'^('||regexp_replace(upper(:custom_prefix),'[[:space:]]*[,;][[:space:]]*','|')||')')
LOV
Execution File Name (contains)
upper(fev.execution_file_name) like '%'||upper(:execution_file_name)||'%'
LOV
Request Group
exists (
select
null
from
fnd_request_groups frg,
fnd_request_group_units frgu
where
frg.request_group_name=:request_group and
frg.application_id=frgu.application_id and
frg.request_group_id=frgu.request_group_id and
frgu.unit_application_id=fcpv.application_id and
(frgu.request_unit_type='A' or frgu.request_unit_type='P' and frgu.request_unit_id=fcpv.concurrent_program_id)
)
LOV
Responsibility
exists (
select
null
from
fnd_responsibility_vl frv,
fnd_request_group_units frgu
where
frv.responsibility_name=:responsibility and
frv.group_application_id=frgu.application_id and
frv.request_group_id=frgu.request_group_id and
frgu.unit_application_id=fcpv.application_id and
(frgu.request_unit_type='A' or frgu.request_unit_type='P' and frgu.request_unit_id=fcpv.concurrent_program_id)
)
LOV
Minimum Run Count
(x.run_count>=:minimum_run_count or x.program_type='Custom View')
Number
Minimum Distinct Users
(x.distinct_users>=:minimum_distinct_users or x.program_type='Custom View')
Number
Last Run Date From
(x.last_run_date>=:last_run_date_from or x.program_type='Custom View')
Date
Last Run Date To
(x.last_run_date<:last_run_date_to+1 or x.program_type='Custom View')
Date
Include Custom Views
 
LOV
Custom View prefix
regexp_like(dv.view_name,'^('||regexp_replace(upper(:custom_view_prefix),'[[:space:]]*[,;][[:space:]]*','|')||')')
LOV