BIRT データ・アクセス・イベント・ハンドラーの外部型

このトピックでは、データ・アクセス・イベント・ハンドラーをコーディングする際に使用する、EGL の外部型について概説します。 背景情報については、『EGL BIRT レポート』、『EGL BIRT ハンドラー』、および『BIRT データ・アクセス・イベント・ハンドラー』を参照してください。

ColumnMetaData

ColumnMetaData 型の変数には、データ・セットにある各列の型および名前の情報が入ります。 このような変数は、DataSetInstance 型の変数を使用する場合、および getColumnMetaData 関数を呼び出す場合に受け取ります。

ColumnMetaData 型の変数では、以下の関数を使用できます。
  • getColumnCount は、データ・セットの行にある列の数を返します。
     element.getColumnCount() returns (INT)
  • getColumnName は、索引番号で指定された列の名前を返します。
     element.getColumnName( index INT in ) returns (STRING)
  • getColumnDisplayName は、索引番号で指定された列の表示名を返します。 BIRT Report Designer は、「データ・エクスプローラー」ビューで列を表示する際にこの名前を使用します。また、レポート設計プロセスの中で、「データ・エクスプローラー」ビューから列をドラッグしてテーブルにドロップした際に、テーブルの列見出しを自動的に生成します。
     element.getColumnDisplayName( index INT in ) returns (STRING)

    この EGL 関数と関連付けられている Java™ メソッドは、getColumnLabel です。

  • getColumnAlias は、索引番号で指定された列の別名を返します。 レポート設計者は、レポート設計内で列を参照する際に、その列の短い名前または分かりやすい名前として、この別名を使用できます。 例えば、$FN という名前の列の別名を firstName にした場合は、式に row["$FN"] ではなく、row["firstName"] と記述できます。
     element.getColumnAlias( index INT in ) returns (STRING)
  • getColumnTypeName は、行の列の位置を表す索引番号で指定された列の型を返します。 戻り値は、「Integer」、「Double」、「Decimal」、「String」、「Date」、または「Any」です。
     element.getColumnTypeName( index INT in )returns (STRING)

    第 1 列は数字 0 ではなく 1 です。

  • getColumnNativeTypeName は、行の列の位置を表す索引番号で指定された列のネイティブ型を返します。 ネイティブ型はデータ・ソースで有効な型の 1 つで、データ・ソースのタイプによって異なります。 例えばフラット・ファイルの場合、ネイティブ型は、bigdecimal、time、timestamp、date、double、int、または string などになります。 JDBC データ・ソースの場合、サポートされるネイティブ型は、アクセス先のデータベース管理システムのタイプによって異なります。
     element.getColumnNativeTypeName( index INT in )returns (STRING)

    第 1 列は数字 0 ではなく 1 です。

  • isComputedColumn は、列がデータ・ソースから取得されるのではなく、計算されるかどうかを示す Boolean を返します。 算出列には、式の結果 (通常、データ・ソースから取得した 1 つ以上の列を含みます) が表示されます。 例えば、データ・ソースから取得した各行に firstName および lastName という名前の列が含まれている場合、以下の式を使用して、fullName という名前の算出列を定義することができます。
     row["firstName"] + " " + row["lastName"]

    データ・セットの算出列は、「データ・エクスプローラー」ビューでの作業中に定義します。

     element.isComputedColumn(index INT in) returns (BOOLEAN)

DataSetInstance

