SlideShare a Scribd company logo
1 of 78
Download to read offline
今日から始める LotusScript
Domino クラスライブラリの使い方
株式会社ソルクシーズ
吉田 武司
2018/05/01
Version 1.0
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
 列
 製品 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
 実行
 エラーまたはブレークポイントまで実行
 ステップ イン [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:ビューの文書を順番にすべて取得する:補足
NotesView クラス/GetFirstDocument, GetNextDocument メソッド
57
 注意事項
 今回の演習では、文書を変更していないためビューの表示に影響がありません。
 しかし、文書を削除したり、値を変更する場合は注意が必要です。理由は、 文書の削除や
ビューの条件式によって、文書がビューに表示されなくなったりビューの表示順が変わって
しまうためです。そうなると次の文書を返す GetNextDocument メソッドは期待する結果を
返さない場合があります。処理途中のビューがどのような状態であるかを意識しながらプロ
グラミングする必要があります。
 ヘルプより抜粋
 ループ内の文書を処理するときは、文書を削除しないでください。または、ビューに表示されなくなったり位
置が変更されるような形で、文書を変更しないでください。次の文書であったはずの文書がビュー内の別の位
置にあると、GetNextDocument メソッドは実用的な結果を返さない場合があります。この問題の最も一般的な
症状は、文書をループしたときに文書がスキップされることです。
 この問題に対処するには、文書を変更する前には常に GetNextDocument を呼び出すようにロジックを変更しま
す。あるいは、NotesView.AutoUpdate (= False) を使用して、ビューの使用中にビューの索引が再作成され
るのを防止します。
Step3-3:ビューの列の値を使用して文書を検索する(複数)
NotesView クラス/GetAllDocumentsByKey メソッド, NotesDocumentsCollection クラス
58
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] で始まる製品を検索
文書の処理
59
文書の処理
 文書の処理パターンは、多岐にわたります。当資料では簡単な処理を例として記述します。
 文書の新規作成
 文書の更新
 文書の削除
 上記以外にも編集モードで表示している文書の操作(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 クラスにアクセスする必要はありません。
60
Step4-1:文書を新規作成する
NotesDatabase クラス/CreateDocument メソッド, NotesDocument クラス/Save メソッド
61
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 クラス
62
12行目 “doc.(フィールド名) = (設定値)”で値を設定可能(「拡張クラス」構文)
[価格(Price)]フィールドは複数値ではないが、フィールドのデータは複数値を考慮して配列で返ってくる
そのため、後に“(0)”を付けて“doc.Price(0)”として配列の最初の値を取得、2を掛けている
13行目 NotesDocument クラスの Save メソッドを使用して、変数 doc を保存
保存を忘れないようにすること
[Step3-1:ビューの列の値を使用して文書を検索する] を一部修正
[製品ID] が“L01”の文書の [価格] を2倍にする
Step4-3:文書を削除する
NotesDocument クラス/Remove メソッド
63
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 クラス
64
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]作成者フィールドに管理者のユーザーを設定する
エージェントの操作
65
NotesAgent クラス 66
 エージェントを表します。
 様々なプロパティやメソッドがありますが、最初は以下のメソッドのみ覚えて
おけばよいでしょう。
 Run メソッド
 エージェントを実行します。
 注意事項
 エージェントを再帰的に実行することはできません。(自分自身を呼び出すことはできません)
 ユーザーは呼び出し先エージェントと直接対話することはできません。呼び出し先エージェント内で、Print ス
テートメントを使用した場合、クライアントのステータスバーには表示されず、クライアントの log.nsf に出力
されます。
 呼び出し先エージェントをデバッグすることはできません。
 戻り値は、エージェントを呼び出せたかどうかの結果であり、呼び出し先エージェントがエラーが無く実行さ
