BIRT 데이터 액세스 이벤트 핸들러의 외부 유형

이 주제에서는 데이터 액세스 이벤트 핸들러를 코딩할 때 사용하는 EGL 외부 유형을 검토합니다. 배경 정보에 대해서는 "EGL BIRT 보고서", "BIRT 핸들러" 및 "BIRT 데이터 액세스 이벤트 핸들러"를 참조하십시오.

ColumnMetaData

ColumnMetaData 유형은 데이터 세트의 각 열에 있는 유형 및 이름 정보를 포함합니다. DataSetInstance 유형의 변수를 사용하여 작업하고 getColumnMetaData 함수를 호출할 때 이 변수를 받습니다.

ColumnMetaData 유형의 변수는 다음 함수를 사용 가능하게 합니다.
  • getColumnCount는 데이터 세트의 행에 있는 열 수를 리턴합니다.
     element.getColumnCount() returns (INT)
  • getColumnName은 인덱스 번호로 식별되는 열 이름을 리턴합니다.
     element.getColumnName( index INT in ) returns (STRING)
  • getColumnDisplayName은 인덱스 번호로 식별되는 열 표시 이름을 리턴합니다. BIRT 보고서 디자이너는 데이터 탐색기 보기에 열을 표시할 때 이 표시 이름을 사용하고 보고서 디자인 프로세스 중에 데이터 탐색기 보기에서 열을 끌어서 테이블에 놓으면 테이블에서 열 표제를 자동으로 생성합니다.
     element.getColumnDisplayName( index INT in ) returns (STRING)

    이 EGL 함수와 연관된 Java™ 메소드는 getColumnLabel입니다.

  • getColumnAlias은 인덱스 번호로 식별되는 열 별명을 리턴합니다. 보고서 디자인에서 이를 참조하면 보고서 디자이너에서 이 별명을 열에 대해 더 짧게 또는 더 한 하나 이상의 인식 가능한 이언급할 때 보고 디자이너는 열을 위한 짧거나 더 많은 인식할 수 있는 이름으로서 이 별명을 사용할 수 있습니다. 예를 들면, row["$FN"] 대신에 row["firstName"]를 표현식에 쓸 수 있도록 firstName의 별명으로 이름 지정된 열 $FN을 제공할 수 있습니다.
     element.getColumnAlias( index INT in ) returns (STRING)
  • getColumnTypeName은 인덱스 번호로 식별되는 열 유형을 리턴합니다. 인덱스 번호는 행에서 열의 위치를 나타냅니다. 리턴 값은 "Integer", "Double", "Decimal", "String", "Date" 또는 "Any"입니다.
     element.getColumnTypeName( index INT in )returns (STRING)

    첫 번째 열은 0이 아닌 1입니다.

  • getColumnNativeTypeName은 인덱스 번호로 식별되는 원시 유형의 열을 리턴합니다. 인덱스 번호는 행에서 열의 위치를 나타냅니다. 원시 유형은 데이터 소스에 유요한 유형 중 하나이고 데이터 소스 유형에 따라 다릅니다. 예를 들어 플랫 파일의 경우, 원시 유형은 bigdecimal, time, timestamp, date, double, int 또는 string입니다. JDBC 데이터 소스의 경우, 지원되는 원시 유형은 액세스되는 데이터베이스 관리 시스템 유형에 따라 다릅니다.
     element.getColumnNativeTypeName( index INT in )returns (STRING)

    첫 번째 열은 0이 아닌 1입니다.

  • isComputedColumn은 열을 데이터 소스에서 검색하지 않고 계산할지 여부를 나타내는 부울을 리턴합니다. 계산된 열은 일반적으로 데이터 소스에서 검색된 하나 이상의 열을 포함하여 표현식 결과를 표시합니다. 예를 들어, 데이터 소스에서 검색된 각 행에 열 firstName과 lastName이 포함되는 경우 다음 표현식을 사용하여 계산된 열 fullName을 정의할 수 있습니다.
     row["firstName"] + " " + row["lastName"]

    데이터 탐색기 보기에서 작업할 때 데이터 세트에 대한 계산된 열을 정의합니다.

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

DataSetInstance

DataSetInstance 유형의 변수는 데이터 세트를 나타내는 보고서 요소를 참조하는데, 이 보고서 요소는 열 세트이며 "BIRT 핸들러"에 설명되어 있습니다. 이 변수는 다음 함수를 사용 가능하게 합니다.
  • getName은 디자인 파일에서 표현된 데이터 세트에 주어진 이름을 리턴합니다.
     element.getName()returns (STRING)
  • getExtensionID는 BIRT ODA(Open Data Access) 확장 ID 값을 리턴합니다. 예를 들어 SQL 조회를 사용하는 데이터 소스의 경우 이 값은 "org.eclipse.birt.report.data.oda.jdbc.JdbcSelectDataSet"입니다.
     element.getExtensionID()returns (STRING)
  • getExtensionProperty는 BIRT ODA(Open Data Access) 확장 특성 값을 리턴합니다.
     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는 문자열 유형의 필드이고, 보고서 엔진이 데이터 세트를 파생시키는 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_num, fNamelName)은 해당 EGL 필드 이름(예: customerNumber, firstNamelastName)과 다를 수 있습니다.

자세한 정보는 DataSetRow 및 UpdatableDataSetRow 절을 참조하십시오.

DataSetRow

DataSetRow 유형의 변수는 보고서 엔진에서 제공하는 데이터 행을 참조합니다. 이 변수는 다음 함수를 사용 가능하게 합니다.
  • getDataSet는 데이터 세트를 리턴합니다.
     element.getDataSet()returns (DataSetInstance)
  • getColumnValue는 인덱스 번호로 식별되는 열 값을 리턴합니다.
     element.getColumnValue(index INT in)returns (ANY)

    첫 번째 열은 0이 아닌 1입니다.

  • getColumnValue는 이름으로 식별되는 열 값을 리턴합니다.
     element.getColumnValue(columnName STRING in) returns (ANY)

또한 해당 함수를 UpdatableDataSetRow 유형의 변수에 사용할 수도 있습니다.

DataSourceInstance

DataSourceInstance 유형의 변수는 데이터 세트를 나타내는 보고서 요소를 참조하는데, 이 보고서 요소는 "BIRT 핸들러"에 설명된 데이터 소스에 대한 표시입니다. 이 변수는 다음 함수를 사용 가능하게 합니다.
  • getName은 디자인 파일에서 표현된 데이터 소스에 주어진 이름을 리턴합니다.
     element.getName()returns (STRING)
  • getExtensionID는 BIRT ODA(Open Data Access) 확장 ID 값을 리턴합니다. 예를 들어 JDBC 데이터 소스의 경우 이 값은 "org.eclipse.birt.report.data.oda.jdbc"입니다.
     element.getExtensionID()returns (STRING)
  • getExtensionProperty는 다음과 같이 BIRT ODA(Open Data Access) 확장 특성 값을 리턴합니다.
    • 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와 비밀번호를 설정할 수 있습니다. 다음은 userNamepassword 변수가 글로벌 변수이고 함수 외부에서 설정되었다고 가정하는 코드 예입니다.

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

ReportContext

ReportContext 유형의 이벤트 핸들러 매개변수는 보고서 매개변수에 대한 액세스를 제공합니다. 두 함수가 사용 가능합니다.
  • setParameterValue는 보고서 매개변수의 값을 설정하며, 이름으로 식별됩니다.
     reportContext.setParameterValue
     ( parameterName STRING in, parameterValue ANY in ) 
  • 이와 유사하게 getParameterValue는 보고서 매개변수의 값을 가져옵니다.
     reportContext.getParameterValue
     ( parameterName STRING in) returns (ANY)  

UpdatableDataSetRow

UpdatableDataSetRow 유형의 변수는 보고서 엔진에 데이터 행을 제공합니다. 이 변수는 DataSetRow와 관련하여 설명된 함수를 사용할 수 있습니다.

두 Setter 함수도 사용할 수 있습니다.
  • setColumnValue는 인덱스 번호로 식별되는 열 값을 설정합니다.
     element.setColumnValue(index INT in, value ANY in)

    첫 번째 열은 0이 아닌 1입니다.

  • setColumnValue는 이름으로 식별되는 열 값을 설정합니다.
     element.setColumnValue(columnName STRING in, value ANY in)