DataSetInstance 型の変数は、データ・セット (列のセットのこと。『EGL BIRT ハンドラー』に説明があります) を表すレポート要素を参照します。 この変数では、以下の関数を使用できます。
  • getName は、設計ファイルに記載されたデータ・セット名を返します。
     element.getName()returns (STRING)
  • getExtensionID は、BIRT オープン・データ・アクセス (ODA) 拡張 ID の値を返します。 例えば、SQL 照会を使用するデータ・ソースの場合、この値は「org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet」などになります。
     element.getExtensionID()returns (STRING)
  • getExtensionProperty は、BIRT オープン・データ・アクセス (ODA) 拡張プロパティーの値を返します。
     element.getExtensionProperty(propertyName STRING in) returns (STRING)
  • setExtensionProperty は、ODA 拡張プロパティーの値を設定します。
     element.setExtensionProperty
       (propertyName STRING in, value STRING in) 
  • getDataSource は、データ・セットに固有のデータ・ソースを取得します。
     element.getDataSource () returns (DataSourceInstance)
  • getColumnMetaData は、データ・セットにある各列の型および名前の情報が入った、ColumnMetaData 型の変数を取得します。 入手可能な情報の種類について詳しくは、getColumnMetaData に関するセクションを参照してください。
     element.getColumnMetaData () returns (ColumnMetaData)
DataSetInstance 型の変数では、以下のフィールドも使用できます。
  • queryText は STRING 型のフィールドで、レポート・エンジンがデータ・セットを取得する際の元となる SQL 照会を保持します。 SQL 照会を使用できない場合、queryText の値は空ストリングになります。
    次の例では、レポート・エンジンが、SQL 照会を開く前にイベント・ハンドラー (イベント・タイプは beforeOpen、データ・セットは「dataSet」) を呼び出しています。
    function setQuery( d DataSetInstance, c ReportContext ) 
       { eventType = beforeOpen, elementName = "dataSet" }
       queryStr string;
       if( region == "EUR" )
          queryStr = "select region, country, city from locations 
             where region = ¥"EUROPE¥"";
       else 
          queryStr = "select region, country, city from locations 
             where region = ¥"ASIA¥"";
    	  end
    	  d.queryText = queryStr;
    end

    この例の場合、イベント・ハンドラーは、ビジネスの状態に応じて何らかの SQL 照会ストリングを設定します。 region 変数は、この関数の外部でグローバルに宣言および設定されているものとします。

『EGL BIRT ハンドラー』で紹介および説明されているサンプル・プログラムを以下に示します。
package EGLDataSources;

program arrayProg type BasicProgram {}
	
	 function main()
     arr customer[0];
		  cust customer;
		  
		  cust.customerNumber = 102;
		  cust.firstName = "Jonathan";
     cust.lastName = "Swift";
     arr.appendElement(cust);
		  
     cust.customerNumber = 103;
     cust.firstName = "Mark";
     cust.lastName = "Twain";
		  arr.appendElement(cust);
     
     designFile string = "eglDataSourcesRpt.rptdesign";
     rptFile string = "eglDataSourcesArrayRpt.pdf";

     myHandler arrayHandler = new arrayHandler;
     rpt BIRTReport = new BIRTReport
         (designFile, null, rptFile, "pdf", myHandler);
		
     myHandler.setCustomerArray(arr);
     rpt.createReportFromDesign();
	end
end

record customer type basicrecord
	customerNumber int;
	firstName string;
	lastName string;
end
次のコードで、スクリプト・データ・セット (EGL コードによって提供されるデータ・セット) は、動的配列の各要素にある複数のフィールドから構成されています。 openEvent および fetchEvent というイベント・タイプのイベント・ハンドラーを使用してレポート・エンジンに指定する任意のフィールド・セットを、スクリプト・データ・セットとして使用できます。
package EGLDataSources;  

Handler arrayHandler type BIRTHandler 
   index int;
   customerArr customer[];	

   function setCustomerArray(a customer[])
      customerArr = a;	
   end 	 	

   function openFunction( d DataSetInstance )
      { eventType = openEvent, elementName = "myDataSet" }
      index = 0; 	
   end

   function fetchFunction(d DataSetInstance, row UpdatableDataSetRow )
      returns( boolean ) 	
      { eventType = fetchEvent, elementName = "myDataSet" } 		

      index = index + 1; 		

      if( index <= customerArr.getSize() )
         row.setColumnValue( "customer_num", customerArr[index].customerNumber ); 			
         row.setColumnValue( "fname", customerArr[index].firstName );
         row.setColumnValue( "lname", customerArr[index].lastName );
         return (TRUE); 		
      else 			
         return (FALSE); 		
      end
   end
