Takenoff Labs

Lotus Notes/Domino に関する Tips や、クラシックの名曲などを紹介します

[Notes/Domino] HTMLを動的に表示する方法(1)

ノーツクライアントでパススルーHTMLを表示する方法は以前にご紹介しましたが、動的に変更できないのが悩みのタネでした。あれからいろいろと知恵を振り絞ること苦節5年(大嘘)、編集モードに限り動的変更させることに成功いたしました(^^)v

まぁ例によって強引な方法なので、あまりおすすめできるものではないですが、遊んでみるだけでも面白いかも。ってことでエントリしてみます。

実装方法

1. フォームを新規作成します。

2. フォームの Globals の Declarations に、以下のスクリプトを記述します。

Dim g_uidoc As NotesUIDocument
Dim g_strHTML As String

3. フォームの QueryOpen に、以下のスクリプトを記述します。

Set g_uidoc = Source

4. フォームの Initialize に、以下のスクリプトを記述します。

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument

Set uidoc = ws.CurrentDocument
If Not uidoc Is Nothing Then
	Set doc = uidoc.Document
	If Not doc Is Nothing Then
		g_strHTML = doc.HTML(0)
	End If
End If

5. フォームにフィールドと計算結果テキストを配置します。

  • SaveOptions …… 作成時の計算結果フィールド。値は "0"。非表示にしてください。
  • SetHTML …… 編集可能フィールド。非表示にしてください。
  • 計算結果テキスト …… 値は「HTML」にしてください(「"HTML"」ではありません!「HTML」にしてください)。また、パススルーHTMLにしてください。

HTML用のフォーム

※ 計算結果テキストは、通常はそれだけを配置しておけばよいですが、レイアウトをぴっちり合わせたい場合は、上記のようにウィンドウに合わせた表の中に入れ、さらに「パススルーHTMLに非表示式を設定した場合の問題」のワザを使ってください。

6. SetHTML フィールドの Initialize に、以下のスクリプトを記述します。

Dim doc As NotesDocument
Dim itm As NotesItem

If Not g_uidoc Is Nothing Then
	Set doc = g_uidoc.Document
	If Not doc Is Nothing Then
		Set itm = doc.ReplaceItemValue("HTML", g_strHTML)
		itm.IsSummary = False '念のため
	End If
End If

7. フォームを適当な名前(たとえば「FrmHTML」)で保存します。

8. HTMLを表示したいフォームを開き(または作成)します。

9. HTMLを表示したい位置にカーソルを合わせ、「作成」メニュー→「埋め込み設計要素」→「エディタ」を実行し、表示されるダイアログで、先ほど保存したフォームを選択します。埋め込んだエディタは編集モードでのみ表示するようにしてください。

埋め込みエディタダイアログ

(10. 読込モードでもHTMLを表示したい場合は、別途読込モードでのみ表示する計算結果テキストを挿入し、パススルーHTMLにしておいてください。)

11. ボタンなどを挿入し、以下のようなスクリプトを記述します。

Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Dim itm As NotesItem

Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document

Set itm = doc.ReplaceItemValue("HTML", "<strong>" & CStr(Now) & "</strong>")
itm.IsSummary = False

Call uidoc.Refresh()

※ Summary をオフにしているのは、文書全体の64KB制限を回避するためです。HTML というフィールドを作ると意味が無いので、作らないでください。(作ってもいいですが、その場合は32KBまでしか入らず、他のデータが32KBを超える場合は、保存時にエラーとなります。)

以上で完了です。フォームをプレビューして、ボタンを押すごとにHTMLが変わることを確認してください。

サンプルDB

……と手順を紹介しましたが、「こんなの面倒くせえぞゴルァ!」という人のために、サンプルDBを作成してみましたです。中にDBが入っているので、適当なところに解凍して開いてください。

html.zip (サイズ = 約26KB。F-Secure Internet Security 2010 にてウイルスチェック済み)

注意点

冒頭でも書いたように、かなり強引な方法です。「Refresh時に埋め込みエディタが再ロードされる」という点を利用しているので、この仕様がもし将来的に変更になった場合は、使えなくなってしまいます(R6.0.4、R8.0.2 FP2、R8.5.1で、問題ないことは確認していますが)。

上記のリスクを考慮したうえで、このテクを使うかどうか判断していただければと。

あと、R8.5.1 なら XPages を使えばいいじゃん、という反論は認めます(認めるのか)。まぁ、既存のフォームにちょっとしたHTMLを表示するには便利かな、と思います。

ちなみに、次回は WebBrowser コントロールを使う方法も説明してみる予定です(たぶん)。こちらのほうは、今回の方法よりもおすすめできませんが(^^;;;

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)
読み込み中...

トラックバック

トラックバックはありません

コメント

コメントはありません

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 4199 to the field below:

^
×