当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2009年10月30日金曜日

LotusScriptで実行したエージェントは・・・

昨日に続いて、今日も「今まで知らなかった・・・」シリーズです。

プログラムからエージェントを実行する場合、皆さんはどのようにしているでしょうか?

@コマンドの
@Command([ToolsRunMacro];"エージェント名")
@Command([RunAgent];"エージェント名")
を使うか、もしくは、
LotusScriptのNotesAgentクラスのRunメソッド(RunOnServerメソッド)
を使うかのいずれかでしょう。


一見、@コマンドかLotusScriptかの違いしかないように感じますが、実はそうではなかったのです!

実は、LotusScriptのNotesAgentクラスRunメソッドでは、できないことがあるのです。

デザイナーヘルプを良く読むと分かるのですが・・・
MessageBox(Msgbox)やInputboxなど、ユーザからの入力を待つような関数が実行出来ないのです。

ちなみにヘルプには『ユーザーは呼び出されたエージェントと直接対話できません。ユーザーの出力は Lotus Domino log に保存されます。』と書いてあります。
※クライアントからエージェントを実行した場合、「Lotus Domino log」というのは、ローカルPCにある「log.nsf」を指すので、そこに記録されます。

エージェントを間接的に実行するような場合は、この点に注意しましょう。
@コマンドや@関数も積極的に利用しましょう!という良い教訓ですね?

2009年10月29日木曜日

LSSファイルのインクルード

当たり前というか、ヘルプを見れば書いてあるというか。
でも、筆者は今日、この瞬間まで知らなかったので、忘れないように書いておきます。

スクリプトライブラリにプログラムを記述する際、色々なプログラムで利用するような定数はあらかじめ、LSSファイルにまとめておいて、そのファイルをインクルードするというような事があると思います。
筆者の場合、ノーツDBの設計を隠す場合にも使っていますが・・・

さて、LSSファイルをインクルードする方法ですが、
%include "LSSファイル名"
とします。
この時、LSSファイルは、ノーツのプログラムディレクトリに存在する必要があります。

これだと、LSSファイルをたくさん作ると、プログラムディレクトリがごちゃごちゃしてしまいますね。
PCの移行やノーツのバージョンアップなどで、ファイルがどこかに行ってしまうとも限りません。

実は、%include命令のLSSファイルは、「相対パス指定」「絶対パス指定」という書き方もできるのです。

1.相対パス指定とは
 ルートパスをノーツのプログラムディレクトリとして、そこからファイルを検索する方法
 ノーツプログラムが「c:\lotus\notes」の場合
 %include "lss\test1.lss"
 は、「c:\lotus\notes\lss\test1.lss」というファイルを利用します。 

2.絶対パス指定とは
 ドライブ名からパスを指定する方法
 %include "c:\miyolss\test1.lss"
 は、「c:\miyolss\test1.lss」というファイルを利用します。


ということで、フォルダ管理をうまく活用して、LSSファイルの達人になりましょう。

2009年10月27日火曜日

エージェントを有効化する

病床からの復帰第一弾です。

NotesDBに作成したスケジュールエージェント(ヘルプでは定期エージェントとなってます)は、LotusScriptで有効化/無効化を切り替えることができます。

【サンプルソース】
Sub Click(Source As Button)
 Dim session As New NotesSession
 Dim db As NotesDatabase
 Dim agent As NotesAgent
 
 'PDF変換エージェントを取得する
 Set db = session.CurrentDatabase
 Set agent = db.GetAgent( "エージェント名" )
 
 'エージェントを有効化して保存する
 agent.IsEnabled = True
 Call agent.Save()
End Sub

とても簡単ですね。
ノーツDBを取得して、エージェントを取得して、IsEnabledプロパティをTrueにして、エージェントを保存するだけ。

これはヘルプにもあるとおり、「定期エージェント」でのみ有効です。
実際のエージェント画面を見てもらえば分かりますが、「有効」「無効」を示すアイコンがあるエージェントでだけ、使えるんですね。


ところが・・・
定期エージェントにも関わらず、このサンプルが実行出来ない(つまりは、IsEnabledプロパティの変更が有効にならない)場合があります。

下図を見てください。エージェントの設定画面です。



ここにあるように、「エージェントが有効になったときにサーバーを指定」のチェックがついていると、NotesAgentクラスのIsEnabledプロパティをTrueにしても保存できないのです。


これに対する解決策は2つあります。

