前回から開始したスクリプトライブラリ作成作業の続きです。今回はログ出力を開始する処理に関して記載します。
◇ ログの開始(LogOpen 関数)
まず、ライブラリ利用者とのインターフェースとなる LogOpen 関数です。初期化できていない場合とすでに Open 済みの場合はキャンセルするエラーチェックをしてから、処理を行います。
ログ DB に新規文書を作成し、ログ文書の初期化(後述)を行い、フラグや戻り値を整えています。
Public Function LogOpen(ByVal vsLogTitle As String) As Boolean Dim s As String On Error GoTo Err_General If xbIsInit = False Then Exit Function If xbIsOpen = True Then Exit Function 'ログ文書の作成 Set xndLog = xndbLog.CreateDocument() xndLog.Form = "fStdLog" 'ログ文書の初期化 Call xInitLog(vsLogTitle) '終了処理 xbIsOpen = True LogOpen = True '処理開始メッセージの出力 Call PrintLog(xcsLibName & |: ログ出力の開始 (| & xcsLibName & | | & xcsLibVersion & |)|) Exit Function Err_General: s = "LogOpen でエラーが発生しました。" & Chr(10) s = "問題を解決するまでログ出力はできません。" & Chr(10) s = s & Error$ & " (Err = " & CStr(Err) & ", Erl = " & CStr(Erl) & ")" MsgBox s, 16, xcsLibName Exit Function End Function |
最後に PrintLog をコールして、ログの開始とライブラリのバージョンを記録します。この関数はログを出力する関数なのですが、これについては次回紹介します。
◇ ログ文書の初期化
xInitLog はログの基本情報を文書にセットする関数です。ログの開始時刻、エージェントの情報、ユーザ名や DB の情報を記録しています。
Function xInitLog(ByVal vsLogTitle As String) Dim na As NotesAgent Dim sTitle As String Dim v As Variant Dim sName As String '初期化 sTitle = vsLogTitle sName = xns.UserName '開始日時 xndLog.LogStartTime = Now 'エージェント情報 Set na = xns.CurrentAgent If Not(na Is Nothing) Then 'エージェントと別名を分離 v = Split(na.Name, "|") xndLog.AgentName = xRemoveFirst(v) 'エージェント名 xndLog.AgentAlias = v 'エイリアス名 'タイトルの指定がない場合、エージェント名をセット If sTitle = "" Then sTitle = xndLog.AgentName(0) End If End If 'ログタイトル xndLog.Title = sTitle 'ユーザ名 xndLog.UserName = sName 'サーバエージェント If xns.IsOnServer Then xndLog.IsOnServer = "1" End If 'DB情報 xndLog.DBTitle = xndbCur.Title xndLog.Server = xndbCur.Server xndLog.FilePath = xndbCur.FilePath 'リッチテキスト準備 Set xnrti = xndLog.CreateRichTextItem("Body") 'フォントの準備 Call xInitFont(xnrti) End Function |
また、リッチテキストフィールドを作成して、ライブラリ内の Private 変数に格納しています。このフィールドは、さまざまなシーンで利用するのでライブラリ全体からアクセスできるようにしています。
◇ エージェント名と別名を分離
NotesAgent クラスの Name プロパティは別名を含めて "|" 区切りで返します。そこで Split 関数で配列化した後、xRemoveFirst 関数でエージェント名と別名を分離しています(前述の xInitLog 関数の下記部分)。
Private Function xInitLog(ByVal vsLogTitle As String) Dim na As NotesAgent ・・・ 'エージェント情報 Set na = xns.CurrentAgent If Not(na Is Nothing) Then 'エージェントと別名を分離 v = Split(na.Name, "|") xndLog.AgentName = xRemoveFirst(v) 'エージェント名 xndLog.AgentAlias = v 'エイリアス名 ・・・ End Function |
xRemoveFirst 関数は、引数の配列から最初の要素を削除(引数の配列を更新)し、削除した要素を戻り値として返します。
Private Function xRemoveFirst(rvArray As Variant) As Variant Dim i As Integer '最初の要素を戻り値にセット i = LBound(rvArray) xRemoveFirst = rvArray(i) '各要素を1つ前に詰める For i = LBound(rvArray)+1 To UBound(rvArray) rvArray(i-1) = rvArray(i) Next '最大要素番号を1つ減らす If LBound(rvArray) = UBound(rvArray) Then '要素が一つなので初期化 ReDim rvArray(UBound(rvArray)) Else ReDim Preserve rvArray(UBound(rvArray)-1) End If End Function |
◇ フォントの準備
ログ文書の初期化の最後でコールしている xInitFont 関数はログ出力で利用するフォント情報を初期化する関数です。今回のログ出力では、項目ごとにフォントを切り替える仕様としています。頻繁にアクセスするので、フォント情報もライブラリ内の Private 変数に格納します。
Private Function xInitFont(vnrti As NotesRichTextItem) Dim sFont As String sFont = "メイリオ" '通常のメッセージ Set xnrtsMsg = xns.CreateRichTextStyle() xnrtsMsg.NotesColor = 0 '黒 xnrtsMsg.FontSize = 10 xnrtsMsg.NotesFont = vnrti.GetNotesFont(sFont, True) xnrtsMsg.Bold = False 'ログ時刻 Set xnrtsDT = xns.CreateRichTextStyle() xnrtsDT.NotesColor = 15 '薄いグレー xnrtsDT.FontSize = 10 xnrtsDT.NotesFont = vnrti.GetNotesFont(sFont, True) xnrtsDT.Bold = False 'エラーメッセージ Set xnrtsErr = xns.CreateRichTextStyle() xnrtsErr.NotesColor = 2 '赤 xnrtsErr.FontSize = 10 xnrtsErr.NotesFont = vnrti.GetNotesFont(sFont, True) xnrtsErr.Bold = True ’太字 End Function |
通常のメッセージは黒、エラーは太字の赤字として目立たせています。また、ログの出力時刻はさほど重要ではないのでグレーとしています。
なお、フォントをセットする(NotesFont プロパティ)ためにリッチテキストフィールド(NotesRichTextItem オブジェクト)が必要です。文書を作成してからでないと利用できないため LogOpen 関数コール時に初期化しています。
前回 | 共通部品にチャレンジ |
0 件のコメント:
コメントを投稿