製品クラスとオブジェクト

LotusScript® と共に使用する各 IBM® ソフトウェアには、あらかじめ定義された多くのクラスが用意されています。製品のオブジェクト (製品クラスのインスタンス) は、ユーザー定義のオブジェクト (ユーザー定義のクラスのインスタンス) と似ていますが、そのオブジェクトを操作するスクリプトから離れて独自に存在できます。例えば、スクリプトの代わりに製品インターフェースを使用して、コマンドボタンを作成し、名前を付けて文字列を指定できます。次にコマンドボタンの「click」イベントにスクリプトを添付できます。ユーザーがコマンドボタンをクリックすると、コマンドボタンの形が変わり、「click」イベントスクリプトが実行されます。

ユーザー定義のクラスの詳細については、「ユーザー定義のデータ型とクラス」を参照してください。

変数参照の作成と製品オブジェクトへの参照の割り当て、製品オブジェクトプロパティの取得と設定、製品オブジェクトのメソッドの使用、製品オブジェクトのイベントへのスクリプトの添付、製品オブジェクトの削除などができます。詳しくは、ソフトウェアのマニュアルを参照してください。

オブジェクトを作成する

製品は自動的にオブジェクトをいくつか作成します (スプレッドシートのセルなど)。製品のユーザーインターフェースを使用してオブジェクトを作成できます。また、スクリプトでもオブジェクトを作成できます。

スクリプトでオブジェクトを作成するには、特定のクラスのインスタンスを作成するために製品が必要とする引数を指定し、変数に対するオブジェクト参照を割り当てる必要があります。通常、構文は次のとおりです。

Dim objRef As prodClass

Set objRef = New [ prodClass ] [( argList )]

Dim ステートメントはオブジェクト参照変数を宣言します。Set...New ステートメントは製品オブジェクトを作成し、変数にそのオブジェクト参照を代入します。これらの操作を 1 つのステートメントにまとめることもできます。

Dim objRef As New prodClass [( argList ])]

メソッドを使用してオブジェクトを作成することもできます。例えば、Notes R4 では、NotesDatabase Create メソッドを使用して新しい .NSF ファイルを作成します。

コンテナメソッドを使用してスクリプトでオブジェクトを作成することもできます。コンテナメソッドは、作成するオブジェクトを含むオブジェクトに適用します。例えば、Freelance Graphics® for Windows はオブジェクトを作成するためのコンテナメソッドを用意しています。

オブジェクトを参照する

すでに存在するオブジェクトをスクリプトで参照するには、通常は製品またはユーザーがそのオブジェクトに付けた名前を使用できます。独自のオブジェクト参照を割り当てることもできます (場合によっては必須です)。

変数に独自のオブジェクト参照を割り当てる 1 つの方法は、オブジェクト変数を次のように宣言することです。

Dim objRef As prodClass

続いて、宣言したオブジェクト変数を製品オブジェクトにバインドします。以下に例を示します。

Set objRef = Bind [ prodClass ] [( objName ])]

オブジェクト参照の設定に使用する関数やメソッドは、製品によって提供されます。

以下の Initialize サブルーチンは、3 つの Notes オブジェクト (データベース、ビュー、文書) に対して機能します。このサブルーチンは、HR_ADMIN サーバー上の ORGSTRUC.NSF を操作するために Dim...New ステートメントを使用して新しい NotesDatabase オブジェクトを作成し、Set ステートメントのメソッドを使用してビューと文書に対する変数参照を設定します。GetView は NotesDatabase クラスのメソッドで、GetFirstDocument は NotesView クラスのメソッドです。

Sub Initialize
   Dim db As New NotesDatabase("HR_ADMIN", "ORGSTRUC.NSF")
   Dim view As NotesView, doc As NotesDocument
   Set view = db.GetView("Main View")
   Set doc = view.GetFirstDocument
End Sub

カッコ表記法

一部の 製品では、オブジェクト参照変数ではなくカッコで囲んだ名前を使用して ソフトウェアのオブジェクトを識別できます。

例えば、製品によっては次に示す第 2 の例の代わりに以下の表記を使用できます。

