<ROOT>
 <APPS_INITIALIZE_DATA>
  <USER_NAME>ENGINATICS</USER_NAME>
  <RESPONSIBILITY_KEY>SYSTEM_ADMINISTRATOR</RESPONSIBILITY_KEY>
  <APPLICATION_SHORT_NAME>SYSADMIN</APPLICATION_SHORT_NAME>
 </APPS_INITIALIZE_DATA>
<REPORTS>
<!-- loader xml for Enginatics Blitz Report: Blitz Report Extension Package API Signatures -->
 <REPORTS_ROW>
  <GUID>D5B83C6E7A1F4E92B0C7A45D19E6F238</GUID><ENABLED>Y</ENABLED>
  <SQL_TEXT>select
y.package_name,
y.procedure_name,
y.overload,
y.data_level,
y.position,
y.argument_name,
y.data_type,
y.type_name,
y.in_out,
y.defaulted,
y.referenced_by
from
(
select
ua.package_name,
ua.object_name procedure_name,
ua.overload,
ua.data_level,
ua.position,
ua.argument_name,
ua.data_type,
ua.type_owner||decode(ua.type_name,null,null,&apos;.&apos;||ua.type_name)||decode(ua.type_subname,null,null,&apos;.&apos;||ua.type_subname) type_name,
ua.in_out,
ua.defaulted,
x.referenced_by,
ua.sequence
from
(
select /*+ no_merge */
s.package_name,
s.object_name,
listagg(s.referencing_package,&apos;, &apos;) within group (order by s.referencing_package) referenced_by
from
(
select distinct
upper(regexp_substr(us.text,&apos;([a-z0-9_]+)\.([a-z0-9_]+)[[:space:]]*(\(|$)&apos;,1,rowgen.column_value,&apos;i&apos;,1)) package_name,
upper(regexp_substr(us.text,&apos;([a-z0-9_]+)\.([a-z0-9_]+)[[:space:]]*(\(|$)&apos;,1,rowgen.column_value,&apos;i&apos;,2)) object_name,
us.name referencing_package
from
user_source us,
table(xxen_util.rowgen(regexp_count(us.text,&apos;[a-z0-9_]+\.[a-z0-9_]+[[:space:]]*(\(|$)&apos;,1,&apos;i&apos;))) rowgen
where
:api_package_name is null and
us.type=&apos;PACKAGE BODY&apos; and
us.name like &apos;XXEN%&apos; and
us.name in (select us2.name from user_source us2 where us2.type=&apos;PACKAGE BODY&apos; and us2.line=1 and us2.name like &apos;XXEN%&apos; and lower(us2.text) not like &apos;%wrapped%&apos;) and
regexp_like(us.text,&apos;[a-z0-9_]+\.[a-z0-9_]+[[:space:]]*(\(|$)&apos;,&apos;i&apos;)
) s
where
s.package_name not like &apos;XXEN%&apos;
group by
s.package_name,
s.object_name
) x,
user_arguments ua
where
x.package_name=ua.package_name and
x.object_name=ua.object_name
union all
select
ua.package_name,
ua.object_name,
ua.overload,
ua.data_level,
ua.position,
ua.argument_name,
ua.data_type,
ua.type_owner||decode(ua.type_name,null,null,&apos;.&apos;||ua.type_name)||decode(ua.type_subname,null,null,&apos;.&apos;||ua.type_subname),
ua.in_out,
ua.defaulted,
to_char(null),
ua.sequence
from
user_arguments ua
where
:api_package_name is not null and
3=3
) y
where
1=1
order by
y.package_name,
y.procedure_name,
nvl(y.overload,&apos;1&apos;),
y.sequence</SQL_TEXT>
  <VERSION_COMMENTS>New report. Shows an instance&apos;s own signatures of the Oracle EBS APIs called by the Blitz Report extension packages, so a customer&apos;s signatures can be compared against a working instance when an extension package fails to compile.

Extension packages call EBS public APIs with long named-parameter lists. Where a customer&apos;s patch level lacks a parameter or a record field, the package fails to compile with PLS-00306 or PLS-00302 and is dropped by the installer, and every report and upload behind it then fails with PLS-00201. Identifying the offending parameter previously needed a hand-written query per API.

Two modes. With API Package Name empty the scope is derived from the source of the installed extension packages (user_arguments joined to package.procedure references extracted from user_source), which also populates Referenced By. With API Package Name supplied the source scan is skipped by a bind filter and the named package&apos;s full signature is reported, which is the mode to use when the package that calls it has been dropped and its source is therefore gone.

The API Procedure Name list reads user_procedures rather than user_arguments and matches its parent with a plain equality rather than xxen_util.contains, API Package Name being single valued: 0.11 seconds instead of 29.6.

The dictionary views are the user_ ones throughout, the code being APPS owned. That is a correctness fix as well as the narrower choice: OWF_MGR carries its own copies of FND_FILE, FND_FUNCTION, FND_MESSAGE, FND_PREFERENCE and FND_PROFILE, so joining all_arguments on package name alone reported those arguments twice, under an owner that is not the package the code calls. Measured on r12, the derived scope is 32,935 arguments across 307 APPS packages plus 87 rows that are not APPS owned: 44 under OWF_MGR and 43 SYS and XDB rows that are database built-ins rather than EBS APIs.

The no_merge on the source derived set is measured, not precautionary: the shipped statement returns its 32,935 rows in 23.9 seconds with it and had not finished after 250 seconds without it. This is not only the narrower choice: OWF_MGR carries its own copies of FND_FILE, FND_FUNCTION, FND_MESSAGE, FND_PREFERENCE and FND_PROFILE, so joining all_arguments on package name alone reported every argument of those five twice, under an owner that is not the package the code actually calls.

Record arguments are expanded, so record fields such as pn_lease_pvt.lease_terms_rec.rou_asset_flag are reported and PLS-00302 component errors are diffable too.

Verified on r12: default mode 626 APIs and 33,022 argument rows in 24 seconds; API Package Name=PA_PROJECT_PUB 3,409 rows in 2.5 seconds with the source scan skipped; the APIs behind six of the eight extension packages dropped at a customer are reported and attributed to the correct calling package.</VERSION_COMMENTS>
  <REPORT_TRANSLATIONS>
   <REPORT_TRANSLATIONS_ROW>
    <LANGUAGE>US</LANGUAGE>
    <REPORT_NAME>Blitz Report Extension Package API Signatures</REPORT_NAME>
    <DESCRIPTION>Shows this instance&apos;s signatures of the Oracle EBS APIs that Blitz Report&apos;s extension packages call: every argument of every procedure, with its position, data type, in/out mode, whether it is defaulted, and the fields of any record argument.

Its purpose is comparison. An extension package that calls an EBS API by named parameters fails to compile where a patch level does not have that parameter (PLS-00306) or that record field (PLS-00302), the installer then drops the package, and its reports and uploads fail with PLS-00201 at runtime. Running this report here and on a working instance and comparing the two shows exactly which argument or field is absent.

Left empty, it reports every EBS API called by the extension packages installed here, and Referenced By names the calling package. That list is derived from the installed package source, so an extension package that failed to compile is not in it - name its API in the API Package Name parameter instead, which reports that package&apos;s full signature whether or not anything here calls it.

Types and constants declared in a package specification are not arguments and so do not appear here. Use the DBA Text Search report on the specification for those.</DESCRIPTION>
   </REPORT_TRANSLATIONS_ROW>
  </REPORT_TRANSLATIONS>
  <CATEGORY_ASSIGNMENTS>
   <CATEGORY_ASSIGNMENTS_ROW>
    <CATEGORY>Enginatics</CATEGORY>
   </CATEGORY_ASSIGNMENTS_ROW>
  </CATEGORY_ASSIGNMENTS>
  <ANCHORS>
   <ANCHORS_ROW>
    <ANCHOR>1=1</ANCHOR>
   </ANCHORS_ROW>
   <ANCHORS_ROW>
    <ANCHOR>3=3</ANCHOR>
   </ANCHORS_ROW>
   <ANCHORS_ROW>
    <ANCHOR>:api_package_name</ANCHOR>
   </ANCHORS_ROW>
  </ANCHORS>
  <PARAMETERS>
   <PARAMETERS_ROW>
    <SORT_ORDER>1</SORT_ORDER>
    <DISPLAY_SEQUENCE>10</DISPLAY_SEQUENCE>
    <ANCHOR>3=3</ANCHOR>
    <SQL_TEXT>ua.package_name=:api_package_name</SQL_TEXT>
    <PARAMETER_TYPE_DSP>LOV custom</PARAMETER_TYPE_DSP>
    <VALIDATE_FROM_LIST_DSP>Y</VALIDATE_FROM_LIST_DSP>
    <FILTER_BEFORE_DISPLAY_DSP>Y</FILTER_BEFORE_DISPLAY_DSP>
    <LOV_QUERY_DSP>select distinct
uo.object_name value,
null description
from
user_objects uo
where
uo.object_type=&apos;PACKAGE&apos;
order by
value</LOV_QUERY_DSP>
    <PARAMETER_TRANSLATIONS>
     <PARAMETER_TRANSLATIONS_ROW>
      <LANGUAGE>US</LANGUAGE>
      <PARAMETER_NAME>API Package Name</PARAMETER_NAME>
     </PARAMETER_TRANSLATIONS_ROW>
    </PARAMETER_TRANSLATIONS>
   </PARAMETERS_ROW>
   <PARAMETERS_ROW>
    <SORT_ORDER>2</SORT_ORDER>
    <ANCHOR>:api_package_name</ANCHOR>
    <PARAMETER_TRANSLATIONS>
     <PARAMETER_TRANSLATIONS_ROW>
      <LANGUAGE>US</LANGUAGE>
      <PARAMETER_NAME>API Package Name</PARAMETER_NAME>
     </PARAMETER_TRANSLATIONS_ROW>
    </PARAMETER_TRANSLATIONS>
   </PARAMETERS_ROW>
   <PARAMETERS_ROW>
    <SORT_ORDER>3</SORT_ORDER>
    <DISPLAY_SEQUENCE>20</DISPLAY_SEQUENCE>
    <ANCHOR>1=1</ANCHOR>
    <SQL_TEXT>y.procedure_name=:api_procedure_name</SQL_TEXT>
    <PARAMETER_TYPE_DSP>LOV custom</PARAMETER_TYPE_DSP>
    <VALIDATE_FROM_LIST_DSP>Y</VALIDATE_FROM_LIST_DSP>
    <LOV_QUERY_DSP>select distinct
up.procedure_name value,
null description
from
user_procedures up
where
up.object_name=:$flex$.API_Package_Name and
up.procedure_name is not null
order by
value</LOV_QUERY_DSP>
    <PARAMETER_TRANSLATIONS>
     <PARAMETER_TRANSLATIONS_ROW>
      <LANGUAGE>US</LANGUAGE>
      <PARAMETER_NAME>API Procedure Name</PARAMETER_NAME>
     </PARAMETER_TRANSLATIONS_ROW>
    </PARAMETER_TRANSLATIONS>
   </PARAMETERS_ROW>
   <PARAMETERS_ROW>
    <SORT_ORDER>4</SORT_ORDER>
    <DISPLAY_SEQUENCE>30</DISPLAY_SEQUENCE>
    <ANCHOR>1=1</ANCHOR>
    <SQL_TEXT>y.argument_name=:argument_name</SQL_TEXT>
    <PARAMETER_TYPE_DSP>Char</PARAMETER_TYPE_DSP>
    <PARAMETER_TRANSLATIONS>
     <PARAMETER_TRANSLATIONS_ROW>
      <LANGUAGE>US</LANGUAGE>
      <PARAMETER_NAME>Argument Name</PARAMETER_NAME>
     </PARAMETER_TRANSLATIONS_ROW>
    </PARAMETER_TRANSLATIONS>
   </PARAMETERS_ROW>
  </PARAMETERS>
  <TEMPLATES>
  </TEMPLATES>
  <DEFAULT_TEMPLATES>
  </DEFAULT_TEMPLATES>
  <UPLOAD_COLUMNS>
  </UPLOAD_COLUMNS>
  <UPLOAD_PARAMETERS>
  </UPLOAD_PARAMETERS>
  <UPLOAD_SQLS>
  </UPLOAD_SQLS>
 </REPORTS_ROW>
</REPORTS>
</ROOT>