end

データ・セットの列名 (customer_numfName、および lName など) は、対応する EGL フィールド名 (customerNumberfirstName、および lastName など) と異なる場合があることに注意してください。

その他の詳細については、DataSetRow および UpdatableDataSetRow に関するセクションを参照してください。

DataSetRow

DataSetRow 型の変数は、レポート・エンジンによって提供されたデータの行を参照します。 この変数では、以下の関数を使用できます。
  • getDataSet は、データ・セットを返します。
     element.getDataSet()returns (DataSetInstance)
  • getColumnValue は、索引番号で指定された列の値を返します。
     element.getColumnValue(index INT in)returns (ANY)

    第 1 列は数字 0 ではなく 1 です。

  • getColumnValue は、名前で指定された列の値を返します。
     element.getColumnValue(columnName STRING in) returns (ANY)

これらの関数は、UpdatableDataSetRow 型の変数でも使用できます。

DataSourceInstance

DataSourceInstance 型の変数は、データ・ソース (データのソースを示す表現。『EGL BIRT ハンドラー』に説明があります) を表すレポート要素を参照します。 この変数では、以下の関数を使用できます。
  • getName は、設計ファイルに記載されたデータ・ソース名を返します。
     element.getName()returns (STRING)
  • getExtensionID は、BIRT オープン・データ・アクセス (ODA) 拡張 ID の値を返します。 例えば、JDBC データ・ソースの場合、この値は「org.eclipse.birt.report.data.oda.jdbc」などになります。
     element.getExtensionID()returns (STRING)
  • getExtensionProperty は、以下のような、BIRT オープン・データ・アクセス (ODA) 拡張プロパティーの値を返します。
    • odaDriverClass (リレーショナル・データベースの JDBC アクセスに使用されるドライバー・クラス用)
    • odaUser (データベースへの接続に使用されるユーザー ID 用)
    • odaPassword (データベースへの接続に使用されるパスワード用)
     element.getExtensionProperty(propertyName STRING in) returns (STRING)
  • setExtensionProperty は、ODA 拡張プロパティーの値を設定します。
     element.setExtensionProperty
       (propertyName STRING in, value STRING in) 

DataSourceInstance 型のパラメーターを使用すると、BIRT レポート・エンジンがリレーショナル・データベースに接続する際に使用するユーザー ID およびパスワードを設定することができます。 サンプル・コードを以下に示します。userName および password はグローバル変数で、この関数の外部で設定されているものとします。

   function setUser( d DataSourceInstance, c ReportContext ) 
      { eventType = beforeOpen, elementName = "myDataSource" }
      d.setExtensionProperty( "odaUser", userName );
      d.setExtensionProperty( "odaPassword", password );
   end

ReportContext

ReportContext 型のイベント・ハンドラー・パラメーターでは、レポート・パラメーターにアクセスすることができます。 次の 2 つの関数を使用できます。
  • setParameterValue は、名前で指定されたレポート・パラメーターの値を設定します。
     reportContext.setParameterValue
     ( parameterName STRING in, parameterValue ANY in ) 
  • 同様に、getParameterValue は、レポート・パラメーターの値を取得します。
     reportContext.getParameterValue
     ( parameterName STRING in) returns (ANY)  

UpdatableDataSetRow

UpdatableDataSetRow 型の変数は、レポート・エンジンにデータの行を提供します。 この変数では、DataSetRow に関して説明されているすべての関数を使用できます。

また、以下の 2 つの setter 関数を使用することができます。
  • setColumnValue は、索引番号で指定された列の値を設定します。
     element.setColumnValue(index INT in, value ANY in)

    第 1 列は数字 0 ではなく 1 です。

  • setColumnValue は、名前で指定された列の値を設定します。
     element.setColumnValue(columnName STRING in, value ANY in)

フィードバック