SlideShare a Scribd company logo
1 of 85
Download to read offline
今日から始める LotusScript
Domino クラスライブラリの使い方
株式会社ソルクシーズ
吉田 武司
1
2018/06/18
Version 1.1
特記事項
 本資料の掲載内容は、できる限り正確を期するよう に努めてはおりますが、い
かなる明示または暗黙の 保証も責任も負いかねます。
 本資料の情報は、使用先の責任において使用され るべきものであることを、あ
らかじめご了承ください。
 掲載情報は不定期に変更されることもあります。他 のメディア等に無断で転載
する事はご遠慮下さい。
 当資料をコピー等で複製することは、執筆者の承諾 なしではできません。
 当資料に掲載された製品名または会社名は それぞれの各社の商標または登録商
標です。
2
はじめに
3
きっかけ
 LotusScript の使い方については Domino Designer のヘルプに詳細が載っていま
す。私自身、過去にヘルプを読んで始めました。ただ、分量が多く、最初にヘ
ルプのみだとどれから手を付ければよいのか?で悩むかと思います。
 BASIC 言語ですので、Excel などのVBA(Visual Basic forApplications)等のプロ
グラミング経験があれば、比較的スムーズに習得できますが、それでも
Notes/Domino の特有の部分があります。
 そこで、以下に焦点をあてて資料にまとめることにしました。
 Domino クラスライブラリの使用に焦点をあてる(NotesDatabase や NotesView など、
Notes/Domino のオブジェクト・データの操作に使用するクラス)
 「よく使用する」または「重要なもの」に厳選する
4
当資料の対象者
 LotusScript の学習を始めた人を対象として想定しています。
 アプリケーション開発でよく使用する Domino クラスライブラリの使い方から今後学習を進
めていくための取っ掛かりになればと考えて作成しています。
 フォームやビュー、簡単な式言語など、Notes/Domino アプリケーションの開発
の基礎的な部分はある程度理解していることを前提としています。
 Domino Designer の使い方および一般的なプログラミング用語(クラス、変数、
型など)については触れていません。詳細は、ヘルプなどを参照ください。
5
前提
 最初からすべてを把握するのは大変なので、別の方法がある・説明を省略して
いる場合があります。中級・上級と進む中で詳細は徐々に把握して行きましょ
う。
 プログラムの例外処理などは省略しています。
 Notes/Domino の [アプリケーション] は、以前のバージョンでは [データベース]
と呼ばれていました。そのため、資料によっては記述が異なる場合があります。
クラス名では、データベースが使用されているため、当資料では、基本 [デー
タベース] と記述しています。
6
使用するアプリケーション/データベースの説明
 アプリケーション/データベースには、以下の設計要素がある前提です。
 フォーム:製品:fmProduct
 フィールド
 製品 ID:ProductID:テキスト
 製品名:ProductName:テキスト
 価格:Price:数値
 ビュー:全製品一覧:vwAll
 選択式
 SELECT deleteFlag != "1 "
 列
 製品 ID:ProductID
 製品名:ProductName
 価格:Price
7
LotusScript の記述場所
 基本、後述するプログラムは、同一アプリケーション/データベース内のエー
ジェント(LotusScript)として作成します。
8
対象は「なし」
タイプは「LotusScript」
「Initialize」に記述
プログラムの実行と結果の確認
 基本、メニューバーのアクションからエージェントを実行します。
 ステータスバーをクリックして結果を確認します。
9
注意
ステータスバーでは、同じ結果が続く場合、重複して
表示されません。そのため、同じ結果になるエージェ
ントを連続実行しても結果は一行のみです。
下図の場合、エージェントを3回実行しても
「CN=Administrator/O=test
CN=Administrator/O=test
CN=Administrator/O=test」とはならず、
「CN=Administrator/O=test」の一行のみになります。
テスト時にはご注意ください。
行番号の表示方法
 メニューバー [ファイル] - [プリファレンス
(設定)] を開きます。
 一般
 エディター
 テキスト・エディター
 行番号の表示:有効
10
概要
11
LotusScript とは
 LotusScript は、IBM Notes/Domino アプリケーションで利用可能な BASIC スクリ
プト言語です。
 式言語では、記述ができない、または難しい処理を行いたい場合に利用します。
 エージェント(スケジュール実行を含む)、ボタン、フォームを開く・更新・
保存・閉じるなどの様々なイベントで実行可能です。
 スクリプトライブラリとして作成すると、クラス、関数、および変数を共有す
ることができ、開発効率・保守性があがります。
 Domino データへのアクセスやクライアントの操作には、Domino クラスライブ
ラリを使用します。(以後、クラスと記述します)
12
クラスの種類
バックエンドクラスとフロントエンドクラス
※ 大きく2つに分けることができます。
 バックエンドクラス(Database クラス)
 データベース、ビュー、文書、その他のオブジェクトへアクセスできます。
 ユーザー(クライアント)だけではなく、サーバーも利用できます。
 フロントエンドクラス(UI クラス)
 ユーザーがクライアントで現在作業中のオブジェクトにアクセスできます。
 サーバーは利用できません。(UI・クライアント から操作していないため)
13
例
開いている文書やビューへのアクセス
画面を閉じるなどのクライアント操作
クラスの関係図
 バージョン 8 以前の
Domino Designer には、右
図のようなクラスの関係図
があり、理解するのに大変
役立ちました。
 基本、矢印の元のクラスか
ら先のクラスへと辿ってア
クセスします。取得したい
クラスから遡ればどのよう
に辿っていけば良いのかが
わかります。
 残念ながら 8.5 以降はこの
図はないようです。しかし、
大きな変更はないので以前
の図も参考になります。
14
クラスの一覧
 Button
 Field
 Navigator
 NotesACL
 NotesACLEntry
 NotesAdministrationProcess
 NotesAgent
 NotesColorObject
 NotesDatabase
 NotesDateRange
 NotesDateTime
 NotesDbDirectory
 NotesDocument
 NotesDocumentCollection
15
 NotesDOMAttributeNode
 NotesDOMCDATASectionNode
 NotesDOMCharacterDataNode
 NotesDOMCommentNode
 NotesDOMDocumentFragmentNode
 NotesDOMDocumentNode
 NotesDOMDocumentTypeNode
 NotesDOMElementNode
 NotesDOMEntityNode
 NotesDOMEntityReferenceNode
 NotesDOMNamedNodeMap
 NotesDOMNode
 NotesDOMNodeList
 NotesDOMNotationNode
 NotesDOMParser
 NotesDOMProcessingInstructionNode
 NotesDOMTextNode
 NotesDOMXMLDeclNode
 NotesDXLExporter
 NotesDXLImporter
 NotesEmbeddedObject
 NotesForm
 NotesInternational
 NotesItem
 NotesLog
 NotesMIMEEntity
 NotesMIMEHeader
 NotesName
 NotesNewsletter
 NotesNoteCollection
 NotesOutline
 NotesOutlineEntry
 NotesRegistration
 NotesReplication
 NotesReplicationEntry
 NotesRichTextDocLink
 NotesRichTextItem
 NotesRichTextNavigator
 NotesRichTextParagraphStyle
 NotesRichTextRange
 NotesRichTextSection
 NotesRichTextStyle
 NotesRichTextTab
 NotesRichTextTable
 NotesSAXAttributeList
 NotesSAXException
 NotesSAXParser
 NotesSession
 NotesStream
 NotesTimer
 NotesUIDatabase
 NotesUIDocument
 NotesUIScheduler
 NotesUIView
 NotesUIWorkspace
 NotesView
 NotesViewColumn
 NotesViewEntry
 NotesViewEntryCollection
 NotesViewNavigator
 NotesXMLProcessor
 NotesXSLTranformer
多すぎ…どれから見ていけばよいのやら…
よく使用するクラス
※ 最初は、よく使用する以下のクラスから覚えていきましょう。
 バックエンドクラス
 NotesSession
 NotesDatabase
 NotesView
 NotesDocument
 NotesDocumentCollection
 NotesItem
 NotesAgent
 フロントエンドクラス
 NotesUIWorkspace
 NotesUIDatabase
 NotesUIView
 NotesUIDocument
16
Hello world!
17
Hello world! (1)
 クライアントのステータスバーへ “Hello world!”と表示するエージェント
を作成します。
 エージェントの名前(任意)を入力します。
 タイプ [LotusScript] を選択して、新規エージェントを作成します。
18
Hello world! (2)
 [プロパティ] の [基本] タブの実行時の [対象] を [なし] に設定します。
19
Hello world! (3)
 新規エージェントを作成すると下図のような画面が開きます。
1. 左に [オブジェクト] タブがあります。
2. [Initialize] をクリックします。
3. 右に Initialize サブルーチンが表示されます。ここにプログラムを記述します。
※ Initialize は、エージェント実行時に最初に実行されます。
※ オブジェクトの最上位を選択すると全プログラムが表示されます。
20
Hello world! (4) 21
1行目 Initialize サブルーチンの開始行。変更なし
2行目 Print ステートメントの後に表示したい文字列を指定
今回は、”Hello world!” を指定
文字列は、ユーザー名をクライアントのステータスバーに表示
3行目 Initialize サブルーチンの終了行。変更なし
Print の後は、半角スペース
Hello world! (5)
 メニューバー [アクション] – [(各エージェント)]を実行します。
 ステータスバーをクリックして結果を確認します。
22
Hello world! 補足「オブジェクト」タブ (1)
 (Options)
 Option Public
 モジュールレベルの明示的な宣言が、規定で Public となるように設定します。
 変更する必要が無い場合、そのままでよいでしょう。
 Public については、Dim ステートメントのヘルプを参照ください。
 Option Declare
 変数の暗黙の宣言を禁止します。事前に宣言せずに変数を使用するとエラーとなります。綴りミスや意図しない
箇所での宣言を防げます。
 Use "[スクリプトライブラリ名]"
 今回は使用していませんが、スクリプトライブラリを使用するための宣言ができます。
 %REM ~ %END REM
 コメントです。プログラムの実行には影響しません。デフォルトでは緑で表示されます。
 新規作成時にプログラムの説明(名前、作成日と作成者など)が自動作成されます。プログラムを別の人または
後から自分が見た際に理解し易くなるように説明を追加しましょう。
 (Declarations)
 変数の宣言に使用できます。
23
Hello world! 補足「オブジェクト」タブ (2)
 Initialize
 モジュール(エージェント)がロードされると記述したプログラムが実行されます。
 Terminate
 モジュールがアンロードされると記述したプログラムが実行されます。
 終了時に実行したいプログラムを記述するのですが、使用しないことが多く最初は覚えなく
てもよいでしょう。
※ 上記以外にも Sub ステートメント(サブルーチン)、Function ステートメ
ント(関数)を追加できます。
24
コメント
25
コメントの記述方法
 スクリプト内にコメント記述するには以下の方法があります。
26
2行目 Rem ステートメント(一行のコメント)
先頭に“REM ”を付ける
4行目 シングルクォート/アプストロフィ(一行のコメント)
先頭に “ ’ ”を付ける
5行目 スクリプトの後ろにも記述できます
7-9行目 %Rem 命令(複数行のコメント)
コンパイラは、%REM と %END REM の間にあるすべてのテキストを無視します。
Rem ステートメント: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/LSAZ_REM_STATEMENT.html
%Rem 命令: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/LSAZ_PCTREM_DIRECTIVE.html
LotusScript のデバッグ
スクリプトデバッガ
27
LotusScript のデバッグを有効にする
 LotusScript には、デバッグを補助するツールとして、スクリプトデバッガが
あります。
 LotusScript をステップ(1行)単位で実行でき、変数の値を確認しながら動
作確認/デバッグできるため、とても重宝します。
 スクリプトデバッガは、メニューバー [ツール] – [LotusScript のデバッグ]
から有効にします。
 有効な状態で LotusScript を実行するとスクリプトデバッガが自動で表示さ
れます。
28
LotusScript の
実行
スクリプトデバッガ:画面 29
スライドシューにすると GIF アニ
メーションとして再生されます。
 実行
 エラーまたはブレークポイントまで実行
 ステップ イン [F8]キー
 ステップ単位で実行
 ステップ オーバー [Shift] + [F8] キー
 ステップ単位で実行
 別のサブプログラム(Sub/Function)を呼び出す処理の場合、呼び出し先のサブプログラムが一度に(裏で)実行され、次
