ActiveReports for .NET 18.0J
スクリプトでコードの使用
ActiveReportsユーザーガイド > 基本操作 > セクションレポートの基本操作 > 共通操作 > スクリプトでコードの使用

セクションレポートでは、スクリプトを使用し、コントロール、関数、クラス、名前空間などにアクセスすることができます。スクリプトでクラスを作成してメソッドを呼び出すか、Windowsフォームからレポートのスクリプトにコードを追加する処理を実行することができます。次のトピックでは、スクリプトの基本的な使い方について説明します。

以下の手順は、Visual Studioのプロジェクトにセクションレポート(コード、またはXML)のテンプレートを追加したことを前提としています。詳細については、「クイックスタート」を参照してください。

コントロールにアクセスする

下記のサンプルコードは、Detailセクションに貼り付けたTextBox1のTextプロパティの値を「こんにちは」に変更して表示しています。

  1. レポートのスクリプトタブでは、[オブジェクト]の一覧を展開し、「Detail」を選択します。Detailセクションで使用可能なイベントの一覧が表示されます。
  2. [イベント]の一覧から、「Format」を選択します。スクリプトでFormatイベントのイベント処理メソッドが作成されます。

    Visual Basic

    Visual Basicスクリプト(Detail_Formatイベント内に貼り付けます)
    コードのコピー
    Me.TextBox1.Text = "こんにちは"
    

    または

    Visual Basicスクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
                                                       
    CType(rpt.Sections("Detail1").Controls("TextBox1"), TextBox).Text = "こんにちは"
    

    C#

    C#スクリプト(Detail_Formatイベント内に貼り付けます)
    コードのコピー
                                                        
    this.textBox1.Text = "こんにちは";
    

    または

    C#スクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
                                                         
    ((TextBox)rpt.Sections["detail"].Controls["textBox1"]).Text = "こんにちは";
    

クラス内の関数にアクセスする

AddNamedItemメソッドを使用し、スクリプトからプロジェクト内のクラスの関数にアクセスすることができます。データベース接続文字列やSQLクエリなどの機密情報を、RPXファイルに保存せずにスクリプトに保存する場合は便利です。

  1. Formのコードビューで、プロジェクトに「clsMyItem」クラスを追加します。

    Visual Basic

    Visual Basicコード
    コードのコピー
    Public Class clsMyItem
    End Class
    

    C#

    C#コード
    コードのコピー
    public partial class clsMyItem
    {
    }
    
  2. クラス内にパブリック関数を追加します。

    Visual Basic

    Visual Basicコード(クラス内に貼り付けます)
    コードのコピー
    Public Function getMyItem() As String 
        getMyItem = "こんにちは" 
    End Function
    

    C#

    C#コード(クラス内に貼り付けます)
    コードのコピー
    public string getMyItem() 
    { 
        return "こんにちは"; 
    }
    
  3. レポートのデザイナビューに移動し、デザイナ面の周囲にあるグレーの領域をダブルクリックします。ReportStartイベントのイベント処理メソッドが作成されます。
  4. ハンドラに次の処理を行うコードを追加します。

    Visual Basic

    Visual Basicコード(ReportStartイベントの前または内に貼り付けます)
    コードのコピー
                                                          
    Me.AddNamedItem("myItem", new clsMyItem())
    

    C#

    C#コード(ReportStartイベントの前または内に貼り付けます)
    コードのコピー
    this.AddNamedItem("myItem", new clsMyItem());
    
  5. Visual StudioのツールボックスからTextBoxコントロールをデザイナ面上にドラッグ&ドロップします。
  6. レポートのスクリプトタブで[オブジェクト]の一覧を展開し、「Detail」を選択します。Detailセクションで使用可能なイベントの一覧が表示されます。
  7. [イベント]の一覧から、「Format」を選択します。スクリプトでFormatイベントのイベント処理メソッドが作成されます。
  8. イベントに次のスクリプトを追加し、レポート上に配置したコントロールにアクセスして、指定した項目を読み込みます。

    Visual Basic

    Visual Basicスクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
    Me.TextBox1.Text = myItem.getMyItem()
    

    または

    Visual Basicスクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
                                                     
    CType(rpt.Sections("Detail1").Controls("TextBox1"), TextBox).Text = myItem.getMyItem()
    

    C#

    C#スクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
                                                        
    this.textBox1.Text = myItem.getMyItem();
    

    または

    C#スクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
                                                         
    ((TextBox)rpt.Sections["detail"].Controls["textBox1"]).Text = myItem.getMyItem();
    
  9. 結果を表示するには、 [プレビュー] タブに移動します。

