2025/10/02

共通部品にチャレンジ:#10)LotusScript 実行ログ - ACL の取得

今回は 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 の判定と演算子の活用』で紹介しているので参照ください。


前回 共通部品にチャレンジ 次回


0 件のコメント:

コメントを投稿