3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VBScriptでLotusScriptを利用する

Last updated at Posted at 2016-12-19

VBScriptでLotusScriptを利用する

 使い方を聞かれたので簡単にまとめてみました。
 注意点にも記載しましたが、今後のことを考えると、ローカル環境でWindowsの機能を使いつつLotusScriptで何かしたい場合はWindows PowerShellで実装するのがお勧めです。

PowerShellからLotusScirptのクラスを呼んだときのGetFirstDocumentの挙動について - Qiitaに記載しましたが、GetFirstDocumentの挙動がおかしいため、この問題が解消してからのほうがよいかもしれません。

概要

 Component Object Model(COM)セッションを利用して Dominoオブジェクトへのアクセスが可能です。

 DBに直接LotusScript書くほうが早そうですが、以下のようなメリットがあります。Windowsの各種機能と組み合わせてLotusScriptでNotesDBをつつけるので、色々と便利な場面があります。

  • ユーザーのローカル環境から実行するときに、処理が終わるまでNotesクライアントが固まらない(バックグラウンドで実行できる)
  • VBScript側で用意されている機能のいいとこ取りができる
  • Windowsの機能のいいとこ取りもできる
    • 例:ユーザーのローカル環境で定期的に実行させたいエージェントがあった場合に、Windowsのタスクスケジューラなどの機能を使って実行する

 一方でデメリットもあります。

  • フォアグラウンドのクラス(NotesUIWorkSpaceから派生するクラス、ユーザーインターフェースに関するクラス、など)は使えない
  • バックグラウンドのクラスでもCOMでは使えないものもある
  • IBM Notes/IBM Domino 上とCOMで実行したときで、挙動が異なるクラス・メソッドがある

 上手く使えば仕事を楽にしてくれるので、知っていると便利です。

サンプルコード

 VBScriptからLotusScriptのNotesSessionを利用する簡単なスクリプトはこちら。

sample.vbs
	' VBScriptでLotusScriptのクラスやオブジェクトを利用するためのシンプルな例

	Option Explicit


	' 初期設定
	' 変数の設定
	Dim objWsh				' バッチファイルをウィンドウ開かずに実行させるときに必要
	Dim objSS				' NotesSessionクラスのオブジェクト


	' Notesのセッションを用意する
	' Initialize メソッドに引数を渡さないことで、デフォルトのパスワード入力ウィンドウを表示させる
	Set objSS = WScript.CreateObject("Lotus.NotesSession")
	Call objSS.Initialize


	' NotesSession のプロパティを呼んでみる(今回はユーザー名の共通部分を出力してみる)
	Wscript.Echo objSS.CommonUserName

 上記コードを適当なフォルダに保存し、前提条件を満たした環境下で以下のように実行してあげると、ユーザー名の共通部分が表示されます。

実行例
	C:\>C:\Windows\SysWOW64\CScript.exe //nologo sample.vbs
	Hoge Fuga

注意点

 64bit環境下では、32bit版のCScript.exe(またはWScript.exe)からVBSを呼ぶ必要があります。64bit環境下では通常64bit版のCScript.exeが呼ばれてしまうのですが、このCScript.exeではオブジェクトを作成できず、以下のようなエラーになります。

失敗例
	C:\>cscript //nologo sample.vbs
	C:\sample.vbs(14, 1) WScript.CreateObject: "Lotus.NotesSession" というオブジェクトを作成できませんでした。

 このため、上の例のように C:\Windows\SysWOW64\CScript.exe から実行する必要があるのですが、知らないとハマります。昔のコードが新しい環境で動かない……ということで焦ることになります。

#"WOW64"は"Windows-On-Windows 64"の略で、64bit Windows で 32bit Windows アプリケーションを動作させる仕組みのことなのだけど、見ただけならこっちが64bit版のCScript.exeだと思っちゃいますよね……。なんて分かり辛い。

 また、VBScriptがいつ打ち切られてしまうか分からないため、そうなった場合はWindows PowerShell への移行を迫られることになります。

「Windows PowerShellでもLotusScriptを利用できるの?」という声が聞こえてきそうですが、できるので続きは後ほど……。

2017/10/22 追記:
 だいぶ時間がたってしまいましたが、PowerShellからLotusScriptを呼び出す方法についてエントリを用意しました。
PowershellでLotusScriptを利用する - Qiita

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?