[A1].Value = 247000

第 2 の例

Dim myCell As Cell
Set myCell = Bind Cell("A1")
myCell.Value = 247000

詳しくは、「カッコ表記法」と製品のマニュアルを参照してください。

プロパティ、メソッド、イベント

それぞれの製品クラスは、プロパティ、メソッド、イベントの集合を定義します。ユーザー定義のクラスを扱うときと同様に、ドット表記法を使用してプロパティとメソッドを指定します。

ドット表記法の詳細については、「ドット表記法」を参照してください。

プロパティはオブジェクトの属性です。プロパティは変数のように値を持っています。プロパティの値は、取得と設定ができます。プロパティによっては取得のみ、あるいは設定のみしかできないものもあります。

メソッドはオブジェクトの操作です。メソッドを呼び出してクラスに関するアクションを実行します。

イベントはオブジェクト関連のアクションです。イベントにはアプリケーション内でアクティビティを実行するスクリプトを添付できます。イベントが発生すると、イベントに添付されたスクリプトが実行されます。例えば、Click イベントスクリプトで Title プロパティの値を設定できます。

db.Title = "HQEVB Group Discussion"

ユーザーが記述したスクリプトをユーザーが指定したイベントに添付する処理は、通常、製品が行います。IBMScript の On Event ステートメントを使用してサブルーチンをオブジェクトイベントに添付することもできます。

例えば DB オブジェクトは、Notes/Domino NotesDatabase クラスのインスタンスです。このオブジェクトには、FileName、FilePath、Title を含む多くのプロパティがあります。

Title プロパティの値は、データベースのタイトルを指定する文字列です。スクリプトでは Title の値の取得と設定ができます。取得のみ可能なのは、ファイルシステム中のデータベースの位置を指定する FileName と FilePath です。

オブジェクトの削除

製品オブジェクトやオブジェクト変数を Delete ステートメントを使用して削除できることがあります。明示的に宣言して製品オブジェクトにバインドしたオブジェクト参照変数には、スコープがあります。スクリプト内で作成されたオブジェクトへのすべてのオブジェクト参照 (複数の場合もあります) がスコープの外であれば、オブジェクト自体は削除されます。製品の中には、実際のオブジェクトを削除するメソッドを提供しているものもあります。例えば Notes では、NotesDatabase クラスの Remove メソッドを使用して、.NSF ファイルを削除します。

コレクションクラス

一部の 製品にはコレクションクラスがあります。これはコンテナクラスとも呼ばれます。コレクションオブジェクト (コレクションクラスのインスタンス) はオブジェクトのコレクションを含みます。

例えば、Freelance Graphics では、Application オブジェクトは Document コレクションクラスのインスタンスを含んでいます。各 Document オブジェクトは Pages コレクションクラスのインスタンスを含み、各ページオブジェクトは ObjectCollection クラスのインスタンスを含みます。ObjectCollection オブジェクトにはテキストボックス、グラフ、表、DrawObject クラスから派生したクラスに属するその他のオブジェクトを含めることができます。

派生クラス (クラス継承とも呼ばれます) の詳細については、「ユーザー定義のデータ型とクラス」の「派生クラス」を参照してください。

ForAll ループやインデックスを使用して、コレクションクラスの各メンバにアクセスできます。次のスクリプトでは、ネストされた 3 つの ForAll ループを使用して、コレクション全体を通して繰り返します。スクリプトは個々の TextBlock オブジェクト内でインデックスを使用し、各 TextBox オブジェクトのリストエントリレベル 2 から 5 を斜体に設定します。

Dim level As Integer
ForAll doc In CurrentApplication.Documents
   ForAll page In Document.Pages
      ForAll obj In Page.Objects
         ' If the object is a TextBlock, set the font
         ' to Garamond, and set list entries at levels 
         ' 2 through 5 to Italic.
         If obj.IsText Then ' IsText is a DrawObject property.
            obj.Font.FontName = "Garamond"
            For level% = 2 to 5
               obj.TextProperties(level%).Font.Italic = TRUE
            Next level%
         End If
      End ForAll
   End ForAll
End ForAll