74.オブジェクト向けLotusScript(十六)のHtmlレポート
6902 ワード
需要と全体的な考え方
37.オブジェクト向けLotusScript(九)のエクスポートExcel(一)、38.オブジェクト向けLotusScript(九)のエクスポートExcel(二)から39.オブジェクト向けLotusScript(十一)の書き出しExcel(三)いくつかの記事で,筆者はMS Excelをターゲットフォーマットとしてレポートを作成することについて述べた.ほとんどの場合、これは良い選択ですが、WebページやダイナミックなNotesテーブルなど、「レポート」が他のフォーマットでより便利または適切に表示される場合もあります.理由はいろいろあるかもしれませんが、Excelソフトウェアをインストールしていないから、結果をHtmlメールに埋め込みたいから、Notesクライアントに直接見せたいまで、いろいろあります.筆者はウェブページとNotes表の2つのフォーマットを使用したことがある.
今、ページをターゲットフォーマットとしてレポートを作成するフレームワークを整理したいのですが、仕事中にこのようなニーズに遭遇する可能性があるか、興味のある友人だけに役立つことを望んでいます.整理といえば、考古学者が文献資料に基づいて歴史上の馬車鎧を複製したように、当時のコードは残っていなかったからだ.
利用するためにオブジェクト向けLotusScript(8)の継承という考え方から,筆者はまず基本的なテーブル作成クラスを抽象化し,その後HtmlやNotesリッチテキストドメインの動的テーブルを目標とした具体的な実装がこのクラスを継承する.
4つの空の関数は、それぞれ表のヘッダーを書き、表の行を書き、表を終了し、レポートを表示します.それからHTML表を書くクラスを見てみましょう.これにより、最初はHTMLのエスケープ文字、2番目はHTMLファイルがどこに作成され、自動的に開くかという2つの前置き問題が発生します.
HTMLエスケープ文字
まず最初の質問ですが、HTMLのテキストノード、つまり<>タグ以外の内容で、エスケープが必要な文字は<、>と&の3文字、<>タグ内需エスケープの文字には'と"があります.この5文字に対して、次のようなエスケープ関数を書くことができます.
レポート・ファイルの場所と自動開く
2つ目の問題は2つの点に関連している.HTMLファイルの保存場所は、呼び出されたプログラムによって指定されるべきであり、Windowsの環境ではTemp環境変数で設定できるパスなど、指定せずにデフォルトの場所を使用することも可能である.ファイルの名前は、新しいレポートが古いレポートを上書きしないように一意性を保証するために現在の時間を使用します.HTMLレポートを作成した後、ユーザーが自分から見たり、ファイルを送ったりする場合があります.例えば、添付ファイルとしてメールを送ったり、すぐにユーザーに開く場合があります.ブラウザでこれらのページを開くにはどうすればいいですか?LotusScriptが提供する外部プロセスを呼び出すShell関数が役立ちます.IEブラウザへのインストールパスにHTMLファイルパスを直接入力できます.例えば、「C:Program FilesInternet Exploreriexplore.exe C:tempreport 1.html」です.IEのインストールパスが不確定な場合や、システムのデフォルトのブラウザを使用したい場合は、Windowsのファイルマネージャプロセス「explorer.exe C:tempreport 1.html」を使用することもできます.explorer.ExceはWindowsの自動検索位置にあり、入力プログラムが存在するパスも省けます.
サンプルとコード
このようなHTMLのテーブル・レポートを呼び出すテスト・プログラムと結果を見てみましょう.
上のコードでは、HTMLファイルがE:ディスクの下に作成されます.表は7列あり、それぞれFirst、SecondからSeventhをタイトルとする.1行から7行のデータはサイクルで生成された数字であり、最後の行は各種記号を書き込んでエスケープの効果をテストする.末尾呼び出しレポートのShow()メソッドが即時に表示されます.
フォルダの下にある複数のレポート文を指定します.
開いているHTMLレポート
最後にこのHTMLレポートクラスのコードを見てみると、主な方法にはコメントがあります.
Notesリッチテキストフィールドのダイナミックテーブル
Notesドキュメントのリッチテキストフィールドにテーブルを作成してレポートを表示するには、NotesRichTextItem、NotesRichTextNavigator、およびNotesRichTextTableのようなクラスを作成する方法を使用します.基本的な手順は、NotesRichTextItem内にNotesRichTextTableを作成し、このNotesRichTextTableを使用して新しい行を動的に追加し、NotesRichTextNavigatorでセルに順次配置し、NotesRichTextItemを呼び出します.AppendText()書き込み値.明らかに、このテーブルAPIは不器用で、実際の実行速度も速くありません.利点はサードパーティのソフトウェアを必要とせず、Lotus Notesプラットフォーム内で完全に完成することである.レポートはドキュメント形式で簡単に保存できます.読者の友人が興味を持っているか、実際に需要がある場合は、この方法を採用することができます.HtmlTableWriterと同様にTableWriterから継承されるため、共通メソッドは同じであり、呼び出し元はTableWriterの変数を宣言し、必要に応じて特定のサブクラスを作成し、その後呼び出しメソッドに違いはありません.
37.オブジェクト向けLotusScript(九)のエクスポートExcel(一)、38.オブジェクト向けLotusScript(九)のエクスポートExcel(二)から39.オブジェクト向けLotusScript(十一)の書き出しExcel(三)いくつかの記事で,筆者はMS Excelをターゲットフォーマットとしてレポートを作成することについて述べた.ほとんどの場合、これは良い選択ですが、WebページやダイナミックなNotesテーブルなど、「レポート」が他のフォーマットでより便利または適切に表示される場合もあります.理由はいろいろあるかもしれませんが、Excelソフトウェアをインストールしていないから、結果をHtmlメールに埋め込みたいから、Notesクライアントに直接見せたいまで、いろいろあります.筆者はウェブページとNotes表の2つのフォーマットを使用したことがある.
今、ページをターゲットフォーマットとしてレポートを作成するフレームワークを整理したいのですが、仕事中にこのようなニーズに遭遇する可能性があるか、興味のある友人だけに役立つことを望んでいます.整理といえば、考古学者が文献資料に基づいて歴史上の馬車鎧を複製したように、当時のコードは残っていなかったからだ.
利用するためにオブジェクト向けLotusScript(8)の継承という考え方から,筆者はまず基本的なテーブル作成クラスを抽象化し,その後HtmlやNotesリッチテキストドメインの動的テーブルを目標とした具体的な実装がこのクラスを継承する.
Public Class TableWriter
%REM
Description: Comments for Function
%END REM
Public Function WriteHeader(headers As Variant)
End Function
%REM
Description: Comments for Function
%END REM
Public Function WriteLine(values As Variant)
End Function
%REM
Description: Comments for Function
%END REM
Public Function EndTable()
End Function
%REM
Description: Finishes the report and shows it.
%END REM
Public Function Show()
End Function
End Class
4つの空の関数は、それぞれ表のヘッダーを書き、表の行を書き、表を終了し、レポートを表示します.それからHTML表を書くクラスを見てみましょう.これにより、最初はHTMLのエスケープ文字、2番目はHTMLファイルがどこに作成され、自動的に開くかという2つの前置き問題が発生します.
HTMLエスケープ文字
まず最初の質問ですが、HTMLのテキストノード、つまり<>タグ以外の内容で、エスケープが必要な文字は<、>と&の3文字、<>タグ内需エスケープの文字には'と"があります.この5文字に対して、次のようなエスケープ関数を書くことができます.
Public Function HtmlEscape(source As String) As String
Dim find(4) As String
find(0)="&"
find(1)=""""
find(2)="'"
find(3)="<"
find(4)=">"
Dim replacement(4) As String
replacement(0)="&"
replacement(1)="""
replacement(2)="'"
replacement(3)="<"
replacement(4)=">"
HtmlEscape=Replace(source, find, replacement)
End Function
レポート・ファイルの場所と自動開く
2つ目の問題は2つの点に関連している.HTMLファイルの保存場所は、呼び出されたプログラムによって指定されるべきであり、Windowsの環境ではTemp環境変数で設定できるパスなど、指定せずにデフォルトの場所を使用することも可能である.ファイルの名前は、新しいレポートが古いレポートを上書きしないように一意性を保証するために現在の時間を使用します.HTMLレポートを作成した後、ユーザーが自分から見たり、ファイルを送ったりする場合があります.例えば、添付ファイルとしてメールを送ったり、すぐにユーザーに開く場合があります.ブラウザでこれらのページを開くにはどうすればいいですか?LotusScriptが提供する外部プロセスを呼び出すShell関数が役立ちます.IEブラウザへのインストールパスにHTMLファイルパスを直接入力できます.例えば、「C:Program FilesInternet Exploreriexplore.exe C:tempreport 1.html」です.IEのインストールパスが不確定な場合や、システムのデフォルトのブラウザを使用したい場合は、Windowsのファイルマネージャプロセス「explorer.exe C:tempreport 1.html」を使用することもできます.explorer.ExceはWindowsの自動検索位置にあり、入力プログラムが存在するパスも省けます.
サンプルとコード
このようなHTMLのテーブル・レポートを呼び出すテスト・プログラムと結果を見てみましょう.
Sub Initialize
Dim htw As New HtmlTableWriter("e:")
Dim headers
headers=Split("First^Second^Third^Fourth^Fifth^Sixth^Seventh", "^")
Call htw.WriteHeader(headers)
Dim i As Integer, j As Integer, data(6) As Long
For i=0 To 6
For j=0 To 6
data(j)=(j+1)*10^i
Next
Call htw.WriteLine(data)
Next
Dim characters
characters=Split("~!@^#$%^&*(^)_+^<>?^'"";^:,.", "^")
Call htw.WriteLine(characters)
Call htw.EndTable()
Call htw.Show()
End Sub
上のコードでは、HTMLファイルがE:ディスクの下に作成されます.表は7列あり、それぞれFirst、SecondからSeventhをタイトルとする.1行から7行のデータはサイクルで生成された数字であり、最後の行は各種記号を書き込んでエスケープの効果をテストする.末尾呼び出しレポートのShow()メソッドが即時に表示されます.
フォルダの下にある複数のレポート文を指定します.
開いているHTMLレポート
最後にこのHTMLレポートクラスのコードを見てみると、主な方法にはコメントがあります.
Public Class HtmlTableWriter As TableWriter
Private ns As NotesStream
Private path As String
%REM
Description: Create a new html file in the specified folder.
The file name consists of the current date and time.
%END REM
Public Sub New(folder As String )
Dim s As New NotesSession
Set ns=s.CreateStream()
If folder="" Then
path=Environ("Temp") & "\"
Else
Dim tmp
tmp=Dir(folder) 'Check if the given directory exists
path=folder
If Right(path, 1)><"\" Then
path=path & "\"
End If
End If
path=path & Format(Today(), "yyyy-mm-dd") & " " & CDbl(Time())*86400
path=path & ".html"
Call ns.Open(path)
Dim html As String
html={<!doctype html><HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><TITLE> New Document </TITLE></HEAD><BODY>}
Call ns.WriteText(html, 3)
End Sub
%REM
Description: Write the header of the table with the given titles.
Params: headers is a variant containing an array of titles.
%END REM
Public Function WriteHeader(headers As Variant)
If Not IsArray(headers) Then Exit Function
Call ns.Writetext("<table border=1 cellspacing=0 style=''><thead><tr>", 3)
ForAll h In headers
Call ns.Writetext("<th>" & HtmlEscape(CStr(h)) & "</th>", 3)
End ForAll
Call ns.Writetext("</tr></thead>", 3)
End Function
%REM
Description: Append a line to the table with the given values.
Use HtmlEscape() to escape html charaters.
Params: values is a variant containing an array of values to be written to the table.
%END REM
Public Function WriteLine(values As Variant)
If Not IsArray(values) Then Exit Function
Call ns.Writetext("<tr>", 3)
ForAll v In values
Call ns.Writetext("<td>" & HtmlEscape(CStr(v)) & "</td>", 3)
End ForAll
Call ns.Writetext("</tr>", 3)
End Function
%REM
Description: Closes the table.
%END REM
Public Function EndTable()
Call ns.Writetext("</table>", 3)
End Function
%REM
Description: Finishes the HTML page that the table resides in.
Use Shell() to open the page.
%END REM
Public Function Show()
Call ns.Writetext("</BODY></HTML>")
Call ns.Close()
Dim result
result=Shell("explorer.exe " & path)
End Function
%REM
Description: Append some html snippets to the table.
%END REM
Public Function WriteHtml(html As String)
Call ns.Writetext(html, 3)
End Function
End Class
Notesリッチテキストフィールドのダイナミックテーブル
Notesドキュメントのリッチテキストフィールドにテーブルを作成してレポートを表示するには、NotesRichTextItem、NotesRichTextNavigator、およびNotesRichTextTableのようなクラスを作成する方法を使用します.基本的な手順は、NotesRichTextItem内にNotesRichTextTableを作成し、このNotesRichTextTableを使用して新しい行を動的に追加し、NotesRichTextNavigatorでセルに順次配置し、NotesRichTextItemを呼び出します.AppendText()書き込み値.明らかに、このテーブルAPIは不器用で、実際の実行速度も速くありません.利点はサードパーティのソフトウェアを必要とせず、Lotus Notesプラットフォーム内で完全に完成することである.レポートはドキュメント形式で簡単に保存できます.読者の友人が興味を持っているか、実際に需要がある場合は、この方法を採用することができます.HtmlTableWriterと同様にTableWriterから継承されるため、共通メソッドは同じであり、呼び出し元はTableWriterの変数を宣言し、必要に応じて特定のサブクラスを作成し、その後呼び出しメソッドに違いはありません.