れたかどうかは関係ありません。
Step5-1:別のエージェントを実行する
NotesAgent クラス
67
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
まとめ
68
ヘルプ
 気になることや困ったらヘルプを見ましょう!特に 例 は理解の手助けになります。
 Domino Designer のメニューバー [ヘルプ] - [ヘルプ目次] から開きます。
 IBM Domino Designer Basic 版 ユーザーガイドおよびリファレンス
 LotusScript 言語
 LotusScript /COM/OLE クラス
 IBMWeb サイトでも閲覧できます。
 IBM Domino Designer 9.0.1 Social Edition 資料 - IBM Domino Designer Basic 版ユーザーガイドとリファレンス
 https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/welcome/welcome_Domino_Designer_9_0_2_bug.html
69
目を通しておきたいヘルプ項目
IBM Domino Designer Basic 版 ユーザーガイドおよびリファレンス
 LotusScript /COM/OLE クラス
 LotusScript: LotusScript のクラスの使用
 << ケース別に利用可能なプロパティやメソッドがまと
められている >>
 LotusScript クラス A-Z
 << クラスの詳細はここで確認 >>
70
 LotusScript 言語
 スクリプトとステートメントの作成規則
 識別子の作成規則
 ラベル
 キーワード
 特殊文字
 データ型、定数、変数
 LotusScript のデータ型の概要
 式と演算子
 文字列演算子の一覧
 スクリプトのフローの管理
 ブロックステートメント
 分岐ステートメント
 繰り返しステートメント
 早期終了ステートメント
 LotusScript 言語リファレンス
 << 関数やステートメントの詳細はここで確認 >>
 言語とスクリプトの制限
 数値データの制限
 文字列データの制限
 配列変数の制限
 ランタイムエラーメッセージ
 << エラーの原因はここで確認 >>
特にお勧めの項目は、黄色表記しています。
<< >> の箇所は、量が多いのでざっと見てお
いて、必要な時に再度確認しましょう。
最後に
 今回は、入門編として LotusScript の学習を始める上で最初に理解しておいた方
が良い部分のみを厳選しました。それでもこの頁数になってしまいました。
 LotusScript は奥が深く、まだまだ語り足りない部分がありますが、そこが面白
いところです。
 ノーツクライアントのみではなく、Excel やWord を操作することもでき、工夫
次第で様々なアプリケーションが開発できます。
 当資料が LotusScript の学習を始めた方のお役に立ててれば幸いです。
71
72
最後までご覧いただきありがとうございました
補足資料
73
覚えておきたいプロパティ・メソッド
 各クラスで覚えておくとよいプロパティ・メソッドを抜き出しました。
 これ以外のプロパティ・メソッドが必要なケースもあります。あくまで参考レベルです。
 演習で紹介したものも含みます。
 余裕がある時にヘルプで確認しておくと後々参考になると思います。
74
特に重要なものは、黄色表記しています
関係するものは代表的なプロパティ・
メソッドの下にまとめました
例)
バックエンドクラス (1)
 NotesSession
 プロパティ
 CurrentDatabase
 UserName
 CommonUserName
 メソッド
 Evaluate
 GetDatabase
 SetEnvironmentVar
 GetEnvironmentString
 GetEnvironmentValue
75
 NotesDatabase
 プロパティ
 FilePath
 FileName
 Server
 Size
 SizeQuota
 SizeWarning
 CurrentAccessLevel
 メソッド
 GetAgent
 GetDocumentByUNID
 GetDocumentByID
 GetProfileDocument
 OpenMail
 Search
 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
76
 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
77
 Open 系
 ComposeDocument
 EditDocument
 OpenFrameSet
 OpenView (NotesDatabase)
 SetTargetFrame
 Prompt, Dialog, PickList 系
 DialogBox
 OpenFileDialog
 SaveFileDialog
 Prompt
 PickListCollection
 PickListStrings
フロントエンドクラス (2)
 NotesUIDatabase
 プロパティ
 Database
 Documents
 メソッド
 Close
 OpenView
78
 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 データベースの多言語対応
Notes データベースの多言語対応Notes データベースの多言語対応
Notes データベースの多言語対応Haruyuki Nakano
 
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)Takeshi Yoshida
 
大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件Haruyuki Nakano
 
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?Hirofumi Ota
 
