fc2ブログ

LotusScript: ファイルにある特定の文字列を置換するサンプル

今日は久しぶりにサンプルでも書いてみようかと思います。LotusScriptでファイルの編集をしようと思うと結構大変ですよね。このTechnoteではCSVを扱うサンプルを紹介していますが、テキストファイルを読み込むだけなのであまり複雑な処理はしていません。

LotusScript ではテキストファイルを開いたり書き込んだりすることが出来ますが、「読み込んだファイルの途中にある値を挿入したり、特定の行を削除する」と言う方法がちゃんと用意されていないのでファイルが扱いにくいのです。ヘルプにあるファイルを処理する例もあるファイルを読み込んで別のファイルに書き出す、と言うもので、開いたファイルを編集するようなものではありません。

実際編集が必要な場合はどうしているでしょうか?

とりあえず私はファイルを読み込んで適切な内容の一時ファイルを生成する⇒元のファイルを消して一時ファイルをリネームする と言う原始的な方法でサンプルを書いてみました。なんか納得がいかないですよね。。

今日のサンプルでは、ここで紹介したスタンダード版の設定で<プログラムディレクトリ>\framework\rcp\plugin_customization.ini を書き換えると言うのがどうも煩雑なので設定ボタンを作ろうと思って作ったものです。
プログラムディレクトリの取得はここで使ったやつを流用しました。

実はVBSで似たような処理を書いたこともあるのですが、その時もいい方法が分からなくて、結局同じような方法で対応していたのでこうするしかないのかもしれません。。。

まとまりのない記事になってしまいましたが、是非優秀な開発者の方がもっと教育的なコードをどこかで紹介してもらうためのたたき台にでもなればなあ・・・・と思います。

注: ファイル処理の関係上、元のファイル名 + .tmpと言う一時ファイルを生成しています。同名のファイルがあった場合はちゃんとハンドルしていません。。

Sub Click(Source As Button)
Dim ses As New NotesSession
Dim datadir, configfile As String
ProgDir = GetProgramDir()
configfile = ProgDir & "framework\rcp\plugin_customization.ini "

' com.ibm.notes.branding/enable.update.ui が見つかったらcom.ibm.notes.branding/enable.update.ui=true にする
' 見つからなかったらcom.ibm.notes.branding/enable.update.ui=true をそのまま追加

Call ReplaceEntryInTXT(configfile,"com.ibm.notes.branding/enable.update.ui","com.ibm.notes.branding/enable.update.ui=true")
End Sub
Sub ReplaceEntryInTXT(filepath As String, SrcStr As String, RepStr As String)
' この関数はテキストファイルをスキャンして、SrcStrで指定した文字列が見つかったらその行を RepStr で置き換えます
'またエントリが存在しなかった場合、最後にRepStr のエントリを加えます。
' RepStrが空文字("")の場合、その行は削除されます。


Dim find As Boolean
Dim tmpfile,txt As String
tmpfile = filepath & ".tmp"
find = False
filenum = Freefile()
Open filepath For Input As filenum
filenum2 = Freefile()
Open tmpfile For Output As filenum2

While Not Eof(filenum)
Line Input #filenum , txt
If (Instr(Lcase(txt), Lcase(SrcStr)) > 0) Then
If Not (RepStr="") Then
Print #filenum2, RepStr
End If
Find = True
Else
Print #filenum2, txt
End If
Wend

If (find = False) Then
If Not (RepStr="") Then
Print #filenum2, RepStr
End If
End If

Close filenum
Close filenum2

Kill filepath
Filecopy tmpfile, filepath
Kill tmpfile
End Sub
Function GetProgramDir() As String
GetProgramDir = ""
Set objWshShell = CreateObject("WScript.Shell")
strValue = objWshShell.RegRead("HKLM\SOFTWARE\Lotus\Notes\Path")

If Right(strValue,1) <> "\" Then
strValue = strValue & "\"
End If

GetProgramDir = strValue
End Function




スポンサーサイト



