レッスン 1 では、アクションをクリックすればデータベース名をダイアログボックスに表示するスクリプトを作成します。「Learning LotusScript®」というサンプルのディスカッションデータベースを作成しておいてください。
手順 A: アクションを作成する
このレッスンでは、ユーザーがアクションをクリックすると実行するスクリプトを作成します。
- Learning LotusScript データベースが設計ペインに表示されていない場合は、それを開きます。
- 設計ペインの [フォーム] をクリックします。右側のワークペインから [メイントピック] を開きます。フォームがワークペインの最上部に表示されます。プログラムペインが表示されます。
- [作成] - [アクション] を選択します。[アクションのプロパティ] インフォボックスが表示されます。
- [アクション] インフォボックスで、アクションに「Display title」という名前をつけます。インフォボックスを閉じます。
- プログラムペインの [実行] メニューから [LotusScript] を選択します。
- [オブジェクト] タブのプログラム可能なイベントの一覧から [Click] を (選択されていなければ) 選択します。
手順 B: [リファレンス] タブにアクセスする
インフォリストがプログラムペインに表示されます。リストには 2 つのタブ [オブジェクト] と [リファレンス] があります。[リファレンス] タブが表示されない場合は、プログラムペインを区切るバーをドラッグします。[オブジェクト] タブにはプログラムに使用するイベントやオブジェクトが表示されます。[リファレンス] タブには、Notes クラス、プロパティ、メソッド、LotusScript 言語の使用に関する情報が入っています。この手順では、次のことを学習します。
- Notes クラスとは「現実の世界にあるもの」をスクリプトで表現する手段です。例えば、データベースはユーザーが Notes 内で操作する現実の世界にあるものですが、それをスクリプトで表すには NotesDatabase クラスを使用します。
- プロパティはクラスの属性です。例えば、データベースにはすべて名前がありますが、同じように、NotesDatabase クラスには Title プロパティがあります。
- メソッドはクラスの動作 (アクション) です。データベースは他のデータベースを複製できるため、NotesDatabase クラスには Replicate メソッドがあります。このように、クラスを使用すると、そのプロパティとメソッドも使用できます。
- LotusScript 言語と Notes のクラスは関連していますが、同じものではありません。クラスにはスクリプトから Domino へのインタフェースがあります。LotusScript 言語には変数を宣言する構文、条件とループを作成する構文、計算などの演算を実行する構文があります。Notes のクラスがないと、LotusScript は Notes にアクセスできません。
次の手順では何も作成しません。Domino クラスに精通することを目的とします。
- プログラムペインで [リファレンス] タブを選択します。
- インフォリストのサイズを大きくするには、ペインの端をドラッグします。
- ドロップダウンメニューから [Domino: Classes] を選択します。[リファレンス] タブには使用可能なクラスが表示されます。
- スクロールバーを使用して使用可能なクラスを調べます。クラス名の多くは Domino で実際に使用する用語と同じになっています。
- [NotesDatabase] クラスの三角アイコンをクリックしてを展開します。
- [NotesDatabase] クラスの下に表示される [Properties] を展開します。
- [NotesDatabase] クラスの下に表示される [Methods] を展開します。
- ドロップダウンリストから [LotusScript Language] を選択します。
- [All] を展開します。[リファレンス] タブには LotusScript 言語の各部が表示されます。
- LotusScript のヘルプのリストをスクロールしてください。[Dim] と [Messagebox] を探します。
手順 C: スクリプトを入力する
これまでの手順でスクリプトを入力する準備が整いました。プログラムペインで、次の例のとおりにサブルーチンを編集します。大文字と小文字を区別する必要はありませんが、プログラムペインでは LotusScript キーワードの最初の文字を大文字にする必要があります。クラス、プロパティ、メソッドの名前を大文字にする必要はありません。連続する引用符 (行 3 に 2 つの引用符が 1 組、行 4 に 4 つの引用符が 2 組) の間に空白は入れません。
Sub Click(Source As Button)
Dim db As NotesDatabase
Set db = New NotesDatabase( "", "Learning LotusScript.nsf" )
Messagebox """" + db.Title + """",, "Title of database"
End Sub
これが、プログラムペインに表示されるコードです。
手順 D: スクリプトのコンパイルとテストを行う
コンパイルとはスクリプトを実行可能コードに変換するプロセスです。アクションのスクリプトを保存するか、スクリプトを作成した設計要素を閉じて保存すると、スクリプトがコンパイルされます。
- [ファイル] - [保存] を選択します。
- 「スクリプトエラーによりデータを保存しませんでした。」というメッセージが表示された場合は、プログラムペインの最下部に表示されるエラーを確認します。入力した内容をダブルチェックして、手順 C のスクリプトと同じかどうかを確認します。
- [設計] - [Notes でのプリビュー] を選択します。または Notes クライアントから作成したデータベースを開き、[メイントピック] フォームを使用して文書を作成するか、既存の文書を開きます。
- アクションバーの [Display title] アクションをクリックします。Notes のダイアログボックスに「Title of database」と「Learning LotusScript」が表示されます。
成功。
よくあるエラーはデータベースのファイル名を正しく指定しない場合です。この場合「db」は空の NotesDatabase オブジェクトを示します。Title プロパティが空の文字列を表示した場合は、スクリプトのデータベースファイル名が正しいかどうか、およびサーバー名が 2 つの連続した引用符 (空白なし) であることを確認してください。修正したら再コンパイルして、再度テストし直してください。
- 終了したら、Domino Designer に戻り、[メイントピック] フォームを閉じます。
手順 E: スクリプトを編集する
スクリプトを保存した後で編集する必要はありませんが、必要となった場合のために手順を示します。
- Learning LotusScript データベースが設計ペインに表示されていない場合は、それを開きます。
- 設計ペインの [フォーム] をクリックします。右側のワークペインから [メイントピック] を開きます。
- アクションの一覧が表示されない場合は境界線を調整して表示します。
- [Display title] アクションを選択します。
レビュー: スクリプトの動作
入力したスクリプトの意味は次のように表現できます。ローカルコンピュータに保存されている Learning LotusScript.nsf データベースにアクセスします。このデータベースを参照するには「db」という名前を使用します。
データベース名を表示します。
行 1: サブルーチンを開始する
Sub Click (Source As Button) はサブルーチンの始点を定義します。この行は自動的に作成されます。
行 2: オブジェクト変数を宣言する
Dim db As NotesDatabase は変数「db」を宣言します。この変数は NotesDatabase クラスのインスタンスです。変数がクラスのインスタンスとして宣言されると、その変数はオブジェクトと呼ばれます。変数名「db」は独自に変更できます。
- Dim は、オブジェクト変数を宣言されると LotusScript に伝えます。変数を宣言するときはいつでも Dim を (As といっしょに) 使用します。例: Dim x As Integer Dim
name As String Dim view as NotesView
- 「db」はオブジェクト名です。
- NotesDatabase はクラス名です。
行 3: オブジェクトの値を設定する
Set db = New NotesDatabase( "", "Learning LotusScript.nsf") は、ローカルに保存されている Learning LotusScript.nsf データベースを参照するオブジェクト「db」の値を設定します。
- Set db = は、New から返される値と同じに db を設定することを LotusScript に伝えます。
- New は、新しいオブジェクトを構築することを LotusScript に伝えます。
- NotesDatabase は、新しいオブジェクトが NotesDatabase クラスのインスタンスであることを示します。
- "" と "Learning LotusScript.nsf" は New で作成するオブジェクトを設定するパラメータです。最初のパラメータはサーバー名です。この例ではデータベースがローカルに保存されているのでサーバー名は空白になっています。2 番目のパラメータはデータベースのファイル名です。
行 4: オブジェクトのプロパティをダイアログボックスに表示する
「Messagebox """" + db.Title + """",,"Title of database"」は、データベース名を取得し、ダイアログボックスに表示します。
- Messagebox は、LotusScript 言語のステートメントです。カンマはパラメータを区切ります。プラス記号は文字列を連結します。メッセージボックスでは最初のパラメータをダイアログボックスに表示し、3 番目のパラメータをダイアログボックスのヘッダーとして表示します。2 番目のパラメータは使用されません。
- db.Title は、データベース名を含む文字列を返します。Title は NotesDatabase クラスで定義されたプロパティです。スクリプトのプロパティにアクセスするか修正するためには、次の 3 つの要素を指定します。
- オブジェクト名 (「db」など)
- ピリオド (.)
- プロパティ名 (Title など)
- """" + db.Title + """" はデータベース名を引用符で囲います。引用符は文字列リテラルを描写するのに使用します。そのため引用符を文字列リテラルに含めたいときは、二重に入力します。プラス記号は連結を意味します。したがってこの例は、1 つの引用符と、データベース名と、1 つの引用符を表すことになります。
- 「Title of database」は文字列リテラルです。ダイアログボックスのヘッダーとして表示されます。
行 5: サブルーチンを終了する
End Sub はサブルーチンの終点を定義します。この行でスクリプトが終了します。この行は自動的に作成されます。
Web で実行する
LotusScript はブラウザでは実行できません。[メイントピック] フォームをブラウザでプリビューすると、[Display title] アクションが表示されません。これはアクションが LotusScript の中にあり、Domino によってブラウザに送信できないからです。
LotusScript をブラウザから実行する唯一の方法は、Domino エージェントを作成して RunAgent または ToolsRunMacro @コマンドまたは OpenAgent URL コマンドをブラウザから実行します。注意したいのは、エージェントはエージェントの保存されている Domino サーバー上で実行されるのであり、ブラウザで実行されるのではないという点です。
エージェントを作成する
エージェントは、フォームから独立して、設計要素の別のカテゴリを構成しています。
- 設計ペインで [エージェント] を選択し [新規エージェント] をクリックします。[エージェント] インフォボックスが表示されます。プログラムペインが隣に表示されます。
- エージェントに「Display title」と名前を付けます。
- [共有] オプションを選択します。
- [実行] セクションで [イベント] トリガーをクリックし、ドロップダウンボックスから [エージェントリストから手動で] を選択します。
- ターゲットには [なし] を選択します。
- プログラムペインの [実行] メニューから [LotusScript] を選択します。
- [オブジェクト] タブのプログラム可能なイベントから [Initialize] を選択します。
スクリプトを入力する
次のようにサブルーチンを編集します。
Sub Initialize
Dim db As NotesDatabase
Set db = New NotesDatabase( "", "Learning LotusScript.nsf" )
Print "<B>Title of database<HR>""" + db.Title + """</B>"
End Sub
エージェントでは、実行コードに Sub Initialize を使用してください。Dim と Set で始まる行は、Notes クライアントで実行するために入力したアクションの行と同じです。Print で始まる行は異なります。
ブラウザから LotusScript エージェントを実行すると、Print ステートメントが、ブラウザの新しいページに書き込みをします。このスクリプトの Print ステートメントは次のようになっています。
- ブラウザで新規ページを開きます。
- 太字で「Title of database」を、その次の行にデータベースの名前を表示します。このテキストはブラウザに送信されるので、HTML タグの <B> (太字)、<HR> (強制改行)、</B> (太字の終了) が解釈されます。
エージェントのプロパティを調整する
Web エージェント用にプロパティを調整する必要があります。
- エージェントを保存して閉じます。エージェントの名前は「(Display title)」であることに注意してください。カッコで囲まれているのはエージェントがユーザーに非表示であることを示します。これは [エージェントリストから手動で] を選択したためです。
- エージェントが選択されていることを確認して [エージェント] - [エージェントのプロパティ] を選択します。[エージェント] インフォボックスが表示されます。
- [設計] タブをクリックします。
- [Web ユーザーで実行] をクリックします。ユーザー認証とセキュリティのために、通常ブラウザのログイン名でエージェントを実行します。これは Anonymous か Domino ディレクトリ内のユーザー名になります。それ以外はエージェントの作成者名で実行されます。
- [エージェント] インフォボックスを閉じます。
アクションを作成する
フォームアクションを作成します。
- [メイントピック] フォームを開きます。
- [作成] - [アクション] を選択します。
- [アクション] インフォボックスで、アクションに「Display title」という名前をつけます。(同じ名前のアクションを複数作成できます。)
- [非表示] タブで [Notes R4.6 以降] を選択します。Notes クライアントでは表示されないようにします。インフォボックスを閉じるか移動させます。
- プログラムペインの [実行] メニューから [式] を選択します。
- プログラムペインに次の式を入力します。エージェントの名前はカッコも含めて正確に入力してください。
@Command([Runagent]; "(Display title)")
インターネットで確認する
ローカルのデータベースは、ホスト名に「localhost」を指定することでブラウザで確認できます。プロキシサーバーを使用している場合は、「localhost」をプロキシサーバーを通さないホストの一覧に設定してください。
- [ファイル] - [保存] を選択します。
- プログラムペインの最下部にエラーが表示された場合は、入力した内容をダブルチェックして、式が正しいかを確認します。
- [ファイル] - [データベース] - [アクセス制御] を選択します。[ユーザー] のリストから [Anonymous] のサーバーとグループを選択します。[アクセス] を [作成者] にし、[文書の作成] を選択します。[OK] をクリックします。
- [設計] - [Web ブラウザでのプリビュー] を選択し、使用するブラウザ名を選択します。代わりにブラウザを起動し、次のように OpenForm URL コマンドを入力することもできます。
http://localhost/Learning+LotusScript.nsf/MainTopic?OpenForm
テストデータベースにアクセスするには、[設計] - [Web ブラウザでのプリビュー] を再度選択するか、URL コマンドの後に [設計] - [Web ブラウザでのプリビュー] を選択しないと表示できないことがあります。
- アクションバーの [Display title] アクションをクリックします。「Title of database」と「Learning LotusScript」が書かれた新しいページがブラウザに表示されます。成功。
課題: データベースのファイル名を表示する
学習した内容をもとに Learning LotusScript データベースのファイル名をダイアログボックスに表示するスクリプトを作成します。
- Learning LotusScript データベースで [メイントピック] フォームを開きます。
- アクションを作成して名前を付けます。
- プログラムペインで、[実行] メニューから [LotusScript] を選択します。
- [リファレンス] タブで [Domino: Classes] を選択します。
- データベースのファイル名を取得するプロパティを NotesDatabase クラスで探します。
- 学習した内容をもとにスクリプトを作成します。
解決方法: データベースのファイル名を表示する
NotesDatabase クラスの FileName プロパティを使用すると必要な情報を入手できます。これにアクセスするには、Title プロパティにアクセスする方法と同じく、オブジェクト名に続けて、ドット、プロパティ名の順に入力します。
スクリプトの完成例を次に示します。
Sub Click(Source As Button)
Dim db As NotesDatabase
Set db = New NotesDatabase( "", "Learning LotusScript.nsf" )
Messagebox db.Filename,, "File name of database"
End Sub