の行に処理が進む
 ステップ アウト [Ctrl] + [F8] キー
 現在のサブプログラムを最後まで実行
 スタックされている次のサブプログラムに処理が移る
 停止
 直ちに、デバッガを終了
 デバッガの終了
 直ちに、デバッガを終了
 LotusScript のデバッグが無効になる
スクリプトデバッガ:機能 30
スクリプトをステップ単位で実行する: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_STEPPING_THROUGH_A_SCRIPT.html
初期の演習では Initialize のみで、
別のサブプログラムが無いため、後で
見直せばよいでしょう
[ステップ イン] を使用して
デバッグを進める
 ステップ単位では無く、特定の行の前まで処理を一気に進めたい場合、ブレー
クポイントを設定して、[実行] ボタンをクリックします。
スクリプトデバッガ:ブレークポイント 31
ダブルクリックで
ブレークポイント を指定
 ブレークポイントは、対象の行を選択してダブルクリックして設定します。
 もう1回ダブルクリックすると無効になります。
 無効の場合、停止しません。
 更に1回ダブルクリックすると消去になります。
 ダブルクリックする以外に、メニューバーのデバッグから各種選択する方法、
[F9] キーで変更する方法があります。
 ブレークポイントが設定できない行もあります。ご注意ください。
 Dim ステートメント(変数の宣言)など
スクリプトデバッガ:ブレークポイントの設定(有効)/無効/消去 32
 設定したブレークポイントは、[ブレークポイント]タブに一覧で表示されます。
また、ダブルクリックすると設定した行が選択された状態になります。
スクリプトデバッガ:[ブレークポイント]タブ 33
スクリプトデバッガ:[変数]タブ
 [変数]タブで、現在の変数の状態を確認できます。目的のオブジェクトが取得
できているのか?値の変更が行われているのか?などを確認できます。
34
例)変数 doc 内のフィールド(Item)の値
 Print ステートメントの出力は、[出力]タブに表示されます。
スクリプトデバッガ:[出力]タブ 35
 [コール]タブには、現在実行スタックにあるサブプログラムのリストが実行順
に表示されます。このリストの一番上には現在実行中のサブプログラムが表示
されます。
 LotusScript の学習を進めていくと複数のサブプログラム(Sub/Function)を
コールする(呼び出す)場合があります。現時点では、このようなタブがある
ことだけを覚えておけば良いでしょう。
スクリプトデバッガ:[コール]タブ 36
基本的なバックエンドクラス
37
基本的なバックエンドクラス
 NotesSession クラス
 実行中の環境を表します。現在のユーザーに関する情報や環境変数などにアクセスできます。
 Notes/Domino 利用中の最上位となるクラスの1つです。NotesSession クラスから辿っていく
と各バックエンドクラスにアクセスすることができます。
 NotesDatabase クラス
 データベースにアクセスするためのクラスです。
 NotesView クラス
 ビュー/フォルダにアクセスするためのクラスです。
 NotesDocument クラス
 文書にアクセスするためのクラスです。
38
バックエンドクラスとオブジェクトの関係 39
NotesSession
NotesDatabase
NotesView
クライアント/サーバー環境
アプリケーション/
データベース
ビュー
文書
オブジェクト クラス
NotesDocument
文書へのアクセスの基本 40
NotesSession
NotesDatabase
NotesView
クライアント/サーバー環境
ビュー
文書
オブジェクト クラス
NotesDocument
※ アクセス方法は上記以外にもあります。
Notes クライアントから
文書を手動で開くように
アプリケーション/
データベース 各バックエンドクラスから
文書へアクセスする
Step1-1:現在のユーザー名を取得
NotesSession クラス
41
2行目 現在のセッションにアクセスして変数 session に格納
他のクラスとは違って New を使用するのを忘れないように注意
3行目 ユーザー名を格納する変数 user を宣言
4行目 NotesSession クラスの UserName プロパティから現在のユーザーの完全識別名を取得、変数 user に格納
共通名のみを取得する場合、CommonUserName プロパティを使用
(例:完全識別“CN=Administrator/O=test”の場合、共通名は“Administrator”)
5行目 Print ステートメントを使って、ユーザー名をクライアントのステータスバーに表示
NotesSession: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESSESSION_CLASS.html
Step1-2:現在のデータベースのタイトルを取得
NotesDatabase クラス
42
3行目 NotesDatabase クラスの変数 db を宣言
4行目 NotesSession クラスの CurrentDatabase プロパティから現在のデータベースを取得、変数 db に格納
その際、Set ステートメントを使用
5行目 NotesDatabase クラスの Title プロパティからデータベースのタイトルを取得
Print ステートメントを使って、タイトルをクライアントのステータスバーに表示
NotesDatabase: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESDATABASE_CLASS.html
Step1-3:ビューの名前を取得
NotesView クラス
43
4行目 NotesView クラスの変数 view を宣言
6行目 NotesDatabase クラスの GetView メソッドからビュー(別名:vwAll)を取得、変数 view に格納
その際、Set ステートメントを使用
7行目 NotesView クラスの Name プロパティからビューの名前を取得
Print ステートメントを使って、名前をクライアントのステータスバーに表示
NotesView: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESVIEW_CLASS.html
Step1-4:ビューの最初の文書の作成日時を取得
NotesDocument クラス
44
5行目 NotesDocument クラスの変数 doc を宣言
8行目 NotesView クラスの GetFirstDocument メソッドからビューの最初の文書を取得、変数 doc に格納
その際、Set ステートメントを使用
9行目 NotesDocument クラスの Created プロパティから文書が作成された日付/時刻を取得
Print ステートメントを使って、名前をクライアントのステータスバーに表示
NotesDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESDOCUMENT_CLASS.html
基本的なフロントエンドクラス
45
基本的なフロントエンドクラス
 補足
 クライアントの状態(現在開いているデータベースやビュー、文書など)にアクセスするためのクラスです。
 ユーザーがクライアントから直接実行しているスクリプトからのみ使用できます。スケジュールエージェン
トでは使用できません。(エラーになります)
 ダイアログボックスを表示したり、ビューやフォームを閉じるなど UI に関する操作ができます。
 NotesUIWorkspace クラス
 現在のクライアントのワークスペースのウィンドウにアクセスするためのクラスです。
 NotesUIDatabase クラス
 現在、クライアントで開いているデータベースにアクセスするためのクラスです。
 NotesUIView クラス
 現在、クライアントで開いているビューにアクセスするためのクラスです。
 NotesUIDocument クラス
 現在、クライアントで開いている文書にアクセスするためのクラスです。
46
各フロントエンドクラスとオブジェクトの関係 47
NotesUIWorkspaceクライアント環境
アプリケーション/
データベース
ビュー
文書
オブジェクト クラス
NotesUIDatabase
NotesUIView
NotesUIDocument
アクセスの基本 48
クラス
※ アクセス方法は上記以外にもあります。
NotesUIWorkspace
NotesUIDatabase
NotesUIView
NotesUIDocument
クライアント環境
ビュー
文書
オブジェクト
アプリケーション/
データベース
Notes クライアントで
現在開いている
オブジェクトへアクセス可能
NotesUIWorkspace クラスから
直接アクセス可能
Step2-1:ダイアログボックスを表示
NotesUIWorkspace クラス
49
2行目 現在のワークスペースのウィンドウにアクセスして変数 ws に格納。New を使用するのを忘れないように注意
3行目 ダイアログボックスでのユーザーの選択結果を格納する変数 askme を宣言(Integer 型)
4行目 NotesUIWorkspace クラスの Prompt メソッドを使用して、ダイアログボックスを表示
第1引数は、ダイアログボックスのタイプ(種類)の指定
今回は、はい/いいえ(Yes/No)ボタンがある PROMPT_YESNO タイプを指定
第2引数は、タイトルバーに表示する文字列を指定。第3引数は、表示する文字列を指定
ダイアログボックスでのユーザーの選択結果は、変数 askme へ格納
ユーザーがはい(Yes)を選択した場合、askme = 1、いいえ(No)を選択した場合、askme = 0
5行目 変数 askme によって、処理を分岐
※ 式言語の @Prompt に相当
※ ダイアログボックスを表示する方法は、この他に MessageBox 関数とステートメント、NotesUIWorkspace クラスの DialogBox メソッド
がある
NotesUIWorkspace: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESUIWORKSPACE_CLASS.html
NotesUIWorkspace - Prompt: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_PROMPT_METHOD_7966_ABOUT.html
Step2-2:現在のデータベースを閉じる
NotesUIDatabase クラス
50
3行目 NotesUIDatabase クラスの変数 uidb を宣言
4行目 NotesUIWorkspace クラスの CurrentDatabase プロパティから現在のデータベースを取得、変数 uidb に格納
NotesSession クラスの CurrentDatabase プロパティと違って、戻り値は NotesUIDatabase オブジェクトである
ことに注意
5行目 NotesUIDatabase クラスの Close メソッドを実行
データベースのすべてのビュート文書を閉じてから、データベースを閉じる
※ データベースを開いた状態で実行すること
NotesUIDatabase: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESUIDATABASE_CLASS.html
NotesUIDatabase - Close: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_CLOSE_METHOD_UIDB.html
Step2-3:現在のビューを印刷する
NotesUIView クラス
51
3行目 NotesUIView クラスの変数 uiview を宣言
4行目 NotesUIWorkspace クラスの CurrentView プロパティから現在のビューを取得、変数 uiview に格納
戻り値は NotesUIView オブジェクトであることに注意
5行目 NotesUIView クラスの Print メソッドを実行して、ビューを印刷
第1引数は、印刷部数
第7引数は、False(デフォルト)の場合、選択している文書の内容。True の場合、ビューを印刷
引数なし “uiview.Print”とした場合、印刷ダイアログを表示
※ ビューを開いた状態で実行すること
NotesUIView: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESUIVIEW_CLASS.html
NotesUIView - Print: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_PRINT_METHOD_4867_ABOUT.html
Step2-4:文書を編集モードにする
NotesUIDocument クラス
52
3行目 NotesUIDocument クラスの変数 uidoc を宣言
5行目 現在の文書のモード(編集/読み込み)を格納する変数 editmode を宣言(Boolean 型)
6行目 NotesUIWorkspace クラスの CurrentDocument プロパティから現在の文書を取得、変数 uidoc に格納
戻り値は NotesUIDocument オブジェクトであることに注意
7行目 NotesUIDocument クラスの EditMode プロパティから現在の文書が編集モードであるかどうかを取得、変数 editmode へ格納(編
集モード: True, 読み込みモード: False)
8行目 変数 editmode によって、処理を分岐
9行目 現在開いている文書が編集モードの場合、ダイアログボックス(タイプ: PROMPT_OK)を表示
11行目 現在開いている文書が読み込みモードの場合、EditMode プロパティへ True を設定して、編集モードに変更
※ 文書を開いた状態で実行すること
NotesUIDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESUIDOCUMENT_CLASS.html
NotesUIDocument - EditMode: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_EDITMODE_PROPERTY.html
9行目の結果11行目の結果
ビューの文書の処理
53
ビューの文書の処理
 ビューに表示されている文書を処理する機会は、とても多いです。
 例)
 ビューに表示されている文書の [ステータス] フィールドの値をすべて“完了”にしたい
 ビューのデータを CSV に書き出したい
 キー(特定の値)に一致する文書のデータを取得したい
 ビューからの文書の取得でよく使うのは以下の方法です。
 ビューの列の値を検索して、キーに一致する文書を取得する
 GetDocumentByKey メソッド
 GetAllDocumentsByKey メソッド
 ビューの最初の文書から順番に取得する
 GetFirstDocument メソッド
 GetNextDocument メソッド
