Um so etwas möglichst zu vermeiden, arbeite ich wie folgt:
In jeder Ansicht einer Applikation füge ich in den Options der Globals der Ansicht ein
Use "LibViews" sowie im QUERYOPEN ein
Sub Queryopen(Source As Notesuiview, Continue As Variant)
Call vQO(Source, Continue)
End Sub
In dieser Lib gibt es die QUERYOPEN-Section, die alle weiteren Events mit einem EventHandler abfängt. Dort braucht man dann nix mehr nachzupflegen
Sub vQO(Source_uiview,Continue)
Set DH_uiview=Source_uiview
'// uiview Events
On Event Postopen From Source_uiview Call vPO
On Event Queryopendocument From Source_uiview Call vQOD
On Event QueryPaste From Source_uiview Call vQueryPaste
On Event PostPaste From Source_uiview Call vPostPaste
End Sub
Die einzelnen Subroutinen müssen exakt mit den übergebenen Parametern jedes Einzelevents aufgebaut werden, also z.B. (als Beispiel sei hier ein QUERYPASTE genommen, bei dem es darum geht, ob man Dokumente aus der Zwischenablage absetzen darf oder nicht)
Sub vQueryPaste(Source As NotesUIView,Continue As Variant)
On Error Goto Fehlerteil
If DH_uiviewunid="" Then
NVersion=Evaluate("@Version" )
If Cint(NVersion(0)) < 190 Then
MeldungD="Bitte verwenden Sie die Aktion ""Paste"", um Dokumente einzufügen - Aktion abgebrochen"
MeldungE="Please use the Action PASTE to paste documents from the clipboard - action canceled"
Call Message
Continue=False
Exit Sub
Else
xaktdokid=DH_uiview.CaretNoteID
If xaktdokid="" Then
MeldungD="Sie müssen auf einem Dokument (nicht auf einer Kategorie) stehen, um Dokumente deer Zwischanablage pasten zu können - Aktion abgebrochen"
MeldungE="You must highlight a document (not a category) to paste docs from the clipboard - action cancelled"
Call Message
Continue=False
Exit Sub
End If
Set DH_Pastedoc = db.GetDocumentByID(DH_uiview.CaretNoteID)
End If
Else
Set DH_doc=db.GetdocumentbyUNID(DH_uiviewunid)
Set DH_Pastedoc=db.GetdocumentbyUNID(DH_uiviewunid)
End If
If DH_Pastedoc Is Nothing Then
Continue=False
Exit Sub
End If
' Pasten im Archiv ist verboten
If DH_DBIstArchiv Then
MeldungD="Sie können im Archiv keine Dokumente aus der Zwischanablage pasten - Aktion abgebrochen"
MeldungE="You cannot paste docs from the clipboard to aa archive - action cancelled"
Call Message
Continue=False
Exit Sub
End If
' Pasten auf gelöschten und gesperrten Dokumenten ist verboten
If DH_Pastedoc.HasItem("Loeschkenn") Then
If DH_Pastedoc.Loeschkenn(0)="1" Then
MeldungD="Sie können auf einem zur Löschung markierten Dokument keine Dokumente aus der Zwischanablage pasten - Aktion abgebrochen"
MeldungE="You cannot paste docs from the clipboard to a document which is marked for deletion - action cancelled"
Call Message
Continue=False
Exit Sub
End If
End If
If DH_Pastedoc.HasItem("Sperrung") Then
If DH_Pastedoc.Sperrung(0)="1" Then
MeldungD="Sie können auf einem geperrten Dokument keine Dokumente aus der Zwischanablage pasten - Aktion abgebrochen"
MeldungE="You cannot paste docs from the clipboard to a locked document - action cancelled"
Call Message
Continue=False
Exit Sub
End If
End If
If Continue Then
DH_uiviewunid=DH_Pastedoc.UniversalID
Else
DH_uiviewunid=""
Set DH_Pastdoc=Nothing
End If
Ausstieg:
Exit Sub
Fehlerteil:
MeldungD="Fehler bei DH_QueryPaste " & Cstr(Err) & " Aktion abgebrochen"
MeldungE="Error at DH_QueryPaste " & Cstr(Err) & " - Action canceled"
Call Message
Continue=False
Resume Ausstieg
End Sub
Damit kann ich alle View-bezogenen Aktionen in eine Library auslagern und pflege den Code nur an einer Stelle. Seitdem funktionieren die Aktionen in allen Ansichten mit den gleichen Fehlern - und wenn man diese Fehler behoben hat, dann sind sie mit einem Schlag in allen Ansichten behoben.
Man erkauft sich diesen Vorteil damit, daß man etwas häufiger den NSD bei Fehlern im Code zu Gesicht bekommt (ich habe zumindest den Eindruck, daß das so ist).
Vielleicht kann ich mit diesem Tipp den Hilferuf bei einigen Programmierern etwas lindern, denn es ist eklig, in allen Ansichten etwas ändern zu müssen.
Gruß
Norbert