Windows × ネットワーク! 更新プログラムの展開に使える ネットワークの最適化機能をマスターしよう
Windows × ネットワーク!  更新プログラムの展開に使える ネットワークの最適化機能をマスターしようWindows × ネットワーク!  更新プログラムの展開に使える ネットワークの最適化機能をマスターしよう
Windows × ネットワーク! 更新プログラムの展開に使える ネットワークの最適化機能をマスターしようTAKUYA OHTA
 
ビュー索引のキホン(前編)
ビュー索引のキホン(前編)ビュー索引のキホン(前編)
ビュー索引のキホン(前編)Haruyuki Nakano
 
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能toshihiro okamoto
 
01 slack導入の提案
01 slack導入の提案01 slack導入の提案
01 slack導入の提案ssuser68dea4
 
超便利! Unity Cloud Build の使い方
超便利! Unity Cloud Build の使い方超便利! Unity Cloud Build の使い方
超便利! Unity Cloud Build の使い方Makoto Ito
 
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...Amazon Web Services Japan
 
[SCCM 友の会] System Center Configuration Manager この秋おさえておきたい最新機能!
[SCCM 友の会]  System Center Configuration Manager  この秋おさえておきたい最新機能![SCCM 友の会]  System Center Configuration Manager  この秋おさえておきたい最新機能!
[SCCM 友の会] System Center Configuration Manager この秋おさえておきたい最新機能!TAKUYA OHTA
 