名前空間を参照する

AddScriptReferenceを使用して、.NETまたは他の名前空間を参照することができます。AddScriptReferenceは、スクリプトがプロジェクトで初期化されていないアセンブリにアクセスする場合にのみ必要です。たとえば、スクリプトで「System.Data.DataSet」にアクセスするために、"AddScriptReference("System.Data.Dll")"を呼び出して参照を追加することができます。

Visual Basic

Visual Basicコード(Formのコード内に貼り付けます。YourReportNameを実際のレポート名に変更します。)
コードのコピー
Private Sub runReport() 
      Dim rpt as new YourReportName 
      rpt.AddScriptReference("System.Data.dll") 
      rpt.Run() 
End Sub

C#

C#コード(Formのコード内に貼り付けます。YourReportNameを実際のレポート名に変更します。)
コードのコピー
private void runReport() 
{ 
      YourReportName rpt = new YourReportName; 
      rpt.AddScriptReference("System.Data.dll"); 
      rpt.Run(); 
}

メモ:カスタムアセンブリを使用する場合、厳密な名前付きアセンブリを作成、グローバルアセンブリキャッシュ(GAC)に登録する必要があります。

デザイナのスクリプトタブでカスタムアセンブリを使用するために、デザイナに読み込む前にレポートにアセンブリ参照を追加する必要があります。

  1. カスタムアセンブリを作成し、GACに登録します。
  2. セクションレポート(XML)を使用して新しいサンプルを作成します。
  3. レポートデザイナをフォームに追加します。
  4. Form_Loadイベントに以下のコードを追加します。

    Visual Basic

    Visual Basic.NET code. Paste INSIDE the Form code. Replace YourReportName with the name of your report.
    コードのコピー
    Dim rpt As SectionReport = New SectionReport()
    Dim xtr As System.Xml.XmlTextReader = New System.Xml.XmlTextReader("..\..\SectionReport2.rpx")
    rpt.LoadLayout(xtr)
    xtr.Close()
    rpt.AddScriptReference("ClassLibrary1.dll")
    designer1.Report = rpt

    C#

    C# code. Paste INSIDE the Form code. Replace YourReportName with the name of your report.
    コードのコピー
    SectionReport rpt = new SectionReport(); 
    System.Xml.XmlTextReader xtr = new System.Xml.XmlTextReader(@"..\..\SectionReport2.rpx");
    rpt.LoadLayout(xtr);
    xtr.Close();
    rpt.AddScriptReference(@"ClassLibrary1.dll");
    designer1.Report = rpt;
  5. サンプルを実行します。
  6. デザイナのスクリプトタブを開きます。

これで、デザイナのスクリプトタブでカスタムアセンブリを使用できます。

スクリプトにコードを追加する