LotusLive Engage と Notesのサイドバーを連携する

Notesのスタンダード版にあるサイドバーで「アクティビティ」て邪魔くさいサイドバーだな、て思っている方は少なくないのではないかと思います。サイドバーを使ってみようにも設定するConnections サーバーもないし・・・と理由は色々あると思うのですが、今日はLotusLive Engage (またはLotusLive Connections)を利用してアクティビティサイドバーと連携する方法について紹介します。

はじめに、LotusLive EngageとLotusLive Connectionsの機能比較はこちらのページをご参照ください

プリファレンスからConnectionsの設定を行えばいいのですが、認証形態の違いからもう1ステップ余計な設定が必要になります。具体的な設定方法についてはこちらに記載されています。
Will LotusLive Activities display in the Lotus Notes 8.5 client sidebar?

せっかくなので、具体的に見ていきましょう。
設定はここから行います。これだけでよさそうに思えますが、ここでは「詳細」ボタンを押してください。
アクティビティの設定(1)

ここで認証プロトコルをTivoli Access Managerにするのがポイントです。
(URLは空欄になると思います。画面ショットが変ですね。。)
アクティビティの設定(2)

このようにするとLotusLive上のActivity にNotesクライアントからアクセスできるようになります。
(画像はクリックすると拡大します)
アクティビティサイドバー

メールとの連携で一番便利なのはアクティビティにメールの情報をそのままドラッグ&ドロップしてそのままエントリを作ることが出来る事です。添付ファイルがついていればそのまま子文書として添付ファイルが作成されます。

注意しないといけないのは、メールのドラッグ&ドロップで作ったエントリはWebからは件名や内容の編集が行えないことです。エントリの編集はNotesクライアントからのみになります。

右クリックしてエントリを選択し、編集を選択すると編集画面になります。(下の画面ショットの赤枠)
ここで本文や題名を好きなように編集してください(下の画面ショットの青枠)

アクティビティエントリの編集

LotusLiveの25GBのファイル容量を存分に使用して添付ファイルやメールを単純に保存するだけではなく、Activityと言う単位にして整理して保存することが出来ます。
他にも以下のような操作が出来ます。

・ セクションを作ってカテゴライズ
・ ドラッグ&ドロップでセクションを移動
・ 検索バーで検索
・ エクスプローラーから添付ファイルをドロップして添付ファイル付のエントリを作成
・ ブックマークや添付ファイル付のエントリやToDoエントリを作成
・ エントリを他のアクティビティに移動
・ 複数エントリを選択してセクションの移動やエントリ削除、アクティビティに移動など

最後の操作などはブラウザのUIからはなかなか出来ないので非常に重宝します。
この調子でLotusLiveのファイルやコミュニティもプラグイン経由でアクセスできるようになるといいですね。
すでにLotus Symphony ではLotusLiveのファイルと連携するプラグインも出ているのでいいところまで出来ているのかもしれません。


各UIや機能などについての詳細は英語の資料になってしまいますがこちらの資料(PDF)も参考になると思います。
Overview of using LotusLive Activities within Lotus Notes 8

まだまだ使われていませんが是非このアクティビティ連携ももっと使われるといいなあ・・・と思っています。

LND Toolが Lotus Domino Wiki で紹介されています

以前このブログでもLNDツール (Lotus Notes Diagnostics)について紹介しましたが、Notes And Domino Wikiでも紹介の記事が出ました。

Using the LND tool to analyze IBM Lotus Notes and Domino hangs and crashes (Lotus Notes And Domino Wiki)

SEMDEBUG.TXTのファイル表示の話などを主に取り上げましたが、メモリダンプ(show memory dump や server -m で出力されるファイル)のサマリー表示やサーバー上で生成されるDXLファイルの表示(サーバー文書などの情報をまとめています)など重要な情報収集が行えるツールですのでこのような事に興味がある方は一度使ってみるといいのではないかと思います。

関連記事
LND: SEMDEBUG.TXT の時刻表示を変換して見やすくする