54
Step3-1:ビューの列の値を使用して文書を検索する
NotesView クラス/GetDocumentByKey メソッド
55
6,9行目 製品 ID を格納するための String クラス(文字列)の変数 key を宣言。初期値“L01”を設定
10行目 NotesView クラスの GetDocumentByKey メソッドを使用して、ビューの左端ソート列(製品 ID の昇順でソー
ト)と第1引数に指定した変数 key が一致する文書を検索
完全一致で検索する場合、第2引数には、True を指定
戻り値は NotesDocument オブジェクトであることに注意(複数の文書が一致する場合は最初の文書のみ)
11行目 変数 doc が Nothing かどうかで分岐
12行目 製品名を出力。[製品名(ProductName)]フィールドの値を取得したい場合、“doc.ProductName(0)”と記述
フィールド値の取り扱い・記述については、後述
NotesView - GetDocumentByKey: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETDOCUMENTBYKEY_METHOD.html
Step3-2:ビューの文書を順番にすべて取得する
NotesView クラス/GetFirstDocument, GetNextDocument メソッド
56
8行目 NotesView クラスの GetFirstDocument メソッドを使用して、ビューの最初の文書を取得
9,12行目 While ステートメントを使用して、変数 doc が Nothing になるまで 9~12行を繰り返す
10行目 製品名を出力
11行目 NotesView クラスの GetNextDocument メソッドを使用して、変数 doc の次の文書を取得
取得した次の文書は、変数 doc に格納(上書き)
NotesView - GetFirstDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETFIRSTDOCUMENT_METHOD_VIEW.html
NotesView – GetNextDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETNEXTDOCUMENT_METHOD_VIEW.html
While ステートメント: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/LSAZ_WHILE_STATEMENT.html
Step3-2:ビューの文書を順番にすべて取得する:補足(1)
NotesView クラス/GetFirstDocument, GetNextDocument メソッド
57
 注意事項
 今回の演習では、文書を変更していないためビューの表示に影響がありません。
 しかし、文書を削除したり、値を変更する場合は注意が必要です。理由は、 文書の削除や
ビューの条件式によって、文書がビューに表示されなくなったりビューの表示順が変わって
しまうためです。そうなると次の文書を返す GetNextDocument メソッドは期待する結果を
返さない場合があります。処理途中のビューがどのような状態であるかを意識しながらプロ
グラミングする必要があります。
文書A
文書B
文書C
1番目
2番目
3番目
文書A
文書C
1番目
2番目
削除
① 文書Bの取得
② 文書Bの削除
例)文書を削除した場合 ③ ビューの自動更新
表示内容・順番の変化
Step3-2:ビューの文書を順番にすべて取得する:補足(2)
NotesView クラス/GetFirstDocument, GetNextDocument メソッド
58
 注意事項(続き:ヘルプより抜粋)
 GetNexDocument メソッド(NotesView クラス)
 ループ内の文書を処理するときは、文書を削除しないでください。または、ビューに表示されなくなったり位置
が変更されるような形で、文書を変更しないでください。次の文書であったはずの文書がビュー内の別の位置に
あると、GetNextDocument メソッドは実用的な結果を返さない場合があります。この問題の最も一般的な症状は、
文書をループしたときに文書がスキップされることです。
 この問題に対処するには、文書を変更する前には常に GetNextDocument を呼び出す(※1)ようにロジックを変
更します。あるいは、NotesView.AutoUpdate (= False) を使用して、ビューの使用中にビューの索引が再作成
されるのを防止(※2)します。
 別の章「ビューの文書の処理2」で上記対処方法の演習があります。
※1:演習「Step6-1:ビューの文書を順番にすべて処理する(事前に次の文書を取得)」参照
※2:演習「Step6-2:ビューの文書を順番にすべて取得する(自動更新の無効)」参照
 AutoUpdate プロパティ(NotesView クラス)
 【注意】このプロパティは、現在実行しているコードによる更新のみを処理します。データベースに Updall タ
スクを実行するような他のコードは、このプロパティの値に関係なく、ビューの索引と NotesViewNavigator を
更新します。ビューのすべての文書を処理する必要がある場合は、静的なままのビューに頼らないでください。
この問題を解決する方法については、『すべての文書とすべての未処理文書を収集する』を参照してください。
NotesView - GetNextDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETNEXTDOCUMENT_METHOD_VIEW.html
NotesView - AutoUpdate: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_AUTOUPDATE_PROPERTY.html
Step3-3:ビューの列の値を使用して文書を検索する(複数)
NotesView クラス/GetAllDocumentsByKey メソッド, NotesDocumentsCollection クラス
59
4行目 NotesDocumentCollection クラスの変数 dc を宣言
11行目 NotesView クラスの GetAllDocumentsByKey メソッドを使用して、ビューの左端ソート列(製品 ID の昇順でソート)と第1引
数に指定した変数 key が一致する文書をすべて検索
部分一致(前方)で検索する場合、第2引数には、False を指定
戻り値は NotesDocumentCollection オブジェクトであることに注意(複数の文書のコレクション/一覧)
コレクション内の文書には順序は決まっていない。順不同であることに注意
14,17行目 While ステートメントを使用して、変数 doc が Nothing になるまで 14~17行を繰り返す
11行目 NotesDocumentCollection クラスの GetNextDocument メソッドを使用して、変数 doc の次の文書を取得
NotesView - GetAllDocumentsByKey: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETALLDOCUMENTSBYKEY_METHOD.html
NotesDocumentCollection: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESDOCUMENTCOLLECTION_CLASS.html
[Step3-1:ビューの列の値を使用して文書を検索する]
[Step3-2:ビューの文書を順番にすべて取得する]
を組み合わせて製品IDが [L] で始まる製品を検索
文書の処理
60
文書の処理
 文書の処理パターンは、多岐にわたります。当資料では簡単な処理を例として記述します。
 文書の新規作成
 文書の更新
 文書の削除
 上記以外にも編集モードで表示している文書の操作(NotesUIDocument クラス)、エージェントでは
なく、フォーム(PostOpen や QuerySave など)やボタン(Click)のイベントに記述する場合もあ
ります。
 文書に含まれるフィールドを LotusScript では、アイテム(Item)と呼びます。
 フィールドを表すクラスは、NotesItem と NotesRichTextItem(リッチテキスト)クラスです。
 フィールドを扱う方法は、以下になります。
1. 「拡張クラス」構文を使用
 参考資料:AppendItemValue - 「拡張クラス」構文
 https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_APPENDITEMVALUE_METHOD.html
2. NotesDocument クラスの GetItemValue, AppendItemValue, ReplaceItemValue メソッドなどを使用
3. NotesItem クラスにアクセスして、各種プロパティやメソッドを使用
※ 1と2の方法では、NotesItem クラスにアクセスする必要はありません。
61
Step4-1:文書を新規作成する
NotesDatabase クラス/CreateDocument メソッド, NotesDocument クラス/Save メソッド
62
6行目 NotesDatabase クラスの CreateDocument メソッドを使用して、新規文書となる NotesDocument オブジェクトを
変数 doc に格納
7-10行目 変数 doc のフィールドに値を設定
“doc.(フィールド名) = (設定値)”で値を設定可能(「拡張クラス」構文)
フィールドが存在しない場合、新規にフィールドが作成される
但し、プロパティやメソッドなどの予約語と被るフィールドは作成不可
また、文字列や数値以外の読者や作成者フィールドとして設定する場合、上記方法ではなく NotesItem クラスを
使った方法で作成/設定する必要あり
11行目 NotesDocument クラスの Save メソッドを使用して、変数 doc を保存
保存を忘れないようにすること
NotesDatabase - CreateDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_CREATEDOCUMENT_METHOD.html
NotesDocument - Save: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_SAVE_METHOD_DOC.html
Step4-2:文書を更新する
NotesDocument クラス
63
12行目 “doc.(フィールド名) = (設定値)”で値を設定可能(「拡張クラス」構文)
[価格(Price)]フィールドは複数値ではないが、フィールドのデータは複数値を考慮して配列で返ってくる
そのため、後に“(0)”を付けて“doc.Price(0)”として配列の最初の値を取得(※1)、2を掛けている
13行目 NotesDocument クラスの Save メソッドを使用して、変数 doc を保存
保存を忘れないようにすること
※1 次頁「Step4-2:文書を更新する:補足」参照
[Step3-1:ビューの列の値を使用して文書を検索する] を一部修正
[製品ID] が“L01”の文書の [価格] を2倍にする
 Notes/Domino の文書のフィールドは、複数の値を保持できます(但し、リッチテキストは除く)。
 身近な例としては、メール DB の宛先フィールドやディスカッション DB のカテゴリです。
 文書のプロパティで複数の値が保存されていることが確認できます。
 そのため、値が配列で返ってくることを前提にプログラミングする必要があります。
 スクリプトデバッガで値を確認すると、複数値かどうかに関係なく配列として扱われていることがわかります。
Step4-2:文書を更新する:補足
フィールドの値の取り扱いについて
64
① 複数値:No ② 複数値:Yes
doc.field_1(0) → “りんご” doc.field_2(0) →“りんご”
doc.field_2(1) →“みかん”
doc.field_2(2) →“もも”
Step4-3:文書を削除する
NotesDocument クラス/Remove メソッド
65
12行目 NotesDocument クラスの Remove メソッドを使用して変数 doc の文書を削除
第1引数に True を指定した場合、スクリプトが文書を開いた後に他のユーザーが文書を変更した場合でも削除
NotesDocument – Remove: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_REMOVE_METHOD_DOC.html
[Step3-1:ビューの列の値を使用して文書を検索する] を一部修正
[製品ID] が“C01”の文書を削除する
Step4-4:文書を新規作成する(作成者フィールドの追加)
NotesItem クラス
66
5行目 NotesItem クラスの変数 item を宣言
12行目 第1引数はフィールドを作成する文書を設定(変数 doc)
第2引数は作成するフィールドの名前
第3引数は設定する値
第4引数はフィールドの種類
今回は作成者とするため“AUTHORS”を指定(名前の場合“NAMES”/ 読者の場合“READERS”)
13行目 NotesItem クラスの IsSummary プロパティを True に設定
ビューやフォルダにフィールドの値を表示する場合、IsSummary プロパティが True の必要があるが、NotesItem クラスから作成
したフィールドの IsSummary プロパティは、デフォルトが False である。よって、明示的に True を設定
NotesItem: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESITEM_CLASS.html
NotesItem – IsSummary: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_ISSUMMARY_PROPERTY.html
[Step4-1:文書を新規作成する] を一部修正
[From]作成者フィールドに管理者のユーザーを設定する
エージェントの操作
67
NotesAgent クラス 68
 エージェントを表します。
 様々なプロパティやメソッドがありますが、最初は以下のメソッドのみ覚えて
おけばよいでしょう。
 Run メソッド
 エージェントを実行します。
 注意事項
 エージェントを再帰的に実行することはできません。(自分自身を呼び出すことはできません)
 ユーザーは呼び出し先エージェントと直接対話することはできません。呼び出し先エージェント内で、Print ス
テートメントを使用した場合、クライアントのステータスバーには表示されず、クライアントの log.nsf に出力
されます。
 呼び出し先エージェントをデバッグすることはできません。
 戻り値は、エージェントを呼び出せたかどうかの結果であり、呼び出し先エージェントがエラーが無く実行さ
れたかどうかは関係ありません。
Step5-1:別のエージェントを実行する
NotesAgent クラス
69
4行目 NotesAgent クラスの変数 agent を宣言
6行目 NotesDatabase クラスの GetAgent メソッドからエージェント(※1)を取得、変数 agent に格納
7行目 NotesAgent クラスの Run メソッドを実行して、6行目で取得したエージェントを実行
結果をステータスバーに表示
※1 「Step2-1:ダイアログボックスを表示 NotesUIWorkspace クラス」で作成したエージェント
NotesAgent: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESAGENT_CLASS.html
NotesAgent - Run: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_RUN_METHOD_6415.html
ビューの文書の処理2
70
Step6-1:ビューの文書を順番にすべて処理する(事前に次の文書を取得)
NotesView クラス/GetFirstDocument, GetNextDocument メソッド
71
5行目 NotesDocument クラスの変数 docTemp を宣言
11行目 処理対象文書である変数 doc のオブジェクト参照を変数 docTemp にコピー
12行目 事前に次の文書を取得しておく
13-16行目 以後、コピーした変数 docTemp に対して処理を行う
上記例では、価格が100円未満の文書を削除
価格が100円未満の文書を削除する
Step6-2:ビューの文書を順番にすべて処理する(自動更新の無効)
NotesView クラス/AutoUpdate プロパティ, GetNextDocument メソッド
72
8行目 NotesView クラスの AutoUpdate プロパティに False を設定して、ビューの自動更新を無効する
13行目 文書(変数 doc)の[削除フラグ(deleteFlag)]フィールドに "1" を設定(存在しない場合は新規に作成)
16行目 文書がビューの選択式(表示条件)の対象外となってもこのエージェント処理中はビューの状態は変化しない(自
動更新無効のため)。そのため、GetNextDocument メソッドで次の文書が取得可能
※注意 「Step3-2:ビューの文書を順番にすべて取得する:補足(2)」で説明したように、このエージェント以外から
ビューの更新はありえる。また、Remove メソッドで文書そのものを削除した場合、変数 doc が Nothing となり以
後の処理で利用できなくなる
価格が100円未満の文書をビューから非表示にする
ビューの選択式
SELECT deleteFlag !=“1”
[削除フラグ(deleteFlag)]フィールドが“1”の場合、非表示
Step6-3:ビューの文書を順番にすべて処理する(事前に次の文書を取得+自動更新の無効)
NotesView クラス/AutoUpdate プロパティ, GetNextDocument メソッド
73
9行目 NotesView クラスの AutoUpdate プロパティに False を設定して、ビューの自動更新を無効する
12行目 処理対象文書である変数 doc のオブジェクト参照を変数 docTemp にコピー
13行目 事前に次の文書を取得しておく
ヘルプより抜粋(AutoUpdate プロパティ)
このプロパティを明示的に false に設定してビューの自動更新を無効にすることをお勧めします。特に、ビューがナビゲータやエントリコ
レクションのベースとなっている場合は、ビューの自動更新は無効に設定してください。自動更新を行うと、パフォーマンスが低下し、コ
レクション内のエントリが無効になる (「エントリが索引に見つかりません」と表示される) 場合があります。
価格が100円未満の文書を削除する
[Step6-1:ビューの文書を順番にすべて処理する(事前に次の文書を取得)]
[Step6-2:ビューの文書を順番にすべて処理する(自動更新の無効)]
の組み合わせ
AutoUpdate プロパティを False に設定するもう一つの利点は、更新頻度が多
い場合にパフォーマンスの低下を防げる点です
ビューの文書の処理:まとめ
 ビューの文書を処理する場合、ビューの更新(自分自身・他者)を意識してプ
ログラミングする必要があります。
 文書を取得する方法としては、検索系のメソッドを使う方法もあります。一度
ヘルプに目を通しておいてください。
 NotesDatabase クラスの FTSearch メソッドや Search メソッド
 NotesView クラスの FTSearch メソッド
 迷ったら以下のパターンで考えるとよいでしょう。
 文書の新規・更新・削除がある場合
「Step6-3:ビューの文書を順番にすべて処理する(事前に次の文書を取得+自動更新の無効)」
 文書の参照のみの場合
「Step3-2:ビューの文書を順番にすべて取得する」でも可
もちろん、「Step6-3:ビューの文書を順番にすべて処理する(事前に次の文書を取得+自動更新の無効)」でも可
74
まとめ
75
ヘルプ
 気になることや困ったらヘルプを見ましょう!
 特にサンプルコードが記載されている“例”は理解の手助けになります。
 Domino Designer のメニューバー [ヘルプ] - [ヘルプ目次] から開きます。
 IBM Domino Designer Basic 版 ユーザーガイドおよびリファレンス
 LotusScript 言語
 LotusScript /COM/OLE クラス
76
最初に目を通しておきたいヘルプ項目
IBM Domino Designer Basic 版 ユーザーガイドおよびリファレンス
 LotusScript /COM/OLE クラス
 LotusScript: LotusScript のクラスの使用
 << ケース別に利用可能なプロパティやメソッドがまと
められている >>
 LotusScript クラス A-Z
 << クラスの詳細はここで確認 >>
77
 LotusScript 言語
 スクリプトとステートメントの作成規則
 識別子の作成規則
 ラベル
 キーワード
 特殊文字
 データ型、定数、変数
 LotusScript のデータ型の概要
 式と演算子
 文字列演算子の一覧
 スクリプトのフローの管理
 ブロックステートメント
 分岐ステートメント
 繰り返しステートメント
 早期終了ステートメント
 LotusScript 言語リファレンス
 << 関数やステートメントの詳細はここで確認 >>
 言語とスクリプトの制限
 数値データの制限
 文字列データの制限
 配列変数の制限
 ランタイムエラーメッセージ
 << エラーの原因はここで確認 >>
特にお勧めの項目は、黄色表記しています。
<< >> の箇所は、量が多いので「こんなのが
あるんだ……」程度に見ておいて、必要な時
に再度確認しましょう。
最後に
 今回は、入門編として LotusScript の学習を始める上で最初に理解しておいた方
が良い部分のみを厳選しました。それでもこの頁数になってしまいました。
 LotusScript は奥が深く、まだまだ語り足りない部分がありますが、そこが面白
いところです。
 ノーツクライアントのみではなく、Excel やWord を操作することもでき、工夫
次第で様々なアプリケーションが開発できます。
 当資料が LotusScript の学習を始めた方のお役に立ててれば幸いです。
78
79
最後までご覧いただきありがとうございました
補足資料
80
覚えておきたいプロパティ・メソッド
 各クラスで覚えておくとよいプロパティ・メソッドを抜き出しました。
 これ以外のプロパティ・メソッドが必要なケースもあります。あくまで参考レベルです。
 演習で紹介したものも含みます。
 余裕がある時にヘルプで確認しておくと後々参考になると思います。
81
特に重要なものは、黄色表記しています
関係するものは代表的なプロパティ・
メソッドの下にまとめました
例)
バックエンドクラス (1)
 NotesSession
 プロパティ
 CurrentDatabase
 UserName
 CommonUserName
 メソッド
 Evaluate
 GetDatabase
 SetEnvironmentVar
 GetEnvironmentString
 GetEnvironmentValue
82
 NotesDatabase
 プロパティ
 FilePath
 FileName
 Server
 Size
 SizeQuota
 SizeWarning
 CurrentAccessLevel
 メソッド
 GetAgent
 GetDocumentByUNID
 GetDocumentByID
 GetProfileDocument
 OpenMail
 Search
 FTSearch
 QueryAccessRoles
 NotesView
 プロパティ
 AllEntries
 メソッド
 GetAllDocumentsByKey
 GetDocumentByKey
 GetFirstDocument
 GetNextDocument
 GetLastDocument
 GetPrevDocument
 FTSearch
 NotesDocument
 プロパティ
 Size
 UniversalID
 NoteID
 メソッド
 AppendItemValue
 ReplaceItemValue
 ComputeWithForm
 CopyToDatabase
 CopyAllItems
 CopyItem
 GetFirstItem
 GetAttachment
 GetItemValue
 GetRead
 MarkRead
 MarkUnread
 HasItem
 Remove
 RemovePermanently
 RemoveItem
 Save
 Send
バックエンドクラス (2)
 NotesDocumentCollection
 プロパティ
 Count
 メソッド
 GetFirstDocument
 GetNextDocument
 GetLastDocument
 GetPrevDocument
 RemoveAll
 StampAll
83
 NotesItem
 プロパティ
 IsAuthors
 IsNames
 IsReaders
 IsSummary
 Text
 Values
 メソッド
 AppendToTextList
 CopyItemToDocument
 Remove
 NotesAgent
 メソッド
 Run
フロントエンドクラス (1)
 NotesUIWorkspace
 プロパティ
 CurrentDatabase
 CurrentDocument
 CurrentView
 メソッド
 AddDatabase
 ComposeDocument
 EditDocument
 EditProfile
 GetCurrentDatabase
 OpenDatabase
 ReloadWindow
 ViewRefresh
84
 Open 系
 ComposeDocument
 EditDocument
 OpenFrameSet
 OpenView (NotesDatabase)
 SetTargetFrame
 Prompt, Dialog, PickList 系
 DialogBox
 OpenFileDialog
 SaveFileDialog
 Prompt
 PickListCollection
 PickListStrings
フロントエンドクラス (2)
 NotesUIDatabase
 プロパティ
 Database
 Documents
 メソッド
 Close
 OpenView
85
 NotesUIView
 プロパティ
 Documents
 View
 メソッド
 Close
 Print
 SelectDocument
 DeselectAll
 NotesUIDocument
 プロパティ
 AutoReload
 CurrentField
 DialogBoxCanceld
 Document
 EditMode
 IsNewDoc
 Ruler
 メソッド
 Close
 FieldGetText
 FieldSetText
 FieldAppendText
 GotoField
 GotoTop
 GotoBottom
 GotoNextField
 GotoPrevField
 Print
 Refresh
 RefreshHideFormulas
 Reload
 Save

More Related Content

What's hot

Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)Takeshi Yoshida
 
Notes データベースの多言語対応
Notes データベースの多言語対応Notes データベースの多言語対応
Notes データベースの多言語対応Haruyuki Nakano
 
ノーツアプリケーションのデザインを変更してみよう!
ノーツアプリケーションのデザインを変更してみよう!ノーツアプリケーションのデザインを変更してみよう!
ノーツアプリケーションのデザインを変更してみよう!Takeshi Yoshida
 
Notes/Domino アプリがそのまま Web ブラウザで動く HCL Nomad Web の簡単な導入と「仕掛け」
Notes/Domino アプリがそのまま Web ブラウザで動く HCL Nomad Web の簡単な導入と「仕掛け」Notes/Domino アプリがそのまま Web ブラウザで動く HCL Nomad Web の簡単な導入と「仕掛け」
Notes/Domino アプリがそのまま Web ブラウザで動く HCL Nomad Web の簡単な導入と「仕掛け」Software Info HCL Japan
 
大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件Haruyuki Nakano
 
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能toshihiro okamoto
 
初めての HCL Sametime
初めての HCL Sametime初めての HCL Sametime
初めての HCL SametimeHaruyuki Nakano
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
XPagesで検索してみよう
XPagesで検索してみようXPagesで検索してみよう
XPagesで検索してみようMasahiko Miyo
 
パブリック文書/パブリックアクセス
パブリック文書/パブリックアクセスパブリック文書/パブリックアクセス
パブリック文書/パブリックアクセスHaruyuki Nakano
 
Dominoアクセスサービスを使用したRESTサービスのプレイブック
Dominoアクセスサービスを使用したRESTサービスのプレイブックDominoアクセスサービスを使用したRESTサービスのプレイブック
Dominoアクセスサービスを使用したRESTサービスのプレイブックMitsuru Katoh
 
View Customize Pluginで出来ること
View Customize Pluginで出来ることView Customize Pluginで出来ること
View Customize Pluginで出来ることonozaty
 
Domino policies deep dive
Domino policies deep diveDomino policies deep dive
Domino policies deep diveMartijn de Jong
 
ある工場のRedmine画面カスタム【View customize plugin 活用例】
ある工場のRedmine画面カスタム【View customize plugin 活用例】ある工場のRedmine画面カスタム【View customize plugin 活用例】
ある工場のRedmine画面カスタム【View customize plugin 活用例】Kohei Nakamura
 
The Ultimate Administrator’s Guide to HCL Nomad Web
The Ultimate Administrator’s Guide to HCL Nomad WebThe Ultimate Administrator’s Guide to HCL Nomad Web
The Ultimate Administrator’s Guide to HCL Nomad Webpanagenda
 
Building Responsive Applications Using XPages
Building Responsive Applications Using XPagesBuilding Responsive Applications Using XPages
Building Responsive Applications Using XPagesTeamstudio
 
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020onozaty
 

What's hot (20)

Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
 
Notes データベースの多言語対応
Notes データベースの多言語対応Notes データベースの多言語対応
Notes データベースの多言語対応
 
ノーツアプリケーションのデザインを変更してみよう!
ノーツアプリケーションのデザインを変更してみよう!ノーツアプリケーションのデザインを変更してみよう!
ノーツアプリケーションのデザインを変更してみよう!
 
