[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に非表示式を設定した場合の問題」のワザを使ってください。
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 コントロールを使う方法も説明してみる予定です(たぶん)。こちらのほうは、今回の方法よりもおすすめできませんが(^^;;;
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。