FormのコードビューでAddCodeメソッドを使用し、スクリプトにコードを追加することができます。AddCodeメソッドでは、実行時にスクリプトでコードセグメントを挿入します。これは、データベース接続文字列やSQLクエリ文字列などの機密情報を、RPXファイルに保存せずにスクリプト内で使用する場合や、動的にスクリプトのコードを変更したい場合に便利です。

  1. レポートのコードビューで、次のようにパブリック関数を追加します。

    Visual Basic

    Visual Basicコード(レポートのクラス内に貼り付けます)
    コードのコピー
    Public Function addThisCode() As String 
       Dim sCode As String = "Public Function ShowACMessage() As String" + Environment.NewLine + "ShowACMessage = ""my Added Code""" + Environment.NewLine + "End Function"
       addThisCode = sCode 
    End Function 
    

    C#

    C#コード(レポートのクラス内に貼り付けます)
    コードのコピー
    public string addThisCode() 
    { 
       string sCode = "public string ShowACMessage(){return \"my Added Code\";}"; 
       return sCode; 
    } 
    
  2. レポートのデザイナビューに移動して、デザイナ面の周囲にあるグレーの領域をダブルクリックします。ReportStartイベントのイベント処理メソッドが作成されます。
  3. ハンドラに次の処理を行うコードを追加します。

    Visual Basic

    Visual Basicコード(ReportStartイベント内に貼り付けます)
    コードのコピー
    Me.AddCode(addThisCode())
    

    C#

    C#コード(ReportStartイベント内に貼り付けます)
    コードのコピー
                                                     
    this.AddCode(addThisCode());
    
  4. スクリプトタブで、[オブジェクト]の一覧をドロップダウンし、「Detail」を選択します。Detailセクションで使用可能なイベントの一覧がドロップダウンで表示されます。
  5. [イベント]の一覧から、「Format」を選択します。スクリプトでFormatイベントのイベント処理メソッドが作成されます。
  6. 次の処理を行うスクリプトを追加します。

    Visual Basic

    Visual Basicスクリプト(Detail_Formatイベント内に貼り付けます)
    コードのコピー
    Me.TextBox1.Text = ShowACMessage()
    

    または

    Visual Basicスクリプト(Detail_Formatイベント内に貼り付けます)
    コードのコピー
    CType(rpt.Sections("Detail1").Controls("TextBox1"), TextBox).Text = ShowACMessage()
    

    C#

    C#スクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
    this.textBox1.Text = ShowACMessage();
    

    または

    C#スクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
    ((TextBox)rpt.Sections["detail"].Controls["textBox1"]).Text = ShowACMessage();
    

メソッドを呼び出すクラスを作成する

スクリプトでクラスを作成し、メソッドを呼び出すことができます。

  1. スクリプトタブに移動し、次のコードを追加します。

    Visual Basic

    Visual Basicスクリプト(スクリプトのタブ内に貼り付けます)
    コードのコピー
    Public Class MyFuncs
       Public  Sub New()
       End Sub
       Public Function ShowMyString() As String
          Return "サンプル文字列"
       End Function
    End Class
    

    C#

    C#スクリプト(スクリプトのタブ内に貼り付けます)
    コードのコピー
    public class MyFuncs
    {
       public MyFuncs()
       {
       }
       public string ShowMyString()
       {
          return "サンプル文字列";
       }
    }
    
  2. スクリプトタブで、[オブジェクト]の一覧を展開し、「Detail」を選択します。Detailセクションで使用可能なイベントの一覧がドロップダウンに表示されます。
  3. [イベント]の一覧から、「Format」を選択します。スクリプトでFormatイベントのイベント処理メソッドが作成されます。
  4. 次の処理を行うスクリプトを追加します。

    Visual Basic

    Visual Basicスクリプト(Detail1_Formatイベント内に貼り付けます)
    コードのコピー
    Dim f As MyFuncs =  New MyFuncs()
    Me.TextBox1.Text = f.ShowMyString
    

    または

    Visual Basicスクリプト(Detail1_Formatイベント内に貼り付けます)
    コードのコピー
    Dim f As MyFuncs =  New MyFuncs() 
    CType(rpt.Sections("Detail1").Controls("TextBox1"), TextBox).Text = f.ShowMyString
    

    C#

    C#スクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
    MyFuncs f = new MyFuncs();
    this.textBox1.Text = f.ShowMyString();
    

    または

    C#スクリプト(detail_Formatイベント内に貼り付けます)
    コードのコピー
    MyFuncs f = new MyFuncs();
    ((TextBox)rpt.Sections["detail"].Controls["textBox1"]).Text = f.ShowMyString();
    
メモ: レポートを参照するには、従来の"rpt"も使用可能ですが、"this"(C#)または"Me"(Visual Basic)キーワードの使用を推奨します。
関連トピック