今回は LotusScript を実行しているユーザの ACL 情報を取得します。想定外のエラーの場合、権限に起因する場合もあります。この情報があればトラブル対応の時間短縮になるかもしれませんね。
フォームの修正
ログに ACL 情報を表示するためのフィールドを作成します。
新しいタブを追加(タブ表に 1 行追加)してタイトルに ”ACL” を指定します。そのタブ内にカスケード表を作成して、フィールドを配置します。
作成するフィールドは次の通りです。
項目 | フィールド名 | 種類 | 補足 | |
アクセスレベル | AccessLevel | ダイアログリスト | 編集可能 | キーワードは後述 |
ロール | UserRole | テキスト | 複数値も可、改行区切り | |
オプション | AccessOption | チェックボックス | キーワードは後述 |
項目 | 種類 | 補足 |
アクセスレベル | 選択肢を入力 |
なし|0 投稿者|1 読者|2 作成者|3 編集者|4 設計者|5 管理者|6 |
オプション |
文書の作成|CreateDocuments 文書の削除|DeleteDocuments 個人エージェントの作成|CreatePersonalAgents 個人フォルダ/ビューの作成|CreatePersonalFoldersAndViews 共有フォルダ/ビューの作成|CreateSharedFoldersAndViews LotusScript/Javaエージェントの作成|CreateLotusScriptJavaAgents パブリック文書[読者]|ReadPublicDocuments パブリック文書[作成者]|WritePublicDocuments 文書を複製またはコピー|ReplicateOrCopyDocuments |
アクセスレベルとロールは重要な情報なので、基本情報のタブにも表示します。
項目 | フィールド名 | 種類 | 式 / 補足 | |
アクセスレベル | AccessLevel_D | ダイアログリスト | 表示用の計算結果 | AccessLevel キーワードは AccessLevel と同じ |
ロール | UserRole_D | テキスト | UserRole 複数値も可、カンマ区切り |
ライブラリの修正
続いて、追加したフィールドに値をセットするプログラムの作成です。ACL 情報は実行につき一度だけの取得でいいので、初期化処理に追加します。
Private Function xInitLog(ByVal vsLogTitle As String) ・・・ 'DB情報 xndLog.DBTitle = xndbCur.Title xndLog.Server = xndbCur.Server xndLog.FilePath = xndbCur.FilePath 'ACL 情報 Dim lOpt As Long xndLog.AccessLevel = CStr(xndbCur.QueryAccess(sName)) 'アクセスレベル lOpt = xndbCur.QueryAccessPrivileges(sName) xndLog.AccessOption = xGetACLOptionName(lOpt) 'ACL オプション xndLog.UserRole = xndbCur.QueryAccessRoles(sName) 'ロール 'リッチテキスト準備 Set xnrti = xndLog.CreateRichTextItem("Body") ・・・ End Function |
QueryAccessPrivileges メソッドで取得した値は、フォームで利用するのは少し複雑です。そこで新しい関数 xGetACLOptionName で値を選択肢の文字列に変換しています。
End Function
Private Function xGetACLOptionName(ByVal vlOpt As Long) As Variant Dim asOpt() As String Dim asReturn() As String Dim i As Integer Dim j As Integer '一度だけ実行なので定数化しない ReDim asOpt(8) asOpt(0) = |CreateDocuments| asOpt(1) = |DeleteDocuments| asOpt(2) = |CreatePersonalAgents| asOpt(3) = |CreatePersonalFoldersAndViews| asOpt(4) = |CreateSharedFoldersAndViews| asOpt(5) = |CreateLotusScriptJavaAgents| asOpt(6) = |ReadPublicDocuments| asOpt(7) = |WritePublicDocuments| asOpt(8) = |ReplicateOrCopyDocuments| 'ビットごとに確認 j = 0 ReDim asReturn(j) For i = 0 To UBound(asOpt) If vlOpt And (2 ^ i) Then 'ビットが立っているので戻り値の配列に追加 ReDim Preserve asReturn(j) asReturn(j) = asOpt(i) j = j + 1 End If Next xGetACLOptionName = asReturn End Function |
なお、ACL 情報の取得については、『アクセス権限とロールの取得 - LotusScript』と『QueryAccessPrivileges の判定と演算子の活用』で紹介しているので参照ください。
前回 | 共通部品にチャレンジ |