1.「エージェントが有効になったときにサーバーを指定」のチェックを外しておく。
 そうすれば、問題なくエージェントが保存できます。

2.NotesAgentクラスのServerNameプロパティを一緒に設定する
 NotesAgentクラスのIsEnabledプロパティをTrueにした後、ServerNameプロパティも一緒に設定しておくことで、エージェントが保存できるようになります。
 サーバ名は正しいものを設定しないと、このエージェントそのものが動かなくなりますので、注意が必要です。
 通常は、DBがあるサーバで動かすでしょうから、
 NotesSession.CurrentDatabase.Serverで取得すれば良いでしょう。



ということで、エージェントの活用方法についてでした。


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年10月26日月曜日

Lotus夜Day2009

すみません。

諸事情により、Lotus夜Day2009に参加することができませんでした。
代わりに?筆者の所属する会社の社長に参加していただきました。

次の機会には必ず、参加いたしますので、皆様にはその時にお会いしましょう。

下の写真は社長がGet!してきた戦利品です。
シャツは着ると、「あぁ、ノーツやってて良かったぁ」という気分になりますね。


このブログのネタもまた少し増えてきた感じなので、様子を見ながら記事を書いていきます。
よろしくお願いします。


追伸
時々、直接ご質問をいただきますが、そう言った事への回答はいたしておりません。
些細なことでも筆者の会社を通じていただければ幸いです。

【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2009年10月15日木曜日

このブログの訪問者って?Part2

久しぶりの投稿です。

が!Notes関連の記事ではないです。ごめんなさい。
随分前に、このブログの訪問者って?と言う記事を書いて、その中で、このブログへの訪問者の年齢別分布をお見せしました。

今回は、男女比というものが判明したので、それを掲載します。


・・・どちらが男性とは書いてませんが、色的に見ても数的に見ても分かりますよね。
女性に人気がないなぁ。
ノーツの技術者は女性が少ないのかしら?知り合いには女性もいるんですがね。
肝心なことは書かないから、嫌がられているのかしら?

真相は分かりませんが・・・
筆者のブログから言えるのは、「ノーツに携わっているのは、40前後のおっさんが多い」ということですね。

うんうんとうなずかないで、若い人や女性にも広めていきましょうね。



あ!筆者も来週行われるLotus夜Dayには参加しますよ。たくさん情報交換しましょうね。
勝手に引用(ごめんなさい)→Lotus夜Day 2009 ~祝!!Lotus Notes 20歳(はたち)やでぇ~ 開催案内






そういえば、デザイナが無償になるんですね。個人的には嬉しさと悲しさ半々かな?
DBの改修のお仕事が減っちゃうのかなぁ・・・なんて。
それとも、「作ったんだけど、どう改修して良いか分からないから、お願い!」
なんて仕事が増えるんでしょうか?
いずれにしても、ノーツが盛り上がれば良し!としましょう。

2009年10月5日月曜日

アウトラインのラベル

久しぶりの投稿です。サボっていたわけではありません。ホントにネタがなかったんです。

ということで、小ネタを発見したので、その報告です。
もしかしたら知っている方も入れませんが・・・

ノーツDBの設計でアウトラインを作成する方は多いかと思います。
(昔はナビゲータでしたねぇ)

このアウトライン。
ビューを表示させたり、フォームを表示させたり、@関数を書いて実行させたりできます。
その時、画面上に表示するラベルを設定できるのですが、ここにも@関数を書くことができるんですね。
下図を見てください。
通常は、アウトラインプロパティ画面の赤丸で囲んだ箇所にラベルを記述します。
すると、下部にあるプログラムペインにその内容が表示されます。
ところが、このプログラムペインをよ~く見てください。
青丸で囲んだ場所ですね。グレーアウトされてはいますが、「式」と書いてあります。

ここに@関数を書いてみると、なんと実行されるんですね。
ここで、注意して欲しいことがあります。
@関数は、必ず、プログラムペインに記述してください。
プロパティ画面のラベル欄に書いても無効になります。

ちなみに、ラベルに今日の日付を表示させようとして@Today関数を埋め込んだのが下図です。
アウトラインプロパティ画面のラベル欄は「計算結果」となっていますね。


下図は、上で作成したアウトラインをページに埋め込んで、それを表示したものです。
確かに今日の日付が表示されています。


これを活用すると、1つのアウトラインで、非表示式を使うことなく、複数の属性を持たせることができますね。

是非、試してみてください。


【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