ノーツ/ドミノの言語

2020-11-04に作成

 ノーツ/ドミノ(Notes/ Domino)で使用する主要な言語にはロータススクリプト(Lotus Script)とロータス式言語(Lotus 式言語、アットマーク関数)があります。ロータススクリプトは VBScript に似たところがある言語です。
 Windows上でノーツ/ドミノ サーバーを動かしていると、管理用のプログラムを VBScript や C# で書くことがあります。
 ここではこれらの言語をとりあげます。

所有者限定モードのためこのボードには投稿できません ボードとは?

Format : 日時値を文字値へ変換します

Lotus Script 言語
  • Format (日時)
  • Format (日時, 形式)

日時の形式の例
2020/11/29 = Format (Now, {Short Date})
 ※オペレーティングシステムで指定された日付形式になります
14:51 = Format (Now, {Short Time})
 ※オペレーティングシステムで指定された時刻形式になります
2020/11/29 14:51:06 = Format (Now, {yyyy/mm/dd hh:mm:ss})
11/29 11:06 = Format (Now, {mm/dd mm:ss})
02:51:06 PM = Format (Now, {hh:mm:ss AM/PM})
 ※月と時はどちらもmmで指定しますが、hhのあとのmmは時と解釈されます
 ※スラッシュ(/)とコロン(:)はオペレーティングシステムで指定された記号に変換されます
 ※AM/PMと記載するとhhは01~12になり、AMまたはPMが付加されます
 ※am/pmと小文字で記載すると、amまたはpmが付加されます
2020/11/29 14:51:06 = Format (Now, {General Date})

VbScript 言語
  • FormatDateTime (日時)
     ※色々とオプションを指定できます
Lotus 式言語
  • @Text (日時);
  • @Text (日時; 形式);

日時の形式の例
2020/11/29 14:51:06 = @Text (@Now);
2020/11/29 14:51:06 = @Text (@Now; {S2});
2020/11/29 = @Text (@Now; {S0});
14:51:06 = @Text (@Now; {S1});
14:51 = @Text (@Now; {T1});

Format : 数値を文字値へ変換します

Lotus Script 言語
  • 文字値 = Format (数値)
  • 文字値 = Format (数値, 形式)

数値の形式の例
¥123,457 = Format (123456.789, {Currency})
123,456.79 = Format (123456.789, {Standard})
12345678.90% = Format (123456.789, {Percent})
1.23E+05 = Format (123456.789, {Scientific})
98% = Format (0.98, {#0%})
¥123,456. = Format (123456, {$#,##0.})
 ※桁区切記号(,)、小数点(.)、通貨記号($)はオペレーティングシステムで指定された記号に変換されます

VbScript 言語
  • FormatCurrency (数値)
  • FormatNumber (数値)
  • FormatPercent (数値)
     ※オプションを色々と指定できます
Lotus 式言語
  • @Text (数値);
  • @Text (数値; 形式);

数値の形式の例
123456.789 = @Text (123456.789);
123456.79 = @Text (123456.789, {F});
1.23E+05 = @Text (123456.789, {S});
\123456.79 = @Text (123456.789, {C});
123,456.789 = @Text (123456.789, {,});
123,45678.9 = @Text (123456.789, {%});

Split : 区切記号で文字列を配列へ変換します

Lotus Script 言語

  • 配列 = Split (文字列) ' 区切記号は空白になります
  • 配列 = Split (文字列, 区切記号)
  • 配列 = Split (文字列, 区切記号, 戻り値の要素数)
  • 配列 = Split (文字列, 区切記号, 戻り値の要素数, 評価方法)

戻り値の要素数
-1 : 指定なし。すべての区切記号で分割
0 : 戻り値に値なし。戻り値の要素数は無し
1 : 分割なし。戻り値の要素数は-1と同じ
2 : 最初の区切記号だけで2つに分割。戻り値の要素数は2つまで
3 : 最初と2つ目の区切記号だけで3つに分割。戻り値の要素数は3つまで

評価方法
0 : 大文字小文字、全角半角を区別します
1 : 大文字小文字を区別しません
4 : 全角半角を区別しません
5 : 大文字小文字、全角半角を区別しません

VbScript 言語

  • 配列 = Split (文字列) ' 区切記号は空白になります
  • 配列 = Split (文字列, 区切記号)
  • 配列 = Split (文字列, 区切記号, 戻り値の要素数)
  • 配列 = Split (文字列, 区切記号, 戻り値の要素数, 評価方法)

評価方法
0 : バイナリーモード
1 : テキストモード(大文字小文字を区別しません)

Lotus 式言語
  • @Explode (文字列); ' 区切記号は空白・カンマ(,)・セミコロン(;)になります
  • @Explode (文字列, 区切記号);
  • @Explode (文字列, 区切記号, 戻り値にブランクを含めるか?);
  • @Explode (文字列, 区切記号, 改行を区切り記号として扱うか?);

区切記号
区切記号の長さは1文字です
区切記号に「ab」を指定すると「a」と「b」が区切記号になります

戻り値にブランクを含めるか?
False : (初期値)文字列の最初や最後に区切記号がある、または区切記号が連続しているとき、戻り値にブランクが含まれないようにします
True : 戻り値からブランを取り除きません

改行を区切り記号として扱うか?
True : (初期値)改行を区切記号に含めます
False : 改行は区切記号ではありません

Print : メッセージをステータスバーへ表示したり、ログへ記録します

Lotus Script 言語
  • Print 値
     ※改行は Chr (10) を使用します。プラットフォーム固有の改行へ変換されます

注意
クライアントで実行しているときはステータスバーへ表示し、サーバーで実行しているときはログ(log.nsf)へ記録します
ステータスバーへ表示されるメッセージをログへ記録するには notes.ini に LogStatusBar=1 を設定します
ログをテキスト形式のコンソールログ(console.log)にも記録するには notes.ini に Console_Log_Enabled=1 を設定します

VbScript 言語

コマンドプロンプトから実行する CScript モードのとき
WScript.echo 値
WScript.StdOut.WriteLine 値
WScript.StdOut.Write 値 ' 改行が追加されません
 ※標準出力へ表示されます

ダブルクリックで実行する WScript モードのとき
WScript.echo 値
 ※ダイアログボックスが表示されます

Lotus 式言語

@StatusBar (値);

注意
クライアントで実行しているときはステータスバーへ表示し、サーバーで実行しているときはログ(log.nsf)へ記録します
ステータスバーへ表示されるメッセージをログへ記録するには notes.ini に LogStatusBar=1 を設定します
ログをテキスト形式のコンソールログ(console.log)にも記録するには notes.ini に Console_Log_Enabled=1 を設定します

Forall : 値の数だけ繰り返します

Lotus Script 言語

例:

Forall 参照変数 In 複数値
 式
 Exit Forall ' Forall から抜け出します
End Forall

注意
参照変数は Forall で使用する特別な変数で、Dim では宣言できません
参照変数の値を書き換えると In に続く複数値が変更されます

List : キーと値のペアで記憶する連想配列(辞書、ディクショナリー)を使います

VbScript 言語

For Each 変数名 In 複数値
 式
 Exit For ' For から抜け出します
Next

StrLeft,StrLeftBack : 検索される文字値の検索値より左側を返します

Lotus Script 言語

左側から検索される文字値を検索します
文字値 = StrLeft (検索される文字値,検索値,比較方法,何番目の検索値?)
文字値 = StrLeft (検索される文字値,検索値,比較方法)
文字値 = StrLeft (検索される文字値,検索値)

右側から検索される文字値を検索します
文字値 = StrLeftBack (検索される文字値,検索値,比較方法,何番目の検索値?)
文字値 = StrLeftBack (検索される文字値,検索値,比較方法)
文字値 = StrLeftBack (検索される文字値,検索値)

比較方法
0 = 大文字小文字、全角半角を区別します
1 = 大文字小文字を区別しません
4 = 全角半角を区別しません
5 = 大文字小文字、全角半角を区別しません

戻り値には検索値を含みません
例: {ABCAB} = Strleft ({ABCABC},{c},1,2)

Lotus 式言語

左側から検索される文字値を検索します
文字値 = @Left (検索される文字値,検索値)

右側から検索される文字値を検索します
文字値 = @LeftBack (検索される文字値,検索値)

戻り値には検索値を含みません
例: {AB} = @Left ({ABCABC},{C})

大文字小文字、全角半角を区別します
例: {ABCab} = @Left ({ABCabc},{c})

Cdat,DateValue,DateNumber,TimeValue,TimeValue : 日時値へ変換します

Lotus Script 言語
  • 日時値 = Cdat (日時に変換できる値) ’ CVDate と別名で書くこともできます
  • 日付値 = DateValue (日付に変換できる文字値)
  • 日付値 = DateNumber (年, 月, 日) ’ DateSerial と別名で書くこともできます
  • 時刻値 = TimeValue (時刻に変換できる文字値)
  • 時刻値 = TimeNumber (時, 分, 秒) ’ TimeSerial と別名で書くこともできます

例: 1899/12/30 00:00:00 = Cdat (0)

VbScript 言語
  • 日時値 = Cdate (日時に変換できる値)
  • 日付値 = DateValue (日付に変換できる値)
  • 日付値 = DateSerial (年, 月, 日)
  • 時刻値 = TimeValue (時刻に変換できる値)
  • 時刻値 = TimeSerial (時, 分, 秒)
Lotus 式言語

日時値 = @TextToTime (日時に変換できる文字値);
時刻値 = @ToTime (時刻に変換できる値);
日時値 = @Time (日時に変換できる値);
日時値 = @Time (年; 月; 日);
日時値 = @Time (年; 月; 日; 時; 分; 秒);

Err,Erl,Error : エラーを処理します

Lotus Script 言語
  • Err : エラーが発生すると、エラー番号(数値)が入ります
  • Erl : エラーが発生すると、ソースコードの何行目という場所(数値)が入ります
  • Error : エラーが発生すると、エラーメッセージが入ります

エラーが発生したときにどうするか定義します
On Error Resume Next
On Error Goto ラベル

例:

On Error Goto ラベル
 処理
 Exit Sub
ラベル:
 エラー処理
 Resume Next ’ エラーの次の行へ戻る

似ている命令
On 番号 Goto ラベル1, ラベル2, ... ’ 番号によって異なるラベルへ制御を移す命令です。番号がゼロのときは何もしません
例 : On Err Goto ラベル ’ Err 変数の値(初期値は0)によってラベルへ制御を移します

VbScript 言語
  • Err.Number : エラーが発生すると、エラー番号(数値)が入ります
  • Err.Source : エラーが発生した場所の名前が入ります
  • Err.Description : エラーが発生すると、エラーメッセージが入ります

初期化
Call Err.Clear ()
 ※ On Error や Exit でも Err が初期化されます

On Error は Resume Next だけです
On Error Resume Next

注意
最初の On Error より前は Err オブジェクトが存在しません

例:

On Error Resume Next
Call Err.Clear ()
 処理
 If 0 <> Err.Number Then
  エラー処理
  Call Err.Clear ()
 End If
Lotus 式言語
  • @IsError (評価式) : 評価式がエラーを返すと @True になります
  • @IfError : 廃止されました。「何がエラーなのか」というところが @IsError と異なりました

例 : @If (@IsError (評価式); エラー時の式; 正常時の式);

Do,While,Until : 繰り返します

Lotus Script 言語,VbScript 言語
Do ’ Exit や Goto がなれけば永遠に Do~Loop の中を繰り返します
 Exit Do ’ 直近の Do から抜けることができます
Loop
Do While 式 ’ 式が True のうちは Do~Loop の中を繰り返します
 Exit Do ’ 直近の Do から抜けることができます
Loop
Do Until 式 ’ 式が False のうちは Do~Loop の中を繰り返します
 Exit Do ’ 直近の Do から抜けることができます
Loop
Do
 Exit Do ’ 直近の Do から抜けることができます
Loop While 式 ’ 式が True のうちは Do~Loop の中を繰り返します
Do
 Exit Do ’ 直近の Do から抜けることができます
Loop Until 式 ’ 式が False のうちは Do~Loop の中を繰り返します
While 式 ’ 式が True のうちは While~Wend の中を繰り返します
 ’ Exit を使えません
Wend
Lotus 式言語
  • @While (条件式; 式1; ...; 式最大254); ※条件式が @True のあいだ式を繰り返します
  • @DoWhile (式1; ...; 式最大254; 条件式); ※条件式が @True のあいだ式を繰り返します

注意
@Do (式1; ...; 式最大254);
 ※名前は似ていますが @Do には条件式がないため繰り返しません

Chr (10) : 改行記号です

Lotus Script 言語
  • Chr (10) : プラットフォーム固有の改行記号に自動変換されます

注意
ノーツ/ドミノ サーバーに配置したアプリは、再コンパイルなしで複数のプラットフォームで動作します

VbScript 言語
  • vbCrLf : Windows プラットフォームの改行記号です
  • vbCr : Mac プラットフォームの改行記号です
  • vbLf : UNIX や Linux プラットフォームの改行記号です
Lotus 式言語
  • @Char (10) : 改行記号として扱われます
  • @Char (13) : @Prompt 内で改行記号として扱われます
  • @NewLine : 改行記号ですが、使用できないところがいくつかあります

ByVal : 値をコピーして受け取ります

Lotus Script 言語
  • 値のありかを受け取る(参照渡し)が規定ですが、ByRef と明記するとエラーになります
  • ByVal と記載するとコピーされた値を受け取ることができます(値渡し)
VbScript 言語
  • 値のありかを受け取る(参照渡し)が規定です。ByRef と明記することができます
  • ByVal と記載するとコピーされた値を受け取ることができます(値渡し)

変数の初期値

Lotus Script 言語
  • 数値型: 0
  • 文字値型: ブランク
  • Boolean型: False
  • オブジェクト型: Nothing
  • Variant型: Empty
  • List型: 初期化されません。アクセスする前に Redim で初期化します

注意
Variant型変数を Empty に戻すには、未使用の Variant型変数を利用します
例: Variant型変数 = 宣言したまま使用していない Variant型変数

VbScript 言語
  • Variant型: Empty

注意
Variant型変数を Empty に戻すには、Empty を使用します
例: Variant型変数 = Empty

Lotus 式言語
  • Variant型: Empty

””{}|| : 文字列定数をあらわす記号

Lotus Script 言語
  • ”文字列値”
  • {文字列値}
  • |文字列値|
VbScript 言語
  • ”文字列値”
Lotus 式言語
  • ”文字列値”
  • {文字列値}

Call : 関数を呼びます

Lotus Script 言語

() は省略できることが多いです
Call を省略するときは () も省略します
Call だけ省略し () を付けると、意味が変わります
次のとおり色々な書き方ができます

受け渡し値がないとき
* Call 関数名 ()
* Call 関数名
* 戻り値 = 関数名 ()
* 戻り値 = 関数名
* 関数名

受け渡し値があるとき(関数側の ByVal/ByRef 設定どおり)
* Call 関数名 (受け渡し値)
* Call 関数名 受け渡し値
* 戻り値 = 関数名 (受け渡し値)
* 関数名 受け渡し値

これはエラーになります
* 戻り値 = 関数名 受け渡し値

受け渡し値があるとき(常に ByVal を強制)
* 関数名 (受け渡し値) ’ Call を省略して () を付けます

VbScript 言語

Call を付けるときは () も付けます
Call を省略するときは () も省略します
Call だけ省略し () を付けると、意味が変わります
次のとおり色々な書き方ができます

受け渡し値がないとき
* Call 関数名 ()
* 戻り値 = 関数名 ()
* 関数名

受け渡し値があるとき(関数側の ByVal/ByRef 設定どおり)
* 戻り値 = 関数名 (受け渡し値)
* Call 関数名 (受け渡し値)
* 関数名 受け渡し値

受け渡し値があるとき(常に ByVal を強制)
* 関数名 (受け渡し値) ’ Call を省略して () を付けます

クラスの値を受け渡すと動作が変わります(アクセス権がどうの)

クラス名.パラメータ = 値
関数名 (クラス名.パラメータ) ’ クラス名.パラメータの値は変化しません

Argument in a Class 部分、ByRef and ByVal Parameters ページ

New : クラスからオブジェクトをつくります

New : クラスからオブジェクトをつくります

Lotus Script 言語
  • Set 変数 = New クラス名 ()
  • Set 変数 = New クラス名 (値)
  • Set 変数 = New クラス名
     ※最初に実行される New 関数は値を受け取ることができます
     ※New へ値を渡さないときは括弧を省略できます
VbScript 言語
  • Set 変数 = New クラス名
     ※最初に実行される Class_Initialize 関数は値を受け取ることができません
     ※クラス名のうしろに括弧をつけるとエラーになります