LOTUSSCRIPT 言語


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

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

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

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

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

Dim objRef As prodClass

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

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

Dim objRef As New prodClass [(argList])]

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

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

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

変数に独自のオブジェクト参照を割り当てる 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

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

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

[A1].Value = 247000

第 2 の例

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

詳しくは、「LotusScript ランゲージリファレンス」の「カッコ表記法」および製品のマニュアルを参照してください。

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

ドット表記法について詳しくは、「LotusScript ランゲージリファレンス」の「ドット表記法」を参照してください。

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

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

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

db.Title = "HQEVB Group Discussion"

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

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

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

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

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

たとえば、Freelance では、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

関連項目