2011/04/22

access2010 Webデータベース その30 リボンを制御

** Office365beta(プランP1) 環境 **  
Webデータベースとして運用はaccdbの形式だから、リボンのコントロールをしておきたい。ユーザは原則的にSharePointユーザで限定や特定できるから、きっちりかっちり固める必要がないのかもしれないが、不用意なことが起きないようにということぐらいの意味合いで用意しておこうと思う。
基本的には通常のリボン制御と何ら変わりはない。USysRibbonsテーブルもしくはRibbonXMLが格納されているテーブルがWebテーブルになるということだけ。
強いて言えば、SharePointグループ/ユーザ情報を参照してグループもしくはユーザごとに使用するリボンを切り替えることができるから、この特徴的な機能は使用していくことを検討しておく。

【サンプル】
アクセス許可レベルがデザインのグループとそれ以外のグループでリボンを制御する。
単純な制御として、前者は既定のリボンを表示し使用できるようにする。後者はリボンを非表示にする。
RibbonXML
RibbonXMLを格納しているテーブル。起動時のリボンを制御したいのでUSysRibbonsを使用していない。
オプションでリボン名を指定しておく。指定したリボンのXMLを起動時に切り替える。
クライアントマクロAutoExecでプロシージャを実行
Option Compare Database
Option Explicit

Function SetRibbons()
    Dim rbnName As String
'XX:SharePointGroupIDもしくはGroupName
    If Application.IsCurrentWebUserInGroup(XX) Then 
        rbnName = "forDesigner"
    Else
        rbnName = "forUser"
    End If
    Application.LoadCustomUI "DefaultRbns", _
                              DLookup("RibbonXML", _
                                      "CustomRibbons", _
                                      "RibbonName='" & rbnName & "'")
End Function

この場合、特定のグループに属するユーザであった場合、既定のリボンはすべて表示され、そうでなければ非表示になる。AutoExecで起動時のリボン情報を設定できるのは、クライアントデータベース同様。

フォームやレポートで指定するリボンをグループごと切り替えることも可能。グループごとに切り替えるのが実用的だと思うけど ユーザごとでも可能だろう。この場合、RibbonXMLを格納しているテーブルにグループを特定できるフィールドを追加してフィルタを適用すればいい。該当するリボンを実際に使用するまでにLoadCustomUIメソッドを実行という感じで。

0 件のコメント: