Autor Thema: Bookmarks anlegen  (Gelesen 6316 mal)

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Bookmarks anlegen
« am: 26.07.04 - 07:53:37 »
Hallo,

ich möchte über einen Button Bookmarks direkt als Symbol in die Lesezeichenleiste legen.
Wenn ich es mit dieser Formal versuche funktioniert es zwar aber man muss noch einen Ordner auswählen, wo es hin soll.

@Command([FileOpenDatabase];"Server":"xy.NSF");
@Command( [AddBookmark] ; Name Bookmark ; Ordner )

Wie könnte ich dies automatisieren d.h. Button drücken -> Symbol in der Lesezeichenleiste?

Danke

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:Bookmarks anlegen
« Antwort #1 am: 27.07.04 - 09:40:33 »
Habe jetzt was gefunden wie es funktioniert.
Nur weiß ich jetzt noch nicht wo ich die UNID$ meiner Bildresource finde.

I needed to do the same thing for a "Corporate Portal" database. We wanted all Notes users to have an icon on the bookmark bar to open the "Corporate Portal". The below code is what we used to achieve this. Basically the "Create_NACHOME_Bookmark" sub is called from the PostOpen event of the Database Script of the Corporate Portal database. (we sent a db link to users and when they clicked on the link this code was executed). You'll notice I have a variable called "unid$". This is the unid of a custom icon image that is in the Image Resource area of the corporate portal database. This unid$ is used to find the image resource in the Corporate Portal db and copy it to the users bookmark.nsf database. Good Luck

/Jack


Sub Create_NACHOME_Bookmark
Dim outline As NotesOutline
Dim oeNew As NotesOutlineEntry
Dim oeRef As NotesOutlineEntry
Dim oeTmp As NotesOutlineEntry
Dim NoMore As Variant
Dim session As New NotesSession
Dim db As NotesDatabase
Dim imageDocument As NotesDocument
Dim currentDB As NotesDatabase
Dim s As New NotesSession
Dim Done, Found As Variant
Dim unid$

unid$ = "FB43BB676B7A3DF8852568200071AC2C"
Set currentDB = s.CurrentDatabase
Set db = New NotesDatabase( "", "bookmark.nsf" )

'Set doc = db.getdocumentbyUNID(unid$)
'If doc Is Nothing Then
Set imageDocument = currentDB.GetDocumentByUNID( unid$ )
Call imageDocument.CopyToDatabase( db )
'End If

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$ = "NACHOME" And oeTmp.Level = 0 Then '..entry already exists
nacEntryFound = True
Done = True
Else
If label$ = "To Do" 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("NACHOME")
Call oeNew.SetNoteLink(currentDB)

If nacEntryFound Then
Exit Sub
Else
If referenceFound Then
Call outline.AddEntry(oeNew, oeRef,True,False)
Else
Call outline.AddEntry(oeNew, ,True,False)
End If

oeNew.ImagesText = "NACHOME"
Call outline.save()
End If


End Sub


Driri

  • Gast
Re:Bookmarks anlegen
« Antwort #2 am: 27.07.04 - 10:14:46 »
Die UNID solltest Du über die Eigenschaften der Bildressource auslesen können (der Tab mit "Karlsson auf dem Dach"). Sonderzeichen mußt Du aus dem String entfernen.

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:Bookmarks anlegen
« Antwort #3 am: 27.07.04 - 11:15:43 »
Habe jetzt diese ID komplett eingetragen ohne Sonderzeichen. Fehlermeldung "Invalid ID".
Habe diese ID genommen siehe Anhang

Driri

  • Gast
Re:Bookmarks anlegen
« Antwort #4 am: 27.07.04 - 11:19:17 »
Oopsa, da hab ich mich etwas mißverständlich ausgedrückt  ;)

Du brauchst nur die ID in der zweitletzten Zeile (DB...)

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:Bookmarks anlegen
« Antwort #5 am: 27.07.04 - 11:34:25 »
irgendwie klappt das nicht, so sieht jetzt der Eintrag aus:

unid$ = "DBC1256E9B002CDB22"

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Bookmarks anlegen
« Antwort #6 am: 27.07.04 - 11:36:25 »
Dass führende "DB" ist noch zuviel.

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:Bookmarks anlegen
« Antwort #7 am: 27.07.04 - 11:43:19 »
funktioniert auch nicht, ich glaube es muss eine 32 stellige ID rein.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Bookmarks anlegen
« Antwort #8 am: 27.07.04 - 11:49:20 »
Ich hätte mal alles lesen sollen ;-(
Die DocumentUNID sind die ersten Werte, die in den Properties angezeigt werden, also hinter "OF" und "ON" und dann LS-mässig ohne Doppelpunkte.

HTH,
Bernhard

Driri

  • Gast
Re:Bookmarks anlegen
« Antwort #9 am: 27.07.04 - 11:58:11 »
Sorry für die Verwirrung, was ich gepostet hatte war die ReplikID. Mea Culpa  :-[

Offline chock

  • Senior Mitglied
  • ****
  • Beiträge: 337
  • Geschlecht: Männlich
Re:Bookmarks anlegen
« Antwort #10 am: 27.07.04 - 14:49:25 »
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"

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Bookmarks anlegen
« Antwort #11 am: 28.07.04 - 00:03:23 »
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?

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Bookmarks anlegen
« Antwort #12 am: 28.07.04 - 22:45:01 »
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 

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.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re:Bookmarks anlegen
« Antwort #13 am: 28.07.04 - 23:31:56 »
« Letzte Änderung: 28.07.04 - 23:33:23 von Glombi »

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Bookmarks anlegen
« Antwort #14 am: 29.07.04 - 00:16:09 »
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

Dann wieder Client-Neustart, und siehe da, das Bookmark steht dort wo man es braucht.
Praktikabel ist das natürlich überhaupt nicht  >:(
« Letzte Änderung: 29.07.04 - 00:18:45 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz