Hab mich jetzt mal etwas damit beschäftigt. Dazu hab ich das Script auf's wesentliche gekürzt:
Public Sub CreateBookmark(strUNID As String, strImageResourceName As String)
Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim dbBookmark As NotesDatabase
Dim docImage As NotesDocument
Dim outlineBookmark As NotesOutline
Dim oeNew As NotesOutlineEntry
Set dbThis = session.CurrentDatabase
Set dbBookmark = New NotesDatabase( "", "bookmark.nsf" ) 'the user's bookmark.nsf
'Copy image to bookmark.nsf
Set docImage = dbThis.GetDocumentByUNID(strUNID)
Call docImage.CopyToDatabase( dbBookmark )
Set outlineBookmark = dbBookmark.GetOutline("UserBookmarkOrder")
'We create the new Outline Entry
Set oeNew = outlineBookmark.CreateEntry(dbThis.title)
Call oeNew.SetNoteLink(dbThis)
oeNew.ImagesText = strImageResourceName 'Name of the image resource
Call outlineBookmark.save()
Msgbox "New entry created. Please restart the client.....", 64, dbThis.title
End Sub
Funktioniert so auch.
strUNID = UNID der Bildressource der QuellDB (aus der dieser Code ausgeführt wird)
strImageResourceName = Name der Bildressource
Was mich viel mehr interessierte.
a) Wie kann ich die Bookmark-Bar refreshen ohne Client-Neustart?
Habe keinen Weg gefunden :P Beispielsweise ein view.refresh der bookmark.nsf-View "(All Bookmarks)" bringt überhaupt nichts. Habe auch sonst keinen Weg gefunden.... Ist wohl sehr stark mit dem Client verdrahtet und ein Refresh wohl einfach nicht vorgesehen....
b) Wie vermeide ich das Kopieren der Bildressource?
Habe auch hier keinen Weg gefunden (nochmal :P). Wenn man manuell ein Bookmark auf die Leiste zieht, steht als Bild-Name "$Image" drin. Setzt man das programmatisch, dann erscheint das Icon der bookmark.nsf.
Unterschiede zwischen programmatisch und per Hand erzeugte Einträge konnte ich mit bloßem Auge keine sehen. Und Notes läst keine weiteren Einblicke zu.
Nett zu wissen wäre, in wie weit man hier mit API arbeiten könnte.
Hat mir jetzt doch keine Ruhe gelassen. Halblösung zu (b) (wie vermeide ich die Kopie eines Bildes in die bookmark.nsf) habe ich gefunden:
1.) Code ausführen:
@Command( [AddBookmark]; ""; "IchBinDieNeueDB"; "Databases")
2.) User muss Client neu starten
3.) Agent ausführen:
Sub Initialize
Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim dbBookmark As NotesDatabase
Dim outlineBookmark As NotesOutline
Dim oeNew As NotesOutlineEntry
Set dbThis = session.CurrentDatabase
Set dbBookmark = New NotesDatabase( "", "bookmark.nsf" ) 'the user's bookmark.nsf
Set outlineBookmark = dbBookmark.getOutline("UserBookmarkOrder")
Dim oeFirst As NotesOutlineEntry
Dim oeTarget As NotesOutlineEntry
Set oeFirst = outlineBookmark.GetFirst()
Set oeTarget = outlineBookmark.GetFirst()
Dim bFinished As Integer
bFinished = False
Do While bFinished = False
If oeTarget Is Nothing Then
Msgbox "Kein Eintrag gefunden"
Exit Sub
End If
If (oeTarget.Label = "IchBinDieNeueDB") Then
Msgbox "Wir haben was gefunden"
Call outlineBookmark.MoveEntry(oeTarget, oeFirst, 1)
Msgbox "Und jetzt den Eintrag verschoben"
Call outlineBookmark.save()
bFinished = True
End If
Set oeTarget = outlineBookmark.GetNext(oeTarget)
Loop
End Sub
Dann wieder Client-Neustart, und siehe da, das Bookmark steht dort wo man es braucht.
Praktikabel ist das natürlich überhaupt nicht >:(