ノーツはクリップボードを使用して文書(データ)を簡単に複製(レプリカではない)できます。これはこれで便利なのですが、アプリの仕様によっては制限したい場合があります。
そこで今回は、文書の貼り付けを禁止する方法についてまとめます。
実現方法
文書の貼り付け操作を行うとビューで 2 つのイベントが発生します。QueryPaste は貼り付ける前、PostPaste は貼り付けた後に発生します。今回は貼り付け操作を制御するので QueryPaste イベントを利用することになります。
他の Query??? イベントと同じく引数に Continue が存在します。この変数に False を設定すると貼り付けがキャンセルできるということですね。
Sub QueryPaste(Source As NotesUIView, Continue As Variant) Continue = False End Sub |
実用的なサンプル
上記のように、なんのメッセージもなしにキャンセルするとユーザは何が起こったのかわかりません。このアプリでは、文書の貼り付けを制限していると伝えてあげるべきです。
また、アプリの運用担当者など特権ユーザだけは、貼り付けを許可したい場合もあるかと思います。このような機能を実現するサンプルコードを紹介します。
Sub Querypaste(Source As Notesuiview, Continue As Variant) Dim v As Variant Dim i As Integer Dim sRole As String Dim sMsg As String ' 初期化 Continue = False ' いったん貼り付け禁止 sRole = "[Admin]" ' 貼り付け OK のロール sMsg = "アプリの仕様上、文書の貼り付けは制限されています。" ' OK のロールを持っているなら "OK" を返す v = Evaluate(|@If(@IsMember("| & sRole & |"; @UserRoles); "OK"; "NG")|) If v(0) = "OK" Then ' OK なので実行を確認 i = Msgbox(sMsg & Chr(10) & "それでも貼り付けますか?", 36+256, sRole & " 保持者") If i = 6 Then ' [はい] をクリック = 貼り付け OK Continue = True End If Else ' 一般の利用者 Msgbox sMsg, 16, "文書貼り付け" End If End Sub |
特権ユーザはロールを保持しているかで判定しています。初期化で sRole にそのロール名をセットしていますので、違う名称で判定したい場合にはこの値を調整してください。
実行すると保持しているロールに応じてメッセージが変わります。
まとめ
今回は文書の貼り付けの制御についてまとめました。
この機能はビューのイベントに設定します。ビューのイベントはビューごとに存在しますので、ユーザが表示できるすべてのビューに同じようにセットしないと抜け道ができてしまいます。特に後からビューを追加する場合に忘れがちなので、注意してください。
0 件のコメント:
コメントを投稿