スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

XPages のデモ

2011年07月15日 00:35

テクてくLotus のXPages勉強会が熱いなあ、といつも思っていたのですが、以下のサイトでここで使われたデモアプリケーションが公開されているみたいですね。


パートナー様製の XPages デモアプリケーション


ファイルをダウンロードしたりIBM製のものはオンラインからIDを使って入って動作を確認したりも出来るみたいです。そのまま使って改良してもいいし、勉強用に手を取ってもいいし、こういうのがあると、XPages もイメージしやすくていいですよね。

是非こういうアプリがもっと増えるといいなあ・・・・と思っています。
スポンサーサイト

サポート用Admin Tool データベース

2011年07月12日 00:46

技術文書ではちょっとした処理を行うエージェントなどが紹介されていることがありますが、このようなものをまとめたデータベースが公開されています。

All-in-one Admin Tool for agent-based troubleshooting & problem solving

ダウンロードして開くとこんな感じでセットアップ画面が表示されます。
配置するサーバーを指定して現在のユーザーID(管理者であることが前提ですので、サーバー上でDBを作る権限が必要です)で署名をするまでをこのセットアップ画面でやってくれます。
セットアップ画面

主な機能は以下のようなものです。

1. プロフィール文書の削除
  (メールのルールの問題などの回避などに役に立ちます)

2. Out of Office 診断ツール

3. 「設計の置換や更新を禁止する」オプションを一括で切り替えるツール

4. メールDBのコピーツール
  ※ あまり用途が分かりません

5. 受信ボックス修復ツール
  ※ これも用途は限定的だと思います

6. ACL管理ツール
   メールファイルの所有者のACLを一括で変更します

7. テンプレートの重複チェック
  ※ これも Show Dir コマンドの機能とかぶるのであまり要らない気がします

8. DBプロパティにある「バックグラウンドエージェントを無効にする」オプションの一括設定

9. メールDBのスプレッドシート作成
   サーバー上のメールDBのサイズやIndexの更新日など各種情報をUIから選択してCSVファイルに出力するエージェント

10. DXL Exporter Tool
   任意のDBにある選択文書をアクションメニューから[アクション]-[Export To DXL]メニューからDXL形式で出力できるようになります。(Notes.ini にAddInMenus=DXL.DLL が追加されます)


全部はいらないと思いますがいくつかは持っていてもいいかな、て思う機能があるのではないかと思います。
私もテスト環境でざっと使ってみましたがシンプルなGUIから操作するような形式なので比較的簡単に使うことが出来るのではないかと思います。




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

2011年05月23日 01:45

今日は久しぶりにサンプルでも書いてみようかと思います。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




OSの違いを吸収する

2011年02月13日 02:15

- バックナンバー -
1. OSLoadProgramを呼んでみるサンプル
2. OSLoadProgramのサンプルを理解する
3. C API はnnotes.dllから呼ばれている
4. 参照渡しか値渡しか
5. 型を変換する
6. 構造体を定義する
7. OSLoadString を使ってみよう
8. OSの違いを吸収する

しばらく書いていませんでしたが、ちょっと書こうと思っていた記事があったのを思い出しました。
LotusScriptからC APIを呼び出すようなプログラムをノーツアプリケーションに移植すると一気に移植性が損なわれてしまう、と思った方はいないでしょうか?

このように書くと、nnotes.dllはWindowsのDLL名なので、その関数はWindowsでしか使えなくなってしまいます。
Declare Function NSFDbOpen Lib "nnotes.dll" ( _
Byval PathName As String, rethDB As Integer ) As Integer


しかもLib宣言はif文で分けるようなことはできません。
このような問題はどのように回避するのでしょうか?

ちょっとこのような問題をどう解決するのかを見ていくために、DJX管理ツールを見てみましょう。
ここではユーザー登録などをノーツアプリケーションから実行するために一部APIを使用しています。

APIFunctionsDef と言うスクリプトライブラリでは以下のように宣言されています。
(一部抜粋)

