Domino 9 und frühere Versionen > Entwicklung
Bookmarks anlegen
chock:
Wenn ich jetzt das Script mit dem Debugger kontrolliere wird das richtige Bild aus der DB geholt und auch in die bookmark.nsf kopiert.
Starte ich nun Notes neu erscheint ein ganz anderes Bild in der Lesezeichenleiste. Vielleicht hat noch jemand eine Idee.
Dim outline As NotesOutline
Dim oeNew As NotesOutlineEntry
Dim oeRef As NotesOutlineEntry
Dim oeTmp As NotesOutlineEntry
Dim NoMore As Variant
Dim db As NotesDatabase
Dim imageDocument As NotesDocument
Dim MDB As NotesDatabase
Dim s As New NotesSession
Dim Done, Found As Variant
Dim ws As New NotesUIWorkspace
Dim unid$
unid$ = "8F7D685C19ACBE55C1256E530037312A"
server$ = "kh_dom01"
filename$ = "db/protoeg.NSF"
labeltext$ = "Protokolle EG-Sitzungen"
Call ws.AddDatabase(server$ , filename$ )
Set MDB = s.GetDatabase(server$,filename$)
Set db = New NotesDatabase( "", "bookmark.nsf" )
Set outline = db.GetOutline("UserBookmarkOrder")
Set oeTmp = outline.GetFirst()
label$ = ""
Done = False
referenceFound = False
nacEntryFound = False
Do While Done = False
If oeTmp Is Nothing Then
Done = True
Else
label$ = oeTmp.Label
If label$ = labeltext$ And oeTmp.Level = 0 Then '..entry already exists
nacEntryFound = True
Done = True
Else
If label$ = "More Bookmarks" Then
referenceFound = True '..found where we normally put the bookmark, but let's keep looking incase the user has placed the bookmark somewhere else
Set oeRef = oeTmp
End If
Set oeTmp = outline.GetNextSibling(oeTmp)
End If
End If
Loop
Set oeNew = outline.CreateEntry(labeltext$)
Call oeNew.SetNoteLink(MDB)
If nacEntryFound Then
Dim vorhanden As String
vorhanden = |Das Lesezeichen '| & labeltext$ & |' existiert bereits!
Wenn Sie es an der linken Seite noch nicht sehen, schließen
und starten Sie ihr Lotus Notes bitte erneut!|
Messagebox vorhanden, 0+48, "Lesezeichen vorhanden"
Exit Sub
Else
If referenceFound Then
Call outline.AddEntry(oeNew, oeRef,True,False)
Else
Call outline.AddEntry(oeNew, ,True,False)
End If
Set imageDocument = MDB.GetDocumentByUNID (unid$)
Call imageDocument.CopyToDatabase(db)
oeNew.ImagesText = labeltext$
Call outline.save()
End If
Dim Zeilen As String
Zeilen = |Das Lesezeichen '| & labeltext$ &|' wurde angelegt.
Sie können es erst nach einem Neustart von Lotus Notes
an der linklen Seite sehen!|
Messagebox Zeilen, 0+64, "Lesezeichen erstellen"
TMC:
Ich werde mir das mal gelegentlich ansehen. Lösungen für Part 2 (also Bookmark-Icon setzen) gab es ja schon öfter mal im www.
Aber vielleicht kann man da mal eine Copy&Paste - fähige Lösung machen.
Der Ersteller des Scripts hat leider "Option Declare" nicht eingeschaltet und Variablennamen nicht sauber definiert, daher liest sich der Code nicht schön. Ich werde also erstmal den Code bereinigen und mir das dann mal die nächsten Tage anschauen, weil ich mittelfristig auch mal so eine Lösung brauche.
Was beim 1. Blick auffällt: Da steht hardcodiert "To Do" drin, was passiert wenn der Client deutschsprachig ist?
TMC:
Hab mich jetzt mal etwas damit beschäftigt. Dazu hab ich das Script auf's wesentliche gekürzt:
--- Code: ---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
--- Ende Code ---
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.
Glombi:
Hier ein vielversprechendes Tool:
http://www.icodex.com/corpdesk/sitemanager/sitestore.nsf/pages/index.html
Andreas
TMC:
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:
--- Code: ---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
--- Ende Code ---
Dann wieder Client-Neustart, und siehe da, das Bookmark steht dort wo man es braucht.
Praktikabel ist das natürlich überhaupt nicht >:(
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln