ヘッダーをスキップ

Oracle Enterprise Manager拡張ガイド 10gリリース5（10.2.0.5） B54134-01 |
| 目次 | 索引

戻る | 次へ |

# 6 レポートの追加

管理プラグインを介してEnterprise Managerに新しいターゲット・タイプを定義すると、新しいレポート定義の追加も可能になります。プラグインにより、Information Publisher PL/SQL APIを使用して永続（SYSTEM）ターゲット・タイプ固有のレポート定義をEnterprise Managerに追加できます。

この章の内容は次のとおりです。

- 機能

- レポート定義ファイル

- レポート定義ファイルの作成

- PL/SQLアプリケーション・プログラマ・インタフェース

- 開発のガイドライン

注意: このAPIを使用するには、SQLおよびPL/SQLに関する知識が必要です。詳細は、『Oracle Database PL/SQLユーザーズ・ガイドおよびリファレンス』を参照してください。

## 機能

管理プラグインを介してレポート定義を追加すると、ターゲット・タイプ固有のSYSTEMレポートが作成されます。SYSTEMレポート定義は、Information Publisherユーザー・インタフェースを通じて作成される定義とは異なる方法で処理されます。SYSTEMレポートは永続的であり、Enterprise Manager管理者が削除または編集することはできません。管理プラグインには複数のレポート定義を追加できるため、複数のレポートを特定のターゲット・タイプに関連付けることができます。

管理プラグインおよびInformation Publisher APIを使用してSYSTEMレポート定義を追加すると、ユーザーはEnterprise Managerコンソールの次の2つの領域からレポートにアクセスできます。

- ターゲット・ホームページの「レポート」ページ（オプション）

- Information Publisherの「レポート定義」ページ

### 「レポート」ページ（ターゲット・ホームページ）

レポート定義ファイルでは、ターゲット・ホームページの「レポート」ページでレポートを使用可能かどうかを指定できます。「レポート」ページに追加するレポート定義は、「レポートの表示」ドロップダウン・メニュー・リストから使用できます。次の図に、Microsoft SQL Serverターゲットの「レポート」ページを示します。

図6-1 Microsoft SQL Serverの「レポート」ページ

「図6-1 Microsoft SQL Serverの「レポート」ページ」の説明

### 「レポート定義」ページ

レポートが「レポート」ページに表示されるように指定するかどうかにかかわらず、管理プラグインを介して追加されたすべてのレポート定義はInformation Publisherの「レポート定義」ページから使用できます。即時利用可能なSYSTEMレポート定義と同様に、管理プラグインを介して追加されたレポート定義は、レポート・カテゴリおよびサブカテゴリに従って整理されます。SYSTEMレポート定義は、Enterprise Managerコンソールから削除できません。図6-2「「レポート定義」ページ」に、Microsoft SQL Serverターゲット・タイプに対して使用可能なレポート定義を示します。

図6-2 「レポート定義」ページ

「図6-2 「レポート定義」ページ」の説明

## レポート定義ファイル

レポート定義ファイルは、従来型PL/SQLブロックとして構成され、管理リポジトリから関連情報を抽出するコードおよびそのデータの書式設定と表示に使用されるレポート要素を含みます。Information Publisher PL/SQL APIにより、通常はEnterprise Mangerコンソールからレポート定義を作成する際に対話的に指定するレポート要素およびパラメータを指定できます。

次の例では、管理プラグインとして追加されたoracle_orgchartターゲット・タイプの「レポート」ページを示します。肩書き別に分類した組織（oracle_orgchart）というタイトルの単一のレポートを図6-3に示します。このレポートは、肩書き別の人口分布の割合を示す円グラフ、最も多くの人からレポートされている上位5人の管理職を示す棒グラフ、組織内のすべての管理職の直接レポートの合計数をリストする表の3つの主要領域から構成されています。

図6-3 Oracle組織レポート

「図6-3 Oracle組織レポート」の説明

この例で使用されるレポート定義では、「SQLからのグラフ」（円グラフと棒グラフ）および「SQLからの表」という2つのレポート要素タイプを利用します。一般に、この2つのレポート要素はほとんどのレポート・ニーズを満たします。

## レポート定義ファイルの作成

管理プラグインにより、特定のターゲット・タイプに必要なレポート定義ファイルをいくつでも定義できます。レポート定義ファイルの内容は、Information Publisher PL/SQL API（MGMT_IPパッケージの一部）を使用してレポートを構成するPL/SQLブロックから構成されます。

### レポート定義ファイルの開発プロセス

有効なレポート定義ファイルの開発プロセスには、次の3つの手順が含まれます。

1. 管理リポジトリから情報を抽出するために使用されるSQLまたはPL/SQL問合せの定義

2. Enterprise Managerコンソールからのテスト・レポートの対話的な作成

3. PL/SQL APIを使用したレポート定義ファイルの作成

管理リポジトリから情報を抽出するために使用されるSQLまたはPL/SQL問合せの定義

レポート定義の作成の最初の手順は、管理リポジトリから必要なレポート情報を抽出するために使用されるSQLまたはPL/SQL問合せの作成です。Enterprise Managerには、ベース表から読み取らずに管理リポジトリからデータを安全に抽出するために使用できる管理ビューが用意されています。リポジトリ・ビューを使用すると、将来のリリースで行われる可能性のあるリポジトリ・スキーマの変更から問合せが保護され、SYSTEMレポート定義が引き続き機能することが保証されます。リポジトリ・ビューの完全なリストは、第9章「管理リポジトリ・ビュー」に記載されています。

次の問合せは、Oracle組織内の従業員分類の分布に関するリポジトリ情報の抽出に使用されました。問合せでは、MGMT$METRIC_CURRENTリポジトリ・ビューを使用します。

    select 'senior mts', count(value) from mgmt$metric_current

    where metric_column = 'Title' and LOWER(value) like '%senior member%' and

          target_guid = ??EMIP_BIND_TARGET_GUID??

    union

    select 'principal mts', count(value) from mgmt$metric_current

    where metric_column = 'Title' and LOWER(value) like '%principal member%'and

          target_guid = ??EMIP_BIND_TARGET_GUID??

               union

               select 'consulting mts', count(value) from mgmt$metric_current

               where metric_column = 'Title' and LOWER(value) like '%consulting%' and

                     target_guid = ??EMIP_BIND_TARGET_GUID?? ;

管理者が、このSQL問合せ文字列を含むレポートをEnterprise Managerコンソールから表示すると、Information Publisherにより、選択したターゲットの一意識別子がSQL問合せ文字列の??EMIP_BIND_TARGET_GUID??プレースホルダに自動的にバインドされます。「SQLからのグラフ」および「SQLからの表」パラメータのドキュメントには、このバインド変数プレースホルダに関する情報およびSQL問合せ文字列に含めることのできるその他の情報が記載されています。

SQL問合せから返されたデータは、「SQLからのグラフ」レポート要素により、図6-3に示したoracle_orgchartターゲット・ホームページの「レポート」ページに示されている円グラフをレンダリングするために使用されます。

Enterprise Managerコンソールからのテスト・レポートの対話的な作成

SQLまたはPL/SQL問合せを記述し、テストした後で、Enterprise Managerコンソールを使用し、「SQLからのグラフ」および「SQLからの表」レポート要素を使用してレポートのバージョンを対話的に生成できます。Information Publisherユーザー・インタフェースを使用すると、レポート定義ファイルを作成して管理プラグイン・アーカイブをインポートしなくても、レポートのプロトタイプを簡単に作成できます。この対話的プロトタイプの手法を使用して、再問合せを行い、管理リポジトリから抽出されるデータ、およびその情報をレポートにレンダリングする方法がレポート要件を満たすようにすることができます。問合せの書式設定方法に関する情報と例は、Enterprise Managerオンライン・ヘルプで、「SQLからのグラフ」および「SQLからの表」の「パラメータを設定」機能に関する説明を参照してください。

PL/SQL APIを使用したレポート定義ファイルの作成

Information Publisherによってレポートがレンダリングされる方法に満足したら、レポート定義ファイルを作成する準備ができます。前述のように、レポート定義ファイルはレポート要素を定義するPL/SQLブロックと、リポジトリ情報を抽出し、レポートをレンダリングするために要素により使用されるSQLまたはPL/SQL問合せから構成されます。例6-1に、oracle_orgchartターゲット・タイプに関連付けられているレポート定義ファイルの内容を示します。

例6-1 Oracle組織レポート定義ファイル

    BEGIN

        DECLARE

          l_target_types  MGMT_IP_TARGET_TYPES;

          l_param_values  MGMT_IP_PARAM_VALUE_LIST;

          l_target_type   MGMT_IP_TARGET_TYPES;

          l_report_guid   RAW(16);

          l_element_guid  RAW(16);

          l_report_title_nlsid  VARCHAR2(128);

          l_report_owner VARCHAR(100);

          l_curr_order    NUMBER;

          l_curr_row      NUMBER;

          BEGIN

       -- specify the target type associated with this report

       -- in this case the target type is 'oracle_orgchart'

          l_target_type := MGMT_IP_TARGET_TYPES();

          l_target_type.extend(1);

          l_target_type(1) := 'oracle_orgchart';

          l_report_title_nlsid := 'Org breakdown by title (oracle_orgchart)<>';

          l_report_owner := mgmt_user.get_repository_owner;

       -- create a report definition for the report

          l_report_guid := mgmt_ip.create_report_definition (

            p_title_nlsid                => l_report_title_nlsid,

            p_description_nlsid          => 'Charts showing the breakdown by title',

            p_owner                      => l_report_owner,

            p_category_nlsid             => 'Test Org Chart Reports',

            p_sub_category_nlsid         => 'Interesting Org Data',

            p_late_binding_target_types  => l_target_type,

            p_show_table_of_contents     => 0,

            p_system_report              => 1,

            p_component_name             => l_target_type(1)

            );

          -- Add report so that it shows up under "reports" tab in default home page

          mgmt_mp_homepage.add_report (

            p_target_type        => l_target_type(1),

            p_report_title       => l_report_title_nlsid,

            p_report_owner       => l_report_owner,

            p_report_order       => 1

            );

       -- create the first element in the report

       -- it will be a text element with a description of the report contents

       -- set the parameters for the styled text element

       -- we?ll provide a message and a display style

          l_param_values := MGMT_IP_PARAM_VALUE_LIST();

          l_param_values.extend(2);

          l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD(

            'oracle.sysman.eml.ip.render.elem.TextParamBean.textMessage',

            'Test Org Chart Monitoring');

          l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD(

            'oracle.sysman.eml.ip.render.elem.TextParamBean.textStyle',

            'OraInstructionText');

       -- initialize the sequencing variables

       -- l_curr_order should sequentially increase from 1 to the number of elements in

    -- the report

       -- l_curr_row indicates the row on which to display an element

           l_curr_order := 1;

           l_curr_row := 1;

          l_element_guid := mgmt_ip.add_element_to_report_def (

            p_report_guid        => l_report_guid,

            p_element_name_nlsid => 'IPMSG_STYLED_TEXT',

            p_element_type_nlsid => 'IPMSG_ANY_TARGET_TYPE',

            p_header_nlslid      => null,

            p_element_order      => l_curr_order,

            p_element_row        => l_curr_row,

            p_parameters         => l_param_values,

         p_targets            => null

            );

       -- the second element in the report is a pie chart showing

       -- the count of employees by title

          l_param_values := mgmt_ip_param_value_list();

          l_param_values.extend(3);

          l_param_values(1) := mgmt_ip_param_value_record(

            'oracle.sysman.eml.ip.render.elem.sqlStatement',

            'select ''senior mts'', count(value)

               from mgmt$metric_current where metric_column = ''Title'' and LOWER(value)

                 like ''%senior member%'' and target_guid = ??EMIP_BIND_TARGET_GUID??

     union

               select ''principal mts'', count(value)

                 from mgmt$metric_current

               where metric_column = ''Title'' and LOWER(value)

                 like ''%principal member%'' and target_guid = ??EMIP_BIND_TARGET_GUID??

                 union

                 select ''consulting mts'', count(value)

                   from mgmt$metric_current where metric_column = ''Title'' and

                   LOWER(value) like ''%consulting%'' and

                   target_guid = ??EMIP_BIND_TARGET_GUID?? '

            );

          l_param_values(2) := mgmt_ip_param_value_record(

            'oracle.sysman.eml.ip.render.elem.ChartParamController.chartType',

            'pieChart');

          l_param_values(3) := mgmt_ip_param_value_record(

       'oracle.sysman.eml.ip.render.elem.ChartParamController.pieShowSlicePercentLabels',

     'true');

          l_curr_order := l_curr_order + 1;

          l_curr_row := l_curr_row + 1;

       -- add pie chart to report definiton

       --

          l_element_guid := mgmt_ip.add_element_to_report_def (

            p_report_guid        => l_report_guid,

            p_element_name_nlsid => 'IPMSG_USER_CHART_FROM_SQL',

            p_element_type_nlsid => 'IPMSG_ANY_TARGET_TYPE',

            p_header_nlslid      => 'people by title',

            p_element_order      => l_curr_order,

            p_element_row        => l_curr_row,

            p_parameters         => l_param_values ,

            p_targets            => null

            );

       --add a bar chart showing number of reports by manager

       --

          l_param_values := MGMT_IP_PARAM_VALUE_LIST();

          l_param_values.extend(3);

          l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD(

            'oracle.sysman.eml.ip.render.elem.sqlStatement',

            'select * from (select key_value, to_number(value) "Number of Reports" from

             mgmt$metric_current where target_type = ''oracle_orgchart'' and

             metric_column = ''Reports'' and value is not null  and

             target_guid = ??EMIP_BIND_TARGET_GUID?? order by to_number(value) DESC )

             where rownum < 6'

            );

          l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD(

            'oracle.sysman.eml.ip.render.elem.ChartParamController.chartType',

            'barChart');

          l_param_values(3) := MGMT_IP_PARAM_VALUE_RECORD(

            'oracle.sysman.eml.ip.render.elem.ChartParamController.width',

            '800');

           l_curr_order := l_curr_order + 1;

           l_curr_row := l_curr_row + 1;

          l_element_guid := mgmt_ip.add_element_to_report_def (

            p_report_guid        => l_report_guid,

            p_element_name_nlsid => 'IPMSG_USER_CHART_FROM_SQL',

            p_element_type_nlsid => 'IPMSG_ANY_TARGET_TYPE',

            p_header_nlslid      => 'Top 5 Number of Reports By Manager',

            p_element_order      => l_curr_order,

            p_element_row        => l_curr_row,

            p_parameters         => l_param_values,

         p_targets            => null

            );

       -- the next element is a table the manager name and number of reports per manager

          l_param_values := MGMT_IP_PARAM_VALUE_LIST();

          l_param_values.extend(1);

          l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD(

            'oracle.sysman.eml.ip.render.elem.sqlStatement',

            'select key_value "Person", to_number(value) "Number of Reports" from

             mgmt$metric_current where target_type = ''oracle_orgchart'' and

             metric_column = ''Reports'' and value is not null  and

             target_guid = ??EMIP_BIND_TARGET_GUID?? order by to_number(value) DESC '

            );

          l_curr_order := l_curr_order + 1;

          l_curr_row := l_curr_row + 1;

          l_element_guid := mgmt_ip.add_element_to_report_def (

            p_report_guid        => l_report_guid,

            p_element_name_nlsid => 'IPMSG_USER_TABLE_FROM_SQL',

            p_element_type_nlsid => 'IPMSG_ANY_TARGET_TYPE',

            p_header_nlslid      => 'Number of Reports By Manager',

            p_element_order      => l_curr_order,

            p_element_row        => l_curr_row,

            p_parameters         => l_param_values ,

            p_targets            => null

            );

          END;

       END;

### レポートのライフサイクル: レポート定義の更新

Enterprise Managerへのレポート定義の追加機能を使用する場合には、そのレポート定義をメンテナンスおよび更新する責任が発生します。Enterprise Managerでレポート定義が処理される方法に精通していれば、システムの動作を予想し、下位互換性について計画を立てることができます。

レポート定義が管理プラグインを介してデプロイされると、Enterprise Managerでは、より新しいバージョンのレポート定義のインストールのみ許可されます。古いレポート定義は削除されて登録解除され、ターゲット・ホームページの「レポート」サブタブに表示されなくなります。これらのアクションにより、更新されたレポート定義がクリーンなシステムにデプロイされるようにすることで、潜在的なバージョン競合が排除されます。Enterprise Managerでは、古いバージョンのレポート定義はインストールされません。

レポート定義は、一般に管理プラグインと同様に、下位互換性を考慮して設計する必要があります。将来のバージョンのレポート定義では、以前のバージョンのターゲット・タイプ・メタデータをサポートする必要があります。レポート定義メタデータ・バージョンの非互換性は、次の状況で最も明らかになります。

- 管理プラグイン・バージョン1に含まれ、管理プラグイン・バージョン2に含まれないレポート定義は、バージョン2がデプロイされると、バージョン1のデプロイが一部の管理エージェントにまだ残っている場合でも消えます。

- バージョン1とバージョン2の管理プラグインが、どちらもシステムにデプロイされている場合、管理エージェントは、そのエージェントにインストールされているバージョンのメタデータに基づいてデータを収集します。一部のエージェントはバージョン1のメタデータについて収集し、一部のエージェントはバージョン2のメタデータについて収集します。インストールされる（Enterprise Managerコンソールに表示される）のはバージョン2のレポート定義のみです。このため、バージョン2のレポート定義では両方のバージョンのメタデータをサポートする必要があります。

## PL/SQLアプリケーション・プログラマ・インタフェース

Information Publisher PL/SQL APIを使用して、レポート定義ファイルを作成できます。

### レポート定義を作成するためのPL/SQLメソッド

次のPL/SQLメソッドを使用して、レポート定義ファイルの作成時にレポート定義の作成や操作を行うことができます。

- mgmt_ip.create_report_definition

- mgmt_ip.create_report_definition

- mgmt_mp_homepage.add_report

#### mgmt_ip.create_report_definition

このメソッドをコールして、新規レポート定義を作成します。レポート定義が作成された後で、要素を追加できます。create_report_definitionメソッドは、MGMT_IP PL/SQLパッケージの一部です。

注意: すべての管理プラグイン・レポートでは、p_system_reportを1に設定する必要があります。このパラメータは、レポート定義をSYSTEMレポートとして定義します。SYSTEMレポートは、Enterprise Manager管理者が削除または編集できません。p_ownerは、すべての管理プラグイン・レポートについて`mgmt_user.get_repository_owner`に設定する必要があります。 p_component_nameは、管理プラグインのターゲット・タイプに設定する必要があります。

入力

パラメータ | 説明
--- | ---
p_title_nlsid | レポート・タイトル。
p_description_nlsid | 説明。
p_owner | 所有者名（プラグイン・レポートのmgmt_user.get_repository_ownerから返される値にする必要があります）。
p_category_nlsid | カテゴリ名。
p_sub_category_nlsid | サブカテゴリ名。
p_late_binding_target_types | 遅延バインディングのターゲット・タイプ、または遅延バインディングを行わない場合はnull。
p_show_table_of_contents | 1=表示、0=非表示。
p_system_report | 1=システム・レポート、0=エンド・ユーザー・レポート。管理プラグイン・レポートに対しては1に設定する必要があります。
p_show_navigation | レポート内のナビゲーション・ヘッダーを表示します（タブなど）。1=表示、0=非表示。
p_product_name | 製品名、EM（デフォルト）。
p_component_name | 製品コンポーネント。管理プラグイン・ターゲット・タイプに設定する必要があります。
p_version | バージョン、10.2（デフォルト）。
p_parameters | このレポート定義のパラメータ。

出力

このレポート定義のGUIDを返します。

コード

    FUNCTION create_report_definition (
         p_title_nlsid                      IN VARCHAR2,
         p_description_nlsid                 IN VARCHAR2,
         p_owner                             IN VARCHAR2,
         p_category_nlsid                    IN VARCHAR2,
         p_sub_category_nlsid                IN VARCHAR2,
         p_late_binding_target_types         IN MGMT_IP_TARGET_TYPES DEFAULT NULL,
         p_show_table_of_contents            IN NUMBER DEFAULT 0,
         p_system_report                     IN NUMBER DEFAULT 1,
         p_show_navigation                   IN NUMBER DEFAULT 1,
         p_product_name                      IN VARCHAR2 DEFAULT 'EM',
         p_component_name                    IN VARCHAR2 DEFAULT '',
         p_version                           IN VARCHAR2 DEFAULT '10.2.0.1.0',
         p_parameters                        IN MGMT_IP_PARAM_VALUE_LIST DEFAULT NULL
         ) RETURN RAW;

#### mgmt_ip.create_report_definition

このメソッドをコールして、既存のレポート定義に新規レポート要素を追加します。add_element_to_report_defメソッドは、MGMT_IP PL/SQLパッケージの一部です。

入力

パラメータ | 説明
--- | ---
p_report_guid | レポート定義を識別するためのGUID
p_element_name_nlsid | 要素名
p_element_type_nlsid | 要素タイプ名
p_header_nlslid | 要素ヘッダーまたはnull
p_element_order | 1を基準としたこの要素の順序
p_element_row | 1を基準としたこの要素の行
p_parameters | この要素のパラメータ

出力

この要素インスタンスのGUIDを返します。

コード

    FUNCTION add_element_to_report_def(
              p_report_guid                       IN RAW,
              p_element_name_nlsid                IN VARCHAR2,
              p_element_type_nlsid                IN VARCHAR2,
              p_header_nlsid                      IN VARCHAR2 DEFAULT NULL,
              p_element_order                     IN NUMBER,
              p_element_row                       IN NUMBER,
              p_parameters                        IN MGMT_IP_PARAM_VALUE_LIST,
              p_targets                           IN MGMT_IP_TARGET_LIST
              ) RETURN RAW;

#### mgmt_mp_homepage.add_report

このメソッドをコールして、レポートのターゲット・ホームページの「レポート」サブタブに表示されるレポートを登録します。add_reportメソッドは、MGMT_MP_HOMEPAGE PL/SQLパッケージの一部です。

入力パラメータp_target_type、p_report_titleおよびp_report_ownerは、登録されるレポート定義と同一である必要があります。

重要: レポートがターゲット・ホームページの「レポート」サブタブに表示されるためには、`mgmt_user.get_repository_owner`から返される値がレポート所有者として指定されている必要があります。

入力

パラメータ | 説明
--- | ---
p_target_type | ターゲット・タイプ
p_report_title | レポート・タイトル
p_report_owner | レポート所有者
p_order | レポートがホームページに表示される順序

出力

なし。

コード

    PROCEDURE add_report(p_target_type IN VARCHAR2, p_report_title IN VARCHAR2,

                         p_report_owner IN VARCHAR2, p_report_order IN NUMBER);

#### mgmt_view_util.adjust_tz

この関数をコールして、`v_date_in`のタイムゾーンを`v_from_tz`タイムゾーンから`v_to_tz`タイムゾーンに変換します。

入力

パラメータ | 説明
--- | ---
v_date_in | 別のタイムゾーンに変換する日付
v_from_tz | 変換される日付のタイムゾーン
v_to_tz | 日付の変換先のタイムゾーン

出力

新しいタイムゾーンに調整された日付を返します。

コード

    FUNCTION ADJUST_TZ(v_date_in  DATE,

                       v_from_tz         VARCHAR2,

                       v_to_tz   VARCHAR2)

    RETURN DATE;

### PL/SQLタイプ定義

「レポート定義を作成するためのPL/SQLメソッド」に記載されているPL/SQLメソッドを使用するには、3つのPL/SQLタイプが必要です。3つのタイプの定義を次に示します。

MGMT_IP_TARGET_TYPES

MGMT_IP_TARGET_TYPESタイプを使用して、レポート定義でサポートされるターゲット・タイプをcreate_report_definition APIにp_late_binding_target_typesパラメータとして渡します。

    CREATE OR REPLACE TYPE MGMT_IP_TARGET_TYPES

    AS TABLE OF VARCHAR(64);

例 6-2 MGMT_IP_TARGET_TYPES

    DECLARE

     l_target_type   MGMT_IP_TARGET_TYPES;

    BEGIN

       -- specify the target type associated with this report

       -- in this case the target type is 'oracle_orgchart'

          l_target_type := MGMT_IP_TARGET_TYPES();

          l_target_type.extend(1);

          l_target_type(1) := 'oracle_orgchart';

    END;

MGMT_IP_PARAM_VALUE_LISTおよびMGMT_IP_PARAM_VALUE_RECORD

MGMT_IP_PARAM_VALUE_LISTタイプを使用して、パラメータ値をcreate_report_definition APIにp_parametersパラメータとして渡し、add_element_to_report_def APIにp_paremetersパラメータとして渡します。

    CREATE OR REPLACE TYPE MGMT_IP_PARAM_VALUE_LIST AS TABLE OF MGMT_IP_PARAM_VALUE_RECORD;

MGMT_IP_PARAM_VALUE_RECORDタイプを使用して、名前付きパラメータ値のペアを作成して、タイプMGMT_IP_PARAM_VALUE_LISTのオブジェクトに追加します。

    CREATE OR REPLACE TYPE MGMT_IP_PARAM_VALUE_RECORD

    AS OBJECT (PARAM VARCHAR2(100),  VALUE CLOB);

例6-3 MGMT_IP_PARAM_VALUE_RECORDおよびMGMT_IP_PARAM_VALUE_LIST

    DECLARE

          l_param_values  MGMT_IP_PARAM_VALUE_LIST;

    BEGIN

          l_param_values := MGMT_IP_PARAM_VALUE_LIST();

          l_param_values.extend(2);

          l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD(

            'oracle.sysman.eml.ip.render.elem.TextParamBean.textMessage',

            'Test Org Chart Monitoring');

          l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD(

            'oracle.sysman.eml.ip.render.elem.TextParamBean.textStyle',

            'OraInstructionText');

    END;

### 要素パラメータ

一部のレポート要素で使用されるパラメータは、それらの要素の動作を示します。この項では、特定のレポート要素に関連するパラメータをリストします。

#### 表要素パラメータ

表要素は、問合せ結果の表形式ビューを表示するために使用されます。問合せは、管理ビューに対して行う必要があります。

- 要素名: IPMSG_USER_TABLE_FROM_SQL

- 要素タイプ: IPMSG_ANY_TARGET_TYPE

時間間隔

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TimePeriodParam
必須 | いいえ
デフォルト値 | null
有効値 | 最後の24時間の場合は0:0 最後の7日間の場合は0:1 最後の31日間の場合は0:2
サマリー | エンコードされた時間間隔

ソート列

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.initialSortColumn。
必須 | いいえ。
デフォルト値 | 結果セット内の最初の列。
有効値 | 任意の有効な列名。
サマリー | このパラメータが設定されている場合、ソート列インジケータはこの列名の列について表示されます。設定されていない場合、ソート列インジケータは最初の列に表示されます。SQL問合せには、この列でソートするorder by句が含まれている必要があります。

ソート順序

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.initialSortOrder。
必須 | いいえ。
デフォルト値 | ascending。
有効値 | ascendingまたはdescending。
サマリー | このパラメータが設定されている場合、ソート列インジケータは値に応じて昇順または降順で表示されます。設定されていない場合、ソート列インジケータは昇順に表示されます。

名前/値ペアの表示

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.nameValueDisplay。
必須 | いいえ。
デフォルト値 |
有効値 | 正の整数。
サマリー | このパラメータが設定され、問合せから1行のみ返される場合、結果は名前/値ペアの縦方向のリストに表示されます。この値は、表示する必要のある名前/値列の数に設定する必要があります。通常は1です。

表示する行数

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.numRowsToShow。
必須 | いいえ。
デフォルト値 | 10
有効値 | 正の整数。
サマリー | 生成された表に一度に表示する行数。ユーザーは、UIコントロールを使用して他の行にスクロールできます。

PL/SQL文

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.sqlStatementIsPlSql
必須 | いいえ
デフォルト値 | false
有効値 | trueまたはfalse
サマリー | SQL文がPL/SQLかどうか

SQLまたはPL/SQL文

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.sqlStatement。
必須 | いいえ。
デフォルト値 | <なし>。
有効値 | 任意の有効なSQL SELECT文。
サマリー | SQL文は、ターゲット、ロケール情報、および開始/終了日の値をオプションでバインドできます。SQL文の書式には、バインドするオプションのバインド変数プレースホルダが含まれている必要があります。 バインド・プレースホルダ ??EMIP_BIND_RESULTS_CURSOR?? PL/SQL文とともに使用して、表示する結果を含む戻りカーソルをバインドする場合。 ??EMIP_BIND_TARGET_GUID?? SQLまたはPL/SQLとともに使用してターゲットGUIDをバインドする場合。 ??EMIP_BIND_START_DATE?? SQLまたはPL/SQLとともに使用して開始日をバインドする場合。 ??EMIP_BIND_END_DATE?? SQLまたはPL/SQLとともに使用して終了日をバインドする場合。 ??EMIP_BIND_TIMEZONE_REGION?? SQLまたはPL/SQLとともに使用してタイムゾーン・リージョンをバインドする場合。 ??EMIP_BIND_LOCALE_COUNTRY?? SQLまたはPL/SQLとともに使用してロケールの国をバインドする場合。 ??EMIP_BIND_LOCALE_LANGUAGE?? SQLまたはPL/SQLとともに使用してロケール言語をバインドする場合。 PL/SQL文でないかぎり、SQL文の最後にセミコロン（;）を追加しないでください。

例6-4 要素定義へのパラメータとしての無名PL/SQLブロックの指定

    l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD(

      'oracle.sysman.eml.ip.render.elem.sqlStatementIsPlSql',

      'true');

    l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD(

      'oracle.sysman.eml.ip.render.elem.sqlStatement',

      'BEGIN

        DECLARE

            rep_tz          VARCHAR2(200);

            user_tz_in          VARCHAR2(200);

            TYPE CURSOR_TYPE IS REF CURSOR;

            result_cursor_out CURSOR_TYPE;

            start_date_in DATE DEFAULT NULL;

            end_date_in  DATE DEFAULT NULL;

            query_string   VARCHAR(6000);

        BEGIN

            result_cursor_out := ??EMIP_BIND_RESULTS_CURSOR??;

            start_date_in := ??EMIP_BIND_START_DATE??;

            end_date_in := ??EMIP_BIND_END_DATE??;

            user_tz_in := ??EMIP_BIND_TIMEZONE_REGION??;

            select TIMEZONE_REGION into rep_tz from mgmt$target where TARGET_TYPE = ''oracle_emrep'';

            query_string := ''WITH dates AS (SELECT

          mgmt_view_util.adjust_tz(:1,:2,:3) as start_date,

          mgmt_view_util.adjust_tz(:4,:5,:6) as end_date

       from dual)

      SELECT

           label,

           time,

           sum(violations) --) as violations

       FROM(

           (

            SELECT

               ''''''||''NEW_LBL''||'''''' as label,

               mgmt_view_util.adjust_tz(rollup_timestamp, :7, :8) as time,

               average as violations --new violations

            FROM

               MGMT$METRIC_HOURLY

            WHERE

               key_value in (''''18'''',''''20'''',''''25'''') AND

               ROLLUP_TIMESTAMP > (SELECT start_date FROM dates) AND

               ROLLUP_TIMESTAMP < (SELECT end_date FROM dates) AND

               target_type = ''''oracle_emrep'''' AND

               metric_name = ''''TARGET_SECURITY_NEW_VIOLATIONS'''' AND

               metric_column = ''''NEW_VIOLATIONS'''' )

           UNION

           (

            SELECT

               ''''''||''FIXED_LBL''||'''''' as label,

               mgmt_view_util.adjust_tz(rollup_timestamp,:9,:10) as time,

               average as violations --cleared violations

            FROM

               MGMT$METRIC_HOURLY

            WHERE

               key_value in (''''18'''',''''20'''',''''25'''') AND

               ROLLUP_TIMESTAMP > (SELECT start_date FROM dates) AND

               ROLLUP_TIMESTAMP < (SELECT end_date FROM dates) AND

               target_type = ''''oracle_emrep'''' AND

               metric_name = ''''TARGET_SECURITY_CLEARED_VIOLATIONS'''' AND

               metric_column = ''''CLEARED_VIOLATIONS''''

             )

           )

       GROUP BY time, label

       ORDER BY time ASC'';

       OPEN result_cursor_out for query_string using start_date_in, user_tz_in, rep

    _tz, end_date_in, user_tz_in, rep_tz, user_tz_in, rep_tz, user_tz_in, rep_tz;

       END;

    END;');

行の最大数

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.maxNumberOfRowsAllowed。
必須 | いいえ。
デフォルト値 | 2000
有効値 | 任意のスカラー数値。
サマリー | 表に表示するために取得する最大行数を設定します。たとえば、上位10個のxyzの要素を表示するには、値を10に設定します。

nullデータ文字列置換

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.nullDataStringSubstitue
必須 | いいえ
デフォルト値 |
有効値 | 文字列
サマリー | 返されたnull値を置換する文字列

列による表の複数の表への分割

属性 | 説明
--- | ---
パラメータ名 | TableRenderBean.TABLE_SPLIT_COLUMN。
パラメータ文字列 | oracle.sysman.eml.ip.render.elem.TableRender.tableSplitColumn。
必須 | いいえ。
デフォルト値 | null。
有効値 | 任意の有効な列名。
サマリー | このパラメータが設定されている場合、この列の値が変更されると、表はサブヘッダーのある別の表に分割されます。データはこの列で並べ替える必要があります。

列グループ・ヘッダー

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.columnGroupHeadern。
必須 | いいえ。
デフォルト値 | null。
有効値 | 列グループに使用するヘッダー文字列。
サマリー | このパラメータでは、列ヘッダー文字列が提供されます。この列グループ・ヘッダーは、列をoracle.sysman.eml.ip.render.elem.TableRender.columnGroupStart Colnおよびoracle.sysman.eml.ip.render.elem.TableRender.columnGroupEndColnで指定された列間に分散します。n接尾辞は数値であり、最初の列グループを示す1から開始し、後続の列グループについては昇順に設定します。

列グループ開始列

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.columnGroupStartColn。
必須 | いいえ。
デフォルト値 | null。
有効値 | 任意の有効な列名。
サマリー | 特定の列グループの最初の列を指定します。n接尾辞は数値であり、最初の列グループを示す1から開始し、後続の列グループについては昇順に設定します。

列グループ終了列

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.columnGroupEndColn。
必須 | いいえ。
デフォルト値 | null。
有効値 | 任意の有効な列名。
サマリー | 特定の列グループの最後の列を指定します。n接尾辞は数値であり、最初の列グループを示す1から開始し、後続の列グループについては昇順に設定します。

セル内の値に対する別の行の使用

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.useSeparateRowsColumns。
必須 | いいえ。
デフォルト値 | null。
有効値 | 有効な列名のカンマ区切りリスト。
サマリー | このパラメータが設定されている場合、指定された特定の名前を持つ列の区切り値は、その値を含む行セル内の別の行に表示されます。カンマ区切り列名を追加することにより、この処理に複数の列を指定できます。

デリミタとしての別の行の使用

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.useSeparateRowsDelimiter
必須 | いいえ
デフォルト値 | ,（カンマ）
有効値 | 任意の文字列
サマリー | 文字列内のトークンを区切るために使用される文字

列内の重大度アイコン

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.severityColumn。
必須 | いいえ。
デフォルト値 | null。
有効値 | 任意の有効な列名。
サマリー | 返された有効な重大度値を表す重大度アイコンが置換されます。アイコンを省略するには、結果セットでこの列にnull値を含めます。

列内の可用性ステータス・アイコン

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.availabilityStatusColumn。
必須 | いいえ。
デフォルト値 | null。
有効値 | 任意の有効な列名。
サマリー | 返された有効な値を表す可用性ステータス・アイコンが置換されます。アイコンを省略するには、結果セットでこの列にnull値を含めます。

列でのイメージのレンダリング

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.imageFilenameColumns。
必須 | いいえ。
デフォルト値 | null。
有効値 | 列名のカンマ区切りリスト。
サマリー | 指定された列に特定のイメージ・ファイル名を表示するためのオプションのパラメータ。特定のイメージをレンダリングする列を示します。列名のカンマ区切りリストを指定します。返されるイメージ・ファイル名には、/images/xyz.gifのように/imagesから始まる相対パスが含まれている必要があります。通常は、SQLデコード・ファンクションを使用して、数値を適切なイメージ・ファイル名に変換します。

ターゲット・タイプ列

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.targetTypeColumns。
必須 | いいえ。
デフォルト値 | null。
有効値 | 列名のカンマ区切りリスト。
サマリー | 返される値が、同じタイプの表示文字列に変換される内部ターゲット・タイプとして使用される列を示すオプションのパラメータ。列名のカンマ区切りリストを指定します。

##### フィルタ要素

次の表要素は検索フィルタの作成に使用されます。この検索フィルタにより、ユーザーは複数の表の列に対して行をフィルタ処理することができます。3種類のフィルタ・タイプを利用できます。

- テキスト値

- SQL問合せから取得された値リスト

- 要素定義のカンマ区切りリストから取得された値リスト

フィルタ名の定義

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterNames。
必須 | はい。
デフォルト値 | null。
有効値 | フィルタ名のカンマ区切りリスト。
サマリー | カンマ区切りリストでフィルタ名を定義します。このパラメータはフィルタ要素の順序も定義します。

フィルタ・プロンプトの定義

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterPrompt<name>。
必須 | はい。
デフォルト値 | null。
有効値 | CF。
サマリー | 「レポート」ページでフィルタの<名前>に使用されるプロンプトを定義します。フィルタ値は、レポート要素のSQL文から`??EMIP_BIND_PARAM<name>??`によってアクセスされます。その他のフィルタ関連パラメータを使用せずに、ユーザーがテキスト入力フィールドから値を入力することを可能にするフィルタが定義されます。

SQLフィルタ

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterSql<name>。
必須 | いいえ。
デフォルト値 | null。
有効値 | 任意の有効なSQL SELECT文。
サマリー | テキスト入力フィールドのかわりにドリルダウン・メニューとしてUIで表示される、フィルタの<名前>の値リストの移入に使用されるSQL問合せを定義します。

フィルタ名のリスト

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterList<name>。
必須 | いいえ。
デフォルト値 | null。
有効値 | 値のカンマ区切りリスト。
サマリー | ドリルダウン・メニューとしてUIで表示される、フィルタの<名前>の値リストを定義します。

フィルタ名の変換リスト

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterTranslateValues<name>。
必須 | いいえ。
デフォルト値 | no。
有効値 | yesまたはno。
サマリー | `filterSql`または`filterList`によって提供された値をクライアント・ロケールに変換する必要があるかどうかを定義します。

フィルタのヒント・テキスト

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterTip<name>。
必須 | いいえ。
デフォルト値 | null。
有効値 | 英数字のテキスト。
サマリー | ユーザーがマウスをフィルタUI要素の上に移動すると表示される、ツールのヒントのテキストを定義します。

デフォルトのフィルタ名

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterDefault<name>。
必須 | いいえ。
デフォルト値 | %
有効値 | 英数字のテキスト文字列。
サマリー | フィルタの<名前>のデフォルト値を定義します。デフォルト値が指定されていない場合は、%が使用されます。

nullのデフォルトのフィルタ名

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterDefaultsToNull<name>。
必須 | いいえ。
デフォルト値 | null。
有効値 | yesまたはno。
サマリー | これを定義すると、デフォルト値は%ではなくnullになります。

グローバルなフィルタ要素

次のパラメータはフィルタ・システムでグローバルに動作します。

空の表の表示

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterStartEmpty。
必須 | いいえ。
デフォルト値 |
有効値 | yesまたはno。
サマリー | このパラメータの値がyesの場合、レポートは最初に空の表を表示します。ユーザーがUIでフィルタ・ボタンをクリックすると、表が移入されます。

空の表のヘッダー

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterEmptyTableHeaders。
必須 | いいえ。
デフォルト値 | null。
有効値 | 表ヘッダーのカンマ区切りリスト。
サマリー | 空の表で開始する際に使用される、表ヘッダーを定義します。

表ヘッダー型

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterEmptyTableHeaderTypes。
必須 | いいえ。
デフォルト値 | VARCHAR。
有効値 | 列型のカンマ区切りリスト。
サマリー | 空の表で開始する際に使用される、表ヘッダー型（列型）を定義します。これはカンマ区切りリストです。表ヘッダー型が指定されていない場合、表ヘッダー型はデフォルトのVARCHARになります。

表ヘッダー・テキストの上書き

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterHeaderText。
必須 | いいえ。
デフォルト値 | 検索フィルタ
有効値 | 列名のカンマ区切りリスト。
サマリー | デフォルトのフィルタ・セクションのヘッダー・テキストを上書きします。

デフォルトのフィルタ説明の上書き

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterDescriptionText。
必須 | いいえ。
デフォルト値 | 表の内容をフィルタ処理するには、値を入力してください。
有効値 | 英数字のテキスト文字列。
サマリー | デフォルトのフィルタ・セクションの説明テキストを上書きします。 .

デフォルトのフィルタ・ヒント・テキストの上書き

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterTipText。
必須 | いいえ。
デフォルト値 | 検索フィルタは大/小文字が区別されます。ワイルドカードとして「%」を使用してください。
有効値 | 英数字のテキスト文字列。
サマリー | デフォルトのフィルタ・セクションのヒント・テキストを上書きします。

デフォルトのボタン・テキストの上書き

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterButtonText。
必須 | いいえ。
デフォルト値 | OK
有効値 | 英数字のテキスト文字列。
サマリー | デフォルトのフィルタのボタン・テキストを上書きします。 .

空の表のテキスト

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.filterEmptyTableText。
必須 | いいえ。
デフォルト値 | （戻された行はありません）
有効値 | 英数字のテキスト文字列。
サマリー | フィルタ処理が実行される前に、空の表に表示されるテキストを指定します。

##### 表内のハイパーリンク

次のパラメータは、ハイパーリンクを表内に設定し、より優れたマスター/詳細ビュー間のリンク・ナビゲーションを組み込むために使用されます。このハイパーリンクは、（「ターゲット・セレクタ」ページを飛ばして）ターゲット・ホームページの「レポート」タブに直接リンクします。このメソッドは、最初に「ターゲット・セレクタ」ページをユーザーに表示する、`oracle.sysman.eml.ip.render.elem.TableRender.columnDestReportTitle<num>`を使用する場合の代替手段となります。

レポートへのリンク

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.columnDestHomepageReportTitle<num>。
必須 | いいえ。
デフォルト値 | null。
有効値 | レポート定義リンク。
サマリー | ターゲット・ホームページ上のレポート定義へのリンクが作成されること以外は、oracle.sysman.eml.ip.render.elem.TableRender.columnDestReportTitle<num>と同様です。

列の数の表示

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.numberOfColumnsShowed。
必須 | いいえ。
デフォルト値 | SQL内の列の数。
有効値 | 数値。
サマリー | 要素SQLからUIに表示される列の数を定義します。SQL問合せからその他の列は表示されませんが、詳細レポートにデータを公開するためのハイパーリンクの作成には使用できます。

ターゲット名の表示

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.columnDestTargetIndex<num>。
必須 | いいえ。
デフォルト値 | null。
有効値 |
サマリー | ターゲット名が含まれる列（表示されていない場合があります）を指定します。ターゲット名は、遅延バインディング・レポートでターゲット選択を移入するためのリンクで使用されます。

ターゲット・タイプの表示

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.columnDestTypeIndex<num>。
必須 | いいえ。
デフォルト値 | null。
有効値 |
サマリー | ターゲット・タイプが含まれる列（表示されていない場合があります）を指定します。ターゲット・タイプは、遅延バインディング・レポートでターゲット選択を移入するためのリンクで使用されます。

URLの表示

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TableRender.columnDestURLIndex<num>。
必須 | いいえ。
デフォルト値 | null。
有効値 |
サマリー | 指定された表要素に対する任意のURLが含まれる列（表示されていない場合があります）を指定します。

例6-5 リンクによる詳細レポートへのドリルダウンが可能なマスター・レポートを定義する、レポート定義

    begin

      declare

        l_target_types MGMT_IP_TARGET_TYPES;

        l_param_classes MGMT_IP_PARAM_CLASSES;

        l_param_values MGMT_IP_PARAM_VALUE_LIST;

        l_report_guid RAW(16);

        l_element_guid RAW(16);

        begin

          l_report_guid := mgmt_ip.create_report_definition (

            p_title_nlsid => 'My Master Report',

            p_description_nlsid => 'A master report to show master/detail',

            p_owner => 'SYSMAN',

            p_category_nlsid => 'Test Reports',

            p_sub_category_nlsid => 'Master and Detail',

            p_late_binding_target_types => null,

            p_late_binding_multi_targets => 0,

            p_system_report => 0,

            p_component_name => 'oracle_database',

            p_show_table_of_contents => 1);

          l_param_values := MGMT_IP_PARAM_VALUE_LIST();

          l_param_values.extend(17);

          l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.sqlStatement',

            'SELECT TARGET_NAME "Target Name", TARGET_TYPE "Target Type",
    ''/em/console/targets'' FROM MGMT$TARGET WHERE TARGET_NAME LIKE ??EMIP_BIND_
    PARAMNAME?? AND TARGET_TYPE LIKE ??EMIP_BIND_PARAMTYPE??');

          l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterNames',

            'NAME,TYPE');

          l_param_values(3) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.columnDestReportId1',

            'My Detail Report');

          l_param_values(4) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.columnDestParamColumnIndexes1',

            '0,1');

          l_param_values(5) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterPromptNAME',

            'Name');

          l_param_values(6) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterTipNAME',

            'Filter on the target names');

          l_param_values(7) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterPromptTYPE',

            'Target Type');

          l_param_values(8) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterTipTYPE',

            'Filter on the target types');

          l_param_values(9) := MGMT_IP_PARAM_VALUE_RECORD (

       'oracle.sysman.eml.ip.render.elem.TableRender.filterStartEmpty', 'yes');

          l_param_values(10) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterEmptyTableHeaders',

            'Target Name, Target Type');

          l_param_values(11) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterSqlTYPE',

            'select distinct target_type from mgmt$target');

          l_param_values(12) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.numberOfColumnsShowed',

            '2');

          l_param_values(13) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterHeaderText',

            'My Filter Header');

          l_param_values(14) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterTipText',

            'My Tip Text');

          l_param_values(15) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterDescriptionText',

            'My Filter description');

          l_param_values(16) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.filterButtonText',

            'My button text');

          l_param_values(17) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.TableRender.columnDestURLIndex2',

            '2');

          l_element_guid := mgmt_ip.add_element_to_report_def (

            p_report_guid => l_report_guid,

            p_element_name_nlsid => 'user_table_from_sql',

            p_element_type_nlsid => 'any_target_type',

            p_header_nlsid => 'My Master Report Table',

            p_element_order => 1,

            p_element_row => 1,

            p_parameters => l_param_values,

            p_targets => null);

          l_report_guid := mgmt_ip.create_report_definition (

            p_title_nlsid => 'My Detail Report',

            p_description_nlsid => 'A detail report to show master/detail reports.',

            p_owner => 'SYSMAN',

            p_category_nlsid => 'Test Reports',

            p_sub_category_nlsid => 'Master and Detail',

            p_late_binding_target_types => null,

            p_late_binding_multi_targets => 0,

            p_system_report => 0,

            p_component_name => 'oracle_database',

            p_show_table_of_contents => 1);

          l_param_values := MGMT_IP_PARAM_VALUE_LIST();

          l_param_values.extend(1);

          l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD (

            'oracle.sysman.eml.ip.render.elem.sqlStatement',

            'SELECT TARGET_NAME "Target Name", TYPE_VERSION "Version" FROM MGMT$TARGET
    WHERE TARGET_TYPE LIKE ??EMIP_BIND_PARAM2?? AND TARGET_NAME LIKE ??EMIP_BIND_
    PARAM1??');

          l_element_guid := mgmt_ip.add_element_to_report_def (
            p_report_guid => l_report_guid,
            p_element_name_nlsid => 'user_table_from_sql',
            p_element_type_nlsid => 'any_target_type',
            p_header_nlsid => 'My Detail Report Table',
            p_element_order => 1,
            p_element_row => 1,
            p_parameters => l_param_values,
            p_targets => null);
          commit;
        end;
    end;/

#### グラフ要素

グラフ要素は、問合せ結果のグラフィカル・ビューを表示するために使用されます。問合せは、管理リポジトリ・ビューに対して行う必要があります。

- 要素名: IPMSG_USER_CHART_FROM_SQL

- 要素タイプ: IPMSG_ANY_TARGET_TYPE

グラフ・タイプ

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.chartType
必須 | いいえ
デフォルト値 | pieChart
有効値 | barChart lineChart pieChart timeSeriesChart timeSeriesBarChart
サマリー | 表示するグラフ・タイプ

時間間隔

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TimePeriodParam
必須 | いいえ
デフォルト値 | null
有効値 | 最後の24時間の場合は0:0 最後の7日間の場合は0:1 最後の31日間の場合は0:2
サマリー | エンコードされた時間間隔

塗りつぶし

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.fill。
必須 | いいえ。
デフォルト値 | none。
有効値 | none、absoluteまたはcumulative。
サマリー | 線グラフで線の下の領域を塗りつぶすかどうかを示します。 none: 線の下を塗りつぶしません。 absolute: 線はnone設定と同一ですが、線の下の領域が塗りつぶされます。 cumulative: 線の値が追加または重ねられ、線の下の領域が塗りつぶされます。 塗りつぶし属性を使用する場合は注意し、グラフ内のデータが累積と絶対のどちらかであるかについてレポート・ユーザーが混乱しないようにしてください。

高さ

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.height。
必須 | いいえ。
デフォルト値 | 200
有効値 | n。nは正の整数に正しく解析される任意の文字列です。
サマリー | グラフの表示高さをピクセル単位で設定します。

水平または垂直

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.visualOrientation。
必須 | いいえ。
デフォルト値 | horizontal。
有効値 | horizontalまたはvertical。
サマリー | グラフの表示方向。この属性は、chartType属性がbarChartまたはtimeSeriesChartに設定されている場合にのみ有効です。この属性はpieChartには影響しません。

凡例の位置

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.legendPosition。
必須 | いいえ。
デフォルト値 | east。
有効値 | default、east、south。
サマリー | 凡例を配置する場所をグラフへの相対で指定します。

PL/SQL文

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.sqlStatementIsPlSql。
必須 | いいえ。
デフォルト値 | false。
有効値 | trueまたはfalse。
サマリー | SQL文がPL/SQL文であることを示すにはtrueに設定します。

SQLまたはPL/SQL文

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.sqlStatement。
必須 | いいえ。
デフォルト値 | <なし>。
有効値 | 任意の有効なSQL SELECT文またはPL/SQLブロック。
サマリー | SQLまたはPL/SQL文は、ターゲット、ロケール情報、および開始/終了日の値をオプションでバインドできます。文の書式には、バインドするオプションのバインド変数プレースホルダが含まれている必要があります。 バインド・プレースホルダ ??EMIP_BIND_RESULTS_CURSOR?? PL/SQL文とともに使用して、表示する結果を含む戻りカーソルをバインドする場合。 ??EMIP_BIND_TARGET_GUID?? SQLまたはPL/SQLとともに使用してターゲットGUIDをバインドする場合。 ??EMIP_BIND_START_DATE?? SQLまたはPL/SQLとともに使用して開始日をバインドする場合。 ??EMIP_BIND_END_DATE?? SQLまたはPL/SQLとともに使用して終了日をバインドする場合。 ??EMIP_BIND_LOCALE_COUNTRY?? SQLまたはPL/SQLとともに使用してロケールの国をバインドする場合。 ??EMIP_BIND_LOCALE_LANGUAGE?? SQLまたはPL/SQLとともに使用してロケール言語をバインドする場合。 PL/SQL文でないかぎり、SQL文の最後にセミコロン（;）を追加しないでください。

積上げ棒グラフ

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.stacked。
必須 | いいえ。
デフォルト値 | false。
有効値 | trueまたはfalse。
サマリー | 棒グラフが積上げかどうかを示します。

グラフ・タイトル

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.title
必須 | いいえ
デフォルト値 | <なし>
有効値 |
サマリー | 全米障害者法（Americans with Disabilities Act）に準拠するためにグラフを識別するグラフ・タイトル

幅

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.width。
必須 | いいえ。
デフォルト値 | 400
有効値 | n。nは正の整数に正しく解析される任意の文字列です。
サマリー | 要素の表示幅をピクセル単位で設定します。

Y軸ラベル

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.yAxisLabel。
必須 | いいえ。
デフォルト値 | <なし>。
有効値 | 文字列。
サマリー | このパラメータが指定されている場合は、Y軸を持つグラフのY軸ラベルとして使用されます。

スライスの割合

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.pieShowSlicePercentLabels。
必須 | いいえ。
デフォルト値 | <なし>。
有効値 | trueまたはfalse。
サマリー | このパラメータが指定されている場合は、各スライスに割合値でラベルが付けられるかどうかを制御します。この属性は、pieChart以外のchartTypesに対しては無視されます。

凡例に値を表示

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.ChartParamController.pieValuesInLegend。
必須 | いいえ。
デフォルト値 | value。
有効値 | percent、valueまたはnone。
サマリー | 円グラフでは、このパラメータは円スライスの値が円スライスのラベルとともに凡例に含まれるかどうかを指定します。この属性のデフォルト値はvalueです。percentまたはvalueを指定した場合は、数値が円スライス・ラベルとともに「スライス・ラベル（数値）」いう形式で表示されます。percentが指定されている場合は、すべてのスライス値の合計に対する割合が計算されて表示されます。それ以外の場合は、スライスのRAW値が表示されます。凡例で値を省略するには、このパラメータの値としてnoneを指定します。この属性は、pieChart以外のchartTypesに対しては無視されます。

### メトリック詳細要素

メトリック詳細レポート要素に直接関係するクラスおよびそのパラメータは、`oracle.sysman.eml.ip.render.elem`パッケージにあります。この要素は、`oracle.sysman.emSDK.eml.EmlConstants`クラスに定義されているパラメータ関連定数にもアクセスします。

- 要素名: IPMSG_METRIC_DETAILS

- 要素タイプ: IPMSG_ANY_TARGET_TYPE

ターゲット・タイプ

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.MetDetInternalTargetType
必須 | いいえ
デフォルト値 | oracle_database
有効値 | 任意の有効な内部ターゲット・タイプ名
サマリー | グラフに表示するターゲットのタイプ

メトリック名

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.MetDetSelectedMetric
必須 | はい
デフォルト値 |
有効値 | 選択したターゲット・タイプに応じた有効なメトリック名
サマリー | グラフ化するメトリック

メトリック列名

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.MetDetSelectedMetricColumn
必須 | はい
デフォルト値 |
有効値 | 選択したメトリックおよびターゲット・タイプに応じた有効な列名
サマリー | グラフ化するメトリックの列

時間間隔

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TimePeriodParam
必須 | いいえ
デフォルト値 | null
有効値 | 最後の24時間の場合は0:0 最後の7日間の場合は0:1 最後の31日間の場合は0:2
サマリー | エンコードされた時間間隔

幅

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.MetDetWidth。
必須 | いいえ。
デフォルト値 | 300
有効値 | n。nは正の整数に正しく解析される任意の文字列です。
サマリー | ピクセル単位でのイメージの幅。

高さ

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.MetDetHeight。
必須 | いいえ。
デフォルト値 | 300
有効値 | n。nは正の整数に正しく解析される任意の文字列です。
サマリー | ピクセル単位でのイメージの高さ。

凡例の位置

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.MetDetLegendPosition
必須 | いいえ
デフォルト値 |
有効値 | south（デフォルト）、east
サマリー | グラフとの相対での凡例の位置

### テキスト要素パラメータ

テキスト要素は、レポートに対して提供するメッセージ・テキストを表示するために使用します。

- 要素名: IPMSG_STYLED_TEXT

- 要素タイプ: IPMSG_ANY_TARGET_TYPE

メッセージ・テキスト

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TextParamBean.textMessage。
必須 | いいえ。
デフォルト値 | ""（空の文字列）。
有効値 | 任意のメッセージ。
サマリー | レポートに表示するメッセージを設定します。

メッセージ・スタイル

属性 | 説明
--- | ---
パラメータ名 | oracle.sysman.eml.ip.render.elem.TextParamBean.textStyleClass。
必須 | いいえ。
デフォルト値 | OraInstructionText。
有効値 | OraInstructionText。 OraTipText。
サマリー | 表示時に採用するメッセージ・テキストのスタイル・クラスを指定します。

リンク先

属性 | 説明
--- | ---
パラメータ名 | oracle.sysmn.eml.ip.render.elem.TextParamBean.textDestination。
必須 | いいえ。
デフォルト値 | なし。
有効値 | 任意のURI。
サマリー | このテキスト要素のオプションのリンク先を指定します。

### レポート全体のパラメータ

次のパラメータは、レポート定義内のすべてのレポート要素に適用されます。

動的時間セレクタ

レポート・ユーザーがレポートを表示する特定の時間間隔を選択できるようにする動的時間間隔セレクタをレポート定義に提供します。動的時間間隔オプションは、「レポート」タブからレポートを表示したときのみ使用可能であり、ターゲット・ホームページ・レポートでは使用できません。ターゲット・ホームページ・レポートで使用される時間間隔は、レポート定義に対して設定されるデフォルトの時間間隔です。レポート定義ファイルの作成時にPL/SQL APIを使用してこれを指定するには、レポート定義に対して次のパラメータを設定します。

例6-6 動的時間セレクタ・レポート定義パラメータ

     l_param_values := MGMT_IP_PARAM_VALUE_LIST();

        l_param_values.extend(3);

        -- this report has a time period associated with it

        l_param_values(1) := MGMT_IP_PARAM_VALUE_RECORD(

          'oracle.sysman.eml.ip.render.elem.TimePeriodOption',

          'true');

        -- the user can customize the time period while viewing the report

        l_param_values(2) := MGMT_IP_PARAM_VALUE_RECORD(

          'oracle.sysman.eml.ip.render.elem.TimePeriodUserCust',

          'true');

        -- set the default value to last 24 hours

        l_param_values(3) := MGMT_IP_PARAM_VALUE_RECORD(

          'oracle.sysman.eml.ip.render.elem.TimePeriodParam',

          '0:0');

`l_param values`を`mgmt_ip.create_report_definition`に`p_parameters`引数として渡します。

「SQLからの表」または「SQLからのグラフ」レポート要素を使用している場合は、Information Publisherによって開始日と終了日が自動的にバインドされるようなSQLレポート文を構成できます。これは、例6-7に示すように開始日および終了日値のプレースホルダ（`??EMIP_BIND_START_DATE??`など）を挿入することによって行います。

例6-7 開始日および終了日の自動バインディング

      'SELECT COLUMN_LABEL, ROLLUP_TIMESTAMP, AVERAGE

            FROM MGMT$METRIC_HOURLY

            WHERE TARGET_GUID = ??EMIP_BIND_TARGET_GUID??

            AND METRIC_LABEL = ''Load''

            AND KEY_VALUE = '' ''

            AND ROLLUP_TIMESTAMP > ??EMIP_BIND_START_DATE??

            AND ROLLUP_TIMESTAMP < ??EMIP_BIND_END_DATE??

            ORDER BY ROLLUP_TIMESTAMP'

詳細は、「SQLからの表」および「SQLからのグラフ」に関するオンライン・ヘルプ・マニュアルを参照してください。

## 開発のガイドライン

レポート定義ファイルのPL/SQLを定義する場合は、次のガイドラインに従うことをお薦めします。

- PL/SQL APIを使用してレポート定義を作成します。

  レポート定義は、標準以外のコーディング構成ではなくPL/SQL APIを使用して作成する必要があります。PL/SQL APIを使用すると、コードが管理リポジトリ・スキーマの変更から隔絶されます。

- 管理プラグインに追加するすべてのレポート定義はSYSTEMレポートとして定義する必要があります。

  `create_report_definition`メソッドをコールするたびに、`p_system_report => 1`を渡す必要があります。SYSTEMレポート定義は、Enterprise Managerコンソール内では異なる方法で扱われます。たとえば、SYSTEMレポート定義を管理者が削除または編集することはできません。

- レポート所有者を指定します。

  `mgmt_user.get_repository_owner`から返された値を各レポート定義の所有者として指定する必要があります。`mgmt_user.get_repository_owner`以外の所有者を指定するレポート定義は、ターゲット・ホームページの「レポート」サブタブに表示されません。ただし、これらのレポート定義はInformation Publisherの「レポート定義」ページに表示されます。

- コンポーネント名はターゲット・タイプに設定する必要があります。

  Enterprise Managerが特定のレポート定義を特定の管理プラグインと関連付けるためには、コンポーネント名をターゲット・タイプに設定する必要があります。次に例を示します。

            BEGIN

         -- specify the target type associated with this report

         -- in this case the target type is 'oracle_orgchart'

            l_target_type := MGMT_IP_TARGET_TYPES();

            l_target_type.extend(1);

            l_target_type(1) := 'oracle_orgchart';

            l_report_title_nlsid := 'Org breakdown by title (oracle_orgchart)<>';

            l_report_owner := mgmt_user.get_repository_owner;

         -- create a report definition for the report

            l_report_guid := mgmt_ip.create_report_definition (

              p_title_nlsid                => l_report_title_nlsid,

              p_description_nlsid          => 'Charts showing the breakdown by title',

              p_owner                      => l_report_owner,

              p_category_nlsid             => 'Test Org Chart Reports',

              p_sub_category_nlsid         => 'Interesting Org Data',

              p_late_binding_target_types  => l_target_type,

              p_show_table_of_contents     => 0,

              p_system_report              => 1,

              p_component_name             => l_target_type(1)

              );

「SQLからのグラフ」および「SQLからの表」要素を使用している場合

- 要素が単一の非集計ターゲット（のみ）を受け入れる場合（ほとんどの管理プラグイン・ターゲット・タイプのケース）は、要素の`oracle.sysman.eml.ip.render.elem.adjustTimes`パラメータを`true`に設定することで、「SQLからのグラフ」および「SQLからの表」要素に組み込まれた自動タイムゾーン日付調整を利用できます。このパラメータが設定されている場合、SQL問合せにバインドされている開始日と終了日は、レポート・タイムゾーンからターゲット・タイムゾーンに調整されます。反対に、問合せから返された日付は、ターゲット・タイムゾーンからレポート・タイムゾーンに調整されます。

- 要素が複数のターゲットまたは集計ターゲットを受け入れる場合は、ユーザーが日付値のタイムゾーン調整の処理に責任を持ちます。`??EMIP_BIND_TIMEZONE_REGION??`バインド変数からレポート・タイムゾーンを取得できます。レポートの表示者が表示されている日付を理解するためには、レポートに表示される日付がレポート・タイムゾーンに従っているか、各日付に関連付けられているタイムゾーンを明示的に表示する必要があります。次の例に、一般的な使用例を示します。

  例6-8 特定のターゲットのタイムゾーンからレポート・タイムゾーンへの、SELECT文で返される日付の調整

      select mgmt_view_util.adjust_tz(tbl.date, tgt.timezone_region,              ??EMIP_BIND_TIMEZONE_REGION??)

      from mgmt$target tgt, sometable tbl

      where <your where clause here>

  例6-9 レポート・タイムゾーンからターゲット・タイムゾーンへの、SELECT文のWHERE句で使用されるレポート時間間隔の開始日と終了日の調整

      select <your selected columns here>

      from mgmt$target tgt, sometable tbl

      where

        tgt.target_guid = ??EMIP_BIND_TARGET_GUID?? and

        tbl.Mydate > MGMT_VIEW_UTIL.ADJUST_TZ(

         ??EMIP_BIND_START_DATE??,

         ??EMIP_BIND_TIMEZONE_REGION??,

         tgt.TIMEZONE_REGION)

      and

        tbl.Mydate < MGMT_VIEW_UTIL.ADJUST_TZ(

         ??EMIP_BIND_END_DATE??,

         ??EMIP_BIND_TIMEZONE_REGION??,

         tgt.TIMEZONE_REGION)

推奨されるコーディング・プラクティス

PL/SQL APIメソッドのコール時には、位置表記法ではなく名前付き表記法を使用する必要があります。コールに`=>`がある場合は、名前付き表記法を使用しています。次に例を示します。

       l_report_guid := mgmt_ip.create_report_definition (

         p_title_nlsid                => 'Org breakdown by title (oracle_orgchart)',

         p_description_nlsid          => 'Charts showing the breakdown by title',

         p_owner                      => mgmt_user.get_repository_owner,

         p_category_nlsid             => 'Test Org Chart Reports',

         p_sub_category_nlsid         => 'Interesting Org Data',

         p_late_binding_target_types  => l_target_type,

         p_late_binding_multi_targets => 0,

         p_show_table_of_contents     => 0,

         p_system_report              => 1,

         p_component_name             => 'oracle_orgchart'

         );

名前付き表記法を使用すると、PL/SQL APIの将来のリリースに対するコード変更からレポート定義が隔絶され、コードの自己文書化にも役立ちます。