Domino 9 und frühere Versionen > Entwicklung

Bookmarks anlegen

<< < (3/3)

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