'###################################
' Declarations of Notes C API functions
'###################################
Const LIBNAME_WIN = "nnotes.dll"
Const LIBNAME_ALP = "anotes.dll"
Const LIBNAME_OS2 = "inotes.dll"
Const LIBNAME_SOL = "libnotes.so"
Const LIBNAME_AIX = "libnotes_r.a"
Const LIBNAME_OS400 = "/qsys.lib/qnotes.lib/libnotes.srvpgm"
Const LIBNAME_LINUX = "libnotes.so"
//略
Declare Function NSFDbOpen_WIN Lib LIBNAME_WIN Alias "NSFDbOpen" ( _
Byval PathName As String, rethDB As Integer ) As Integer

Declare Function NSFDbOpen_SOL Lib LIBNAME_SOL Alias "NSFDbOpen" ( _
Byval PathName As String, rethDB As Integer ) As Integer

Declare Function NSFDbOpen_AIX Lib LIBNAME_AIX Alias "NSFDbOpen" ( _
Byval PathName As String, rethDB As Integer ) As Integer

Declare Function NSFDbOpen_OS400 Lib LIBNAME_OS400 Alias "NSFDbOpen" ( _
Byval PathName As String, rethDB As Integer ) As Integer

Declare Function NSFDbOpen_LINUX Lib LIBNAME_LINUX Alias "NSFDbOpen" ( _
Byval PathName As String, rethDB As Integer ) As Integer



上記はNSFDBOpenの呼び出し例です。プラットフォームごとに異なる名前をAliasで付けています。
勘のいい人であればここまで見れば、だいたいどう処理するか分かるのではないでしょうか?

TransactionLib ではNSFDbOpenの下記のようなラッパー関数を作っています。

Function NSFDbOpen( PathName As String, rethDB As Integer ) As Integer
Select Case PLATFORM
Case WIN32
ret% =NSFDbOpen_WIN( PathName, rethDB )
Case SOLARIS
ret% =NSFDbOpen_SOL( PathName, rethDB )
Case AIX
ret% =NSFDbOpen_AIX( PathName, rethDB )
Case OS400
ret% =NSFDbOpen_OS400( PathName, rethDB )
Case LINUX
ret% =NSFDbOpen_LINUX( PathName, rethDB )
End Select
NSFDbOpen = ret%
End Function


ここでのPLATFORMと言う定数は@Platformの結果を格納しているような変数ですがここは人によってどうにでも実装できるのではないかと思います。(詳細が気になる人はDefaultSettingと言う関数を見てみてください)
「OS毎の処理の違いはラッパー関数で吸収する」と言ってしまえば、何てことない話ですがこういう処理の仕方は参考になりますね。



developerWorks - 新人SEが学ぶ XPages

2011年01月30日 23:46

developerWorks でこんな連載が始まったのをご存知でしょうか。

新人SEが学ぶ XPages (developerWorks Japan)


ちょっと箱崎でこの記事の話をしていたのですが、「XPages が新人でも数ヶ月で覚えられますってアピールするのに本当に新人にやらせてみたらどうかなあ・・・て思って・・・・」みたいな経緯で企画したそうです。

ただ僕がXPages覚えられました、て言って参考資料を並べられただけでも面白くないので、新人に作らせるメッセージもいくつかのメッセージを持っています。

・ 8.5.1でNotes対応(要Standardクライアント)したXPagesは8.5.2でさらに親和性がまし、NotesアプリケーションのUI向上としても魅力的な作りにする

・ Ticker (マーキー)のようなものをNotesアプリケーションに表示する

・ ビュー上にビューアイコン以外の画像を表示したり、複数ビューを自然なUIで表示する


正直Tickerって需要があったのは初めて知ったのですが、Notesアプリケーションでやりにくかったことが出来る、と言う例のShowcaseになるような課題を与えられています。

XPagesはちょっと今風の新しいUIになるだけでなく、意外とNotesアプリケーションでやりにくかったことを実現するうえでも有力な選択肢になる、と言う事を新人の連載を通じて訴えていけるのではないかと楽しみにしています。

ここで作ったサンプルのスクリーンショットも出ていますがおそらく完了するころにはサンプルデータベースもダウンロードできるようになるのではないかと思うので楽しみにしていてください






最新記事


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。