2025/10/16

文書の貼り付け禁止

ノーツはクリップボードを使用して文書(データ)を簡単に複製(レプリカではない)できます。これはこれで便利なのですが、アプリの仕様によっては制限したい場合があります。

そこで今回は、文書の貼り付けを禁止する方法についてまとめます。


実現方法

文書の貼り付け操作を行うとビューで 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 件のコメント:

コメントを投稿