変数・式・動的なコンテンツ・JSONってなに?(気ままに勉強会 #05)
変数・式・動的なコンテンツ・JSONってなに?(気ままに勉強会 #05)変数・式・動的なコンテンツ・JSONってなに?(気ままに勉強会 #05)
変数・式・動的なコンテンツ・JSONってなに?(気ままに勉強会 #05)た な
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることShingo Fukui
 
Microsoft Intune を用いたパッチ管理
Microsoft Intune を用いたパッチ管理Microsoft Intune を用いたパッチ管理
Microsoft Intune を用いたパッチ管理Yutaro Tamai
 
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能TAKUYA OHTA
 
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話wind06106
 
ファイルサーバーを SharePoint に移行するためのアプローチ
ファイルサーバーを SharePoint に移行するためのアプローチファイルサーバーを SharePoint に移行するためのアプローチ
ファイルサーバーを SharePoint に移行するためのアプローチ日本マイクロソフト株式会社
 
ちょい図解!使って覚える始めてのBonita
ちょい図解!使って覚える始めてのBonitaちょい図解!使って覚える始めてのBonita
ちょい図解!使って覚える始めてのBonitaKentaro Takasaki
 

What's hot (20)

Notes データベースの多言語対応
Notes データベースの多言語対応Notes データベースの多言語対応
Notes データベースの多言語対応
 
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)Notes 技術者のためのはじめての XPages 講座 (XPagesDay 2015)
Notes 技術者のための はじめての XPages 講座 (XPagesDay 2015)
 
大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件
 
ODS ってなんだ?
ODS ってなんだ?ODS ってなんだ?
ODS ってなんだ?
 
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
よく聞くけど、「SharePoint リストの 5,000 件問題」ってなんなの?
 
Windows × ネットワーク! 更新プログラムの展開に使える ネットワークの最適化機能をマスターしよう
Windows × ネットワーク!  更新プログラムの展開に使える ネットワークの最適化機能をマスターしようWindows × ネットワーク!  更新プログラムの展開に使える ネットワークの最適化機能をマスターしよう
Windows × ネットワーク! 更新プログラムの展開に使える ネットワークの最適化機能をマスターしよう
 
ビュー索引のキホン(前編)
ビュー索引のキホン(前編)ビュー索引のキホン(前編)
ビュー索引のキホン(前編)
 
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
Notes/Dominoのスケジュール機能のおさらい 及び OnTimeのDomino/Exchange連携機能
 
01 slack導入の提案
01 slack導入の提案01 slack導入の提案
01 slack導入の提案
 
超便利! Unity Cloud Build の使い方
超便利! Unity Cloud Build の使い方超便利! Unity Cloud Build の使い方
超便利! Unity Cloud Build の使い方
 
自宅k8s/vSphere入門
自宅k8s/vSphere入門自宅k8s/vSphere入門
自宅k8s/vSphere入門
 
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
AWS Black Belt Tech シリーズ 2015 - AWS CodeCommit & AWS CodePipeline & AWS CodeD...
 
[SCCM 友の会] System Center Configuration Manager この秋おさえておきたい最新機能!
[SCCM 友の会]  System Center Configuration Manager  この秋おさえておきたい最新機能![SCCM 友の会]  System Center Configuration Manager  この秋おさえておきたい最新機能!
[SCCM 友の会] System Center Configuration Manager この秋おさえておきたい最新機能!
 
変数・式・動的なコンテンツ・JSONってなに?(気ままに勉強会 #05)
変数・式・動的なコンテンツ・JSONってなに?(気ままに勉強会 #05)変数・式・動的なコンテンツ・JSONってなに?(気ままに勉強会 #05)
変数・式・動的なコンテンツ・JSONってなに?(気ままに勉強会 #05)
 
GraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ることGraphQLのsubscriptionで出来ること
GraphQLのsubscriptionで出来ること
 
Microsoft Intune を用いたパッチ管理
Microsoft Intune を用いたパッチ管理Microsoft Intune を用いたパッチ管理
Microsoft Intune を用いたパッチ管理
 
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
 
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
SCUGJ第27回勉強会:ものすごくざっくりなAzure Filesの話
 
ファイルサーバーを SharePoint に移行するためのアプローチ
ファイルサーバーを SharePoint に移行するためのアプローチファイルサーバーを SharePoint に移行するためのアプローチ
ファイルサーバーを SharePoint に移行するためのアプローチ
 
ちょい図解!使って覚える始めてのBonita
ちょい図解!使って覚える始めてのBonitaちょい図解!使って覚える始めてのBonita
ちょい図解!使って覚える始めてのBonita
 

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

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
 
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Yuji Nojima
 
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
 
第1回windows phoneアプリ開発のハンズオンセミナー
第1回windows phoneアプリ開発のハンズオンセミナー第1回windows phoneアプリ開発のハンズオンセミナー
第1回windows phoneアプリ開発のハンズオンセミナーhyoromo
 
IBM Connect2014 に参加して(テクてく技術者夜会)
IBM Connect2014 に参加して(テクてく技術者夜会)IBM Connect2014 に参加して(テクてく技術者夜会)
IBM Connect2014 に参加して(テクてく技術者夜会)Takeshi Yoshida
 
テクてく 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
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
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
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようcharsbar
 
The History of IBM Notes/Domino
The History of IBM Notes/DominoThe History of IBM Notes/Domino
The History of IBM Notes/DominoAtsushi Sato
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
20130329 rtm2
20130329 rtm220130329 rtm2
20130329 rtm2openrtm
 

Similar to 今日から始める LotusScript - Domino クラスライブラリの使い方 (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回小ネタ集
 
Stac2014 石川
Stac2014 石川Stac2014 石川
Stac2014 石川
 
Sails workshop4
Sails workshop4Sails workshop4
Sails workshop4
 
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪
 
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
 
第1回windows phoneアプリ開発のハンズオンセミナー
第1回windows phoneアプリ開発のハンズオンセミナー第1回windows phoneアプリ開発のハンズオンセミナー
第1回windows phoneアプリ開発のハンズオンセミナー
 
無料ソフト「NetCommons」で作る学校ホームページ【1限目】
無料ソフト「NetCommons」で作る学校ホームページ【1限目】無料ソフト「NetCommons」で作る学校ホームページ【1限目】
無料ソフト「NetCommons」で作る学校ホームページ【1限目】
 
3
33
3
 
IBM Connect2014 に参加して(テクてく技術者夜会)
IBM Connect2014 に参加して(テクてく技術者夜会)IBM Connect2014 に参加して(テクてく技術者夜会)
IBM Connect2014 に参加して(テクてく技術者夜会)
 
テクてく 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 とは
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
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
 
Mojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみようMojolicious::Liteを使ってみよう
Mojolicious::Liteを使ってみよう
 
The History of IBM Notes/Domino
The History of IBM Notes/DominoThe History of IBM Notes/Domino
The History of IBM Notes/Domino
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
05 tm1 batch
05 tm1 batch05 tm1 batch
05 tm1 batch
 
20130329 rtm2
20130329 rtm220130329 rtm2
20130329 rtm2
 
01 tm1 install
01 tm1 install01 tm1 install
01 tm1 install
 

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

  • 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  列  製品 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 の 実行
  • 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:ビューの文書を順番にすべて取得する:補足 NotesView クラス/GetFirstDocument, GetNextDocument メソッド 57  注意事項  今回の演習では、文書を変更していないためビューの表示に影響がありません。  しかし、文書を削除したり、値を変更する場合は注意が必要です。理由は、 文書の削除や ビューの条件式によって、文書がビューに表示されなくなったりビューの表示順が変わって しまうためです。そうなると次の文書を返す GetNextDocument メソッドは期待する結果を 返さない場合があります。処理途中のビューがどのような状態であるかを意識しながらプロ グラミングする必要があります。  ヘルプより抜粋  ループ内の文書を処理するときは、文書を削除しないでください。または、ビューに表示されなくなったり位 置が変更されるような形で、文書を変更しないでください。次の文書であったはずの文書がビュー内の別の位 置にあると、GetNextDocument メソッドは実用的な結果を返さない場合があります。この問題の最も一般的な 症状は、文書をループしたときに文書がスキップされることです。  この問題に対処するには、文書を変更する前には常に GetNextDocument を呼び出すようにロジックを変更しま す。あるいは、NotesView.AutoUpdate (= False) を使用して、ビューの使用中にビューの索引が再作成され るのを防止します。
  • 58. Step3-3:ビューの列の値を使用して文書を検索する(複数) NotesView クラス/GetAllDocumentsByKey メソッド, NotesDocumentsCollection クラス 58 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 クラスにアクセスする必要はありません。 60
  • 61. Step4-1:文書を新規作成する NotesDatabase クラス/CreateDocument メソッド, NotesDocument クラス/Save メソッド 61 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
  • 62. Step4-2:文書を更新する NotesDocument クラス 62 12行目 “doc.(フィールド名) = (設定値)”で値を設定可能(「拡張クラス」構文) [価格(Price)]フィールドは複数値ではないが、フィールドのデータは複数値を考慮して配列で返ってくる そのため、後に“(0)”を付けて“doc.Price(0)”として配列の最初の値を取得、2を掛けている 13行目 NotesDocument クラスの Save メソッドを使用して、変数 doc を保存 保存を忘れないようにすること [Step3-1:ビューの列の値を使用して文書を検索する] を一部修正 [製品ID] が“L01”の文書の [価格] を2倍にする
  • 63. Step4-3:文書を削除する NotesDocument クラス/Remove メソッド 63 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”の文書を削除する
  • 64. Step4-4:文書を新規作成する(作成者フィールドの追加) NotesItem クラス 64 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]作成者フィールドに管理者のユーザーを設定する
  • 66. NotesAgent クラス 66  エージェントを表します。  様々なプロパティやメソッドがありますが、最初は以下のメソッドのみ覚えて おけばよいでしょう。  Run メソッド  エージェントを実行します。  注意事項  エージェントを再帰的に実行することはできません。(自分自身を呼び出すことはできません)  ユーザーは呼び出し先エージェントと直接対話することはできません。呼び出し先エージェント内で、Print ス テートメントを使用した場合、クライアントのステータスバーには表示されず、クライアントの log.nsf に出力 されます。  呼び出し先エージェントをデバッグすることはできません。  戻り値は、エージェントを呼び出せたかどうかの結果であり、呼び出し先エージェントがエラーが無く実行さ れたかどうかは関係ありません。
  • 67. Step5-1:別のエージェントを実行する NotesAgent クラス 67 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
  • 69. ヘルプ  気になることや困ったらヘルプを見ましょう!特に 例 は理解の手助けになります。  Domino Designer のメニューバー [ヘルプ] - [ヘルプ目次] から開きます。  IBM Domino Designer Basic 版 ユーザーガイドおよびリファレンス  LotusScript 言語  LotusScript /COM/OLE クラス  IBMWeb サイトでも閲覧できます。  IBM Domino Designer 9.0.1 Social Edition 資料 - IBM Domino Designer Basic 版ユーザーガイドとリファレンス  https://www.ibm.com/support/knowledgecenter/ja/SSVRGU_9.0.1/welcome/welcome_Domino_Designer_9_0_2_bug.html 69
  • 70. 目を通しておきたいヘルプ項目 IBM Domino Designer Basic 版 ユーザーガイドおよびリファレンス  LotusScript /COM/OLE クラス  LotusScript: LotusScript のクラスの使用  << ケース別に利用可能なプロパティやメソッドがまと められている >>  LotusScript クラス A-Z  << クラスの詳細はここで確認 >> 70  LotusScript 言語  スクリプトとステートメントの作成規則  識別子の作成規則  ラベル  キーワード  特殊文字  データ型、定数、変数  LotusScript のデータ型の概要  式と演算子  文字列演算子の一覧  スクリプトのフローの管理  ブロックステートメント  分岐ステートメント  繰り返しステートメント  早期終了ステートメント  LotusScript 言語リファレンス  << 関数やステートメントの詳細はここで確認 >>  言語とスクリプトの制限  数値データの制限  文字列データの制限  配列変数の制限  ランタイムエラーメッセージ  << エラーの原因はここで確認 >> 特にお勧めの項目は、黄色表記しています。 << >> の箇所は、量が多いのでざっと見てお いて、必要な時に再度確認しましょう。
  • 71. 最後に  今回は、入門編として LotusScript の学習を始める上で最初に理解しておいた方 が良い部分のみを厳選しました。それでもこの頁数になってしまいました。  LotusScript は奥が深く、まだまだ語り足りない部分がありますが、そこが面白 いところです。  ノーツクライアントのみではなく、Excel やWord を操作することもでき、工夫 次第で様々なアプリケーションが開発できます。  当資料が LotusScript の学習を始めた方のお役に立ててれば幸いです。 71
  • 74. 覚えておきたいプロパティ・メソッド  各クラスで覚えておくとよいプロパティ・メソッドを抜き出しました。  これ以外のプロパティ・メソッドが必要なケースもあります。あくまで参考レベルです。  演習で紹介したものも含みます。  余裕がある時にヘルプで確認しておくと後々参考になると思います。 74 特に重要なものは、黄色表記しています 関係するものは代表的なプロパティ・ メソッドの下にまとめました 例)
  • 75. バックエンドクラス (1)  NotesSession  プロパティ  CurrentDatabase  UserName  CommonUserName  メソッド  Evaluate  GetDatabase  SetEnvironmentVar  GetEnvironmentString  GetEnvironmentValue 75  NotesDatabase  プロパティ  FilePath  FileName  Server  Size  SizeQuota  SizeWarning  CurrentAccessLevel  メソッド  GetAgent  GetDocumentByUNID  GetDocumentByID  GetProfileDocument  OpenMail  Search  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
  • 76. バックエンドクラス (2)  NotesDocumentCollection  プロパティ  Count  メソッド  GetFirstDocument  GetNextDocument  GetLastDocument  GetPrevDocument  RemoveAll  StampAll 76  NotesItem  プロパティ  IsAuthors  IsNames  IsReaders  IsSummary  Text  Values  メソッド  AppendToTextList  CopyItemToDocument  Remove  NotesAgent  メソッド  Run
  • 77. フロントエンドクラス (1)  NotesUIWorkspace  プロパティ  CurrentDatabase  CurrentDocument  CurrentView  メソッド  AddDatabase  ComposeDocument  EditDocument  EditProfile  GetCurrentDatabase  OpenDatabase  ReloadWindow  ViewRefresh 77  Open 系  ComposeDocument  EditDocument  OpenFrameSet  OpenView (NotesDatabase)  SetTargetFrame  Prompt, Dialog, PickList 系  DialogBox  OpenFileDialog  SaveFileDialog  Prompt  PickListCollection  PickListStrings
  • 78. フロントエンドクラス (2)  NotesUIDatabase  プロパティ  Database  Documents  メソッド  Close  OpenView 78  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