Einfügen von Dokumenten aus der Zwischenablage: mit Bedingung verbieten oder erlauben

von Thomas,
assono GmbH, Standort Kiel,

Für manche Notes-Anwendungen ist es wichtig, dass die Benutzer Dokumente nicht per Copy-and-Paste duplizieren oder aus anderen Datenbanken übernehmen können. Und deswegen haben Ansichten und Ordner ein QueryPaste-Ereignis. Das Ereignis hat einen Parameter Continue (As Boolean) und wenn dieser auf False gesetzt wird, werden die Dokumente nicht eingefügt.

Das ist damit ein großer "Generalschalter", weil er entweder alle Dokumente oder keines erlaubt.

Natürlich kann man auf die Rollen des Benutzers zugreifen, auf Profil-/Konfigurationsdokumente usw., aber nicht auf die Dokumente, die eingefügt werden soll. Zu diesem Zeitpunkt sind sie ja auch noch gar nicht in der Datenbank! Wie sollte das also gehen?

Tja, gewusst wie... ;-)

Wenn man im Notes-Client Dokumente in die Zwischenablage kopiert, landen diese nicht wirklich alle in der Windows-Zwischenablage. Das können ja auch mal ein paar Gigabyte werden. Notes legt die Dokumente in der ~clipbrd.ncf im Datenverzeichnis ab und hat nur ein paar "Zeiger" in der Zwischenablage. Die ~clipbrd.ncf ist eine Notes-Datenbank - ohne Ansichten oder andere Gestaltungselemente, die notwendig wären, diese Datenbank im Notes-Client zu öffnen. Aber per LotusScript kommt man dran.

Da es keine Ansichten gibt, muss man über NotesDatabase.AllDocuments auf die NotesDocumentCollection mit allen Dokumenten zugreifen, danach ist es aber "einfache" LotusScript-Programmierung.

Ich habe da mal etwas vorbereitet:

Sub Querypaste(Source As Notesuiview, Continue As Variant)
	
	Dim clipboardDB As NotesDatabase
	Dim clipboardColl As NotesDocumentCollection
	Dim clipboardDoc As NotesDocument
	Dim i As Integer
	Dim subject As String
	Dim disallowPasting As Boolean
	
	continue = False ' default for errors
	
	Set clipboardDB = New NotesDatabase("", "~clipbrd.ncf")
	
	If clipboardDB Is Nothing Then
		Messagebox "Clipboard database could not be found"
		Exit Sub
	End If
	
	If Not clipboardDB.IsOpen Then
		Messagebox "Clipboard database could not be opened"
		Exit Sub
	End If
	
	i = 0
	disallowPasting = False ' default: allow pasting
	Set clipboardColl = clipboardDB.AllDocuments
	Set clipboardDoc = clipboardColl.GetFirstDocument
	Do Until clipboardDoc Is Nothing
		i = i + 1
		
		If clipboardDoc.HasItem("Subject") Then
			subject = clipboardDoc.GetItemValue("Subject")(0)
		Else
			subject = ""
		End If
		
		Print "Document #" &i & ", UNID: " & clipboardDoc.UniversalID & ", Subject: " & subject
		If Instr(subject, "pasting") > 0 Then ' replace with your condition
			Print "Pasting will be disallowed"
			disallowPasting = True ' at least for one document, condition is trua and pasting is forbidden: disallow pasting for all
		End If
		
		Set clipboardDoc = clipboardColl.GetNextDocument(clipboardDoc)
	Loop
	
	continue = Not disallowPasting
End Sub

Der Code, der in Ansichten und Ordnern eingebaut werden muss (aber am besten, indem man ihn in eine Script-Bibliothek legt und aus den Ansichten/Ordnern nur aufruft), durchläuft alle Dokumente in der Clipboard-Datenbank und wenn mindestens eines ein Subject-Item hat, das "pasting" enthält, wird der gesamte Einfügevorgang verhindert.

Bei einem Echteinsatz sollten die Benutzer natürlich informiert werden, was da passiert, da es ja von ihren Erwartungen abweisen dürfte. Stichwort: positive, intuitive Benutzererfahrung.

Was ich so nicht geschafft habe, ist das Einfügen einzelner Dokumente zu erlauben bzw. zu verbieten. Wenn ich die Dokumente aus der Clipboard-Datenbank lösche, kommt leider später eine Fehlermeldung.

Man könnte aber sicher ein Item hinzufügen und die Dokumente im PostPaste dann löschen (wenn der aktuelle Benutzer Löschrechte hat) oder verstecken.

Quelle: How to disable pasting in a embedded view

Fachbeitrag HCL Notes Entwicklung Für Entwickler

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie haben Interesse an diesem Thema?

Gerne bieten wir Ihnen eine individuelle Beratung oder einen Workshop an.

Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen?

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Gerne erstellen wir eine individuelle Demo für Sie.

Wir verwenden Ihre Daten, um Sie einmalig per E-Mail zu kontaktieren. Wir geben Ihre Daten nicht an Dritte weiter. Siehe: Datenschutzhinweise
assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 407
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de