Notes/Domino アプリがそのまま Web ブラウザで動く HCL Nomad Web の簡単な導入と「仕掛け」
Notes/Domino アプリがそのまま Web ブラウザで動く HCL Nomad Web の簡単な導入と「仕掛け」Notes/Domino アプリがそのまま Web ブラウザで動く HCL Nomad Web の簡単な導入と「仕掛け」
Notes/Domino アプリがそのまま Web ブラウザで動く HCL Nomad Web の簡単な導入と「仕掛け」
 
大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件
 
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
 
初めての HCL Sametime
初めての HCL Sametime初めての HCL Sametime
初めての HCL Sametime
 
ODS ってなんだ?
ODS ってなんだ?ODS ってなんだ?
ODS ってなんだ?
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
HCL Domino REST API 利用ガイド
HCL Domino REST API 利用ガイドHCL Domino REST API 利用ガイド
HCL Domino REST API 利用ガイド
 
XPagesで検索してみよう
XPagesで検索してみようXPagesで検索してみよう
XPagesで検索してみよう
 
パブリック文書/パブリックアクセス
パブリック文書/パブリックアクセスパブリック文書/パブリックアクセス
パブリック文書/パブリックアクセス
 
Dominoアクセスサービスを使用したRESTサービスのプレイブック
Dominoアクセスサービスを使用したRESTサービスのプレイブックDominoアクセスサービスを使用したRESTサービスのプレイブック
Dominoアクセスサービスを使用したRESTサービスのプレイブック
 
View Customize Pluginで出来ること
View Customize Pluginで出来ることView Customize Pluginで出来ること
View Customize Pluginで出来ること
 
Domino policies deep dive
Domino policies deep diveDomino policies deep dive
Domino policies deep dive
 
ある工場のRedmine画面カスタム【View customize plugin 活用例】
ある工場のRedmine画面カスタム【View customize plugin 活用例】ある工場のRedmine画面カスタム【View customize plugin 活用例】
ある工場のRedmine画面カスタム【View customize plugin 活用例】
 
The Ultimate Administrator’s Guide to HCL Nomad Web
The Ultimate Administrator’s Guide to HCL Nomad WebThe Ultimate Administrator’s Guide to HCL Nomad Web
The Ultimate Administrator’s Guide to HCL Nomad Web
 
Building Responsive Applications Using XPages
Building Responsive Applications Using XPagesBuilding Responsive Applications Using XPages
Building Responsive Applications Using XPages
 
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
 
今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf
 

Similar to 今日から始める LotusScript - Domino クラスライブラリの使い方(Version 1.1)

Movable Type for AWS Hands-on
Movable Type for AWS Hands-onMovable Type for AWS Hands-on
Movable Type for AWS Hands-onYuji Takayama
 
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)Takeshi Yoshida
 
第1回windows phoneアプリ開発のハンズオンセミナー
第1回windows phoneアプリ開発のハンズオンセミナー第1回windows phoneアプリ開発のハンズオンセミナー
第1回windows phoneアプリ開発のハンズオンセミナーhyoromo
 
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Yuji Nojima
 
IBM Connect2014 に参加して(テクてく技術者夜会)
IBM Connect2014 に参加して(テクてく技術者夜会)IBM Connect2014 に参加して(テクてく技術者夜会)
IBM Connect2014 に参加して(テクてく技術者夜会)Takeshi Yoshida
 
coma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworkscoma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworksAtsushi Tadokoro
 
Slug 3-windows phone7helloworld-classmethod-ryuichi-nonaka
Slug 3-windows phone7helloworld-classmethod-ryuichi-nonakaSlug 3-windows phone7helloworld-classmethod-ryuichi-nonaka
Slug 3-windows phone7helloworld-classmethod-ryuichi-nonakaRyuichi Nonaka
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発
ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発
ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発Takashi Yoshinaga
 
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とはテクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とはHiroaki Komine
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようcharsbar
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
できる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリできる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:WebからはじまるアプリMasami Yabushita
 
Windows phone & windows 8で見えてくるメトロの世界
Windows phone & windows 8で見えてくるメトロの世界Windows phone & windows 8で見えてくるメトロの世界
Windows phone & windows 8で見えてくるメトロの世界Makoto Nishimura
 

Similar to 今日から始める LotusScript - Domino クラスライブラリの使い方(Version 1.1) (20)

Movable Type for AWS Hands-on
Movable Type for AWS Hands-onMovable Type for AWS Hands-on
Movable Type for AWS Hands-on
 
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
 
Net commonsアドオンモジュールセミナー第4回小ネタ集
Net commonsアドオンモジュールセミナー第4回小ネタ集Net commonsアドオンモジュールセミナー第4回小ネタ集
Net commonsアドオンモジュールセミナー第4回小ネタ集
 
第1回windows phoneアプリ開発のハンズオンセミナー
第1回windows phoneアプリ開発のハンズオンセミナー第1回windows phoneアプリ開発のハンズオンセミナー
第1回windows phoneアプリ開発のハンズオンセミナー
 
Sails workshop4
Sails workshop4Sails workshop4
Sails workshop4
 
無料ソフト「NetCommons」で作る学校ホームページ【1限目】
無料ソフト「NetCommons」で作る学校ホームページ【1限目】無料ソフト「NetCommons」で作る学校ホームページ【1限目】
無料ソフト「NetCommons」で作る学校ホームページ【1限目】
 
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪
 
Stac2014 石川
Stac2014 石川Stac2014 石川
Stac2014 石川
 
IBM Connect2014 に参加して(テクてく技術者夜会)
IBM Connect2014 に参加して(テクてく技術者夜会)IBM Connect2014 に参加して(テクてく技術者夜会)
IBM Connect2014 に参加して(テクてく技術者夜会)
 
coma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworkscoma - creator’s talk session: Code - openFrameworks
coma - creator’s talk session: Code - openFrameworks
 
Slug 3-windows phone7helloworld-classmethod-ryuichi-nonaka
Slug 3-windows phone7helloworld-classmethod-ryuichi-nonakaSlug 3-windows phone7helloworld-classmethod-ryuichi-nonaka
Slug 3-windows phone7helloworld-classmethod-ryuichi-nonaka
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
3
33
3
 
ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発
ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発
ARコンテンツ作成勉強会:Myoを用いたVRコンテンツ開発
 
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とはテクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみよう
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
できる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリできる!スマホアプリ:Webからはじまるアプリ
できる!スマホアプリ:Webからはじまるアプリ
 
Beginning iPhone Vol2
Beginning iPhone Vol2Beginning iPhone Vol2
Beginning iPhone Vol2
 
Windows phone & windows 8で見えてくるメトロの世界
Windows phone & windows 8で見えてくるメトロの世界Windows phone & windows 8で見えてくるメトロの世界
Windows phone & windows 8で見えてくるメトロの世界
 

今日から始める LotusScript - Domino クラスライブラリの使い方(Version 1.1)

  • 2. 特記事項  本資料の掲載内容は、できる限り正確を期するよう に努めてはおりますが、い かなる明示または暗黙の 保証も責任も負いかねます。  本資料の情報は、使用先の責任において使用され るべきものであることを、あ らかじめご了承ください。  掲載情報は不定期に変更されることもあります。他 のメディア等に無断で転載 する事はご遠慮下さい。  当資料をコピー等で複製することは、執筆者の承諾 なしではできません。  当資料に掲載された製品名または会社名は それぞれの各社の商標または登録商 標です。 2
  • 4. きっかけ  LotusScript の使い方については Domino Designer のヘルプに詳細が載っていま す。私自身、過去にヘルプを読んで始めました。ただ、分量が多く、最初にヘ ルプのみだとどれから手を付ければよいのか?で悩むかと思います。  BASIC 言語ですので、Excel などのVBA(Visual Basic forApplications)等のプロ グラミング経験があれば、比較的スムーズに習得できますが、それでも Notes/Domino の特有の部分があります。  そこで、以下に焦点をあてて資料にまとめることにしました。  Domino クラスライブラリの使用に焦点をあてる(NotesDatabase や NotesView など、 Notes/Domino のオブジェクト・データの操作に使用するクラス)  「よく使用する」または「重要なもの」に厳選する 4
  • 5. 当資料の対象者  LotusScript の学習を始めた人を対象として想定しています。  アプリケーション開発でよく使用する Domino クラスライブラリの使い方から今後学習を進 めていくための取っ掛かりになればと考えて作成しています。  フォームやビュー、簡単な式言語など、Notes/Domino アプリケーションの開発 の基礎的な部分はある程度理解していることを前提としています。  Domino Designer の使い方および一般的なプログラミング用語(クラス、変数、 型など)については触れていません。詳細は、ヘルプなどを参照ください。 5
  • 6. 前提  最初からすべてを把握するのは大変なので、別の方法がある・説明を省略して いる場合があります。中級・上級と進む中で詳細は徐々に把握して行きましょ う。  プログラムの例外処理などは省略しています。  Notes/Domino の [アプリケーション] は、以前のバージョンでは [データベース] と呼ばれていました。そのため、資料によっては記述が異なる場合があります。 クラス名では、データベースが使用されているため、当資料では、基本 [デー タベース] と記述しています。 6
  • 7. 使用するアプリケーション/データベースの説明  アプリケーション/データベースには、以下の設計要素がある前提です。  フォーム:製品:fmProduct  フィールド  製品 ID:ProductID:テキスト  製品名:ProductName:テキスト  価格:Price:数値  ビュー:全製品一覧:vwAll  選択式  SELECT deleteFlag != "1 "  列  製品 ID:ProductID  製品名:ProductName  価格:Price 7
  • 10. 行番号の表示方法  メニューバー [ファイル] - [プリファレンス (設定)] を開きます。  一般  エディター  テキスト・エディター  行番号の表示:有効 10
  • 12. LotusScript とは  LotusScript は、IBM Notes/Domino アプリケーションで利用可能な BASIC スクリ プト言語です。  式言語では、記述ができない、または難しい処理を行いたい場合に利用します。  エージェント(スケジュール実行を含む)、ボタン、フォームを開く・更新・ 保存・閉じるなどの様々なイベントで実行可能です。  スクリプトライブラリとして作成すると、クラス、関数、および変数を共有す ることができ、開発効率・保守性があがります。  Domino データへのアクセスやクライアントの操作には、Domino クラスライブ ラリを使用します。(以後、クラスと記述します) 12
  • 13. クラスの種類 バックエンドクラスとフロントエンドクラス ※ 大きく2つに分けることができます。  バックエンドクラス(Database クラス)  データベース、ビュー、文書、その他のオブジェクトへアクセスできます。  ユーザー(クライアント)だけではなく、サーバーも利用できます。  フロントエンドクラス(UI クラス)  ユーザーがクライアントで現在作業中のオブジェクトにアクセスできます。  サーバーは利用できません。(UI・クライアント から操作していないため) 13 例 開いている文書やビューへのアクセス 画面を閉じるなどのクライアント操作
  • 14. クラスの関係図  バージョン 8 以前の Domino Designer には、右 図のようなクラスの関係図 があり、理解するのに大変 役立ちました。  基本、矢印の元のクラスか ら先のクラスへと辿ってア クセスします。取得したい クラスから遡ればどのよう に辿っていけば良いのかが わかります。  残念ながら 8.5 以降はこの 図はないようです。しかし、 大きな変更はないので以前 の図も参考になります。 14
  • 15. クラスの一覧  Button  Field  Navigator  NotesACL  NotesACLEntry  NotesAdministrationProcess  NotesAgent  NotesColorObject  NotesDatabase  NotesDateRange  NotesDateTime  NotesDbDirectory  NotesDocument  NotesDocumentCollection 15  NotesDOMAttributeNode  NotesDOMCDATASectionNode  NotesDOMCharacterDataNode  NotesDOMCommentNode  NotesDOMDocumentFragmentNode  NotesDOMDocumentNode  NotesDOMDocumentTypeNode  NotesDOMElementNode  NotesDOMEntityNode  NotesDOMEntityReferenceNode  NotesDOMNamedNodeMap  NotesDOMNode  NotesDOMNodeList  NotesDOMNotationNode  NotesDOMParser  NotesDOMProcessingInstructionNode  NotesDOMTextNode  NotesDOMXMLDeclNode  NotesDXLExporter  NotesDXLImporter  NotesEmbeddedObject  NotesForm  NotesInternational  NotesItem  NotesLog  NotesMIMEEntity  NotesMIMEHeader  NotesName  NotesNewsletter  NotesNoteCollection  NotesOutline  NotesOutlineEntry  NotesRegistration  NotesReplication  NotesReplicationEntry  NotesRichTextDocLink  NotesRichTextItem  NotesRichTextNavigator  NotesRichTextParagraphStyle  NotesRichTextRange  NotesRichTextSection  NotesRichTextStyle  NotesRichTextTab  NotesRichTextTable  NotesSAXAttributeList  NotesSAXException  NotesSAXParser  NotesSession  NotesStream  NotesTimer  NotesUIDatabase  NotesUIDocument  NotesUIScheduler  NotesUIView  NotesUIWorkspace  NotesView  NotesViewColumn  NotesViewEntry  NotesViewEntryCollection  NotesViewNavigator  NotesXMLProcessor  NotesXSLTranformer 多すぎ…どれから見ていけばよいのやら…
  • 16. よく使用するクラス ※ 最初は、よく使用する以下のクラスから覚えていきましょう。  バックエンドクラス  NotesSession  NotesDatabase  NotesView  NotesDocument  NotesDocumentCollection  NotesItem  NotesAgent  フロントエンドクラス  NotesUIWorkspace  NotesUIDatabase  NotesUIView  NotesUIDocument 16
  • 18. Hello world! (1)  クライアントのステータスバーへ “Hello world!”と表示するエージェント を作成します。  エージェントの名前(任意)を入力します。  タイプ [LotusScript] を選択して、新規エージェントを作成します。 18
  • 19. Hello world! (2)  [プロパティ] の [基本] タブの実行時の [対象] を [なし] に設定します。 19
  • 20. Hello world! (3)  新規エージェントを作成すると下図のような画面が開きます。 1. 左に [オブジェクト] タブがあります。 2. [Initialize] をクリックします。 3. 右に Initialize サブルーチンが表示されます。ここにプログラムを記述します。 ※ Initialize は、エージェント実行時に最初に実行されます。 ※ オブジェクトの最上位を選択すると全プログラムが表示されます。 20
  • 21. Hello world! (4) 21 1行目 Initialize サブルーチンの開始行。変更なし 2行目 Print ステートメントの後に表示したい文字列を指定 今回は、”Hello world!” を指定 文字列は、ユーザー名をクライアントのステータスバーに表示 3行目 Initialize サブルーチンの終了行。変更なし Print の後は、半角スペース
  • 22. Hello world! (5)  メニューバー [アクション] – [(各エージェント)]を実行します。  ステータスバーをクリックして結果を確認します。 22
  • 23. Hello world! 補足「オブジェクト」タブ (1)  (Options)  Option Public  モジュールレベルの明示的な宣言が、規定で Public となるように設定します。  変更する必要が無い場合、そのままでよいでしょう。  Public については、Dim ステートメントのヘルプを参照ください。  Option Declare  変数の暗黙の宣言を禁止します。事前に宣言せずに変数を使用するとエラーとなります。綴りミスや意図しない 箇所での宣言を防げます。  Use "[スクリプトライブラリ名]"  今回は使用していませんが、スクリプトライブラリを使用するための宣言ができます。  %REM ~ %END REM  コメントです。プログラムの実行には影響しません。デフォルトでは緑で表示されます。  新規作成時にプログラムの説明(名前、作成日と作成者など)が自動作成されます。プログラムを別の人または 後から自分が見た際に理解し易くなるように説明を追加しましょう。  (Declarations)  変数の宣言に使用できます。 23
  • 24. Hello world! 補足「オブジェクト」タブ (2)  Initialize  モジュール(エージェント)がロードされると記述したプログラムが実行されます。  Terminate  モジュールがアンロードされると記述したプログラムが実行されます。  終了時に実行したいプログラムを記述するのですが、使用しないことが多く最初は覚えなく てもよいでしょう。 ※ 上記以外にも Sub ステートメント(サブルーチン)、Function ステートメ ント(関数)を追加できます。 24
  • 26. コメントの記述方法  スクリプト内にコメント記述するには以下の方法があります。 26 2行目 Rem ステートメント(一行のコメント) 先頭に“REM ”を付ける 4行目 シングルクォート/アプストロフィ(一行のコメント) 先頭に “ ’ ”を付ける 5行目 スクリプトの後ろにも記述できます 7-9行目 %Rem 命令(複数行のコメント) コンパイラは、%REM と %END REM の間にあるすべてのテキストを無視します。 Rem ステートメント: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/LSAZ_REM_STATEMENT.html %Rem 命令: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/LSAZ_PCTREM_DIRECTIVE.html
  • 28. LotusScript のデバッグを有効にする  LotusScript には、デバッグを補助するツールとして、スクリプトデバッガが あります。  LotusScript をステップ(1行)単位で実行でき、変数の値を確認しながら動 作確認/デバッグできるため、とても重宝します。  スクリプトデバッガは、メニューバー [ツール] – [LotusScript のデバッグ] から有効にします。  有効な状態で LotusScript を実行するとスクリプトデバッガが自動で表示さ れます。 28 LotusScript の 実行
  • 29. スクリプトデバッガ:画面 29 スライドシューにすると GIF アニ メーションとして再生されます。
  • 30.  実行  エラーまたはブレークポイントまで実行  ステップ イン [F8]キー  ステップ単位で実行  ステップ オーバー [Shift] + [F8] キー  ステップ単位で実行  別のサブプログラム(Sub/Function)を呼び出す処理の場合、呼び出し先のサブプログラムが一度に(裏で)実行され、次 の行に処理が進む  ステップ アウト [Ctrl] + [F8] キー  現在のサブプログラムを最後まで実行  スタックされている次のサブプログラムに処理が移る  停止  直ちに、デバッガを終了  デバッガの終了  直ちに、デバッガを終了  LotusScript のデバッグが無効になる スクリプトデバッガ:機能 30 スクリプトをステップ単位で実行する: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_STEPPING_THROUGH_A_SCRIPT.html 初期の演習では Initialize のみで、 別のサブプログラムが無いため、後で 見直せばよいでしょう [ステップ イン] を使用して デバッグを進める
  • 32.  ブレークポイントは、対象の行を選択してダブルクリックして設定します。  もう1回ダブルクリックすると無効になります。  無効の場合、停止しません。  更に1回ダブルクリックすると消去になります。  ダブルクリックする以外に、メニューバーのデバッグから各種選択する方法、 [F9] キーで変更する方法があります。  ブレークポイントが設定できない行もあります。ご注意ください。  Dim ステートメント(変数の宣言)など スクリプトデバッガ:ブレークポイントの設定(有効)/無効/消去 32
  • 36.  [コール]タブには、現在実行スタックにあるサブプログラムのリストが実行順 に表示されます。このリストの一番上には現在実行中のサブプログラムが表示 されます。  LotusScript の学習を進めていくと複数のサブプログラム(Sub/Function)を コールする(呼び出す)場合があります。現時点では、このようなタブがある ことだけを覚えておけば良いでしょう。 スクリプトデバッガ:[コール]タブ 36
  • 38. 基本的なバックエンドクラス  NotesSession クラス  実行中の環境を表します。現在のユーザーに関する情報や環境変数などにアクセスできます。  Notes/Domino 利用中の最上位となるクラスの1つです。NotesSession クラスから辿っていく と各バックエンドクラスにアクセスすることができます。  NotesDatabase クラス  データベースにアクセスするためのクラスです。  NotesView クラス  ビュー/フォルダにアクセスするためのクラスです。  NotesDocument クラス  文書にアクセスするためのクラスです。 38
  • 40. 文書へのアクセスの基本 40 NotesSession NotesDatabase NotesView クライアント/サーバー環境 ビュー 文書 オブジェクト クラス NotesDocument ※ アクセス方法は上記以外にもあります。 Notes クライアントから 文書を手動で開くように アプリケーション/ データベース 各バックエンドクラスから 文書へアクセスする
  • 41. Step1-1:現在のユーザー名を取得 NotesSession クラス 41 2行目 現在のセッションにアクセスして変数 session に格納 他のクラスとは違って New を使用するのを忘れないように注意 3行目 ユーザー名を格納する変数 user を宣言 4行目 NotesSession クラスの UserName プロパティから現在のユーザーの完全識別名を取得、変数 user に格納 共通名のみを取得する場合、CommonUserName プロパティを使用 (例:完全識別“CN=Administrator/O=test”の場合、共通名は“Administrator”) 5行目 Print ステートメントを使って、ユーザー名をクライアントのステータスバーに表示 NotesSession: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESSESSION_CLASS.html
  • 42. Step1-2:現在のデータベースのタイトルを取得 NotesDatabase クラス 42 3行目 NotesDatabase クラスの変数 db を宣言 4行目 NotesSession クラスの CurrentDatabase プロパティから現在のデータベースを取得、変数 db に格納 その際、Set ステートメントを使用 5行目 NotesDatabase クラスの Title プロパティからデータベースのタイトルを取得 Print ステートメントを使って、タイトルをクライアントのステータスバーに表示 NotesDatabase: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESDATABASE_CLASS.html
  • 43. Step1-3:ビューの名前を取得 NotesView クラス 43 4行目 NotesView クラスの変数 view を宣言 6行目 NotesDatabase クラスの GetView メソッドからビュー(別名:vwAll)を取得、変数 view に格納 その際、Set ステートメントを使用 7行目 NotesView クラスの Name プロパティからビューの名前を取得 Print ステートメントを使って、名前をクライアントのステータスバーに表示 NotesView: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESVIEW_CLASS.html
  • 44. Step1-4:ビューの最初の文書の作成日時を取得 NotesDocument クラス 44 5行目 NotesDocument クラスの変数 doc を宣言 8行目 NotesView クラスの GetFirstDocument メソッドからビューの最初の文書を取得、変数 doc に格納 その際、Set ステートメントを使用 9行目 NotesDocument クラスの Created プロパティから文書が作成された日付/時刻を取得 Print ステートメントを使って、名前をクライアントのステータスバーに表示 NotesDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESDOCUMENT_CLASS.html
  • 46. 基本的なフロントエンドクラス  補足  クライアントの状態(現在開いているデータベースやビュー、文書など)にアクセスするためのクラスです。  ユーザーがクライアントから直接実行しているスクリプトからのみ使用できます。スケジュールエージェン トでは使用できません。(エラーになります)  ダイアログボックスを表示したり、ビューやフォームを閉じるなど UI に関する操作ができます。  NotesUIWorkspace クラス  現在のクライアントのワークスペースのウィンドウにアクセスするためのクラスです。  NotesUIDatabase クラス  現在、クライアントで開いているデータベースにアクセスするためのクラスです。  NotesUIView クラス  現在、クライアントで開いているビューにアクセスするためのクラスです。  NotesUIDocument クラス  現在、クライアントで開いている文書にアクセスするためのクラスです。 46
  • 49. Step2-1:ダイアログボックスを表示 NotesUIWorkspace クラス 49 2行目 現在のワークスペースのウィンドウにアクセスして変数 ws に格納。New を使用するのを忘れないように注意 3行目 ダイアログボックスでのユーザーの選択結果を格納する変数 askme を宣言(Integer 型) 4行目 NotesUIWorkspace クラスの Prompt メソッドを使用して、ダイアログボックスを表示 第1引数は、ダイアログボックスのタイプ(種類)の指定 今回は、はい/いいえ(Yes/No)ボタンがある PROMPT_YESNO タイプを指定 第2引数は、タイトルバーに表示する文字列を指定。第3引数は、表示する文字列を指定 ダイアログボックスでのユーザーの選択結果は、変数 askme へ格納 ユーザーがはい(Yes)を選択した場合、askme = 1、いいえ(No)を選択した場合、askme = 0 5行目 変数 askme によって、処理を分岐 ※ 式言語の @Prompt に相当 ※ ダイアログボックスを表示する方法は、この他に MessageBox 関数とステートメント、NotesUIWorkspace クラスの DialogBox メソッド がある NotesUIWorkspace: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESUIWORKSPACE_CLASS.html NotesUIWorkspace - Prompt: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_PROMPT_METHOD_7966_ABOUT.html
  • 50. Step2-2:現在のデータベースを閉じる NotesUIDatabase クラス 50 3行目 NotesUIDatabase クラスの変数 uidb を宣言 4行目 NotesUIWorkspace クラスの CurrentDatabase プロパティから現在のデータベースを取得、変数 uidb に格納 NotesSession クラスの CurrentDatabase プロパティと違って、戻り値は NotesUIDatabase オブジェクトである ことに注意 5行目 NotesUIDatabase クラスの Close メソッドを実行 データベースのすべてのビュート文書を閉じてから、データベースを閉じる ※ データベースを開いた状態で実行すること NotesUIDatabase: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESUIDATABASE_CLASS.html NotesUIDatabase - Close: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_CLOSE_METHOD_UIDB.html
  • 51. Step2-3:現在のビューを印刷する NotesUIView クラス 51 3行目 NotesUIView クラスの変数 uiview を宣言 4行目 NotesUIWorkspace クラスの CurrentView プロパティから現在のビューを取得、変数 uiview に格納 戻り値は NotesUIView オブジェクトであることに注意 5行目 NotesUIView クラスの Print メソッドを実行して、ビューを印刷 第1引数は、印刷部数 第7引数は、False(デフォルト)の場合、選択している文書の内容。True の場合、ビューを印刷 引数なし “uiview.Print”とした場合、印刷ダイアログを表示 ※ ビューを開いた状態で実行すること NotesUIView: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESUIVIEW_CLASS.html NotesUIView - Print: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_PRINT_METHOD_4867_ABOUT.html
  • 52. Step2-4:文書を編集モードにする NotesUIDocument クラス 52 3行目 NotesUIDocument クラスの変数 uidoc を宣言 5行目 現在の文書のモード(編集/読み込み)を格納する変数 editmode を宣言(Boolean 型) 6行目 NotesUIWorkspace クラスの CurrentDocument プロパティから現在の文書を取得、変数 uidoc に格納 戻り値は NotesUIDocument オブジェクトであることに注意 7行目 NotesUIDocument クラスの EditMode プロパティから現在の文書が編集モードであるかどうかを取得、変数 editmode へ格納(編 集モード: True, 読み込みモード: False) 8行目 変数 editmode によって、処理を分岐 9行目 現在開いている文書が編集モードの場合、ダイアログボックス(タイプ: PROMPT_OK)を表示 11行目 現在開いている文書が読み込みモードの場合、EditMode プロパティへ True を設定して、編集モードに変更 ※ 文書を開いた状態で実行すること NotesUIDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESUIDOCUMENT_CLASS.html NotesUIDocument - EditMode: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_EDITMODE_PROPERTY.html 9行目の結果11行目の結果
  • 54. ビューの文書の処理  ビューに表示されている文書を処理する機会は、とても多いです。  例)  ビューに表示されている文書の [ステータス] フィールドの値をすべて“完了”にしたい  ビューのデータを CSV に書き出したい  キー(特定の値)に一致する文書のデータを取得したい  ビューからの文書の取得でよく使うのは以下の方法です。  ビューの列の値を検索して、キーに一致する文書を取得する  GetDocumentByKey メソッド  GetAllDocumentsByKey メソッド  ビューの最初の文書から順番に取得する  GetFirstDocument メソッド  GetNextDocument メソッド 54
  • 55. Step3-1:ビューの列の値を使用して文書を検索する NotesView クラス/GetDocumentByKey メソッド 55 6,9行目 製品 ID を格納するための String クラス(文字列)の変数 key を宣言。初期値“L01”を設定 10行目 NotesView クラスの GetDocumentByKey メソッドを使用して、ビューの左端ソート列(製品 ID の昇順でソー ト)と第1引数に指定した変数 key が一致する文書を検索 完全一致で検索する場合、第2引数には、True を指定 戻り値は NotesDocument オブジェクトであることに注意(複数の文書が一致する場合は最初の文書のみ) 11行目 変数 doc が Nothing かどうかで分岐 12行目 製品名を出力。[製品名(ProductName)]フィールドの値を取得したい場合、“doc.ProductName(0)”と記述 フィールド値の取り扱い・記述については、後述 NotesView - GetDocumentByKey: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETDOCUMENTBYKEY_METHOD.html
  • 56. Step3-2:ビューの文書を順番にすべて取得する NotesView クラス/GetFirstDocument, GetNextDocument メソッド 56 8行目 NotesView クラスの GetFirstDocument メソッドを使用して、ビューの最初の文書を取得 9,12行目 While ステートメントを使用して、変数 doc が Nothing になるまで 9~12行を繰り返す 10行目 製品名を出力 11行目 NotesView クラスの GetNextDocument メソッドを使用して、変数 doc の次の文書を取得 取得した次の文書は、変数 doc に格納(上書き) NotesView - GetFirstDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETFIRSTDOCUMENT_METHOD_VIEW.html NotesView – GetNextDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETNEXTDOCUMENT_METHOD_VIEW.html While ステートメント: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/LSAZ_WHILE_STATEMENT.html
  • 57. Step3-2:ビューの文書を順番にすべて取得する:補足(1) NotesView クラス/GetFirstDocument, GetNextDocument メソッド 57  注意事項  今回の演習では、文書を変更していないためビューの表示に影響がありません。  しかし、文書を削除したり、値を変更する場合は注意が必要です。理由は、 文書の削除や ビューの条件式によって、文書がビューに表示されなくなったりビューの表示順が変わって しまうためです。そうなると次の文書を返す GetNextDocument メソッドは期待する結果を 返さない場合があります。処理途中のビューがどのような状態であるかを意識しながらプロ グラミングする必要があります。 文書A 文書B 文書C 1番目 2番目 3番目 文書A 文書C 1番目 2番目 削除 ① 文書Bの取得 ② 文書Bの削除 例)文書を削除した場合 ③ ビューの自動更新 表示内容・順番の変化
  • 58. Step3-2:ビューの文書を順番にすべて取得する:補足(2) NotesView クラス/GetFirstDocument, GetNextDocument メソッド 58  注意事項(続き:ヘルプより抜粋)  GetNexDocument メソッド(NotesView クラス)  ループ内の文書を処理するときは、文書を削除しないでください。または、ビューに表示されなくなったり位置 が変更されるような形で、文書を変更しないでください。次の文書であったはずの文書がビュー内の別の位置に あると、GetNextDocument メソッドは実用的な結果を返さない場合があります。この問題の最も一般的な症状は、 文書をループしたときに文書がスキップされることです。  この問題に対処するには、文書を変更する前には常に GetNextDocument を呼び出す(※1)ようにロジックを変 更します。あるいは、NotesView.AutoUpdate (= False) を使用して、ビューの使用中にビューの索引が再作成 されるのを防止(※2)します。  別の章「ビューの文書の処理2」で上記対処方法の演習があります。 ※1:演習「Step6-1:ビューの文書を順番にすべて処理する(事前に次の文書を取得)」参照 ※2:演習「Step6-2:ビューの文書を順番にすべて取得する(自動更新の無効)」参照  AutoUpdate プロパティ(NotesView クラス)  【注意】このプロパティは、現在実行しているコードによる更新のみを処理します。データベースに Updall タ スクを実行するような他のコードは、このプロパティの値に関係なく、ビューの索引と NotesViewNavigator を 更新します。ビューのすべての文書を処理する必要がある場合は、静的なままのビューに頼らないでください。 この問題を解決する方法については、『すべての文書とすべての未処理文書を収集する』を参照してください。 NotesView - GetNextDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETNEXTDOCUMENT_METHOD_VIEW.html NotesView - AutoUpdate: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_AUTOUPDATE_PROPERTY.html
  • 59. Step3-3:ビューの列の値を使用して文書を検索する(複数) NotesView クラス/GetAllDocumentsByKey メソッド, NotesDocumentsCollection クラス 59 4行目 NotesDocumentCollection クラスの変数 dc を宣言 11行目 NotesView クラスの GetAllDocumentsByKey メソッドを使用して、ビューの左端ソート列(製品 ID の昇順でソート)と第1引 数に指定した変数 key が一致する文書をすべて検索 部分一致(前方)で検索する場合、第2引数には、False を指定 戻り値は NotesDocumentCollection オブジェクトであることに注意(複数の文書のコレクション/一覧) コレクション内の文書には順序は決まっていない。順不同であることに注意 14,17行目 While ステートメントを使用して、変数 doc が Nothing になるまで 14~17行を繰り返す 11行目 NotesDocumentCollection クラスの GetNextDocument メソッドを使用して、変数 doc の次の文書を取得 NotesView - GetAllDocumentsByKey: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_GETALLDOCUMENTSBYKEY_METHOD.html NotesDocumentCollection: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESDOCUMENTCOLLECTION_CLASS.html [Step3-1:ビューの列の値を使用して文書を検索する] [Step3-2:ビューの文書を順番にすべて取得する] を組み合わせて製品IDが [L] で始まる製品を検索
  • 61. 文書の処理  文書の処理パターンは、多岐にわたります。当資料では簡単な処理を例として記述します。  文書の新規作成  文書の更新  文書の削除  上記以外にも編集モードで表示している文書の操作(NotesUIDocument クラス)、エージェントでは なく、フォーム(PostOpen や QuerySave など)やボタン(Click)のイベントに記述する場合もあ ります。  文書に含まれるフィールドを LotusScript では、アイテム(Item)と呼びます。  フィールドを表すクラスは、NotesItem と NotesRichTextItem(リッチテキスト)クラスです。  フィールドを扱う方法は、以下になります。 1. 「拡張クラス」構文を使用  参考資料:AppendItemValue - 「拡張クラス」構文  https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_APPENDITEMVALUE_METHOD.html 2. NotesDocument クラスの GetItemValue, AppendItemValue, ReplaceItemValue メソッドなどを使用 3. NotesItem クラスにアクセスして、各種プロパティやメソッドを使用 ※ 1と2の方法では、NotesItem クラスにアクセスする必要はありません。 61
  • 62. Step4-1:文書を新規作成する NotesDatabase クラス/CreateDocument メソッド, NotesDocument クラス/Save メソッド 62 6行目 NotesDatabase クラスの CreateDocument メソッドを使用して、新規文書となる NotesDocument オブジェクトを 変数 doc に格納 7-10行目 変数 doc のフィールドに値を設定 “doc.(フィールド名) = (設定値)”で値を設定可能(「拡張クラス」構文) フィールドが存在しない場合、新規にフィールドが作成される 但し、プロパティやメソッドなどの予約語と被るフィールドは作成不可 また、文字列や数値以外の読者や作成者フィールドとして設定する場合、上記方法ではなく NotesItem クラスを 使った方法で作成/設定する必要あり 11行目 NotesDocument クラスの Save メソッドを使用して、変数 doc を保存 保存を忘れないようにすること NotesDatabase - CreateDocument: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_CREATEDOCUMENT_METHOD.html NotesDocument - Save: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_SAVE_METHOD_DOC.html
  • 63. Step4-2:文書を更新する NotesDocument クラス 63 12行目 “doc.(フィールド名) = (設定値)”で値を設定可能(「拡張クラス」構文) [価格(Price)]フィールドは複数値ではないが、フィールドのデータは複数値を考慮して配列で返ってくる そのため、後に“(0)”を付けて“doc.Price(0)”として配列の最初の値を取得(※1)、2を掛けている 13行目 NotesDocument クラスの Save メソッドを使用して、変数 doc を保存 保存を忘れないようにすること ※1 次頁「Step4-2:文書を更新する:補足」参照 [Step3-1:ビューの列の値を使用して文書を検索する] を一部修正 [製品ID] が“L01”の文書の [価格] を2倍にする
  • 64.  Notes/Domino の文書のフィールドは、複数の値を保持できます(但し、リッチテキストは除く)。  身近な例としては、メール DB の宛先フィールドやディスカッション DB のカテゴリです。  文書のプロパティで複数の値が保存されていることが確認できます。  そのため、値が配列で返ってくることを前提にプログラミングする必要があります。  スクリプトデバッガで値を確認すると、複数値かどうかに関係なく配列として扱われていることがわかります。 Step4-2:文書を更新する:補足 フィールドの値の取り扱いについて 64 ① 複数値:No ② 複数値:Yes doc.field_1(0) → “りんご” doc.field_2(0) →“りんご” doc.field_2(1) →“みかん” doc.field_2(2) →“もも”
  • 65. Step4-3:文書を削除する NotesDocument クラス/Remove メソッド 65 12行目 NotesDocument クラスの Remove メソッドを使用して変数 doc の文書を削除 第1引数に True を指定した場合、スクリプトが文書を開いた後に他のユーザーが文書を変更した場合でも削除 NotesDocument – Remove: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_REMOVE_METHOD_DOC.html [Step3-1:ビューの列の値を使用して文書を検索する] を一部修正 [製品ID] が“C01”の文書を削除する
  • 66. Step4-4:文書を新規作成する(作成者フィールドの追加) NotesItem クラス 66 5行目 NotesItem クラスの変数 item を宣言 12行目 第1引数はフィールドを作成する文書を設定(変数 doc) 第2引数は作成するフィールドの名前 第3引数は設定する値 第4引数はフィールドの種類 今回は作成者とするため“AUTHORS”を指定(名前の場合“NAMES”/ 読者の場合“READERS”) 13行目 NotesItem クラスの IsSummary プロパティを True に設定 ビューやフォルダにフィールドの値を表示する場合、IsSummary プロパティが True の必要があるが、NotesItem クラスから作成 したフィールドの IsSummary プロパティは、デフォルトが False である。よって、明示的に True を設定 NotesItem: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESITEM_CLASS.html NotesItem – IsSummary: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_ISSUMMARY_PROPERTY.html [Step4-1:文書を新規作成する] を一部修正 [From]作成者フィールドに管理者のユーザーを設定する
  • 68. NotesAgent クラス 68  エージェントを表します。  様々なプロパティやメソッドがありますが、最初は以下のメソッドのみ覚えて おけばよいでしょう。  Run メソッド  エージェントを実行します。  注意事項  エージェントを再帰的に実行することはできません。(自分自身を呼び出すことはできません)  ユーザーは呼び出し先エージェントと直接対話することはできません。呼び出し先エージェント内で、Print ス テートメントを使用した場合、クライアントのステータスバーには表示されず、クライアントの log.nsf に出力 されます。  呼び出し先エージェントをデバッグすることはできません。  戻り値は、エージェントを呼び出せたかどうかの結果であり、呼び出し先エージェントがエラーが無く実行さ れたかどうかは関係ありません。
  • 69. Step5-1:別のエージェントを実行する NotesAgent クラス 69 4行目 NotesAgent クラスの変数 agent を宣言 6行目 NotesDatabase クラスの GetAgent メソッドからエージェント(※1)を取得、変数 agent に格納 7行目 NotesAgent クラスの Run メソッドを実行して、6行目で取得したエージェントを実行 結果をステータスバーに表示 ※1 「Step2-1:ダイアログボックスを表示 NotesUIWorkspace クラス」で作成したエージェント NotesAgent: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_NOTESAGENT_CLASS.html NotesAgent - Run: https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/basic/H_RUN_METHOD_6415.html
  • 71. Step6-1:ビューの文書を順番にすべて処理する(事前に次の文書を取得) NotesView クラス/GetFirstDocument, GetNextDocument メソッド 71 5行目 NotesDocument クラスの変数 docTemp を宣言 11行目 処理対象文書である変数 doc のオブジェクト参照を変数 docTemp にコピー 12行目 事前に次の文書を取得しておく 13-16行目 以後、コピーした変数 docTemp に対して処理を行う 上記例では、価格が100円未満の文書を削除 価格が100円未満の文書を削除する
  • 72. Step6-2:ビューの文書を順番にすべて処理する(自動更新の無効) NotesView クラス/AutoUpdate プロパティ, GetNextDocument メソッド 72 8行目 NotesView クラスの AutoUpdate プロパティに False を設定して、ビューの自動更新を無効する 13行目 文書(変数 doc)の[削除フラグ(deleteFlag)]フィールドに "1" を設定(存在しない場合は新規に作成) 16行目 文書がビューの選択式(表示条件)の対象外となってもこのエージェント処理中はビューの状態は変化しない(自 動更新無効のため)。そのため、GetNextDocument メソッドで次の文書が取得可能 ※注意 「Step3-2:ビューの文書を順番にすべて取得する:補足(2)」で説明したように、このエージェント以外から ビューの更新はありえる。また、Remove メソッドで文書そのものを削除した場合、変数 doc が Nothing となり以 後の処理で利用できなくなる 価格が100円未満の文書をビューから非表示にする ビューの選択式 SELECT deleteFlag !=“1” [削除フラグ(deleteFlag)]フィールドが“1”の場合、非表示
  • 73. Step6-3:ビューの文書を順番にすべて処理する(事前に次の文書を取得+自動更新の無効) NotesView クラス/AutoUpdate プロパティ, GetNextDocument メソッド 73 9行目 NotesView クラスの AutoUpdate プロパティに False を設定して、ビューの自動更新を無効する 12行目 処理対象文書である変数 doc のオブジェクト参照を変数 docTemp にコピー 13行目 事前に次の文書を取得しておく ヘルプより抜粋(AutoUpdate プロパティ) このプロパティを明示的に false に設定してビューの自動更新を無効にすることをお勧めします。特に、ビューがナビゲータやエントリコ レクションのベースとなっている場合は、ビューの自動更新は無効に設定してください。自動更新を行うと、パフォーマンスが低下し、コ レクション内のエントリが無効になる (「エントリが索引に見つかりません」と表示される) 場合があります。 価格が100円未満の文書を削除する [Step6-1:ビューの文書を順番にすべて処理する(事前に次の文書を取得)] [Step6-2:ビューの文書を順番にすべて処理する(自動更新の無効)] の組み合わせ AutoUpdate プロパティを False に設定するもう一つの利点は、更新頻度が多 い場合にパフォーマンスの低下を防げる点です
  • 74. ビューの文書の処理:まとめ  ビューの文書を処理する場合、ビューの更新(自分自身・他者)を意識してプ ログラミングする必要があります。  文書を取得する方法としては、検索系のメソッドを使う方法もあります。一度 ヘルプに目を通しておいてください。  NotesDatabase クラスの FTSearch メソッドや Search メソッド  NotesView クラスの FTSearch メソッド  迷ったら以下のパターンで考えるとよいでしょう。  文書の新規・更新・削除がある場合 「Step6-3:ビューの文書を順番にすべて処理する(事前に次の文書を取得+自動更新の無効)」  文書の参照のみの場合 「Step3-2:ビューの文書を順番にすべて取得する」でも可 もちろん、「Step6-3:ビューの文書を順番にすべて処理する(事前に次の文書を取得+自動更新の無効)」でも可 74
  • 76. ヘルプ  気になることや困ったらヘルプを見ましょう!  特にサンプルコードが記載されている“例”は理解の手助けになります。  Domino Designer のメニューバー [ヘルプ] - [ヘルプ目次] から開きます。  IBM Domino Designer Basic 版 ユーザーガイドおよびリファレンス  LotusScript 言語  LotusScript /COM/OLE クラス 76
  • 77. 最初に目を通しておきたいヘルプ項目 IBM Domino Designer Basic 版 ユーザーガイドおよびリファレンス  LotusScript /COM/OLE クラス  LotusScript: LotusScript のクラスの使用  << ケース別に利用可能なプロパティやメソッドがまと められている >>  LotusScript クラス A-Z  << クラスの詳細はここで確認 >> 77  LotusScript 言語  スクリプトとステートメントの作成規則  識別子の作成規則  ラベル  キーワード  特殊文字  データ型、定数、変数  LotusScript のデータ型の概要  式と演算子  文字列演算子の一覧  スクリプトのフローの管理  ブロックステートメント  分岐ステートメント  繰り返しステートメント  早期終了ステートメント  LotusScript 言語リファレンス  << 関数やステートメントの詳細はここで確認 >>  言語とスクリプトの制限  数値データの制限  文字列データの制限  配列変数の制限  ランタイムエラーメッセージ  << エラーの原因はここで確認 >> 特にお勧めの項目は、黄色表記しています。 << >> の箇所は、量が多いので「こんなのが あるんだ……」程度に見ておいて、必要な時 に再度確認しましょう。
  • 78. 最後に  今回は、入門編として LotusScript の学習を始める上で最初に理解しておいた方 が良い部分のみを厳選しました。それでもこの頁数になってしまいました。  LotusScript は奥が深く、まだまだ語り足りない部分がありますが、そこが面白 いところです。  ノーツクライアントのみではなく、Excel やWord を操作することもでき、工夫 次第で様々なアプリケーションが開発できます。  当資料が LotusScript の学習を始めた方のお役に立ててれば幸いです。 78
  • 81. 覚えておきたいプロパティ・メソッド  各クラスで覚えておくとよいプロパティ・メソッドを抜き出しました。  これ以外のプロパティ・メソッドが必要なケースもあります。あくまで参考レベルです。  演習で紹介したものも含みます。  余裕がある時にヘルプで確認しておくと後々参考になると思います。 81 特に重要なものは、黄色表記しています 関係するものは代表的なプロパティ・ メソッドの下にまとめました 例)
  • 82. バックエンドクラス (1)  NotesSession  プロパティ  CurrentDatabase  UserName  CommonUserName  メソッド  Evaluate  GetDatabase  SetEnvironmentVar  GetEnvironmentString  GetEnvironmentValue 82  NotesDatabase  プロパティ  FilePath  FileName  Server  Size  SizeQuota  SizeWarning  CurrentAccessLevel  メソッド  GetAgent  GetDocumentByUNID  GetDocumentByID  GetProfileDocument  OpenMail  Search  FTSearch  QueryAccessRoles  NotesView  プロパティ  AllEntries  メソッド  GetAllDocumentsByKey  GetDocumentByKey  GetFirstDocument  GetNextDocument  GetLastDocument  GetPrevDocument  FTSearch  NotesDocument  プロパティ  Size  UniversalID  NoteID  メソッド  AppendItemValue  ReplaceItemValue  ComputeWithForm  CopyToDatabase  CopyAllItems  CopyItem  GetFirstItem  GetAttachment  GetItemValue  GetRead  MarkRead  MarkUnread  HasItem  Remove  RemovePermanently  RemoveItem  Save  Send
  • 83. バックエンドクラス (2)  NotesDocumentCollection  プロパティ  Count  メソッド  GetFirstDocument  GetNextDocument  GetLastDocument  GetPrevDocument  RemoveAll  StampAll 83  NotesItem  プロパティ  IsAuthors  IsNames  IsReaders  IsSummary  Text  Values  メソッド  AppendToTextList  CopyItemToDocument  Remove  NotesAgent  メソッド  Run
  • 84. フロントエンドクラス (1)  NotesUIWorkspace  プロパティ  CurrentDatabase  CurrentDocument  CurrentView  メソッド  AddDatabase  ComposeDocument  EditDocument  EditProfile  GetCurrentDatabase  OpenDatabase  ReloadWindow  ViewRefresh 84  Open 系  ComposeDocument  EditDocument  OpenFrameSet  OpenView (NotesDatabase)  SetTargetFrame  Prompt, Dialog, PickList 系  DialogBox  OpenFileDialog  SaveFileDialog  Prompt  PickListCollection  PickListStrings
  • 85. フロントエンドクラス (2)  NotesUIDatabase  プロパティ  Database  Documents  メソッド  Close  OpenView 85  NotesUIView  プロパティ  Documents  View  メソッド  Close  Print  SelectDocument  DeselectAll  NotesUIDocument  プロパティ  AutoReload  CurrentField  DialogBoxCanceld  Document  EditMode  IsNewDoc  Ruler  メソッド  Close  FieldGetText  FieldSetText  FieldAppendText  GotoField  GotoTop  GotoBottom  GotoNextField  GotoPrevField  Print  Refresh  RefreshHideFormulas  Reload  Save