Autor Thema: db.Search & Shared, Private on 1st use  (Gelesen 2362 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
db.Search & Shared, Private on 1st use
« am: 26.08.04 - 00:00:26 »
Ich habe schon öfter mal am Rande gehört/gelesen, dass es Probleme gibt, wenn man "Shared, Private on 1st use" - Ordner aktualisieren will als Developer.

Aktuell muss ich eine db.Search - Suchfunktion in eine DB einbauen. Die Ergebnisse zeige ich in solch einem Ordner an (ich glaube das macht Sinn).

Jetzt habe ich mir folgendes "Konstrukt" überlegt in dem Search-Code-Buhtong:
Code
   Set view = db.GetView(FOLDERNAME)   
   If Not (view Is Nothing) Then Call view.Remove
   Call uiws.SetTargetFrame("viewframe")
   Call uiws.CurrentDatabase.OpenView(FOLDERNAME)   
   Set view = db.GetView(FOLDERNAME)

Ich lösche also erstmal den Ordner, wenn der vorhanden ist.

Dann kommt das übliche (Suchmaske, Ergebnisse wandern in die db.search - Formel).

Danach soll die (via db.search) gefüllte DocCollection in den Folder:
Code
Call coll.PutAllInfolder(FOLDERNAME)

Und da kommt dann jetzt beim Testen meistens folgende Fehlermeldung:
Zitat
Can't move document to shared Private On First Use folder (TestSearch01)
(in der Zeile: Call coll.PutAllInFolder...)

Ich gehe mal davon aus, weil ich '"ihm" den Folder wegziehe, irgendwas ist wohl nicht initialisiert (wobei dann die Fehlermeldung nicht ganz richtig wäre). **EDIT ** Lt. Debugger ist die "view"-Variable leer.

Ohne den o.g. Stunt (view.remove) funktioniert das ganze.

Mich würde interessieren: Wie realisiert Ihr das?
« Letzte Änderung: 26.08.04 - 00:06:32 von TMC »
Matthias

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


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:db.Search & Shared, Private on 1st use
« Antwort #1 am: 26.08.04 - 00:46:12 »
Den Folder würde ich dem User nun gerade nicht unter'm Hintern wegziehen, wenn die DB schon offen ist - diese Folder oder auch Views werden nur beim Öffnen der DB bzw. beim ersten (FrontEnd !)-Öffnen des Folders / der View neu erstellt.

HTH,
Bernhard

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:db.Search & Shared, Private on 1st use
« Antwort #2 am: 26.08.04 - 09:45:22 »
Na ja, darüber hinaus gibt es in verschiedenen Versionen - vor allem in R5 - verschiedene Bugs, die zum Bleistift das Anlegen von SPOFU - Foldern/Views per Script oder auch das Löschen derselben verhindern (Stichwort: Fehlermeldung Index cannot be created .... oder so ähnlich). Eine Suche nach SPOFU hier im Forum dürfte die verschiedenen Hinweise auf die etwa 4 KB-Artikel zum Thema finden lassen.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:db.Search & Shared, Private on 1st use
« Antwort #3 am: 26.08.04 - 10:57:57 »
Hi,

diese Probleme hatte ich auch. Inzwischen habe ich aber die ganzen Fallstricke umschifft.

Der erste wichtige Punkt, ist der, dass der private Ordner in der Datenbank abgelegt sein muss und nicht auf dem Desktop. D.h. der (bzw. die) User müssen das Recht haben persönliche Ordner zu erstellen.

Als zweites muss der Ordner bereits existieren wenn er mit PutAllInfolder gefüllt werden soll. Er wird nicht automatisch angelegt!! Ich glaube in der Designer - Hilfe steht was anderes.

Meine Lösung sieht nun so aus:

Ich habe für die Suche einen SPOFU - Ordner angelegt, so zu sagen als Template.
Im PostOpen-Event des Datenbank-Scriptes habe ich folgende Formelzeilen eingefügt:

@Command([OpenView]; "Name des Ordners");
@Command([FileCloseWindow])

Damit wird der Ordner kurz geöffnet und wieder geschlossen. Hier wird er, wenn er nicht vorhanden ist, angelegt.

Aber Achtung!! Hier muss in 5 ein Bug drin sein.
Lege ich von einer DB, in der der User bereits einen pers. Ordner auf diese Weise angelegt hat, eine neue Replik oder Kopie an, wird der Ordner nochmal angelegt. In Version 4 war das nicht der Fall.

Workaround:
Ich hab mir mit Notes 4.6 eine DB erstellt die einen SPOFU-Ordner enthält. Diese DB nehme ich dann und baue sie in % so um wie ich es brauche.

Das Leeren des Ordners realisiere ich so ähnlich, wie in diesem Beispiel:
Zitat
...
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim vc As NotesViewEntryCollection
Set db = session.CurrentDatabase
Set view = db.GetView("Christmas")
Set vc = view.AllEntries
Call vc.RemoveAllFromFolder("Christmas")
...

Damit habe ich bisher keine Probleme gehabt. Ich nutze das in zwei grösseren DBs auf denen ca. 250 User rumtoben.


Axel


« Letzte Änderung: 26.08.04 - 11:01:26 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:db.Search & Shared, Private on 1st use
« Antwort #4 am: 26.08.04 - 21:28:09 »
Danke für Eure Tipps !

Die DB soll übrigens auch in ND6 laufen. Da bin ich auch auf diesen Thread gestossen, der sehr hilfreich war: Index is not to be generated on server.

Für mich ist nach wie vor interessant: Wie werfe ich SPOFU-Folder wieder zeitnah raus (wegen Designänderung).

Da hab ich mir folgendes fürs DB-Script überlegt:

Code
Sub Queryclose(Source As Notesuidatabase, Continue As Variant)
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim viewSPOFU As NotesView
   Set db = session.CurrentDatabase
   
   '-------------------- Workaround due to a ND6-Bug, see KB #1108323
   If session.NotesBuildVersion<190 Then    'If running R5 then simply use GetView.
      Set viewSPOFU = db.GetView(S_FOLDERNAME)
   Else                                                       'If ND6: we need a loop workaround
      Forall v In db.Views
         If v.name = S_FOLDERNAME And Isarray(v.readers) Then
            If v.readers(0)=session.UserName Then
               Set viewSPOFU = v
               Exit Forall
            End If
         End If
      End Forall
   End If
   '---------------------------------------------------------------------------------------------------------------
   Call viewSPOFU.Remove   
   
End Sub

Das heißt bei jedem Schließen der DB wird der SPOFU gelöscht.

Im Postopen dann wie von Axel vorgeschlagen:
Code
@Command([OpenView]; "TestSearch01");
@Command([FileCloseWindow])

Beim ersten Test funktioniert es so wunderbar.

Wie handhabt Ihr es mit der Thematik SPOFU & Designänderung des Folders?

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:db.Search & Shared, Private on 1st use
« Antwort #5 am: 26.08.04 - 21:33:18 »
Aber Achtung!! Hier muss in 5 ein Bug drin sein.
Lege ich von einer DB, in der der User bereits einen pers. Ordner auf diese Weise angelegt hat, eine neue Replik oder Kopie an, wird der Ordner nochmal angelegt. In Version 4 war das nicht der Fall.

Workaround:
Ich hab mir mit Notes 4.6 eine DB erstellt die einen SPOFU-Ordner enthält. Diese DB nehme ich dann und baue sie in % so um wie ich es brauche.

Hmm....
Evtl. wäre da eine weitere Möglichkeit, man loopt im Queryclose-DB-Script durch alle Views, und wirft diese raus, wenn view.Name = SPOFUname AND view.readers(0)=session.UserName

Wäre noch interessant, wie sich das verhält, wenn man den Folder (also das "SPOFU-Template") mit einem 6er Client speichert....
Matthias

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


Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:db.Search & Shared, Private on 1st use
« Antwort #6 am: 27.08.04 - 10:09:10 »
Wäre noch interessant, wie sich das verhält, wenn man den Folder (also das "SPOFU-Template") mit einem 6er Client speichert....

Hi,

würde mich auch mal interessieren. Ich hab im Moment noch keinen 6er - Client zur Verfügung. Das wird sich aber im Herbst ändern. Wir planen den Umstieg auf 6. Werde nach meinem Urlaub mal 'ne Testumgebung aufbauen.

Das mit dem Ordner löschen im QueryClose-Event des DB-Scriptes habe ich auch mal in Betracht gezogen, ist aber bei uns nicht machbar, weil die User mit einem Suchergebnis auch unter Umständen später noch arbeiten wollen.

Wenn sich an der Gestaltung der SPOFU-Ordner was ändert, werden die User informiert und erhalten eine kurze Anleitung, wie sie ihren privaten Ordner aktualisieren können. Das klappt bisher ganz gut.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz